MICKEY

В криптографии, MICKEY (англ. Mutual Irregular Clocking KEYstream generator) — алгоритм потокового шифрования. Существует два варианта этого алгоритма — с длиной ключа 80 бит (MICKEY) и 128 бит (MICKEY-128). Он был разработан Стивом Бэббиджем и Мэтью Доддом в 2005 году с целью использования в системах с ограниченными ресурсами. Этот алгоритм имеет простую аппаратную реализацию при высокой степени защищённости. В нём используется нерегулярное тактирование сдвиговых регистров, а также новые методы, обеспечивающие достаточно большой период и псевдослучайность ключевой последовательности и устойчивость к атакам[1]. Алгоритм MICKEY участвовал в конкурсном проекте eSTREAM, организованным сообществом eCRYPT. Текущая версия алгоритма — 2.0. Она вошла в портфолио eCRYPT, как потоковый шифр для аппаратной реализации[2].

Взаимное управление тактированием регистров R и S

Терминология

Входные параметры:

  • ключ K длиной 80 бит, его биты обозначаются k0, k1 …, k79;
  • инициализирующая переменная IV длиной от 0 до 80 бит, её биты обозначаются iv0, …, ivдлина IV — 1.

Ключевая последовательность обозначается z0, z1, z2.

Ограничения использования

Максимальная длина ключевой последовательности, полученной с помощью одной пары (K, IV) составляет 240 бит. Однако допускается получение 240 таких последовательностей при использовании одного K при условии, что IV выбирается разными для каждой новой последовательности.

Устройство генератора ключевой последовательности

Регистры

Генератор состоит из двух регистров R и S, каждый из которых имеет длину 100 бит.

Биты этих регистров обозначаются r0, r1, …, r99 и s0, s1, …, s99 соответственно.

Сдвиг регистра R

Набор входов обратной связи регистра R обозначается RTAPS.

RTAPS = { 0, 1, 3, 4, 5, 6, 9, 12, 13, 16, 19, 20, 21, 22, 25, 28, 37, 38, 41, 42, 45, 46, 50, 52, 54, 56,

58, 60, 61, 63, 64, 65, 66, 67, 71, 72, 79, 80, 81, 82, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97 }


Операция сдвига CLOCK_R (R, INPUT_BIT_R, CONTROL_BIT_R) определяется следующей последовательностью действий:

  • пусть r0, r1, …, r99 — состояние регистра до сдвига, а r'0, r'1, …, r'99 — после сдвига;
  • FEEDBACK_BIT = r99 ⊕ INPUT_BIT_R;
  • для 1 ≤ i ≤ 99, r'i = ri-1; r'0 = 0;
  • для 0 ≤ i ≤ 99, если i ∈ RTAPS, r'i = r'i ⊕ FEEDBACK_BIT;
  • если CONTROL_BIT_R = 1, то
    • для 0 ≤ i ≤ 99, r'i = r'i ⊕ ri.

Сдвиг регистра S

Определим четыре последовательности COMP01 … COMP098, COMP11 … COMP198, FB00 … FB099, FB10 … FB99 в соответствии с таблицей:

i0123456789101112131415161718192021222324
COMP0i 000110001011110100101010
COMP1i 101100101111001010001101
FB0i 1111010111111110010111111
FB1i 1110111000011101001100010
i25262728293031323334353637383940414243444546474849
COMP0i 1010110100100000001010101
COMP1i 0111011110001101011100001
FB0i 1111001100000011100100101
FB1i 0110010110001100000110110
i50515253545556575859606162636465666768697071727374
COMP0i 0000101001111001010111111
COMP1i 0001011100011111101011101
FB0i 0100101111010101000000000
FB1i 0010001001001011010100101
i75767778798081828384858687888990919293949596979899
COMP0i 111010111111010100000011
COMP1i 111000100001110001001100
FB0i 1101000110111001110011000
FB1i 0001111011111000000100001

Функция сдвига регистра S CLOCK_S определяется как последовательность действий:

  • пусть s0, s1, …, s99 — состояние регистра до сдвига, а s'0, s'1, …, s'99 — после сдвига. ŝ0, ŝ1, …, ŝ99 будем обозначать промежуточное состояние регистра;
  • FEEDBACK_BIT = s99 ⊕ INPUT_BIT_S;
  • для 1 ≤ i ≤ 98, ŝi = si-1 ⊕ ((si ⊕ COMP0i)•(si+1 ⊕ COMP1i)); ŝ0 = 0; ŝ99 = s98;
  • если CONTROL_BIT_S = 0, то
    • для 0 ≤ i ≤ 99, s'i = ŝi ⊕ (FB0i • FEEDBACK_BIT);
  • если CONTROL_BIT_S = 1, то
    • для 0 ≤ i ≤ 99, s'i = ŝi ⊕ (FB1i • FEEDBACK_BIT).

Управление тактированием всего генератора

