Наиболее известная роторная криптосистема называлась «Энигма» и использовалась для защиты связи между командованием и подводными лодками немецкой армии в годы второй мировой войны. Конструкция «Энигмы» была основана на системе из трех роторов, осуществлявших замену 26 букв латинского алфавита. Каждый ротор имел 26 входных контактов на одной стороне и столько же выходных контактов – на другой. Внутри каждого ротора проходили провода, связывавшие входные и выходные контакты между собой.
Выходные контакты первого ротора соединялись с входными контактами второго ротора. Когда оператор нажимал на какую-либо букву на клавиатуре машины, электрический ток подавался на входной контакт первого ротора, соответствующий этой букве. Ток проходил через первый ротор и поступал на выходной контакт, соответствующий какой-либо другой букве. Затем ток проходил последовательно через второй и третий роторы и подавался на неподвижный рефлектор (от лат. reflecto – обращаю назад, отражаю). В конструкции рефлектора 26 контактов разбивались на пары, контакты внутри каждой пары были соединены между собой. Таким образом, рефлектор заменял каждую букву на парную ей. Ток, прошедший через рефлектор, подавался назад, на систему роторов. Он вновь проходил через три ротора, но в обратном порядке.
В конце концов на световом табло «Энигмы» загоралась одна из 26 лампочек, соответствовавшая зашифрованной букве (рис. 5). Самым важным свойством «Энигмы» являлось вращение роторов. Первый ротор после каждого преобразования буквы поворачивался на одну позицию. Второй ротор поворачивался на одну позицию после того, как первый ротор совершал полный оборот, т.е. после 26-ти преобразованных букв. Наконец, третий ротор поворачивался на одну позицию после того, как второй ротор совершал полный оборот, т.е. после 676-ти зашифрованных букв.
Рис. 5 . Устройство шифровальной машины «Энигма»
Благодаря рефлектору, «Энигма» на каждом шаге осуществляла перестановку букв внутри пар, и если, к примеру, буква «N» заменялась на «S», то при том же положении роторов буква «S» менялась на «N» (ток тек по тем же проводам, но в другую сторону). Поэтому для расшифровки сообщения достаточно было вновь пропустить его через машину, восстановив предварительно изначальное положение роторов. Таким образом, начальное положение роторов играло роль ключа шифрования. Каждый оператор имел специальную книгу, задававшую положение роторов для каждого дня. В этом заключалась очевидная слабость данной системы шифрования: достаточно было завладеть книгой и машиной, чтобы раскрыть все секреты. Что и произошло осенью 1942 года, когда войсками союзников была захвачена немецкая подводная лодка U-571.
В общем случае криптосистема на основе роторной машины осуществляет полиалфавитную подстановку с длинным периодом . Пусть роторная машина состоит из банка t роторов (дисков) R1, R2, …, Rt. Каждый ротор Ri задает функцию подстановки fi символов открытого текста символами зашифрованного текста. После каждого шага шифрования любой ротор может быть смещен (повернут) на одну из N позиций, и каждая позиция изменяет функцию соответствия между символами исходного и зашифрованного текста. Если диск Ri находится в позиции ji, то выполняемая им эффективная подстановка символа mi описывается выражением
Fi(a) = ((fi(mi – ji) mod N )+ ji) mod N. (7)
Машина, состоящая из t роторов, осуществляет эффективную подстановку символов шифротекста по закону
Eki(mi)=Ft(Ft–1(…(F1(mi)…)). (8)
Ключ шифрования ki состоит из исходных функций подстановки f1, …, ft и текущих позиций роторов j1, …, jt. Как только шифруется очередной символ, один или более роторов изменяют свою позицию, изменяя этим и сам ключ. Машина, состоящая из t роторов, не сможет вернуться в начальное состояние, пока не произведет Nt успешных операций шифрования. Закон изменения позиций роторов необязательно должен быть линейным. В общем случае для получения новой позиции ротора может использоваться генератор псевдослучайных чисел, что практически исключает возможность узнать о перемещениях роторов, что защищает от корреляционных атак. Главным требованием является совпадение закона генерации последовательности поворотов у отправителя и получателя шифросообщения.
Рассмотрим пример генератора на основе одного сдвигового регистра с линейной обратной связью LFSR длиной 80 бит (примитивный многочлен
P(x) = x80 + x79 + x43 + x42 + 1) (рис. 6). Три байта RCB (Rotor Control Byte) с позициями (I, J, K) выбираются из регистра LFSR случайно и определяют перемещение каждого из трех роторов на текущем шаге шифрования. Причем значения (I, J, K) также являются частью ключа.
Рис. 6 . Управление положением трех роторов с помощью одного линейного сдвигового регистра с обратной связью
Функция подстановки для каждого ротора задается с помощью соответствующей таблицы. Для шифрования сообщения байтами она должна задавать 256 однозначных правил замены входных символов символами шифротекста. При отсутствии рефлектора таблицы подстановки на сторонах отправителя и получателя должны задавать взаимообратные правила – отправитель ищет символ шифротекста по его индексу в первой таблице, а получатель по пришедшему символу находит соответствующий ему индекс с помощью второй таблицы.
Для увеличения периода ключа в каждом роторе может быть организовано шифрование с обратной связью по шифротексту, когда символ, полученный в результате шифрования на предыдущем шаге, используется для шифрования следующего символа (рис. 7).
Рис. 7 . Реализация ротора с обратной связью по шифротексту
Как следует из рис. 7, значение байта открытого текста складывается по модулю256 с байтом текущего состояния ротора RS (Rotor State). Значение RS меняется после каждого шага шифрования на основе значения RCB из генератора поворотов ротора, предыдущего зашифрованного байта с и предыдущего состояния ротора RS. Результат сложения i используется как индекс элемента r из таблицы подстановки R = {r0, r1, …, r255}. Элемент ri используется в качестве результата шифрования с (если ротор R – последний) или в качестве входного байта p для следующего ротора.
Длина ключа для представленного алгоритма составляет 3* 256 + 10 + 3 + 3 = 784 байтов. Пользователь не способен запомнить такое количество данных, поэтому необходимо предусмотреть возможность генерации ключевых данных на основе пользовательского пароля.
Главными достоинствами рассмотренной криптосистемы являются простота программной и аппаратной реализации, а также высокие криптостойкость и скорость шифрования. Для кодирования одного байта необходимо трижды выполнить три операции сложения и одну операцию адресации по индексу, а также один такт работы регистра LFSR (десять сдвигов). Всего (3 + 1) * 3 + 10 = 22 элементарных операций с 8-битными операндами.
Автор: Ярмолик, В. Н.