RC5 - RC5

RC5
RC5 InfoBox Diagram.svg
Один раунд (два полукруга) блочного шифра RC5
Общий
ДизайнеровРон Ривест
Впервые опубликовано1994
ПреемникиRC6, Акеларре
Деталь шифра
Ключевые размерыОт 0 до 2040 бит (рекомендуется 128)
Размеры блоков32, 64 или 128 бит (рекомендуется 64)
СтруктураФейстель -подобная сеть
Раундов1-255 (изначально предлагалось 12)
Лучшая публика криптоанализ
12-раундовый RC5 (с 64-битными блоками) чувствителен к дифференциальная атака используя 244 выбранные открытые тексты.[1]

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

Описание

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

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

Алгоритм

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

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

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

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

  • w - длина слова в битах, обычно 16, 32 или 64. Шифрование выполняется блоками по 2 слова.
  • u = w / 8 - длина слова в байтах.
  • b - длина ключа в байтах.
  • K [] - ключ, рассматриваемый как массив байтов (с использованием индексации на основе 0).
  • c - длина ключа в словах (или 1, если b = 0).
  • L [] - временный рабочий массив, используемый при планировании ключей. инициализируется ключом на словах.
  • r - количество раундов, используемых при шифровании данных.
  • t = 2 (r + 1) - количество требуемых подключей раунда.
  • S [] - круглые подключи слова.
  • пш - Первая магическая константа, определяемая как , где Odd - ближайшее нечетное целое число к заданному входу, е это основание натурального логарифма, и ш определено выше. Для общих ценностей ш, соответствующие значения Pш даны здесь в шестнадцатеричном формате:
    • За ш = 16: 0xB7E1
    • За ш = 32: 0xB7E15163
    • За ш = 64: 0xB7E151628AED2A6B
  • Qш - Вторая магическая константа, определяемая как , где Odd - ближайшее нечетное целое число к заданному входу, где это Золотое сечение, и ш определено выше. Для общих ценностей ш, соответствующие значения Qш даны здесь в шестнадцатеричном формате:
    • За ш = 16: 0x9E37
    • За ш = 32: 0x9E3779B9
    • За ш = 64: 0x9E3779B97F4A7C15
# Разбейте K на слова# u = w / 8c = потолок(Максимум(б, 1) / ты)# L изначально является списком 0-значных слов длины c длиной cза я = б-1 вниз к 0 делать:    L[я / ты] = (L[я / ты] <<< 8) + K[я]     # Инициализировать независимый от ключей псевдослучайный массив S# S изначально является списком неопределенных слов длиной t = 2 (r + 1) длиной wS[0] = P_wза я = 1 к т-1 делать:    S[я] = S[я - 1] + Q_w    # Основной цикл планирования ключейя = j = 0А = B = 0делать 3 * Максимум(т, c) раз:    А = S[я] = (S[я] + А + B) <<< 3    B = L[j] = (L[j] + А + B) <<< (А + B)    я = (я + 1) % т    j = (j + 1) % c# return S

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

пустота RC5_SETUP(беззнаковый char *K){   // w = 32, r = 12, b = 16   // c = max (1, ceil (8 * ч / б))   // 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;      за (А = B = я = j = k = 0; k < 3 * т; k++, я = (я+1) % т, j = (j+1) % c)   {      А = S[я] = ROTL(S[я] + (А + B), 3);      B = L[j] = ROTL(L[j] + (А + B), (А + B));   }}

Шифрование

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

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

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

пустота RC5_ENCRYPT(СЛОВО *pt, СЛОВО *ct){   СЛОВО я, А = pt[0] + S[0], B = pt[1] + S[1];      за (я = 1; я <= р; я++)   {      А = ROTL(А ^ B, B) + S[2*я];      B = ROTL(B ^ А, А) + S[2*я + 1];   }   ct[0] = А; ct[1] = B;}

Расшифровка

Расшифровка - это довольно простой способ полностью изменить процесс шифрования. Приведенный ниже псевдокод показывает процесс.

за я = р вниз к 1 делать:    B = ((B - S[2 * я + 1]) >>> А) ^ А    А = ((А - S[2 * я]) >>> B) ^ BB = B - S[1]А = А - S[0]возвращаться А, B

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

пустота RC5_DECRYPT(СЛОВО *ct, СЛОВО *pt){   СЛОВО я, B=ct[1], А=ct[0];      за (я = р; я > 0; я--)   {      B = РОТР(B - S[2*я + 1], А) ^ А;      А = РОТР(А - S[2*я], B) ^ B;   }      pt[1] = B - S[1]; pt[0] = А - S[0];}

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

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

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

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

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

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

  1. ^ а б Бирюков А., Кушилевиц Э. (1998). Улучшенный криптоанализ RC5. ЕВРОКРИПТ 1998.
  2. ^ Ривест, Р. Л. (1994). «Алгоритм шифрования RC5» (PDF). Труды Второго международного семинара по быстрому шифрованию программного обеспечения (FSE) 1994e. С. 86–96.
  3. ^ http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
  4. ^ "Distributed.net: Project RC5". www.distributed.net. Получено 14 декабря 2019.
  5. ^ RC5-72 / Общая статистика проекта
  6. ^ «Архивная копия». Архивировано из оригинал на 2014-10-28. Получено 2014-10-28.CS1 maint: заархивированная копия как заголовок (связь)
  7. ^ Ривест, Р. Л., "Алгоритм блочного шифрования с вращением, зависящим от данных", Патент США 5724428 , выдано 3 марта 1998 г.
  8. ^ "Distributed.net: Project RC5". www.distributed.net. Получено 14 декабря 2019.
  9. ^ "Distributed.net: блоги сотрудников - 2008 - сентябрь - 08". Получено 15 декабря 2019.

внешняя ссылка