Интернет магазин китайских планшетных компьютеров



Компьютеры - RC5

14 июня 2011


Оглавление:
1. RC5
2. Свойства
3. Варианты алгоритма
4. Реализация алгоритма RC5 на языке C#




RC5 — это блочный шифр, разработанный Роном Ривестом из компании RSA Security Inc. с переменным количеством раундов, длиной блока и длиной ключа. Это расширяет сферу использования и упрощает переход на более сильный вариант алгоритма.

Описание

Существует несколько различных вариантов алгоритма, в которых преобразования в "пол-раундах" классического RC5 несколько изменены. В классическом алгоритме используются три примитивных операции и их инверсии:

  • сложение по модулю 2
  • побитовое исключающее ИЛИ
  • операции циклического сдвига на переменное число бит.

Основным нововведением является использование операции сдвига на переменное число бит, не использовавшиеся в более ранних алгоритмах шифрования. Эти операции одинаково быстро выполняются на большинстве процессоров, но в то же время значительно усложняют дифференциальный и линейный криптоанализ алгоритма.

Шифрование по алгоритму RC5 состоит из двух этапов. Процедура расширения ключа и непосредственно шифрование. Для расшифровки выполняется сначала процедура расширения ключа, а затем операции, обратные процедуре шифрования.

Параметры

Т.к. алгоритм RC5 имеет переменные параметры, то для спецификации алгоритма с конкретными параметрами принято обозначение RC5-W/R/b, где

  • W — половина длины блока в битах, возможные значения 16, 32 и 64. Для эффективной реализации величину W рекомендуют брать равным машинному слову. Например, для 32-битных платформ оптимальным будет выбор W=32, что соответствует размеру блока 64 бита.
  • R — число раундов, возможные значения от 0 до 255. Увеличение числа раундов обеспечивает увеличение уровня безопасности шифра. Так, при R=0 информация шифроваться не будет. Также алгоритм RC5 использует таблицу расширенных ключей размера 2 слов, которая получается из ключа заданного пользователем.
  • b — длина ключа в байтах, возможные значения от 0 до 255.

Расширение ключа


Перед непосредственно шифрованием или расшифровкой данных выполняется процедура расширения ключа. Процедура генерации ключа состоит из четырех этапов:

  • Генерация констант
  • Разбиение ключа на слова
  • Построение таблицы расширенных ключей
  • Перемешивание

Генерация констант

Для заданного параметра W генерируются две псевдослучайные величины используя две математические константы: e и f.

~Q_w \leftarrow \textrm{Odd}\cdot 2^w)
~P_w \leftarrow \textrm{Odd}\cdot 2^w),

где Odd — это округление до ближайшего нечетного целого.

Для w = 16,32,64 получатся следующие константы:

  • ~P_{16} = \texttt{1011011111100001}_2 = \texttt{B7E1}_{16}
  • ~Q_{16} = \texttt{1001111000110111}_2 = \texttt{9E37}_{16}
  • ~P_{32} = \texttt{10110111111000010101000101100011}_2 = \texttt{B7E15163}_{16}
  • ~Q_{32} = \texttt{10011110001101110111100110111001}_2 = \texttt{9E3779B9}_{16}
  • ~P_{64} = \texttt{B7E151628AED2A6B}_{16}
  • ~Q_{64} = \texttt{9E3779B97F4A7C15}_{16}

Разбиение ключа на слова

На этом этапе происходит копирование ключа K_0 \dots  K_{255} в массив слов L0…Lc − 1, где c=\mathcal {d}b/u\mathcal {e}, где u = W / 8, то есть, количество байт в слове.

Если c не кратен W / 8, то Li дополняется нулевыми битами до ближайшего большего размера c, кратного W / 8.

В случае если b = c = 0, то мы устанавливаем значение c = 1, а L0 = 0.

Построение таблицы расширенных ключей

На этом этапе происходит построение таблицы расширенных ключей S_0 \dots S_{2 *}, которая выполняется следующим образом:

S0 = Pw
Si + 1 = Si + Qw

Перемешивание

Циклически N раз выполняются следующие действия:

~G = S_i = \lll 3
~H = L_j = \lll
~i = \mod)
~j = \mod c,

причем G,H,i,j — временные переменные, начальные значения которых равны 0. Количество итераций цикла N — это максимальное из двух значений 3 * c и .

Шифрование


Перед первым раундом выполняются операции наложения расширенного ключа на шифруемые данные:

~A =\;\bmod\;2^w
~B =\;\bmod\;2^w

В каждом раунде выполняются следующие действия:

~A_{i+1} = \lll B_i) + S_{2i}
~B_{i+1} = \lll A_i) + S_{2i+1}

Расшифровка

Для расшифровки выполняются обратные операции, т.е. в каждом раунде выполняются следующие операции:

~B_{i+1} = \ggg A_i) \oplus A_i
~A_{i+1} = \ggg B_i) \oplus B_i


Просмотров: 3502


<<< RC4
RC6 >>>