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:
-
Разделите X на 256 32-битовых подблоков: X0, X1, X2, ..., X255.
-
Переставьте подблоки X в соответствии с P.
-
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
-
Снова объединить 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.
-
Проинициализируйте K0, K1, K2, ..., K9 10 байтами K.
-
For i=10 to 255
Ki = Ki-2 A Ki-6 A Ki-7 A Ki-10
-
For i=10 to 255, Pi = i
-
m=0
-
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 может позволять эффективно использовать очень большой ключ. В этом случае "упрощение криптоанализа" может ничего не значить.