Дата добавления: 3 года назад | Просмотров: 816 | Категория: Шифрование
RC2 это блочный шифр с ключом переменной длины созданный Роном Ривестом для RSA. "RC" расшифровывается как "Ron's Code" или "Rivest Cipher ". RC2 быстрее чем DES и был спецально разработан для замены DES. Он может быть реализован более или менее защищенным чем DES, в зависимости от длины ключа. RC2 алгоритм конфиденциален и является собственностью RSA. RC2 может использоваться там, где используется DES.
В США длина ключа для использования внутри страны рекомендуется равной 128 битов, но соглашение, заключенное между Software Publishers Association (SPA) и правительством США дает RC2 специальный статус, который означает, что разрешено экспортировать шифры длинной ключа до 40 бит. 56-битные ключи разрешено использовать заграничным отделениям американских компаний.
RC2 с ключами 128 бит обеспечивает такой же уровень безопастности как и IDEA или тройной DES. RC2 используется широко разработчиками, чьи продукты экспортируются за пределы США, поскольку экспортировать DES запрещено.
RC2 состоит из трех частей: агоритм расширения ключа, алгоритм шифрования, алгоритм расшифровки.
В тексте алгоритма используются следующие обозначения:
Сначала создается 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
Комментарии:
Soudal здесь всегда монтажная пена
Добавить комментарий: