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