Проектирование блочного шифра


Проектировать блочный шифр нетрудно. Если вы рассматривает 64-битовый блочный шифр как перестановку 64-битовых чисел, ясно, что почти все эти перестановки безопасны. Трудность состоит в проектировании блочного шифра, который не только безопасен, но также может быть легко описан и просто реализован.

Легко можно спроектировать блочный шифр, если вы используете память, достаточную для размещения S-блоков 48*32. Трудно спроектировать небезопасный вариант DES, если вы собираетесь использовать в нем 128 этапов. При длине ключа 512 битов не стоит беспокоиться о том, нет ли какой-либо зависящей от ключа комплиментарности.

Использование однонаправленных хэш-функций

Сымым простым способом использовать для шифрования однонаправленную хэш-функцию является хэширование предыдущего блока шифротекста, объединенного с ключом, а затем выполнение XOR результата с текущим блоком открытого текста:

Ci = Pi Å H(K, Ci-1)

Pi = Ci Å H(K, Pi-1)

Установите длину блока равной длине результата однонаправленной хэш-функции. По сути это приводит к использованию однонаправленной хэш-функции как блочного шифра в режиме CFB. При помощи аналогичной конструкции можно использовать однонаправленную хэш-функцию и в режиме OFB:

Ci = Pi Å Si; Si = H(K, Ci-1)

Pi = Ci Å Si = H(K, Ci-1)

Надежность такой схемы определяется безопасностью однонаправленной хэш-функции.

Karn

Этот метод, изобретенный Филом Карном (Phil Karn) и открытый им для свободного использования, создает обратимый алгоритм шифрования из определенных однонаправленных хэш-функций.

Алгоритм работает с 32-байтовыми блоками открытого текста и шифротекста. Длина ключа может быть произвольной, хотя определенные дины ключей более эффективны для конкретных однонаправленных хэш-функций. Для однонаправленных хэш-функций MD4 и MD5 лучше всего подходят 96-байтовые ключи.

Для шифрования сначала разбейте открытый текст на две 16-байтовых половины: Pl и Pr. Затем разбейте на две 48-байтовых половины ключ: Kl и Kr.

P= Pl , Pr,

K = Kl , Kr

Добавьте Kl к Pl и выполните хэширование однонаправленной хэш-функцией, затем выполните XOR результата с Pr, получая Cr, правую половину шифротекста. Затем, добавьте Kr к Cr выполните хэширование однонаправленной хэш-функцией. Выполните XOR результата с Pl , получая Cl. Наконец, объедините Cr и Cl , получая шифротекст.

Cr = Pr Å H(Pl, Kl)

Cl = Pl Å H(Cr, Kr)

C = Cl, Cr

Для дешифрирования просто инвертируйте процесс. Добавьте Kr к Cr, выполните хэширование и XOR результата с Cl , получая Pl. Добавьте Kl к Pl, выполните хэширование и XOR результата с Cr , получая Pr.

Pl = Cl Å H(Cr, Kr)

Pr = Cr Å H(Pl, Kl)

P = Pl, Pr

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

Luby-Rackoff

Майкл Любы (Michael Luby) и Чарльз Ракофф (Charles Rackoff) показали, что Karn не является безопасным [992]. Рассмотрим два одноблочных сообщения: AB и AC. Если криптоаналитику известны открытый текст и шифротекст первого сообщения, а также первая половина открытого текста второго сообщения, то он может легко вычислить все второе сообщение. Хотя такое вскрытие с известным открытым текстом работает только при определенных условиях, оно представляет собой главную проблему в безопасности алгоритма.

Ее удается избежать при помощи трехэтапного алгоритма шифрования [992,1643,1644]. Он использует три различных хэш-функции: H1, H2 и H3. Дальнейшие исследования показали, что H1 может совпадать с H2, или H2 может совпадать с H3, но не одновременно [1193]. Кроме того, H1, H2 и H3 не могут быть основаны на итерациях одной и той же базовой функции [1643]. В любом случае при условии, что H(k,x) ведет себя как псевдослучайная функция, трехэтапная версия выглядит следующим образом:

(1) Разделите ключ на две половины: Kl и Kr.

(2) Разделите блок открытого текста на две половины: L0 и R0.

(3) Объедините Kl и L0 и выполните хэширование. Выполните XOR результата хэширования с R0, получая R1:

R1= R0 Å H(Kl, L0)

(4) Объедините Kr и R1 и выполните хэширование. Выполните XOR результата хэширования с L0, получая L1

L1 = L0 Å H(Kr, R1)

(5) Объедините Kl и L1 и выполните хэширование. Выполните XOR результата хэширования с R1, получая R2:

R2= R1 Å H(Kl, L1)

(6) Объедините L1 и R2, получая сообщение.



Дата добавления: 2021-01-26; просмотров: 268;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.