В качестве одного из кандидатов фирмой RSA Data Security, Inc. был представлен алгоритм RC6 прошедший второй тур отбора. В нем предусматривается использование четырех рабочих регистров, а так-же введена операция целочисленного умножения, позволяющая существенно увеличить возмущения, вносимые каждым циклом шифрования, что приводит к увеличению стойкости и/или возможности сократить число циклов.
RC6 является полностью параметризованным алгоритмом шиф-рования. Конкретная версия RC6 обозначается как RC6-w/r/b, где w обозначает длину слова в битах, r - ненулевое количество итерационных циклов шифрования, а b - длину ключа в байтах. Во всех вариантах RC6-w/r/b работает с четырьмя w-битовыми словами, используя шесть базовых операций, обозначаемых следующим образом:
а + b- целочисленное сложение по модулю 2W;
а - b- целочисленное вычитание по модулю 2W;
а b - побитовое "исключающее ИЛИ" w-битовых слов;
а x b - целочисленное умножение по модулю 2W;
a « b - циклический сдвиг w-битового слова влево на величину, заданную log2w младшими битами b;
a » b — циклический сдвиг w-битового слова вправо на величину, заданную log2W младшими битами b;
Шифрование при помощи RC6-w/r/b описывается следующим об-разом:
Вход: Исходный текст, записанный в 4 w-битовых входных регистрах А, В, С, D; Число циклов шифрования r; Ключевая таблица S[0; ... 2r + 3] w-битовых слов.
Выход: Шифрованный текст в регистрах А, В, С, D.
Расшифрование в этих обозначениях выглядит очень похоже:
Вход: Шифрованный текст, записанный в 4 w-битовых вход-ных регистрах А, В, С, D; Число циклов шифрования r; Ключевая таблица S[0; ... 2r + 3] w-битовых слов.
Выход: Исходный текст в регистрах А, В, С, D.
Алгоритм вычисления ключей для RC6-w/r/b выглядит следующим образом:
Пользователь задает ключ длиной b байтов. Достаточное число ненулевых байтов дописываются в конец, чтобы получилось целое число слов. Затем эти байты записываются начиная с младшего в массив из с слов, т.е. первый байт ключа записывается в L[0], и т.д., a L[c - 1] при необходимости дополняется со стороны старших разрядов нулевыми байтами. В результате работы алгоритма генерации ключей будет вычислено 2r + 4 слов, которые будут записаны в мас-сиве S[0; ...; 2r + 3].
Константы Р32 = B7E15163h and Q32 = 9E3779B9h - это константы, получаемые из двоичного представления е -2, где е -основание натуральных логарифмов, и ф - 1, где ф - золотое сечение, соответственно. Подобные же константы могут быть аналогичным образом получены и для RC6 с другим размером слова. Выбор констант является в некотором роде произвольным, и поэтому можно использовать и другие константы, получая при этом "частные" версии алгоритма.
Вход: Определенный пользователем b-байтовый ключ, предварительно загруженный в массив L[0;.. .с - 1]; Число циклов шифрования r.
Выход: Ключевая таблица S[0;...2r +4] из w-битовых слов.
Структура шифра RC6 является обобщением сети Фейштеля. Блок текста разбивается не на 2, а на 4 подблока, и на каждой итерации изменяются 2 подблока из четырех. При этом в конце итерации шифрования производится циклический сдвиг подблоков влево (при расшифровании, соответственно, вправо). Однако, такое обобщение привело к тому, что было утеряно свойство инвариантности блоков шифрования и расшифрования, хотя это и не является определяющим в оценке данного алгоритма.
|