Криптографическая защита информации. Яковлев А.В - 44 стр.

UptoLike

( 1) mod 256,
()mod256.
i
ii
jjS
=
+
=+
Далее переставить S
i
и S
j
:
( ) mod 256,
.
ij
i
tSS
kS
=+
=
Затем байт k складывается по модулю 2 с байтом исходного текста для
получения шифрованного.
Инициализация блока замены также проста. Вначале он заполняется
линейно: S
0
= 0, ..., S
255
= 255. Затем заполняется еще один 256-байтный массив
ключом, при этом ключ может повторяться необходимое число раз для за-
полнения всего массива: k
0
, ..., k
255
. Счетчик j устанавливается в 0. После
чего производятся следующие действия:
for i = 0 to 255
j = (j + k
i
+ S
i
) mod 256
переставить S
i
и S
j
.
Шифрование по этому алгоритму, примерно, в 10 раз быстрее, чем
шифрование DES при программной реализации.
Возможно обобщение алгоритма на большие длину слова и размер
блока замены. Например, можно построить шифр с блоком замены размер-
ностью 16 × 16 и длиной слова 16 бит. Этап инициализации будет значи-
тельно медленнее, необходим цикл до 65535, но получившийся в результа-
те алгоритм будет более быстрым.
2.6.2. АЛГОРИТМ SEAL
Алгоритм SEAL (Software Encryption Algorithm) представляет собой
приспособленный для программной реализации потоковый шифр, разрабо-
танный Филом Рогэвэем и Доном Копперсмитом из компании IBM. Алго-
ритм оптимизирован для 32-разрядных процессоров. Для эффективной ра-
боты ему требуются восьми 32-разрядных регистров и кэш объемом не-
сколько килобайт.
Одним из замечательных свойств этого шифра является то, что он не
является потоковым шифром в традиционном смысле, а представляет со-
бой семейство псевдослучайных функций. 160-битовый ключ k и 32-
битовое значение п (индекс) шифр преобразует в L-битовую строку k(n). L
может принимать любое значение, меньшее 64 килобайт. Такой шифр обо-
значают SEAL(k, n, L). Предполагается, что если k выбирается случайно, то
k(n) будет вычислительно неотличима от случайной L-битовой функции от
п.
Большинство шифров генерирует битовые последовательности в од-
ном направлении. Зная ключ k и позицию i, определить значение i-го бита
ключевой последовательности можно, только вычислив все биты до i-го
один за другим. В случае семейства псевдослучайных функций можно по-
лучить простой доступ к любому элементу ключевой последовательности.
Предположим, что необходимо зашифровать содержимое жесткого
диска компьютера по 512-байтным секторам. Тогда сектор с номером п
будет шифроваться с помощью ключевой последовательности k(n). При
этом легко может быть обеспечен доступ к произвольному сектору диска.
Данный шифр также облегчает проблему синхронизации, свойствен-
ную традиционным потоковым шифрам. Сообщение с номером п будет
шифроваться с ключевой последовательностью k(n), и п будет передаваться
вместе с сообщением. Получателю не нужно будет хранить состояние генера-
тора ключевой последовательности и беспокоиться о потерянных сообщениях
и их влиянии на процесс расшифрования.
Алгоритм SEAL предусматривает использование трех зависящих от
ключа таблиц: R, S и Т заполняются на предварительном этапе при помощи
алгоритма, основанного на SHA (описан далее), и зависят только от ключа.
Заполнение таблиц можно описать с помощью функции G
a
(i), которая
представляет собой функцию сжатия из алгоритма SHA: а160-битное
значение, i – 32-битный индекс. Значение а используется для инициализа-
ции внутренних регистров А, В, С, D и Е в алгоритме SHA, а 512-битный