Основы современной криптографии


Алгоритм RC- часть 2


/p>

Расшифрование в этих обозначениях выглядит очень похоже:

Вход:

Шифрованный текст, записанный в 4 w-битовых входных регистрах A, B, C, D;

Число циклов шифрования r;

Ключевая таблица S[0; … 2r

+ 3] w-битовых слов.

Выход:

Исходный текст в регистрах A, B, C, D.

Процедура:

C = CS[2r

+ 3]

A = AS[2r

+ 2]

for i = r downto

1 do {

                (A; B; C; D) = (D; A; B; C)

                u = (D

ґ (2D + 1)) << log2

w

                t = (B

ґ (2B + 1)) << log2

w

                C = ((C

S[2i + 1]) >> t) Е u

                A = ((A

S[2i]) >> u) Е t

}

D = DS[1]

B = BS[0]

Алгоритм вычисления ключей для RC6-w/r/b

выглядит следующим образом:

Пользователь задает ключ длиной b байтов. Достаточное число ненулевых байтов дописываются в конец, чтобы получилось целое число слов. Затем эти байты записываются начиная с младшего в массив из с слов, т.е. первый байт ключа записывается в L[0], и т.д., а L[c – 1] при необходимости дополняется со стороны старших разрядов нулевыми байтами. В результате работы алгоритма генерации ключей будет вычислено 2r + 4 слов, которые будут записаны в массиве S[0; …; 2r + 3].

Константы P32 = B7E15163h

and Q32 = 9E3779B9h – это константы, , получаемые из двоичного представления e –2, где e – основание натуральных логарифмов, и f

1, где f

золотое сечение, соответственно. Подобные же константы могут быть аналогичным образом получены и для RC6 с другим размером слова. Выбор констант является в некотором роде произвольным, и поэтому можно использовать и другие константы, получая при этом "частные" версии алгоритма.

Вход:

Определенный пользователем b-байтовый ключ, предварительно загруженный в массив L[0;…c – 1];

Число циклов шифрования r.

Выход:

Ключевая таблица S[0;…2r

+4] из w-битовых слов.

Процедура:

S[0] = Pw

for i = 1 to

2r + 3 do

                S[i] = S[i – 1] + Qw

A = B = i = j

= 0

v = 3 ґ max{c, 2r + 4}

for s = 1 to v

do {

                A = S[i] = (S[i] + A + B) << 3

                B = L[j] = (L[j] + A + B) << (A + B)

                i = (i

+ 1) mod (2r + 4)

                j = (j

+ 1) mod c

}

Структура шифра RC6 является обобщением сети Фейстела. Блок текста разбивается не на 2, а на 4 подблока, и на каждой итерации изменяются 2 подблока из четырех. При этом в конце итерации шифрования производится циклический сдвиг подблоков влево (при расшифровании, соответственно, вправо). Однако, такое обобщение привело к тому, что было утеряно свойство инвариантности блоков шифрования и расшифрования, хотя это и не является определяющим в оценке данного алгоритма.




- Начало -  - Назад -  - Вперед -



Книжный магазин