Федеральный стандарт США — DES

Стандарт шифрования данных 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 с ключом, то один цикл преобразования можно представить как:

(LiRi) = (Ri−1,Li−1) ⊕ f(Ri−1K)

Учитывая подстановку Fi(*) и перестановку Т(*), цикл преобразования можно представить так, как это сделано на рис.

Видно, что каждый цикл DES представляет собой композиционный шифр с двумя последовательными преобразованиями — подстановкой Fi(*) и перестановкой Т(*) (за исключением последнего, шестнадцатого цикла, где перестановка опускается).

Подстановка:

(LiRi) = (Ri−1Li−1) ⊕ f(Ri−1K)

является инволюцией, так как

Fi(Fi(Li−1Ri−1)) = Fi(Ri−1Li−1) ⊕ (f(Ri−1Ki))) = (Ri−1Li−1⊕(f(Ri−1Ki)) ⊕ (f(Ri−1Ki))) = (Li−1, Ri−1)

А подстановка

T(Li′, Ri′) = (Ri′, Li′),

так же является инволюцией, так как

T(T(Li′, Ri′)) = T(Ri′, Li′) = Li′, Ri

Если обозначить начальную и завершающую перестановки как (IP) и ()1, то прямое DES-преобразование (шифрование) реализует функцию:

DES = (IP)F1TF2TF15TF16(IP)1,

а обратное DES-преобразование (дешифрование) реализует функцию:

DES1 = (IP)−1F16TF15TF2TF1(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.

Стандарт России — ГОСТ 28147-89

ГОСТ 28147-89 — это блочный шифр с 256-битным ключом и 32 циклами преобразования, оперирующий 64-битными блоками. В криптоалгоритме также используется дополнительный ключ, который рассматривается ниже. Для шифрования открытый текст сначала разбивается на левую и правую половины L и R. На i-м цикле используется подключ Кi:

Li = Ri−1,
Ri = Li−1 ⊕ (f(Ri−1Ki)).

Функция f реализована следующим образом. Сначала правая половина и i-й подключ складываются по модулю 232. Результат разбивается на восемь 4-битовых подпоследовательностей, каждая из которых поступает на вход своего S-блока. ГОСТ использует восемь различных S-блоков, первые 4 бита попадают в первый S-блок, вторые 4 бита — во второй S-блок и т. д. Каждый S-блок представляет собой перестановку чисел от 0 до 15. Например, S-блок может выглядеть как: 7,10,2,4,15,9,0,3,6,12,5,13,1,8,11. В этом случае, если на входе S-блока 0, то на выходе 7. Если на входе 1, на выходе 10 и т. д. Все восемь S-блоков различны, они фактически являются дополнительным ключевым материалом. Выходы всех восьми S-блоков объединяются в 32-битовое слово, затем все слово циклически сдвигается влево на 11 битов. Наконец, результат объединяется с помощью операции XOR с левой половиной, и получается новая правая половина, а правая половина становится новой левой половиной. Для генерации подключей исходный 256-битный ключ разбивается на восемь 32-битных блоков: k1, k2, …, k8. На каждом цикле используется свой подключ. Дешифрование выполняется так же, как и шифрование, но инвертируется порядок подключей ki. Стандарт не определяет способ генерации S-блоков.

Основные различия между DES и ГОСТом

Главные различия между DES и ГОСТом заключаются в следующем:

Силовая атака на ГОСТ абсолютно бесперспективна. ГОСТ использует 256-битовый ключ, а если учитывать секретные S-блоки, то длина ключа будет еще больше. ГОСТ, по-видимому, более устойчив к дифференциальному и линейному криптоанализу, чем DES. Хотя случайные S-блоки ГОСТа при некотором выборе не гарантируют высокой криптостойкости по сравнению с фиксированными S-блоками DES, их секретность увеличивает устойчивость ГОСТа к дифференциальному и линейному криптоанализу. К тому же эффективность этих криптоаналитических методов зависит от количества циклов преобразования — чем больше циклов, тем труднее криптоанализ. ГОСТ использует в два раза больше циклов, чем DES, что, возможно, приводит к несостоятельности дифференциального и линейного криптоанализа.

ГОСТ не использует существующую в DES перестановку с расширением. Удаление этой перестановки из DES ослабляет его из-за уменьшения лавинного эффекта; разумно предположить, что отсутствие такой операции в ГОСТе отрицательно сказывается на его криптостойкости. С точки зрения криптостойкости операция арифметического сложения, используемая в ГОСТе, не хуже, чем операция XOR в DES.

Основным различием представляется использование в ГОСТе циклического сдвига вместо перестановки. Перестановка DES увеличивает лавинный эффект. В ГОСТе изменение одного входного бита влияет на один S-блок одного цикла преобразования, который затем влияет на два S-блока следующего цикла, затем на три блока следующего цикла и т.д. Потребуется восемь циклов, прежде чем изменение одного входного бита повлияет на каждый бит результата; в DES для этого нужно только пять циклов. Однако ГОСТ состоит из 32 циклов, a DES только из 16.

Разработчики ГОСТа пытались достигнуть равновесия между криптостойкостью и эффективностью. Взяв за основу конструкцию Фейстеля, они разработали криптоалгоритм, который лучше, чем DES, подходит для программной реализации. Для повышения криптостойкости введен сверхдлинный ключ и удвоено количество циклов. Однако вопрос, увенчались ли усилия разработчиков созданием более криптостойкого, чем DES, криптоалгоритма, остается открытым.

Воробьева Е., Лукьянова А.

Hosted by uCoz