Алгоритм RC2 шифрует данные блоками по 64 бита с использованием ключей переменного размера: от 8 до 1024 битов исключительно; рекомендуемым размером ключа является 64 бита.
Алгоритм является сетью Фейстеля, в нем выполняется 18 раундов преобразований. Причем раунды алгоритма делятся на 2 типа: смешивающие (mix) раунды и объединяющие (mesh) раунды. Общая структура алгоритма такова:
1. Выполняется 5 смешивающих раундов.
2. Выполняется 1 объединяющий раунд.
3. Выполняются 6 смешивающих раундов.
4. Выполняется 1 объединяющий раунд.
5. Выполняется 5 смешивающих раундов.
Структура смешивающего раунда приведена на рис.1. Предполагается, что шифруемый блок данных разделен на 4 16-битных слова , над которыми смешивающий раунд в цикле по i от 0 до 3 выполняет следующие операции (составляющие показанную на рис.1 функцию f()):
,
j=j+1, (2)
, (3)
где – фрагмент расширенного ключа, определяемый глобальной переменной j; данная переменная изначально равна нулю и увеличивается на 1 (как показано выше) в каждом смешивающем раунде; процедура расширения ключа подробно описана далее,
& - побитовая логическая операция «и»,
~x – побитовый комплемент к x,
« - циклический сдвиг влево на число битов, определяемое значением (табл. 1).
Рис. 1. Смешивающий раунд алгоритма RC2
Таблица 1
i
Таким образом, в каждой i-й итерации смешивающего раунда выполняется описанное выше преобразование f() (рис.2), которое модифицирует на основе текущих значений трех остальных слов шифруемого блока и фрагмента расширенного ключа.
Рис. 2. Функция f() алгоритма RC2
Аналогично смешивающему раунду, в объединяющем раунде выполняется цикл по i от 0 до 3; в каждой итерации цикла выполняется следующая операция:
, (4)
где . (5)
Таким образом, итерация объединяющего раунда представляет собой наложение операцией сложения по модулю фрагмента расширенного ключа, индекс которого определяется 6 младшими битами текущего значения слова .