Алгоритм использует всего 52 подключа, по 6 для каждого из 8 циклов, и 4 для преобразования выхода.
Сначала 128битовый ключ делится на 8 16-битовых подключей. Это первые 8 подключей для алгоритма. 6 подключей для 1го цикла, и 2 для второго. Далее 128 битовый ключ циклически сдвигается влево на 25 бит и снова делится на 8 подключей (4 для 2го цикла, и 4 для 3го). Дешифрование осуществляется аналогичным образом, но в обратном порядке. И порядок использования ключей тоже становится обратным.
Преимущество по сравнению с DES:
- значительно безопаснее DES, так как 128 битовый ключ больше ключа DES.
- внутренняя структура обеспечивает лучшую устойчивость к криптоанализу.
- существующие программные реализации примерно вдвое быстрее DES
ГОСТ 28147-89
Пр (Ri-1)
+
Ki
Подстановка S-блока
Цикл. сдвиг на 11 бит
Li
32 бит
Структура 1-го раунда ГОСТа
Лев (Li-1)
+
Ri
32 бит
В России в качестве стандарта на блочные алгоритмы шифрования закрытым ключом был принят ГОСТ в 1989 году.
Построен по тем же принципам, что и DES, но удобнее для программной реализации. В отличие от DES используется более длинный ключ (256 бит) и использует 32 раунда шифрования в отличие от 16 у DES. Алгоритм представляет собой классическую сеть Фейштеля.
Шифруемый блок разбивается на 2 одинаковые части, правую и левую. Правая часть складывается с подключом данного раунда и шифрует левую часть. Перед следующим раундом правая и левая часть меняется местами.
Такая структура позволяет использовать один и тот же алгоритм как для шифрования, так и для дешифрования.
В алгоритме шифрования используются следующие операции:
- сложение по модулю 2
- замена по таблице
- циклический сдвиг влево
- и снова побитовое сложение по модулю 2.
Шифруемый блок разбивается на 2 части, которые затем обрабатываются как отдельные 32-битовые целые числа без знака.
Правая половина и подключ соответствующего раунда складываются по модулю 2. Затем осуществляется поблочная подстановка. 32-битовое значение интерпретируется как массив из 8 4-битовых блоков. Далее значения каждого из 8и блоков заменяется на новое по таблице замены. В качестве замены для значения блока выбирается элемент с номером строки равный номеру занимаемого блока и номером столбца равным значению заменяемого блока как 4х-битового целого числа.
После выполнения подстановки все 4х-битовые блоки снова объединяются в единое 32 битовое число, которое сдвигается на 12 бит влево и складывается по модулю 2 с левой частью. И из этого получается новая часть правого блока. Левая же часть берется равной младшей части предыдущего блока. Таких раундов 32.