stringtranslate.com

RC5

В криптографии RC5 — это блочный шифр с симметричным ключом, отличающийся своей простотой. Разработанный Рональдом Ривестом в 1994 году, [2] RC означает «шифр Ривеста» или, альтернативно, «код Рона» (сравните RC2 и RC4 ). Кандидат RC6 для расширенного стандарта шифрования (AES) был основан на RC5.

Описание

В отличие от многих схем, RC5 имеет переменный размер блока (32, 64 или 128 бит ), размер ключа (от 0 до 2040 бит) и количество раундов (от 0 до 255). Первоначально предложенный выбор параметров включал размер блока 64 бита, 128-битный ключ и 12 раундов.

Ключевой особенностью RC5 является использование ротации в зависимости от данных; Одной из целей RC5 было стимулирование изучения и оценки таких операций как криптографических примитивов . [ нужна цитация ] RC5 также состоит из ряда модульных дополнений и исключительных ИЛИ (XOR) . Общая структура алгоритма представляет собой сеть типа Фейстеля , аналогичную RC2. Процедуры шифрования и дешифрования можно указать в нескольких строках кода. Расписание ключей, однако, более сложное: расширение ключа осуществляется с использованием, по сути, односторонней функции с двоичными разложениями как e , так и золотого сечения в качестве источников « ничего в запасе ». Дразнящая простота алгоритма вместе с новизной вращения, зависящего от данных, сделали RC5 привлекательным объектом изучения для криптоаналитиков. [ по мнению кого? ] RC5 в основном обозначается как RC5-w/r/b, где w = размер слова в битах, r = количество раундов, b = количество байтов в ключе.

Алгоритм

Шифрование и дешифрование RC5 расширяют случайный ключ до 2 (r+1) слов, которые будут использоваться последовательно (и только один раз каждое) во время процессов шифрования и дешифрования. Все нижеизложенное взято из пересмотренной статьи Ривеста по RC5. [3]

Ключевое расширение

Алгоритм расширения ключа показан ниже, сначала в псевдокоде , затем в примере кода C , скопированного непосредственно из приложения к справочному документу.

Следуя схеме именования, приведенной в статье, используются следующие имена переменных:

# Разбиваем K на слова # u = w / 8 c  =  потолок ( max ( b ,  1 )  /  u ) # L изначально представляет собой список длиной c 0-значных слов длины w для  i  =  b - 1  до  0 делать : L [ я / ты ] = ( L [ я / ты ] <<< 8 ) + K [ я ]              # Инициализация независимого от ключа псевдослучайного массива S # Первоначально S представляет собой список неопределенных слов длины w = 2(r+1) S [ 0 ]  =  P_w for  i  =  1  до  t - 1  do :  S [ i ]  =  S [ я  -  1 ]  +  Q_w # Цикл планирования основного ключа i  =  j  =  0 A  =  B  =  0 do  3  *  max ( t ,  c )  раз :  A  =  S [ i ]  =  ( S [ i ]  +  A  +  B )  <<<  3  B  =  L [ j ]  знак равно  ( L [ j ]  +  A  +  B )  <<<  ( A  +  B )  я  знак равно  ( я  +  1 )  %  t  j  =  ( j  +  1 )  %  c# возврат С

Пример исходного кода взят из приложения к статье Ривеста о RC5. Реализация предназначена для работы с w = 32, r = 12 и b = 16.

