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 A H(Kl, L0)

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

L1 = L0 A H(Kr, R1)

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

R2= R1 A H(Kl, L1)

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