Вопрос или проблема
Предположим, что вы разрабатываете новый аффинный шифр, где вы шифруете три буквы за раз, и ваш алфавит таков:
{‘A’:0, ‘B’:1, ‘C’:2, ‘D’:3, ‘E’:4, ‘F’:5, ‘G’:6, ‘H’:7, ‘I’:8, ‘J’:9, ‘K’:10, ‘L’:11, ‘M’:12, ‘N’:13, ‘O’:14, ‘P’:15, ‘Q’:16, ‘R’:17, ‘S’:18, ‘T’:19, ‘U’:20, ‘V’:21, ‘W’:22, ‘X’:23, ‘Y’:24, ‘Z’:25, ‘.’:26, ‘,’:27, ‘!’:28, ‘ ‘:29}.
Другими словами, вы группируете ваше сообщение в триграммы (т.е. трехсимвольные слова) и шифруете каждую триграмму исходного текста отдельно, используя этот аффинный шифр. Например, если первые три буквы исходного текста — «THE», то они будут закодированы следующим образом:
THE ⇒ 19 × 30 × 30 + 7 × 30 + 4 = 17314.
Если количество букв в исходном тексте не кратно трем, вы дополняете его буквой «X» в конце до тех пор, пока оно не станет кратным трем. Определите модуль и размер ключевого пространства.
Сначала я думал, что модуль должен составлять 30^3, чтобы охватить каждое возможное число, а ключевое пространство должно быть euler_totient(30^3) * 30^3. Однако я не совсем понял часть шифрования, например, для THE, должен ли я делать D(x) = a*17314+b mod 30^3 и как-то получить символы или я должен выбирать mod30, и для каждых 3 символов 1 символ будет выводом в шифре, как THE = F? Или это должно быть так: THE = WAR. И если это так, для a=7, b=0 ответ для x=17314 — D(17314)= 13198 mod30^3. Нужно ли мне разложить 13198 на базу 30, чтобы найти 3 буквы? Есть идеи?
Ответ или решение
Аффинный шифр с группировкой в триграммах
В рамках нашего исследования аффинного шифрования с использованием триграмм мы проанализируем, как осуществляется шифрование текста. Давайте проясним механизм работы, включая ключевые элементы, такие как модуль, пространство ключей и процесс шифрования.
Определение шкалы шифрования
Шифр будет использовать 30 символов, включая 26 букв латинского алфавита, знаки препинания и пробел. Таким образом, каждый символ будет представлен целым числом в диапазоне от 0 до 29.
Модуль
Поскольку шифрование производится с использованием триграмм, мы сначала определим, как мы группируем символы. Каждый триграмм представляет собой последовательность из трех символов, что позволяет формировать целое число на основе их позиций в алфавите. Это число будет представлять комбинацию триграмма:
-
Пример: Для триграмма "THE" (согласно заданному коду: T=19, H=7, E=4)
[
\text{THE} \rightarrow 19 \times 30^2 + 7 \times 30 + 4 = 17314.
]
Таким образом, чтобы учесть все возможные триграммы, мы будем использовать модуль (30^3), поскольку мы можем создать (30^3) различных комбинаций триграммов.
Пространство ключей
Ключ шифрования будет включать два параметра (a) и (b), что позволяет определить, как будет производиться шифрование. Для определения пространства ключей необходимо учесть значение функции Эйлера, применимой к (30^3):
- Чтобы получить размер пространства ключей, необходимо вычислить (\phi(30^3)) (функция Эйлера) и затем перемножить результат с (30^3):
-
Вычислим (\phi(30)):
[
30 = 2 \times 3 \times 5 \implies \phi(30) = 30 \left( 1 – \frac{1}{2} \right) \left( 1 – \frac{1}{3} \right) \left( 1 – \frac{1}{5} \right) = 30 \times \frac{1}{2} \times \frac{2}{3} \times \frac{4}{5} = 8.
] -
Тогда для (30^3):
[
\phi(30^3) = 30^3 \left( 1 – \frac{1}{2} \right) \left( 1 – \frac{1}{3} \right) \left( 1 – \frac{1}{5} \right) = 27000 \times \frac{1}{2} \times \frac{2}{3} \times \frac{4}{5} = 8640.
]
Таким образом, пространство ключей составляет (8640) пар ((a, b)), где (a) и (b) подчиняются определенным арифметическим условиям для обеспечения взаимно простоты с (30).
Процесс шифрования и декодирования
При получении числа от триграмма используйте формулу
[
C(x) = (a \cdot x + b) \mod 30^3.
]
Для расшифрования:
[
D(y) = a^{-1} \cdot (y – b) \mod 30^3,
]
где (a^{-1}) — обратное число к (a) по модулю (30^3).
После получения значения (D(y)) вам необходимо разбить его на три цифры по основанию 30. Каждая цифра соотносится с конкретным символом из нашего алфавита.
Заключение
Шифрование аффинным методом с триграммами позволяет эффективно кодировать информацию, обеспечивая надежность и вариативность за счет использования двух параметров (a) и (b). Четкое понимание и правильное применение модульной арифметики и функции Эйлера открывает возможности для создания безопасных коммуникаций в цифровом пространстве.