void RC5_SETUP ( unsigned char * K ) { // w = 32, r = 12, b = 16 // c = max(1, ceil(8 * b/w)) // t = 2 * (r+1) СЛОВО я , j , k , ты знак равно ш / 8 , А , B , L [ c ]; для ( я знак равно б -1 , L [ c -1 ] = 0 ; я != -1 ; я -- ) L [ я / ты ] = ( L [ я / ты ] << 8 ) + K [ я ] ; для ( S [ 0 ] знак равно п , я знак равно 1 ; я < т ; я ++ ) S [ я ] знак равно S [ я -1 ] + Q ; for ( A = B = я = j = k = 0 ; k < 3 * t ; k ++ , я = ( i + 1 ) % t , j = ( j + 1 ) % c ) { A = S [ я ] = ROTL ( S [ я ] + ( А + B ), 3 ); B = L [ j ] = ROTL ( L [ j ] + ( A + B ), ( A + B )); } }                                                                                                         

Шифрование

Шифрование включало несколько раундов простой функции, из которых, по-видимому, рекомендуется 12 или 20 раундов, в зависимости от требований безопасности и соображений времени. Помимо переменных, использованных выше, в этом алгоритме используются следующие переменные:

A  =  A  +  S [ 0 ] B  =  B  +  S [ 1 ] для  i  =  1  до  r  сделайте :  A  =  (( A  ^  B )  <<<  B )  +  S [ 2  *  i ]  B  =  (( B  ^  А )  <<<  А )  +  S [ 2  *  я  +  1 ]# Блок зашифрованного текста состоит из блока из двух слов, состоящего из A и B в указанном порядке. вернуть  А ,  Б

Пример кода C, предоставленный Ривестом, таков.

void RC5_ENCRYPT ( WORD * pt , WORD * ct ) { WORD i , A = pt [ 0 ] + S [ 0 ], B = pt [ 1 ] + S [ 1 ]; для ( я знак равно 1 ; я <= р ; я ++ ) { A = ROTL ( A ^ B , B ) + S [ 2 * я ]; B = ROTL ( B ^ A , A ) + S [ 2 * я + 1 ]; } ct [ 0 ] знак равно А ; ct [ 1 ] знак равно B ; }                                                   

Расшифровка

Дешифрование представляет собой довольно простой процесс обращения процесса шифрования. Приведенный ниже псевдокод показывает процесс.

для  i  =  r  до  1  сделайте : B = (( B - S [ 2 * i + 1 ]) >>> A )  ^ A A = (( A - S [ 2 * i ] ) >>> B ) ^ B B знак равно B - S [ 1 ] А = А - S [ 0 ]                                вернуть  А ,  Б

Пример кода C, предоставленный Ривестом, таков.

void RC5_DECRYPT ( WORD * ct , WORD * pt ) { WORD i , B = ct [ 1 ], A = ct [ 0 ]; для ( я знак равно р ; я > 0 ; я -- ) { B = ROTR ( B - S [ 2 * я + 1 ], A ) ^ A ; А знак равно ROTR ( А - S [ 2 * я ], B ) ^ B ; } пт [ 1 ] = B - S [ 1 ]; пт [ 0 ] = А - S [ 0 ]; }                                                

Криптоанализ

Двенадцатираундовый RC5 (с 64-битными блоками) подвержен дифференциальной атаке с использованием 244 выбранных открытых текстов. [1] В качестве достаточной защиты предлагается 18–20 патронов.

Ряд этих проблем был решен с помощью распределенных вычислений , организованных Distributed.net . Distributed.net использует брутфорсированные сообщения RC5, зашифрованные с помощью 56-битных и 64-битных ключей, и работает над взломом 72-битного ключа с 3 ноября 2002 года. [4] По состоянию на 26 июля 2023 года 10,409% пространство ключей было исследовано, и, судя по скорости, зарегистрированной в тот день, для заполнения 100% пространства ключей потребуется чуть больше 59 лет. [5] Эта задача вдохновила на множество новых и нестандартных разработок в области кластерных вычислений. [6]

RSA Security , у которой был патент на алгоритм (сейчас срок действия которого истек), [7] предложила серию призов в размере 10 000 долларов США за взлом зашифрованных текстов, зашифрованных с помощью RC5, но эти конкурсы были прекращены в мае 2007 года. [4] В результате были распространены .net решил профинансировать денежный приз. Человек, обнаруживший выигрышный ключ, получит 1000 долларов США, его команда (если применимо) получит 1000 долларов США, а Фонд свободного программного обеспечения получит 2000 долларов США. [8]

Смотрите также

Рекомендации

  1. ^ аб Бирюков, Алекс ; Кушилевиц, Эяль (31 мая 1998 г.). Улучшенный криптоанализ RC5 (PDF) . ЕВРОКРИПТ 1998. doi : 10.1007/BFb0054119 .
  2. ^ Ривест, РЛ (1994). «Алгоритм шифрования RC5» (PDF) . Материалы второго международного семинара по быстрому программному шифрованию (FSE), 1994e . стр. 86–96. Архивировано из оригинала (PDF) 17 апреля 2007 г. Проверено 18 декабря 2004 г.
  3. ^ http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf. Архивировано 21 сентября 2018 г. на Wayback Machine [ пустой URL-адрес PDF ]
  4. ^ ab "distributed.net: Проект RC5" . www.distributed.net . Проверено 14 декабря 2019 г.
  5. ^ RC5-72 / Общая статистика проекта
  6. ^ «Суперкомпьютер PlayStation 3 ставит Массачусетский университет в Дартмуте на первое место в мире в списке задач по взлому кода» (пресс-релиз). Массачусетский университет в Дартмуте . 24 сентября 2014 г. Архивировано из оригинала 29 июня 2022 г. Проверено 24 января 2024 г.
  7. ^ Ривест, Р.Л., «Алгоритм блочного шифрования с чередованием, зависящим от данных», патент США № 5,724,428 , выданный 3 марта 1998 г., срок действия истек 1 ноября 2015 г.
  8. ^ "distributed.net: блоги сотрудников - 2008 г. - сентябрь - 8" . Проверено 15 декабря 2019 г.

Внешние ссылки