Алиса и Боб занимались SECOM
В
сети интернет нашел описание шифра
SECOM (ссылка на английском). Этот шифр является
модификацией другого шифра - VIC (Виктор),
который был создан советским разведчиком
в 50-х. Кстати, ФБР так и не смогло его
взломать, только признание этого
разведчика позволило его вскрыть. Об
этом шифре можете почитать в книжке
"Шифры советской разведки", автор
Синельников А. В. (на русском).
Автор шифра SECOM заявляет о его криптостойкости и надежности. Ладно, поверим.
Я адаптировал этот шифр к русскому языку с сохранением общих правил из текста оригинала. В принципе, его можно адаптировать к любому языку.
Автор шифра SECOM заявляет о его криптостойкости и надежности. Ладно, поверим.
Я адаптировал этот шифр к русскому языку с сохранением общих правил из текста оригинала. В принципе, его можно адаптировать к любому языку.
*
* *
Шифр
можно описать как «подстановочный
моноалфавитный шифр, усиленный двойной
модифицированной перестановкой».
Процесс
шифрование условно можно разделить на
3 этапа:
1.
Формирование таблицы замены.
2.
Создание 2-х таблиц перестановок.
3.
Непосредственно само шифрование.
Для
шифрования нам понадобится ключ длиной
20 букв и ключевое слово для таблицы
замены.
Исходные
данные:
Открытый
текст:
«ПОЗДРАВЛЯЕМ
С БЛАГОПОЛУЧНЫМ ПРИБЫТИЕМ. ПОДТВЕРЖДАЕМ
ПОЛУЧЕНИЕ ВАШЕГО ПИСЬМА».
Ключ:
«ЕЙ
ПОРА БЫЛО ЛЕТЕТЬ НА ЮГ»
Ключевое
слово:
«СНЕГОПАД»
*
Ключевое слово должно состоять из не
повторяющихся букв. Обычно, используют
часто встречающие буквы.
Этап
1.
1. Делим ключ на 2 части по 10 букв в каждой и нумеруем их в порядке следования по алфавиту:
1) ЕЙПОРАБЫЛО 2) ЛЕТЕТЬНАЮГ
---------- ----------
3486912057 5374896102
2. Суммируем обе последовательности по модулю 10:
3486912057
+5374896102
-----------
8750708159
3. Из полученной десятизначной последовательности генерируем 50 псевдослучайных цифр путем сложения каждой следующей цифры последовательности с предыдущей по модулю 10 и записываем результат в конец последовательности. Продолжаем так, пока не получим нужное количество цифр:
8750708159
----------
5257789644
7724575081
4969225895
3551473748
8065100126
1. Делим ключ на 2 части по 10 букв в каждой и нумеруем их в порядке следования по алфавиту:
1) ЕЙПОРАБЫЛО 2) ЛЕТЕТЬНАЮГ
---------- ----------
3486912057 5374896102
2. Суммируем обе последовательности по модулю 10:
3486912057
+5374896102
-----------
8750708159
3. Из полученной десятизначной последовательности генерируем 50 псевдослучайных цифр путем сложения каждой следующей цифры последовательности с предыдущей по модулю 10 и записываем результат в конец последовательности. Продолжаем так, пока не получим нужное количество цифр:
8750708159
----------
5257789644
7724575081
4969225895
3551473748
8065100126
*
Можно сгенерировать сколько угодно
цифр, но взять из них 10 последних. Главное
- запомнить или как-то обозначить этот
параметр, что бы потом можно было
расшифровать сообщение.
4. Последние 10 полученных цифр нумеруем в порядке возрастания (0 идет после 9) цифрами 1, 2 … 9, 0, а одинаковые цифры — в порядке следования:
8065100126
----------
7854190236
5. Полученная последовательность нужна для формирования таблицы замены. Количество строк таблицы зависит от длины использованного ключевого слова. В нашем примере будет использовано 7 букв ключевого слова и 3 пробела, поэтому таблица будет состоять из 5 строк и 11 столбцов.
4. Последние 10 полученных цифр нумеруем в порядке возрастания (0 идет после 9) цифрами 1, 2 … 9, 0, а одинаковые цифры — в порядке следования:
8065100126
----------
7854190236
5. Полученная последовательность нужна для формирования таблицы замены. Количество строк таблицы зависит от длины использованного ключевого слова. В нашем примере будет использовано 7 букв ключевого слова и 3 пробела, поэтому таблица будет состоять из 5 строк и 11 столбцов.
1-я
строка заполняется десятью цифрами из
п. 4. Остальные строки нумеруются цифрами,
которые расположены над пробелами.
2-я
строка — ключевое слово с использованием
нескольких пробелов.
3-ю
строку заполняем остальными буквами
(в нашем примере это: БВДЖЗИКЛМРТУФХЦЧШЩЫЬЭЮЯ).
Заполнение
начинается с позиции под пробелом 2-й
строки пока не заполнится весь ряд. В
нашем примере начало заполнения — это
позиция 88.
4-я строка заполняется подобно 3-й, но с позиции 99.
5-я - с позиции 66.
|7 8 5 4 1 9 0 2 3 6
+-------------------
|С Н Е Г О П А
8|Р Б В Д Ж З И К Л М
9|Ч Ш Щ Ы Ь Т У Ф Х Ц
6|Ю Я * Э
4-я строка заполняется подобно 3-й, но с позиции 99.
5-я - с позиции 66.
|7 8 5 4 1 9 0 2 3 6
+-------------------
|С Н Е Г О П А
8|Р Б В Д Ж З И К Л М
9|Ч Ш Щ Ы Ь Т У Ф Х Ц
6|Ю Я * Э
*
- пробел.
Можно изменить правила заполнение этой таблицы, добавить знаки пунктуации и другие символы.
Можно изменить правила заполнение этой таблицы, добавить знаки пунктуации и другие символы.
Этап
2.
6.
Для определения числа колонок каждой
из таблицы перестановки, берем последние
10 цифр из п. 3 и суммируем в нем не
повторяющиеся цифры с права на лево
(повторяющиеся пропускаем) пока не
получим число больше
9-ти.
.....73748
8065100126
Число колонок 1-й таблицы: 6 + 2 + 1 + 5 = 14
Число колонок 2-й таблицы: 8 + 4 = 12
.....73748
8065100126
Число колонок 1-й таблицы: 6 + 2 + 1 + 5 = 14
Число колонок 2-й таблицы: 8 + 4 = 12
*
Можно суммировать все цифры подряд,
пока не будет получено какое-то число.
Как вариант, можно взять последние
неравные цифры и сложить их с неким
контрольным номером, как это реализовано
в шифре VIC.
7.
Далее, нужно определить набор цифр для
таблиц перестановки.
Берем
2-ю часть ключа из п. 1 и суммируем ее с
10-значной последовательностью из п. 3
по модулю
10:
5374896102
+7854190236
-----------
2128986338
5374896102
+7854190236
-----------
2128986338
8.
Из полученной последовательности
генерируем ещё 50 псевдослучайных цифр,
как описано в п. 3. Для удобства столбцы
нумеруются подобно тому, как это сделано
в п. 4.
2128986338
----------
2137086459
— нумерация столбцов
----------
3307749621
6374135837
9015483106
9169214165
0751355715
Считываем
по столбцам согласно их нумерации
столько цифр, сколько нам нужно для
формирования таблиц перестановок (в
нашем примере это - 14 и 12):
1)
33017369900716 2) 681172306195
Этап
3.
9.
С помощью таблицы замены каждую букву
открытого текста заменяем на число,
состоящее из номера строки и номера
столбца. Символы первой строки, не
имеющей номера, заменяются номером
столбца.
Для
примера:
П О З Д Р А В Л Я Е М * С * Б Л А Г О П О Л У Ч Н Ы М *
2 0 8984873 8583684 86657 6588833 1 0 2 0 8390975 948665
П Р И Б Ы Т И Е М * П О Д Т В Е Р Ж Д А Е М * П О Л У
2 8780889499804 86652 0 8499854 8781853 4 86652 0 8390
Ч Е Н И Е * В А Ш Е Г О * П И С Ь М А
984 5 804 65853 984 1 0 652 807 91863
П О З Д Р А В Л Я Е М * С * Б Л А Г О П О Л У Ч Н Ы М *
2 0 8984873 8583684 86657 6588833 1 0 2 0 8390975 948665
П Р И Б Ы Т И Е М * П О Д Т В Е Р Ж Д А Е М * П О Л У
2 8780889499804 86652 0 8499854 8781853 4 86652 0 8390
Ч Е Н И Е * В А Ш Е Г О * П И С Ь М А
984 5 804 65853 984 1 0 652 807 91863
10.
Для первой перестановки заносим все
цифры текста по горизонталям в таблицу:
------------------------------------------
3| 4|12| 1| 8| 5| 6|10|11|13|14| 9| 2| 7| — номер столбца
------------------------------------------
2 0 8 9 8 4 8 7 3 8 5 8 3 6
8 4 8 6 6 5 7 6 5 8 8 8 3 3
1 0 2 0 8 3 9 0 9 7 5 9 4 8
6 6 5 2 8 7 8 0 8 8 9 4 9 9
8 0 4 8 6 6 5 2 0 8 4 9 9 8
5 4 8 7 8 1 8 5 3 4 8 6 6 5
2 0 8 3 9 0 9 8 4 5 8 0 4 6
5 8 5 3 9 8 4 1 0 6 5 2 8 0
7 9 1 8 6 3
Считываем
цифры со столбцов согласно их нумерации
и для удобства разбиваем их на
группы:
960287338 33499648 281685257 040604089 453761083 87985894 63898560 868868996 88949602 76002581 35980340 882548851 88788456 58594885
960287338 33499648 281685257 040604089 453761083 87985894 63898560 868868996 88949602 76002581 35980340 882548851 88788456 58594885
11.
Заполняем 2-ю таблицу перестановки, но
с тем отличием, что заполнение
осуществляется с образованием треугольных
областей: N-ая область опирается верхним
левым углом на столбец с номером (согласно
нумерации) N, а нижний правый угол
упирается в край таблицы.
Делим
количество знаков сообщения на количество
столбцов таблицы. Целое число покажет
количество не полных строк этой таблицы.
В
нашем примере длина сообщения 118 знаков,
поэтому количество не полных строк
равно 9 (118 / 12).
------------------------------------
7| 5|12| 8| 1| 2| 3| 9| 4|10| 6|11| — номер столбца
------------------------------------
9 6 0 2 ^
8 7 3 3 8
3 3 4 9 9 6
4 8 2 8 1 6 8
5 2 5 7 0 4 0 6
0 4 0 8 9 4 5 3 7
6 1 0 8 3 8 7 9 8 5
8 9 4 6 3 8 9 8 5 6 0
8 6 8 8 6 8 9 9 6 8 8 9
4 9 6 0 2 ^
Продолжаем
заполнение таблицы:
------------------------------------
7| 5|12| 8| 1| 2| 3| 9| 4|10| 6|11| — номер столбца
------------------------------------
9 6 0 2 7 6 0 0 2 5 8 1
8 7 3 3 8 3 5 9 8 0 3 4
3 3 4 9 9 6 0 8 8 2 5 4
4 8 2 8 1 6 8 8 8 5 1 8
5 2 5 7 0 4 0 6 8 7 8 8
0 4 0 8 9 4 5 3 7 4 5 6
6 1 0 8 3 8 7 9 8 5 5 8
8 9 4 6 3 8 9 8 5 6 0 5
8 6 8 8 6 8 9 9 6 8 8 9
4 9 6 0 2 9 4 8 8 5 Х Х
Считываем
цифры со столбцов согласно их нумерации:
7891093362
6366448889 0508057994 2888878568 6738241969 835185508 9834506884
2398788680 0988639898 5025745685 144886859 0342500486
Полученную
шифрограмму разбиваем на группы по 5
знаков:
78910
93362 63664 48889 05080 57994 28888 78568 67382 41969 83518 55089
83450 68842 39878 86800 98863 98985 02574 56851 44886 85903 42500 486
*12.
Как вариант, можно создать ещё одну
таблицу замен подобно тому, как это
сделано на этапе № 1, но с использованием
другого ключевого слова и ещё одного
ключа, и заменить цифры шифрограммы на
буквы из новой таблицы замены.
Главное
— запомнить проделанные манипуляции,
что бы потом можно было расшифровать
сообщение.
Для
примера можно воспользоваться алгоритмом
описанном тут (на немецком).
Алгоритм
чуть отличается от оригинального, но
на том сайте есть программа, которая
наглядно показывает все этапы шифрования.
Актуальную версию программы можно
скачать тут: https://gitlab.com/zykure/wxsecom/tree/master
Комментарии
Отправить комментарий