CRAB

Этот алгоритм был разработан Бертом Калиски [Burt Kaliski] и Мэттом Робшоу [Matt Robshaw] из RSA Laboratories [810]. В основе Crab лежит идея использовать методы однонаправленных хэш-функций для создания быстрого алгоритма шифрования. Следовательно, Crab очень похож на MD5, и в этом разделе предполагается, что вы знакомы с материалом раздела 18.5.

У Crab очень большой блок: 1024 байта. Так как Crab был представлен скорее как материал для исследования, а не реальный алгоритм, конкретной процедуры генерации ключей не было предложено. Авторы рассмотрели метод, который позволяет превратить 80-битовый ключ в три вспомогательных подключа, хотя алгоритм позволяет легко использовать ключи переменной длины. В Crab используется два набора больших подключей:

Перестановка чисел с 0 до 255: P0, P1, P2, ..., P255.

Массив из 2048 32-битовых чисел: S0, S1, S2,..., S2047.

Все эти подключи должны быть вычислены до шифрования или дешифрирования. Для шифрования 1024-байтового блока X:

  1. Разделите X на 256 32-битовых подблоков: X0, X1, X2, ..., X255.

  2. Переставьте подблоки X в соответствии с P.

  3. For r=0 to 3

For g = 0 to 63

A = X(4g) <<< 2r

B = X(4g+1) <<< 2r

C = X(4g+2) <<< 2r

D = X(4g+3) <<< 2r

For step s = 0 to 7

A = A A (B + fr(B, C, D) + S512r+8g+s)

TEMP = D

D = C

C = B

B = A <<< 5

A = TEMP

X(4g) <<< 2r = A

X(4g+1) <<< 2r = B

X(4g+2) <<< 2r = C

X(4g+3) <<< 2r = D

  1. Снова объединить X0, X1, X2, ..., X255, получая шифротекст.

Функции fr(B, C, D) аналогичны используемым в MD5:

f0(B, C, D) = (B U C) U ((O B) U D)

f1(B, C, D) = (B U D) U (C U (O D))

f2(B, C, D) = B A C A D

f3(B, C, D) = C A (B U (O D))

Дешифрирование представляет собой обратный процесс. Генерирование подключей является непростой задачей. Вот как по 80-битовому ключу K может быть сгенерирован массив перестановок P.

  1. Проинициализируйте K0, K1, K2, ..., K9 10 байтами K.

  2. For i=10 to 255

Ki = Ki-2 A Ki-6 A Ki-7 A Ki-10

  1. For i=10 to 255, Pi = i

  2. m=0

  3. For j=0 to 1

For i = 256 to 1 step -1

m = (K256-i + K257-i) mod i

K257-i = K257-i <<< 3

Переставить Pi и Pi-1

S-массив из 2048 32-битовых слов может быть сгенерирован аналогичным образом либо по тому же 80_битовому ключу, либо по другому ключу. Авторы предупреждают, что эти детали должны "рассматриваться только в качестве мотивации, могут быть и другие эффективные схемы, обеспечивающие лучшую безопасность" [810].

Crab был предложен как испытательный стенд для новых идей, а не как рабочий алгоритм. Во многом он использует те же приемы, что и MD5. Бихам заметил, что очень большой блок упрощает криптоанализ алгоритма [160]. С другой стороны Crab может позволять эффективно использовать очень большой ключ. В этом случае "упрощение криптоанализа" может ничего не значить.