Россия, Санкт-Петербург, Северо-Западный заочный технический университет, 2007 |
Алгоритмы симметричного шифрования
Алгоритм DES
Принципы разработки
Самым распространенным и наиболее известным алгоритмом симмет-ричного шифрования является DES (Data Encryption Standard). Алгоритм был разработан в 1977 году, в 1980 году был принят NIST (National Institute of Standards and Technolody США) в качестве стандарта (FIPS PUB 46).
DES является классической сетью Фейштеля с двумя ветвями. Данные шифруются 64-битными блоками, используя 56-битный ключ. Процесс шифрования состоит из четырех этапов. На первом из них выполняется начальная перестановка (Initial Permutation - IP) 64-битного исходного сообщения, так называемое забеливание, во время которой биты переупорядочиваются в соответствии со стандартной таблицей. Следующий этап состоит из 16 раундов одной и той же функции, которая использует операции сдвига и подстановки. На третьем этапе левая и правая половины выхода последней (16-й) итерации меняются местами. Наконец, на четвертом этапе выполняется перестановка IP-1 результата, полученного на третьем этапе. Перестановка IP-1 инверсна начальной перестановке.
Справа на рисунке показан способ, которым используется 56-битный ключ. Первоначально ключ подается на вход функции перестановки. Затем для каждого из 16 раундов подключ Ki является комбинацией левого циклического сдвига и перестановки. Функция перестановки одна и та же для каждого раунда, но подключи Ki для каждого раунда получаются разные вследствие повторяющегося сдвига битов ключа.
Шифрование
Начальная перестановка
Начальная перестановка и ее инверсия определяются стандартной таблицей. Если X – это произвольные 64 бита, то Y = IP(X) – переставленные 64 бита. Если применить обратную функцию перестановки
то получится первоначальная последовательность битов.
Последовательность преобразований отдельного раунда
Теперь рассмотрим последовательность преобразований, используе-мую в каждом раунде.
64-битный входной блок проходит через 16 раундов, при этом на каждой итерации получается промежуточное 64-битное значение. Левая и правая части каждого промежуточного значения трактуются как отдельные 32-битные значения, обозначенные L и R. Каждую итерацию можно описать следующим образом:
где \oplus обозначает операцию XOR.
Таким образом, выход левой половиныLi равен входу правой половины Ri-1. Выход правой половины Riявляется результатом применения операции XOR к Li-1 и функции F, зависящей от Ri-1 и Ki.
Рассмотрим функцию F более подробно.
Ri, которое подается на вход функции F, имеет длину 32 бита. Вначале Ri расширяется до 48 битов, используя таблицу, которая определяет пере-становку плюс расширение на 16 битов. Расширение происходит следующим образом. 32 бита разбиваются на группы по 4 бита и затем расширяются до 6 битов, присоединяя крайние биты из двух соседних групп. Например, если часть входного сообщения
…efgh ijkl mnop…
то в результате расширения получается сообщение
…defghi hijklm lmnopq…
После этого для полученного 48-битного значения выполняется операция XOR с 48-битным подключом Ki. Затем полученное 48-битное значение подается на вход функции подстановки, результатом которой является 32-битное значение.
Подстановка состоит из восьми S-box, каждый из которых на входе получает 6 бит, а на выходе создает 4 бита. Эти преобразования определяются специальными таблицами. Первый и последний биты входного значения S-box определяют номер строки в таблице, средние 4 бита определяют номер столбца. Значение, стоящее на пересечении строки и столбца является 4-битным выходом. Например, если входом является 011011, то номер строки равен 01 (строка 1) и номер столбца равен 1101 (столбец 13). Если значение на пересечении строки 1 и столбца 13 равно 5, то выходом S-box является 0101.
Далее полученное 32-битное значение обрабатывается с помощью перестановки Р, целью которой является максимальное переупорядочивание битов, чтобы в следующем раунде каждый бит обрабатывался другим S-box.
Создание подключей
Ключ для отдельного раунда Kiсостоит из 48 битов. Ключи Ki получаются по следующему алгоритму. Для 56-битного ключа, используемого на входе алгоритма, вначале выполняется перестановка в соответствии с таб-лицей Permuted Choice 1 (РС-1). Полученный 56-битный ключ разделяется на две 28-битные части, обозначаемые как C0 и D0 соответственно. На каж-дом раунде Ci и Di независимо циклически сдвигаются влево на 1 или 2 бита, в зависимости от номера раунда. Полученные значения являются входом следующего раунда. Они также представляют собой вход в Permuted Choice 2 (РС-2), который создает 48-битное выходное значение, являю-щееся входом функции F(Ri-1,Ki).
Расшифрование
Процесс расшифрования аналогичен процессу шифрования. На входе алгоритма подается зашифрованное сообщение, но ключи Ki используются в обратной последовательности. K16 используется на первом раунде, K1 используется на последнем раунде. Пусть выходом i-ого раунда шифрования будет Li||Ri. Тогда соответствующий вход (16-i)-ого раунда расшифрования будет Ri||Li.
После последнего раунда процесса расшифрования две половины выхода меняются местами так, чтобы вход заключительной перестановки IP-1 былR16||L16. Выходом этой стадии является незашифрованное сообщение.
Таким образом, вход первого раунда расшифрования равен 32-битному выходу 16-ого раунда шифрования, у которого левая и правая части записаны в обратном порядке.
Теперь мы должны показать, что выход первого раунда процесса рас-шифрования равен 32-битному входу 16-ого раунда процесса шифрования. Во-первых, рассмотрим процесс шифрования.
При расшифровании:
XOR имеет следующие свойства:
Таким образом, мы имеем Ld1= R15 и Rd1 = L15. Следовательно, выход первого раунда процесса расшифрования есть L15||R15, который является перестановкой входа 16-го раунда шифрования. Данное соответствие вы-полняется все 16 раундов. Мы можем описать этот процесс в общих терми-нах. Для i-ого раунда шифрующего алгоритма:
Эти равенства можно записать по-другому:
Таким образом, мы описали входы i-ого раунда как функцию выходов.
Выход последней стадии процесса расшифрования есть R0||L0. Чтобы входом IP-1 стадии было L0||R0, необходимо поменять местами левую и правую части. Но
В результате получаем незашифрованное сообщение, что и означает возможность расшифрования DES.
Так как длина ключа равна 56 битам, существует 256 возможных ключей. На сегодняшний день такая длина ключа недостаточна, поскольку допускает успешное применение лобовых атак. Альтернативой DES можно считать тройной DES, а также алгоритм Rijndael, принятый в качестве но-вого стандарта на алгоритмы симметричного шифрования.
Основой алгоритма являются восемь таблиц подстановки, или S-box, которые применяются в каждой итерации. Существует опасность, что эти S-box конструировались таким образом, что криптоанализ возможен для взломщика, который знает слабые места S-box. В течение многих лет об-суждалось как стандартное, так и неожиданное поведение S-box, но все-таки никому не удалось обнаружить их фатально слабые места.