Процедура инициализации SEAL
procedure Initialize a(n,l,A,B,C,D,n1,n2,n3,n4) A←n R[4l];
B←(n»»8)R[4l+1];
C←(n»»16)R[4l+2];
D←(n»»24)R[4l+3]; for j ← 1 to 2 do
P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;
(n1,n2,n3,n4)←(A,B,C,D); P←A&0x7fc; B←B+T[P/4]; A←A»»9; P←B&0x7fc; C←C+T[P/4]; B←B»»9; P←C&0x7fc; D←D+T[P/4]; C←C»»9; P←D&0x7fc; A←A+T[P/4]; D←D»»9;
Для пояснения сути функционирования алгоритма воспользуемся схемой внутреннего цикла алгоритма SEAL, представленной на рис. 7.
Алгоритм управляется тремя полученными из ключа таблицами: R, S и T. Предварительная обработка отображает ключ k на эти таблицы с помощью процедуры, основанной на SHA. 2-килобайтная таблица T представляет собой S-блок
9*32 битов.
SEAL использует четыре 32-битовых регистра, A, B, C и D, начальные значения которых определяются n и полученными по k таблицами R и T. Эти регистры изменяются в ходе итераций, каждая из которых состоит из восьми этапов. На каждом этапе 9 битов первого регистра (все равно A, B, C или D) используются в качестве индекса таблицы T. Затем выбранное из T значение складывается со вторым регистром (снова одному из A, B, C или D) или объединяется с его содержимым с помощью XOR. Потом первый регистр циклически сдвигается на 9 позиций.
29
Рис. 7. Внутренний цикл SEAL
На некоторых этапах второй регистр далее модифицируется с помощью сложения или XOR с содержимым первого регистра (уже сдвинутым). После 8 таких этапов A, B, C и D добавляются к потоку ключей, при этом каждый из них маскируется сложением или XOR с определенным словом из S. Итерация завершается прибавлением к A и C дополнительных значений, зависящих от n, n1, n2, n3, n4, выбор конкретного значения определяется четностью номера итерации. По-видимому, при разработке этой схемы главными были следующие идеи:
1)использование большого, секретного, получаемого из ключа S-блока (T);
2)чередующиеся некоммутируемые арифметические операции (сложение и XOR);
3)использование внутреннего состояния, поддерживаемого шифром, которое не проявляется явно в
30
потоке данных (значения ni, которые модифицируют A и C в конце каждой итерации);
4) изменение функции этапа в соответствии с номером этапа и изменение функции итерации в соответствии с номером итерации.
Задание:
Используя алгоритм шифрования данных SEAL, написать программу шифрования и дешифрования произвольного набора символов на любом языке программирования.
Порядок выполнения работы:
написать на языке программирования функцию шифрования, в которую в качестве параметров передается ключ и символ (или строка символов) исходного текста.
написать функцию дешифрования, в которую в качестве параметров передается ключ и символ (или строка символов) зашифрованного текста.
Оформление отчета:
В отчете следует привести краткие теоретические сведения. Кроме того, должны быть представлены: краткая блок-схема, текст программы, шифруемый набор символов, результаты выполнения программы.
Контрольные вопросы:
1.В чем заключается суть метода шифрования SEAL?
2.Какие главные идеи внутреннего цикла SEAL?
3.Что используется в качестве функции генерации
таблиц?
4.Назовите проблемы, при решении которых могут использоваться криптографические методы.
31
5.В чем отличие криптографии от стеганографии?
6.Какие задачи решает современная криптография?
7.Сформулируйте требования к криптографическим системам защиты информации.
8.Дайте определения понятиям: алфавит, криптограмма, криптографическая система, криптографический протокол, символ, шифр, электронная (цифровая) подпись.
32
Практическая работа № 7 Шифрование данных с помощью алгоритма RC2
Цель работы: изучить методы шифрования данных в алгоритме RC2 и освоить их практическое применение.
Теоретическое введение
Структура алгоритма
Алгоритм RC2 шифрует данные блоками по 64 бита с использованием ключей переменного размера: от 8 до 1024 битов включительно; рекомендуемым размером ключа является 64 бита.
Алгоритм является сетью Фейстеля, в нем выполняются 18 раундов преобразований. Причем раунды алгоритма делятся на 2 типа: смешивающие (mix) раунды и объединяющие (mesh) раунды. Общая структура алгоритма такова:
1.Выполняются 5 смешивающих раундов.
2.Выполняется 1 объединяющий раунд.
3.Выполняются 6 смешивающих раундов.
4.Выполняется 1 объединяющий раунд.
5.Выполняются 5 смешивающих раундов.
Структура смешивающего раунда приведена на рис. 8. Предполагается, что шифруемый блок данных разделен на 4 16-битных слова R0 ,....R3 , над которыми смешивающий раунд
в цикле по i от 0 до 3 выполняет следующие операции (составляющие показанную на рис. 1 функцию f () ):
33