Стандарт шифрования данных DES (Data Encryption Standard), который ANSI называет алгоритмом шифрования данных DEA (Data Encryption Algorithm), a ISO — DEA-1, за 20 лет стал мировым стандартом. За годы своего существования он выдержал натиск различных атак и при известных ограничениях все еще считается криптостойким.
DES представляет собой блочный шифр, шифрующий данные 64-битовыми блоками. С одного конца алгоритма вводится 64-битовый блок открытого текста, а с другого конца выходит 64-битовый блок шифротекста. DES является симметричным алгоритмом: для шифрования и дешифрования используются одинаковые алгоритм и ключ (за исключением небольших различий в использовании ключа). Длина ключа равна 56 битам. (Ключ обычно представляется 64-битовым числом, но каждый восьмой бит используется для проверки четности и игнорируется. Биты четности являются наименьшими значащими битами байтов ключа.) Ключ, который может быть любым 56-битовым числом, можно изменить в любой момент времени.
Криптостойкость полностью определяется ключом. Фундаментальным строительным блоком DES является комбинация подстановок и перестановок. DES состоит из 16 циклов.
Oбщий вид цикла преобразования:
Если Li и Ri — левая и правая половины, полученные в результате i-й итерации, Ki — 48-битный ключ для цикла i, а f — функция, выполняющая все подстановки, перестановки и XOR с ключом, то один цикл преобразования можно представить как:
(Li, Ri) = (Ri−1,Li−1) ⊕ f(Ri−1, K)
Учитывая подстановку Fi(*) и перестановку Т(*), цикл преобразования можно представить так, как это сделано на рис.
Видно, что каждый цикл DES представляет собой композиционный шифр с двумя последовательными преобразованиями — подстановкой Fi(*) и перестановкой Т(*) (за исключением последнего, шестнадцатого цикла, где перестановка опускается).
|
Подстановка:
(Li, Ri) = (Ri−1, Li−1) ⊕ f(Ri−1, K)
является инволюцией, так как
Fi(Fi(Li−1, Ri−1)) = Fi(Ri−1, Li−1) ⊕ (f(Ri−1, Ki))) = (Ri−1, Li−1⊕(f(Ri−1, Ki)) ⊕ (f(Ri−1, Ki))) = (Li−1, Ri−1)
А подстановка
T(Li′, Ri′) = (Ri′, Li′),
так же является инволюцией, так как
T(T(Li′, Ri′)) = T(Ri′, Li′) = Li′, Ri′
Если обозначить начальную и завершающую перестановки как (IP) и (IР)−1, то прямое DES-преобразование (шифрование) реализует функцию:
DES = (IP)F1TF2T…F15TF16(IP)−1,
а обратное DES-преобразование (дешифрование) реализует функцию:
DES−1 = (IP)−1F16TF15T…F2TF1(IP).
Таким образом, DES является шифром Фейстеля и сконструирован так, чтобы выполнялось полезное свойство: для шифрования и дешифрования используется один и тот же алгоритм. Единственное отличие состоит в том, что ключи должны использоваться в обратном порядке.
То есть если при шифровании использовались ключи K1, K2, K3, …, K16, то ключами дешифрования будут K16, K15, K14, …, K1. Алгоритм использует только стандартную арифметику 64-битовых чисел и логические операции, поэтому легко реализуется на аппаратном уровне.
DES работает с 64-битовым блоком открытого текста. После первоначальной перестановки блок разбивается на правую и левую половины длиной по 32 бита. Затем выполняется 16 преобразований (функция f), в которых данные объединяются с ключом. После шестнадцатого цикла правая и левая половины объединяются, и алгоритм завершается заключительной перестановкой (обратной по отношению к первоначальной). На каждом цикле (см. рис.) биты ключа сдвигаются, и затем из 56 битов ключа выбираются 48 битов. Правая половина данных увеличивается до 48 битов с помощью перестановки с расширением, объединяется посредством XOR с 48 битами смещенного и переставленного ключа, проходит через 8 S-блоков, образуя 32 новых бита, и переставляется снова. Эти четыре операции и выполняются функцией f.
|
Затем результат функции f объединяется с левой половиной с помощью другого XOR. В итоге этих действий появляется новая правая половина, а старая правая становится новой левой половиной. Эти действия повторяются 16 раз, образуя 16 циклов DES.