Определим функцию CLOCK_KG (R, S, MIXING, INPUT_BIT) следующим образом:

  • СONTROL_BIT_R = s34 ⊕ r67;
  • CONTROL_BIT_S = s67 ⊕ r33;
  • если MIXING = TRUE, тогда INPUT_BIT_R = INPUT_BIT ⊕ s50, а если MIXING = FALSE, тогда INPUT_BIT_R = INPUT_BIT;
  • INPUT_BIT_S = INPUT_BIT;
  • CLOCK_R (R, INPUT_BIT_R, CONTROL_BIT_R);
  • CLOCK_S (S, INPUT_BIT_S, CONTROL_BIT_S).

Загрузка ключа и инициализация

Регистры инициализируются с использованием начальных параметров K и IV следующим образом:

  • в регистры R и S записываются нули;
  • загружается IV — для 0 ≤ i ≤ длина IV — 1,
    • CLOCK_KG (R, S, MIXING = TRUE, INPUT_BIT = ivi);
  • загружается K — для 0 ≤ i ≤ 79,
    • CLOCK_KG (R, S, MIXING = TRUE, INPUT_BIT = ki);
  • для 0 ≤ i ≤ 99,
    • CLOCK_KG (R, S, MIXING =TRUE, INPUT_BIT = 0).

Генерация ключевой последовательности

После загрузки и инициализации можно начинать генерировать ключевую последовательность z0, z1, , zL-1:

  • для 0 ≤ i ≤ L − 1,
    • zi = r0 ⊕ s0;
    • CLOCK_KG (R, S, MIXING = FALSE, INPUT_BIT = 0).

Особенности

Нерегулярное тактирование регистра R

  • Когда флаг CONTROL_BIT_R = 0, R представляет собой обычный регистр сдвига с линейной обратной связью Галуа-типа, с примитивным характеристическим многочленом CR = x100 + Σxi, где i ∈ RTAPS и входным битом INPUT_BIT_R, примешиваемым к обратной связи операцией XOR. Если представить элементы поля GF(2100) многочленами Σrixi, где 0 ≤ i ≤ 99 по модулю CR(x), то сдвиг регистра — это умножение на x в этом поле.
  • Когда флаг CONTROL_BIT_R = 1, то помимо сдвига каждого бита происходит его сложение по модулю два с предыдущем значением бита, что соответствует умножению на x + 1 в том же поле. Характеристический многочлен CR(x) выбран таким образом, что он является делителем многочлена xJ + x + 1, где J = 250 — 157. Следовательно такт регистра R при CONTROL_BIT_R = 1 соответствует его сдвигу J раз.

Причины использования нерегулярного тактирования

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

  1. сдвиг регистра сначала m раз, а потом n раз дает тот же результат, что и сдвиг регистра сначала n раз, а потом m раз, то есть разные варианты тактирования коммутируют. Это дает преимущество криптоаналитику, так как нет необходимости определять порядок таких операций;
  2. также, если вариантов тактирования регистра много, то, например, пять сдвигов регистра дает одиночная и четырёхкратная операция тактирования или двукратная и трёхкратная, что ещё больше уменьшает количество комбинаций для перебора, упрощая статистическую атаку;
  3. n-кратный сдвиг может произойти после любого сдвига.

При разработке в основу шифра MICKEY легли следующие идеи:

  • использовать нерегулярный сдвиг для защиты от многих типов атак;
  • обеспечить большой период и локальную случайность;
  • как можно больше уменьшить возможность статистических атак, которым подвержены шифры этого типа.

В отношении указанных свойств 1-3, ухудшающих криптостойкость, MICKEY ведёт себя следующим образом:

  1. верно для регистра R, так как clockJ • clock1 = clock1 • clockJ, но не верно для регистра S, операции тактирования которого не коммутируют.
  2. не верно для обоих регистров. Для R для любых t ≤ 240 и u существует не более одной пары n1 и nJ таких, что 0 ≤ n1,nJ ≤ t, n1 + nJ = t и n1 + nJJ = u, где n1 и nJ соответствуют однократному и J-кратному сдвигу.
  3. не верно для обоих регистров. Для R для любого заданного u существует не более одной тройки t, n1 и nJ таких, что t ≤ 240, 0 ≤ n1,nJ ≤ t, n1 + nJ = t и n1 + nJJ = u.

Регистр R обеспечивает неповторяемость состояния генератора и хорошие локальные статистические свойства. Влияние регистра R на S также предотвращает зацикливание S с маленьким периодом. Если J ≤ 260, то состояние регистра R не повторится при генерации ключевой последовательности длиной вплоть до 240 бит. А если J ≥ 240, то свойство (2) не верно.

Выбор битов управления тактированием

Биты управления для каждого регистра выбраны таким образом, что они зависят от обоих регистров. Поэтому знания состояния одного из регистров не достаточно для определения последующих состояний генератора.

Количество энтропии

Так как нерегулярное тактирование управляется битами из самого генератора, это может уменьшить количество энтропии в генераторе. Использование операции XOR и битов из двух регистров для получения бита управления обеспечивает отсутствие корреляции между этим битом управления и контролируемым регистром. Благодаря этому энтропия не уменьшается при работе генератора.

Примечания

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.