Автор Тема: Простой и понятный алгоритм шифрования  (Прочитано 195 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Masterov

  • Магистр
  • ****
  • Сообщений: 479
  • Репутация: +4/-0
    • Просмотр профиля
Эта статья для тех, кто умеет программировать,
и для тех, кто хочет создать:

1. защищённый канал связи в Интернет
2. собственную криптовалюту
3. собственную платёжную и банковскую систему.

Простота и понятность алгоритма
(в нём нет сложной математики)
позволит вам самостоятельно
оценить криптостойкость алгоритма.

Алгоритм реализован
на языках JavaScript и Си.
Реализацию можно скачать тут:
http://masterov.qptova.ru/Downloads/crt.1.rar

Алгоритм может быть реализован как приложение
для сотового телефона и смартфона
на языке Java. (вы сможете обмениваться
зашифрованными СМС-ками)

Публикация этого алгоритма
уничтожит бумажные деньги.

Оффлайн Masterov

  • Магистр
  • ****
  • Сообщений: 479
  • Репутация: +4/-0
    • Просмотр профиля
Re: Простой и понятный алгоритм шифрования
« Ответ #1 : Декабря 2, 2016, 10:42 »
Описание алгоритма (от простого — к сложному)

ЗАДАЧА: зашифровать и расшифровать файл алгоритмом с ключом. (ключ шифрования и расшифровки – один и тот же, под ковриком не оставлять)

1. Самый ПРОСТОЙ и ненадёжный алгоритм шифрования.
СГЕНЕРИМ КЛЮЧ: возьмём случайный массив, длиной 256 байт, в котором каждый байт существует в единственном экземпляре. Это и будет ключ для шифрования и расшифровки.
ШИФРОВАНИЕ: Заменяем байт из шифруемого файла (значение которого является номером байта в ключе), на соответствующий ему байт из ключа. (так получается зашифрованный файл, размер которого совпадает с размером исходного файла)
РАСШИФРОВЫВАИЕ: Заменяем байт из шифрованного файла на байт, который является номером этого байта в ключе. (так получается исходный файл)
НЕДОСТАТОК алгоритма: если известна статистика байт в исходном файле, то такой алгоритм шифрования становится ненадёжным.

2. Алгоритм Master-1: Алгоритм заменяет один шифруемый байт на два байта из ключа.
Ключ представляет собой случайный массив длиной 256х256=65536 двухбайтовых значений (каждое двухбайтовое значение существует в массиве в единственном экземпляре).
Этот алгоритм похож на предыдущий, но одному шифруемому байту ставится в соответствие не байт, а массив двухбайтовых значений, длиной 256, и из массива значение выбирается случайным образом.
ШИФРОВАНИЕ:
а. Создадим (двухбайтовый) номер двухбайтового значения из ключа, соответствующего шифруемому байту. Для этого добавим к шифруемому байту случайный (произвольный) байт (целое значение R в диапазоне 0...255 включительно). Это двухбайтовое значение и будет номером двухбайтового значения из ключа. Т.е., старший байт в этом двухбайтовом номере – шифруемый байт, а младший байт – случайный.
б. Заменяем байт из шифруемого файла на два байта из ключа, согласно сгенерённому номеру.
Возвращаемся к пункту «а».
РАСШИФРОВЫВАИЕ: Каждому двухбайтовому значению в зашифрованном файле в ключе находим (двухбайтовый) порядковый номер, под которым двухбайтовое значение входит в ключ. При этом: старший байт в порядковом номере является байтом, который был зашифрован, а младший байт – случайный, и (в этом алгоритме) отбрасывается.
 
3. Алгоритм Master-2: Алгоритм заменяет один шифруемый байт на два байта из ключа в два этапа, и является компиляцией двух предыдущих алгоритмов.
Отличие этого алгоритма от предыдущего в том, что шифрование в нём производится в два этапа: сначала — по первому алгоритму, потом – по второму. Причём: на первом этапе используется не один ключ однобайтовых значений, а – 256 ключей, и каждый ключ выбирается случайным значением R. Так-что: для каждого шифруемого байта — свой выбирается однобайтовый ключ (см. предыдущий алгоритм). Т.е., R – и случайно выбранный ключ однобайтовых значений (для следующего байта) и – младший байт, который будет добавлен к текущему шифруемому байту, чтобы сгенерить двухбайтовый в номер в двух-байтовом ключе (как это делается во в предыдущем алгоритме).
Отличается этот алгоритм от предыдущего тем, что каждому шифруемому байту ставится в соответствие не 256 двухбайтовых значений, а — 65536.
Т.е., ключ представляет собой: один двухбайтовый ключ длинной 65536 двухбайтовых слов + 256 однобайтовых ключей, каждый из которых длинной 256 байт. Общий размер файла ключа = 196608 байт.
ШИФРОВАНИЕ: Начальное значение R=0 (или любое другое, заранее оговорённое).
а. Берём текущее значение R, и выбираем соответствующий ему однобайтовый ключ.
б. Заменяем шифруемый байт на байт из этого (однобайтового) ключа.
в. Переходим к шифрованию по предыдущему алгоритму, при этом байт заменяется на два байта, и R получает новое значение.
Возвращаемся к пункту «а».
РАСШИФРОВЫВАИЕ:
а. Находим двухбайтовое значение в ключе и определяем соответствующий этому значению номер. При этом: старший байт в этом номере является байтом, который запоминаем, а младший байт – случайный (R, запомним его тоже), и является номером однобайтового ключа (одного их 256-ти ключей).
б. Байт, который запомнили, заменяем на номер этого байта в однобайтовом ключе (с номером ключа R), как в первом алгоритме (цикл повторяется по массиву байт, которые требуется расшифровать).

Оффлайн Masterov

  • Магистр
  • ****
  • Сообщений: 479
  • Репутация: +4/-0
    • Просмотр профиля
Re: Простой и понятный алгоритм шифрования
« Ответ #2 : Декабря 2, 2016, 13:31 »
ОБРАТИТЕ ВНИМАНИЕ: Пример для шифрации (в архиве) выбран файл,
в котором все байты одинаковые (00000.....),
но, каждый раз шифруя, в шифре ты будешь получать
разный шифр, и - байты будут разные.

А когда расшифруешь - снова получишь "0000..."

Это - очень круто.

Оффлайн Николай Григорьевич Зуб

  • Administrator
  • Эксперт
  • *****
  • Сообщений: 8 714
  • Репутация: +20/-0
  • Пол: Мужской
    • Просмотр профиля
Re: Простой и понятный алгоритм шифрования
« Ответ #3 : Декабря 2, 2016, 15:07 »
Следует убрать столбик.