RC5

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

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

Содержание
  • 1 Описание
  • 2 Алгоритм
    • 2.1 Расширение ключа
    • 2.2 Шифрование
    • 2.3 Расшифровка
  • 3 Криптоанализ
  • 4 См. Также
  • 5 Ссылки
  • 6 Внешние ссылки
Описание

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

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

Алгоритм

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

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

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

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

  • w - длина слова в битах, обычно 16, 32 или 64. Шифрование выполняется блоками из 2 слов.
  • u = w / 8 - длина слова в байтах.
  • b - длина ключа в байтах.
  • K - ключ, рассматриваемый как массив байтов (с использованием индексации на основе 0).
  • c - длина ключа в словах (или 1, если b = 0).
  • L - временный рабочий массив, используемый во время ключевой график. инициализируется ключом в словах.
  • r - количество раундов, используемых при шифровании данных.
  • t = 2 (r + 1) - количество требуемых раундов подключей.
  • S - круглые подключи.
  • Pw- первая магическая константа, определенная как O dd ((e - 2) ∗ 2 w) {\ displaystyle Odd ((e-2) * 2 ^ { w})}Нечетный ((e-2) * 2 ^ {w}) , где Odd - ближайшее нечетное целое к заданному входу, e - основание натурального логарифма, а w определено выше. Для общих значений w соответствующие значения P w приведены здесь в шестнадцатеричном виде:
    • Для w = 16: 0xB7E1
    • Для w = 32: 0xB7E15163
    • Для w = 64: 0xB7E151628AED2A6B
  • Qw- Вторая магическая константа, определенная как O dd ((ϕ - 1) ∗ 2 w) {\ displaystyle Odd ((\ phi -1) * 2 ^ {w})}Нечетный ((\ phi - 1) * 2 ^ w) , где Odd - ближайшее нечетное целое число к заданному входу, где ϕ {\ displaystyle \ phi}\ phi - золотое сечение, а w определено выше. Для обычных значений w соответствующие значения Q w приведены здесь в шестнадцатеричном формате:
    • Для w = 16: 0x9E37
    • Для w = 32: 0x9E3779B9
    • Для w = 64: 0x9E3779B97F4A7C15
# Разбить K на слова # u = w / 8 c = потолок (max (b, 1) / u) # L изначально является списком длины c с нулевыми значениями Слова длины w от i = b-1 до 0 do: L [i / u] = (L [i / u] <<< 8) + K[i] # Initialize key-independent pseudorandom S array # S is initially a t=2(r+1) length list of undefined w-length words S[0] = P_w for i = 1 to t-1 do: S[i] = S[i - 1] + Q_w # The main key scheduling loop i = j = 0 A = B = 0 do 3 * max(t, c) times: A = S[i] = (S[i] + A + B) <<< 3 B = L[j] = (L[j] + A + B) <<< (A + B) i = (i + 1) % t j = (j + 1) % c # return S

Пример исходного кода предоставлен в приложении к статье Ривеста по 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) СЛОВО i, j, k, u = w / 8, A, B, L [c]; for (i = b-1, L [c-1] = 0; i! = -1; i--) L [i / u] = (L [i / u] << 8) + K[i]; for (S[0] = P, i = 1; i < t; i++) S[i] = S[i-1] + Q; for (A = B = i = j = k = 0; k < 3 * t; k++, i = (i+1) % t, j = (j+1) % c) { A = S[i] = ROTL(S[i] + (A + B), 3); B = L[j] = ROTL(L[j] + (A + B), (A + B)); } }

Шифрование

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

  • A, B - Два рабочих ds, составляющий блок открытого текста для шифрования.
A = A + S [0] B = B + S [1] для i = 1 to r do: A = ((A ^ B) <<< B) + S[2 * i] B = ((B ^ A) <<< A) + S[2 * i + 1] # The ciphertext block consists of the two-word wide block composed of A and B, in that order. return A, B

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

void RC5_ENCRYPT (WORD * pt, WORD * ct) {WORD i, A = pt [0] + S [0], B = pt [1] + S [1]; for (i = 1; i <= r; i++) { A = ROTL(A ^ B, B) + S[2*i]; B = ROTL(B ^ A, A) + S[2*i + 1]; } ct[0] = A; ct[1] = B; }

Расшифровка

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

для i = r до 1 do: B = ( (B - S [2 * i + 1])>>>A) ^ AA = ((A - S [2 * i])>>>B) ^ BB = B - S [1] A = A - S [0] return A, B

Пример кода C, предоставленного Ривестом, следующий:

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

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

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

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

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-03 04:22:25
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте