Аффинный шифр - это тип моноалфавитного шифра подстановки , где каждая буква в алфавите сопоставляется с ее числовым эквивалентом, зашифровывается с помощью простой математической функции и преобразуется обратно в букву. Используемая формула означает, что каждая буква шифруется до одной буквы и обратно, что означает, что шифр по сути является стандартным шифром подстановки с правилом, определяющим, какая буква к какой идет. Таким образом, у него есть слабые места всех подстановочных шифров. Каждая буква зашифрована функцией ( ax + b ) mod 26 , где b - величина сдвига.
Описание [ править ]
В аффинном шифре буквы алфавита размера m сначала отображаются на целые числа в диапазоне 0… m - 1 . Затем он использует модульную арифметику для преобразования целого числа, которому соответствует каждая буква открытого текста, в другое целое число, соответствующее букве зашифрованного текста. Функция шифрования для одной буквы:
где модуль m - размер алфавита, а a и b - ключи шифра. Значение a должно быть выбрано таким, чтобы a и m были взаимно просты . Функция дешифрования
где -1 является модульным мультипликативным обратным из более по модулю т . Т.е. он удовлетворяет уравнению
Мультипликативный обратный к a существует, только если a и m взаимно просты. Следовательно, без ограничения a расшифровка может быть невозможна. Можно показать следующим образом, что функция дешифрования обратна функции шифрования,
Слабые стороны [ править ]
Поскольку аффинный шифр по-прежнему является моноалфавитным шифром подстановки, он наследует слабые места этого класса шифров. Шифр Цезаря является аффинным шифром с в = 1 , так как функция шифрования просто сводится к линейному смещению. В шифре Атбаша используется a = -1 .
Рассматривая конкретный случай шифрования сообщений на английском языке (т.е. m = 26 ), всего существует 286 нетривиальных аффинных шифров, не считая 26 тривиальных шифров Цезаря. Это число происходит из-за того, что 12 чисел взаимно просты с 26, которые меньше 26 (это возможные значения a ). Каждое значение a может иметь 26 различных дополнительных сдвигов ( значение b ); следовательно, существует 12 × 26 или 312 возможных ключей. Это отсутствие разнообразия делает систему крайне небезопасной, если рассматривать ее в свете принципа Керкхоффа .
Основная слабость шифра заключается в том, что если криптоаналитик может обнаружить (с помощью частотного анализа , грубой силы , угадывания или иным способом) открытый текст двух символов зашифрованного текста, то ключ может быть получен путем решения одновременного уравнения . Поскольку мы знаем, что a и m взаимно просты, это можно использовать для быстрого сброса многих «ложных» ключей в автоматизированной системе.
Тот же тип преобразования, что и в аффинных шифрах, используется в линейных конгруэнтных генераторах , типе генератора псевдослучайных чисел . Этот генератор не является криптографически безопасным генератором псевдослучайных чисел по той же причине, по которой небезопасен аффинный шифр.
Примеры [ править ]
В этих двух примерах, один для шифрования и один для дешифрования, алфавит будет состоять из букв от A до Z и будет иметь соответствующие значения, указанные в следующей таблице.
А | B | C | D | E | F | грамм | ЧАС | я | J | K | L | M | N | O | п | Q | р | S | Т | U | V | W | Икс | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 |
Шифрование [ править ]
В этом примере шифрования [1] открытый текст, который должен быть зашифрован, представляет собой «AFFINE CIPHER» с использованием упомянутой выше таблицы для числовых значений каждой буквы, принимая a равным 5, b равным 8 и m равным 26, поскольку есть 26 символов используемого алфавита. Только значение a имеет ограничение, поскольку оно должно быть взаимно простым с 26. Возможные значения, которыми может быть a : 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23 и 25. Значение b может быть произвольным, пока a не равно 1, поскольку это сдвиг шифра. Таким образом, функция шифрования для этого примера будет y = E (х ) = (5 х + 8) по модулю 26 . Первый шаг в шифровании сообщения - записать числовые значения каждой буквы.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Теперь возьмите каждое значение x и решите первую часть уравнения (5 x + 8) . Найдя значение (5 x + 8) для каждого символа, возьмите остаток при делении результата (5 x + 8) на 26. В следующей таблице показаны первые четыре шага процесса шифрования.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5 х + 8) | 8 | 33 | 33 | 48 | 73 | 28 год | 18 | 48 | 83 | 43 год | 28 год | 93 |
(5 х + 8) мод 26 | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Последний шаг в шифровании сообщения - это поиск соответствующих букв для каждого числового значения в таблице. В этом примере зашифрованный текст будет IHHWVCSWFRCP. В таблице ниже показана заполненная таблица для шифрования сообщения аффинным шифром.
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Икс | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
(5 х + 8) | 8 | 33 | 33 | 48 | 73 | 28 год | 18 | 48 | 83 | 43 год | 28 год | 93 |
(5 х + 8) мод 26 | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
Расшифровка [ править ]
В этом примере расшифровки зашифрованный текст, который будет расшифрован, является зашифрованным текстом из примера шифрования. Соответствующая функция дешифрования: D ( y ) = 21 ( y - 8) mod 26 , где a −1 вычислено как 21, а b равно 8. Для начала напишите числовые эквиваленты каждой буквы в зашифрованном тексте, как показано в таблице ниже.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
Теперь следующим шагом является вычисление 21 ( y - 8) , а затем получение остатка от деления этого результата на 26. В следующей таблице показаны результаты обоих вычислений.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( г - 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21 ( у - 8) мод 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
Последним шагом в расшифровке зашифрованного текста является использование таблицы для преобразования числовых значений обратно в буквы. Открытый текст в этой дешифровке - AFFINECIPHER. Ниже приведена таблица с завершенным последним этапом.
зашифрованный текст | я | ЧАС | ЧАС | W | V | C | S | W | F | р | C | п |
---|---|---|---|---|---|---|---|---|---|---|---|---|
y | 8 | 7 | 7 | 22 | 21 год | 2 | 18 | 22 | 5 | 17 | 2 | 15 |
21 ( г - 8) | 0 | −21 | −21 | 294 | 273 | −126 | 210 | 294 | −63 | 189 | −126 | 147 |
21 ( у - 8) мод 26 | 0 | 5 | 5 | 8 | 13 | 4 | 2 | 8 | 15 | 7 | 4 | 17 |
простой текст | А | F | F | я | N | E | C | я | п | ЧАС | E | р |
Закодирован весь алфавит [ править ]
Чтобы ускорить шифрование и дешифрование, можно зашифровать весь алфавит, чтобы создать взаимно однозначную карту между буквами открытого текста и зашифрованного текста. В этом примере взаимно однозначная карта будет следующей:
письмо в открытом тексте | А | B | C | D | E | F | грамм | ЧАС | я | J | K | L | M | N | O | п | Q | р | S | Т | U | V | W | Икс | Y | Z |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
число в открытом тексте | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 год | 22 | 23 | 24 | 25 |
(5 х + 8) мод 26 | 8 | 13 | 18 | 23 | 2 | 7 | 12 | 17 | 22 | 1 | 6 | 11 | 16 | 21 год | 0 | 5 | 10 | 15 | 20 | 25 | 4 | 9 | 14 | 19 | 24 | 3 |
письмо с зашифрованным текстом | я | N | S | Икс | C | ЧАС | M | р | W | B | грамм | L | Q | V | А | F | K | п | U | Z | E | J | O | Т | Y | D |
Примеры программирования [ править ]
Следующий код Python можно использовать для шифрования текста аффинным шифром:
# Печатает таблицу транспонирования для аффинного шифра. # a должно быть взаимно просто с m = 26. def affine ( a : int , b : int ) -> None : для i в диапазоне ( 26 ): print ( chr ( i + ord ( 'A' )) + ":" + chr ((( a * i + b ) % 26 ) + ord ( 'А' )))# Пример вызова affine ( 5 , 8 )
См. Также [ править ]
Ссылки [ править ]
- ^ Kozdron, Майкл. "Афонские шифры" (PDF) . Проверено 22 апреля 2014 года .