Меню

Главная

Статистика

 

 


RC2 состоит из трех частей: агоритм расширения ключа, алгоритм шифрования, алгоритм расшифровки.

В тексте алгоритма используются следующие обозначения:
  1. Поразрядное исключающее ИЛИ, обозначенно " ^ ".
  2. Поразрядное И, обозначенно " & "
  3. Поразрядное НЕ, обозначенно " ~ ".
  4. Операция >>> - циклический сдвиг вправо x на y
  5. Операция <<< - циклический сдвиг влево x на y

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

Сначала создается 256-байтовый S-блок каждый i-й элемент которого получается так:

Sbox[i]=Beale[i] mod 256 XOR  pad[i], 
где Beale[i] - элемент из шифра Beal (кода), pad[i] - элемент из шифра pad (кода) . Далее происходит расширение ключа к 128 байтам, ключ расширяется так, чтобы заполнить 128 байтов (64 слова). При расширении берут сумму первого и последнего байта ключа, ищут сумму (mod 256) в S-блоке и добавляют результат в ключ. Операция повторяется со вторым и последним новым байтом пока ключ не будет сформирован до 128.

Первоначально i=0, а j=lengh(K) (длинне ключа K)

for j = 0 to length-1 do
    S[ j ] = K[ j ]
for j = length to 127 do s[ j ] = sBox[ ( S[ j-length ] + S[ j-1 ] ) mod 256 ];
Последним шагом меняют первый байт ключа и байтом выбранным из S-блока.
S[ 0 ] = sBox[ S[ 0 ] ]

Шифрование.

Шифрование представляет собой добавление к тексту сформированного ключа и циклического сдвига этой суммы. Шифр имеет 16 полных раундов, каждый разделенный в 4 подраунда. Два из полных раундов выполняют дополнительное преобразование данных.

for i = 0 to 15 do j = i * 4;
word0 = ( word0 + ( word1 & ~word3 ) + ( word2 & word3 ) + S[ j+0 ] ) <<< 1
word1 = ( word1 + ( word2 & ~word0 ) + ( word3 & word0 ) + S[ j+1 ] ) <<< 2
word2 = ( word2 + ( word3 & ~word1 ) + ( word0 & word1 ) + S[ j+2 ] ) <<< 3
word3 = ( word3 + ( word0 & ~word2 ) + ( word1 & word2 ) + S[ j+3 ] ) <<< 5
Кроме того пятые и одиннадцатые раунды добавляют содержание S-блока, индексированного одним из слов данных к другому после четырех подраундов следующим образом:
word0 = word0 + S[ word3 & 63 ];
word1 = word1 + S[ word0 & 63 ];
word2 = word2 + S[ word1 & 63 ];
word3 = word3 + S[ word2 & 63 ];

Расшифровка.

Операция расшифровки - просто инверсия операции шифрования.

for i = 15 downto 0 do j = i * 4;
word3 = ( word3 >>> 5 ) - ( word0 & ~word2 ) - ( word1& word2  ) - S[ j+3 ]
word2 = ( word2 >>> 3 ) - ( word3 & ~word1 ) - ( word0 & word1 ) - S[ j+2 ]
word1 = ( word1 >>> 2 ) - ( word2 & ~word0 ) - ( word3 & word0 ) - S[ j+1 ]
word0 = ( word0 >>> 1 ) - ( word1 & ~word3 ) - ( word2 & word3 ) - S[ j+0 ]

Кроме того пятые и одиннадцатые раунды вычитают содержание S-блока, индексированного одним из слов данных из другого после четырех подраундов следующим образом:

word3 = word3 - S[ word2 & 63 ]
word2 = word2 - S[ word1 & 63 ]
word1 = word1 - S[ word0 & 63 ]
word0 = word0 - S[ word3 & 63 ]

В данном алгоритме возможны неточности в виду конфиденциальности этого алгоритма. Информация была взята из источика: pgut01@cs.auckland.ac.nz (Peter Gutmann), posting to sci.crypt

Назад

гостиница Александр Платц, Санкт-Петербург. Компания "Служба комплексного снабжения": стальные, лист лист г к.. очень много! Крышный вентилятор вкрв-8 века! Только у нас