Глава 5. Симметричные криптоалгоритмы 5.1 Простейшие методы шифрования текста Шифр Атбаш. Коды появились в глубокой древности в виде криптограмм. Порой священные иудейские тексты шифровались методом замены. Вместо первой буквы алфавита писалась последняя буква, вместо второй - предпоследняя и т.д. Этот древний шифр назывался атбаш. Если попытаться изобразить механизм шифра атбаш наглядно, то это может выглядеть следующим образом: А Б В Г Д … Э Ю Я _ Рис 5.1 Так, например, для текста, состоящего только из букв кириллического алфавита и пробела, замена будет осуществляться по правилу: А-пробел, Б-Я, В-Ю и т.д. Абсолютно аналогично справедлива обратная замена. При программной реализации методов шифрования текста на языке Object Pascal целесообразно использовать таблицу ASCII и функции работы с ней (ord и chr). В данном случае ключ шифрования не задан явным образом, но подразумевается, что он равен 1. Можно вполне модифицировать данный простейший шифр и добавить некоторые дополнительные параметры (изменить первичный ключ или способ его генерации). Данный алгоритм шифрования текста легко запрограммировать, например, следующим образом. Function Atbash(openchar:char):char; Begin Atbash := 255 – ord(openchar); End; Как видно из фрагмента программы функция Atbash переводит символ открытого текста в шифр путем зеркального отражения по таблице ASCII, состоящей из 256 символов (0..255). Шифр Цезаря. Известен факт шифрования переписки Юлия Цезаря (100 – 44 г.г. до н.э.) с Цицероном (106 – 43 г.г. до н.э.). Шифр Цезаря реализуется заменой каждой буквы в сообщении другой буквой этого же алфавита, отстоящей в алфавите от данной буквы на фиксированное число букв. В своих шифровках Цезарь заменял букву исходного открытого текста буквой, расположенной по отношению к исходной букве на три позиции вперед. Общая схема шифра для латинского алфавита изображена на рис. 2. А B C D E F G H I … Рис. 5.2 То есть, отображение происходит по правилу: A-D, B-E, C-F, D-G и т.д. Например, слово BAG будет зашифровано в EDJ. Очевидно, что для обратного преобразования необходимо «сдвинуть» символы в обратную сторону на количество, равное исходному ключу. Шифрование можно выразить общей формулой: , где С – шифрованный символ, О – открытый текст, key – ключ (сдвига). Обратное же преобразование будет выполняться по формуле: , где С – шифрованный символ, О – открытый текст, key – ключ (сдвига). О программировании данного шифра мы поговорим несколько позже. Квадрат Полибия. В Древней Греции (II в. до н.э.) был известен шифр, который создавался с помощью квадрата Полибия. Для шифрования использовалась таблица, представляющая собой квадрат с пятью столбцами и пятью строками, которые нумеровались цифрами от 1 до 5. В каждую клетку такой таблицы записывалась одна буква. В результате каждой букве соответствовала пара чисел, и шифрование сводилось к замене буквы парой цифр. Идею квадрата Полибия проиллюстрируем таблицей с русскими буквами. Число букв в русском алфавите отличается от числа букв в греческом, поэтому размер таблицы выбран иным (6×6). Заметим, что порядок расположения символов в квадрате Полибия является секретным ключом. Под ключом понимается секретная информация, определяющая, какое преобразование из множества возможных шифрующих преобразований выполняется в данном случае над открытым текстом (см рис. 3). 1 2 3 4 5 6 1 Ы Ь Э Ю Я . 2 , _ А Б В Г 3 Д Е Ё Ж З И 4 Й К Л М Н О 5 П Р С Т У Ф 6 Х Ц Ч Ш Щ Ъ Рис 5.3 В данном случае шифрование происходит как Символ=№Строки№Столбца, причем существует еще ключ заполнения квадрата, который (как видно из рис. 3) равен 23 и обозначает положение начального символа алфавита. Зашифруем с помощью данного квадрата Полибия фразу «ФАКУЛЬТЕТ ИНФОРМАТИКИ»: 56 23 42 55 43 12 54 32 54 22 36 45 56 46 52 44 23 54 36 42 36. Обратное преобразование также производится по таблице. Шифр Сцитала. В V в. до н.э. во времена войны Афин и Спарты существовал метод шифрования, основанный на использовании деревянного жезла – сциталы, на который наматывалась лента из папируса. Сообщение наносилось вертикально на ленту и затем лента разматывалась и передавалась получателю. Секретом (ключом) был диаметр сциталы, поскольку при различных размерах прочитать текст не представлялось возможным. Рис 5.4 При современном представлении данного шифра рассмотрим в качестве ленты и жезла прямоугольную таблицу. При этом ключом будет ее размерность, то есть количество столбцов и строк. Порядок заполнения определим как сверху вниз/слева направо (также можно менять эти параметры в качестве дополнительных ключей). Зашифруем с помощью таблицы сциталы (10×6) фразу : «УЧИТЬСЯ В ИНСТИТУТЕ ТРУДНО ТОЛЬКО ПЕРВЫЕ ПЯТЬ ЛЕТ. ДЕКАНАТ.». У Я С Т Д Л Е П Е К Ч Т Е Н Ь Р Я Т А И В И О К В Т . Н Т Т Т О Ы Ь А Ь И У Р Т Е Д Т С Н Т У О П Л Е . В результате получим текст «УЯСТДЛЕПЕКЧ ТЕНЬРЯТАИВИ ОКВТ. НТ ТТ ОЫЬ АЬИУРТ Е ДТСНТУОП ЛЕ.» Для обратного преобразования достаточно разделить текст на блоки по количеству столбцов в сцитале и прочитать текст вертикально. Аффинные криптосистемы. В отличии от шифров, рассмотренных ранее, в Аффинных криптосистемах за счет математических преобразований буквы, заменяющие открытый текст, относительно хаотично перемешаны. Все буквы алфавита нумеруются числами, например, от 0 до 32. Затем каждая буква открытого текста заменяется буквой, порядковый номер в алфавите которой вычисляется с помощью линейного уравнения. Аффинные криптосистемы задаются при помощи двух чисел a и b. Для русского алфавита эти числа выбираются из условия a ≥ 0, b ≤ 32. Причем числа a и γ=33 должны быть взаимно простыми. Если это условие не будет выполняться, то две разные буквы могут отобразиться в одну. Каждый код (номер в алфавите) буквы криптограммы определяется по коду буквы открытого текста О по следующему правилу. Вначале вычисляется число , а затем выполняется операция целочисленного деления числа α на число γ=33. Получившееся число β используется в качестве кода буквы шифрограммы. Алгоритм шифрования можно записать следующим образом: 1) Выбор чисел (ключей) a ≥ 0, b ≤ 32; причем a и γ=33 взаимнопростые. 2) Определение кода буквы О = ord(A), где А – буква. 3) Вычисление . 4) Вычисление . 5) Определение шифрованного символа по коду С = chr(β). Для расшифрования исходного текста необходимо знать ключи a, b и произвести операции в обратном порядке. Таблица Вижинера. Рассмотрим шифр многоалфавитной, или многозначной, замены, который был описан в 1585 г. Французским дипломатом Блезом де Вижинером. Шифрование производится с помощью так называемой таблицы Вижинера. Каждая строка в этой таблице соответствует одному шифру простой замены (наподобие шифра Цезаря). При шифровании сообщения его записывают в строку, а под ним помещают ключ. Если ключ оказывается короче сообщения, то ключ циклически повторяют. Шифровку получают, находя символ в матрице букв шифрограммы на пересечении столбца с буквой открытого текста и строки соответствующей буквой ключа. Рассмотрим пример для алфавита, состоящего из 5 кириллических символов: {А, Б, О, Г, Р}. Размерность таблицы определим как 5×5. А Б О Г Р А А Б О Г Р Б Р А Б О Г О Г Р А Б О Г О Г Р А Б Р Б О Г Р А Рис 5.5 Как видно из рис 4. первичный ключ (положение первого символа алфавита в первой строке) равен 1. Также можно ввести дополнительные параметры, например, шаг смещения букв в таблице в соответствии со строками (в данном случае +1). Предположим, нам нужно зашифровать слово «ГОРБ» с помощью данной таблицы Вижинера. Определим вторичный ключ как слово «РАБ» (если ключ короче сообщения, то повторяем буквы ключа в соответствии с длиной сообщения), тогда шифрование можно описать как: Сообщение Г О Р Б Ключ Р А Б Р Шифровка Р О Г О В результате и слово «ГОРБ» с помощью таблицы Вижинера 5×5 и набора ключей: (1, +1, РАБ) превратится в «РОГО». Квадрат Бьюфорта. Существует много других шифров многоалфавитной замены, построенных на таблицах. Один из наиболее известных таких квадратов – квадрат Бьюфорта: его строками являются строки таблицы Вижинера, записанные в обратном порядке. Рассмотрим пример для алфавита, состоящего из 6 кириллических символов: {А, Б, В, Г, Д, Е}. Размерность таблицы определим как 6×6. Первичный ключ равен 4, шаг = - 3. Е Д Г В Б А Е В Б А Е Д Г Д Е Д Г В Б А Г Г В Б А Е Д В А Е Д Г В Б Б Д Г В Б А Е А Б А Е Д Г В Рис 5.6 Зашифруем слово «БЕДА» с помощью данного квадрата Бьюфорта. Определим вторичный ключ как слово «ГАД» (аналогично таблице Вижинера, если ключ короче сообщения, то повторяем буквы ключа в соответствии с длиной сообщения), тогда шифрование можно описать как: Сообщение Б Е Д А Ключ Г А Д Г Шифровка Е Б Д Д
|