Дьякова В.Н.., доценты Дьяков И.А.,
Коробова И.Л.
ФГБОУ ВПО «ТГТУ», Россия
МОДИФИКАЦИЯ АЛГОРИТМА
ШИФРОВАНИЯ RC5
Алгоритм RC5 это блочный шифр, разработанный
Роном Ривестом для RSA laboratories [1]. В этом алгоритме переменными являются:
длина блока; количество циклов (итераций); длина ключа.
В блочном алгоритме RC5 размер слова определяет однозначно
размер блока - размер блока в два раза больше размера слова. Например, задан
размер слова в 32 бита - размер блока в этом случае будет 64 бита. Для лучшего
результата (наверно имеется ввиду скорость работы) советуют выбирать размер
слова равным разрядности регистров процессора, на котором реализуется алгоритм
[1, 2].
В нашей работе
исследовался алгоритм RC5-32/8/32. Алгоритм
использует блок открытого текста длиной 64 бита. Для шифрования (рис.1) этот
блок делится на два 32-битовых слова: A и B. Затем выполняются следующие действия:
A=A + S0; B=B + S1;
for i=1 to r ( A=((A xor B)<<<B)+S2i; B=((B xor A)<<<A)+S2i+1)
где r - количество итераций (в этом случае 8), <<< - циклический сдвиг влево, S2i и
S2i+1 - 32-битовые слова, зависящие от ключа.
Дешифрование (рис. 2) происходит в обратном порядке. 64-битовый блок
кодированного текста разбивается на два 32-битовых слова: А и B. Затем:
for i=r downto 1 ( B=((B - S2i+1)>>>A) xor A; A=((A
- S2i)>>>B) xor B)
B=B - S1; A=A - S0
Создание массива ключей (рис.3)
более сложно. Сначала байты ключа копируются в массив L из c 32-битовых
слов, дополняя при необходимости заключительное слово нулями. Затем массив S инициализируется при помощи линейного генератора по
модулю 232:
S0=P
for i=1 to 2(r+1)-1 ( Si=(Si-1 + Q) mod 232)
где P=0xb7e151163 и Q=0x9e3379b9, основанные
на двоичном представлении e и π.
Затем подставляем L в S: i=j=0; A=B=0 и выполняем n раз( где n – максимум 2(r+1) и c):
A=Si=(Si+A+B)<<<3
B=Lj=(Lj+A+B)<<<(A+B)
i=(i+1) mod 2(r+1)
j=(j+1) mod c

Рис. 1. Шифрование Рис. 2.
Дешифрование

Рис.3. Создание массива ключей
Модификация алгоритма
состоит в том, что байты (от 1 до 7), которых не хватает для образования 64
битного слова, кодируются следующим образом:
for i=1to n ( bi=bi xor Si)
где n – количество байт в «хвосте», bi - один из выше описанных байтов, Si - выше описанное слово, зависящее от ключа.
Литература
1.
RC5// https://ru.wikipedia.org/wiki/RC5
2.
Что такое RC5// http://www.algoritmy.info/encrypt4.html