HC-256

HC-256

HC-256 — система потокового шифрования, разработанная криптографом У Хунцзюнем (Hongjun Wu) из сингапурского Института инфокоммуникационных исследований. Впервые опубликован в 2004 году. 128-битный вариант был представлен на конкурсе eSTREAM, целью которого было создание европейских стандартов для поточных систем шифрования. Алгоритм стал одним из четырех финалистов конкурса в первом профиле (поточные шифры для программного применения с большой пропускной способностью). [1] (англ.)

Содержание

Описание алгоритма

Потоковый шифр HC-256 генерирует ключевую последовательность (keystream) длиной до 2^{128} бит с помощью 256-битового ключа(secret key) и 256-битного вектора инициализации(initialization vector). НС-256 содержит две секретные таблицы, в каждой из которых 1024 32-битных элемента. При каждом шаге обновляется один элемент из таблицы при помощи нелинейном функции обратной связи(feedback function). Через каждые 2048 шагов все элементы двух таблиц будут обновлены.[1]

Операции, функции, переменные

В алгоритме используются следующие операции:

~+ : x+y означает x+y mod 2^{32}, где 0 \le x ~< 2^{32} и 0 \le y ~< 2^{32}
\boxminus : x \boxminus y означает x - y mod 1024
\oplus : побитовое исключающее ИЛИ
~|| : конкатенация
~\gg : оператор сдвига вправо на указанное количество бит
~\ll : оператор сдвига влево на укзанное количество бит
~\ggg : циклический сдвиг вправо, x ~\ggg n означает ((x ~\gg n) ~+ (x ~\ll (32 - n)), где 0 \le n ~< 32 и 0 \le x ~< 2^{32}

В HC-256 используются две таблицы P и Q. Ключ и вектор инициализации обозначаются K и V соответственно. Ключевая последовательность обозначается S.

~P : таблица из 1024-х 32-битных элементов. Каждый элемент обозначается P[i], где 0 \le i \le 1023.
~Q : таблица из 1024-х 32-битных элементов. Каждый элемент обозначается P[i], где 0 \le i \le 1023.
~K : 256-битный ключ алгоритма HC-256.
~V : 256-битный вектор инициализации алгоритма HC-256.
~S : ключевая последовательность, созданная алгоритмом HC-256. 32-битный элемент на выходе i-го шага обозначается S_i . S=S_0 || S_1 || S_2 || ...

В HC-256 используется шесть функций:

{{f_1}(x) = (x >>> 7) \oplus (x >>> 18) \oplus (x >> 3)}
{{f_2}(x) = (x >>> 17) \oplus (x >>> 19) \oplus (x >> 10)}
{{g_1}(x,y) = ((x >>> 10) \oplus (y >>> 23)) + Q[(x \oplus y) mod~ 1024]}
{{g_2}(x,y) = ((x >>> 10) \oplus (y >>> 23)) + P[(x \oplus y) mod~ 1024]}
~{{h_1}(x) = Q[{x_0}] + Q[256 + {x_1}] + Q[512 + {x_2}] + Q[768 + {x_3}]}
~{{h_2}(x) = P[{x_0}] + P[256 + {x_1}] + P[512 + {x_2}] + P[768 + {x_3}]}

Здесь x = x_3 || x_2 || x_1 || x_0 — 32-битное слово. x_0, x_1, x_2, x_3 состоят из 1 байта каждый, причем x_0, x_3 — младший и старший байты соответственно.[2]

Процесс инициализации

Процесс инициализации (Initialization process) в HC-256 состоит из преобразования P и Q с помощью ключа и вектора инициализации и запуска шифрования 4096 раз без генерации выходного результата (output).

1. Составление K = K_0 || K_1 || … || K_7 и V = V_0 || V_1 || … || V_7, где K_i и V_i состоят из 32-х бит. Ключ и вектор инициализации расширяются в массив W_i (0 \le i \le 2559).

~{W_i} принимает следующие значения:

 {{K_i},~    0 \le i \le 7} 
{{V_{i-8}},~    8 \le i \le 15}
{{f_2}({W_{i-2}}) + W_{i-7} + f_1(W_{i-15}) + W_{i-16} + i,~    16 \le i \le 2559}

2. Обновление таблиц P и Q с помощью W:

{{P[i]} = {W_{i+512}},~  0 \le i \le 1023}
{{Q[i]} = {W_{i+1536}},~  0 \le i \le 1023}

3. Запуск шифрования (алгоритм генерации ключевой последовательности) 4096 раз без генерации выходного результата.

Процесс инициализации завершен и шифр готов к генерации ключевой последовательности.[3]

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

На каждом шаге обновляется один элемент из таблицы и генерируется один 32-битный выходной элемент. Ниже описан процесс генерации ключевой последовательности:

i=0;
repeat until enough keystream bits are generated.
{

  j = i mod 1024; 
if (i mod 2048) < 1024
{ P[j] = P[j] + P[j \boxminus 10] + g_1(P[j \boxminus 3], P[j \boxminus 1023]);
S_i = h_1(P[j \boxminus 12]) \oplus P[j];
} else
{ Q[j] = Q[j] + Q[j \boxminus 10] + g_2(Q[j \boxminus 3], Q[j \boxminus 1023]);
S_i = h_2(Q[j \boxminus 12]) \oplus Q[j];
} end-if
i = i + 1;

}
end-repeat
[3]

Безопасность шифрования HC-256

Авторы сформулировали следующие утверждения о безопасности HC-256:
1) В HC-256 нет скрытых дефектов.
2) Ожидается, что наименьший период не будет намного больше чем 2^{256}.
3) Восстановление секретного ключа так же тяжело, как и полный перебор ключей.
4) Для результативной атаки требуется более чем 2^{128} бит ключевой последовательности.
5) В HC-256 нет слабых ключей.

Период

Алгоритм HC-256 гарантирует, что период ключевой последовательности очень большой. Но точно определить его тяжело. По оценкам средний период ключевой последовательности около 2^{65546}.

Безопасность секретного ключа

Функции выхода (output function) и функции обратной связи (feedback function) в HC-256 в высокой степени нелинейна. Нелинейная функция выхода допускает очень малую утечку информации на каждом шаге. Нелинейная функция обратной связи гарантирует, что секретный ключ не может быть определен из этой утечки.

Из анализа значений функций h_1(x) и h_2(x) следует:

Для {~2048 * \alpha \le i < j < 2048 * \alpha + 1024~} из условия ~{~{S_i} = {S_j}~} следует, что {~h_1(x)(P[i \boxminus 12]) \oplus P[i] = h_1(x)(P[j \boxminus 12]) \oplus P[j]~}. Так как {~h_1(x)(P[i \boxminus 12]) = h_1(x)(P[j \boxminus 12])~} с вероятностью примерно {2^{-31}}, вероятность того, что {~P[i] = P[j]~}, также равна примерно {2^{-31}}. Это означает, что при каждом совпадении(collision) утекает примерно {2^{-26.1}} бит информации. Всего {\approx 2^{-12}~} совпадений. Для восстановления P необходимо {~\frac{1024*32}{2^{-12}*2^{-26.1}} * 1024 \approx 2^{53.1}~} выходных результатов. Итак, можно сделать вывод, что ключ для HC-256 безопасен, и что его нельзя определить быстрее, чем полным перебором ключей.

Безопасность процесса инициализации

Процесс инициализации HC-256 состоит из двух этапов (см. выше). P и Q преобразуются с помощью ключа K и вектора инициализации V. Каждый бит K и V влияет на все биты двух таблиц, и каждое изменение в них приводит к неконтролируемым изменениям в таблицах. Шифрование запускается 4096 раз без генерирования выходного результата, так что таблицы P и Q становятся более случайными. После процесса инициализации изменение в K и V не приводят к изменениям в ключевой последовательности.[4]

Атаки на HC-256

В 2008 году Эриком Зеннером (Erik Zenner) был предложен способ атаки на шифр HC-256. Предложенная атака по времени позволяет восстановить и внутреннее состояние (inner state), представляющее собой 2 таблицы из 1024 32-битовых элементов, а также ключ. Атака требует 8 килобайт известной ключевой последовательности, 6148 точных измерений времени чтения из кэша, время на вычисление, соответствующее времени тестирования 2^{55} ключей. Следует вывод, что в теории HC-256 уязвим к атакам по времени.[5]

Также следует обратить внимание на публикацию Г.Секара (Gautham Sekar) и Б.Пренила (Bart Preneel), предлагающая класс идентификаторов (class of distinguishers), каждый из которых требует тестирование около 2^{276.8} линейных функций. Каждое уравнение включает в себя 8 бит ключевой последовательности. Вероятность успешного исхода 0.9772. Для сравнения, известный до этого и предложенный самим автором HC-256 аналогичный способ требовал 2^{280} функций, каждый из которых включало в себя 10 бит ключевой последовательности.[6]

Заключение

HC-256 удобен для современных микропроцессоров. Зависимость между операциями в HC-256 сведена у минимуму: три последовательных шага алгоритма могут быть вычислены параллельно. Возможность распараллеливания позволяет HC-256 быть эффективным в современных процессорах. Авторы реализовали HC-256 на языке программирования С и протестировали его эффективность на процессоре Pentium 4. Скорость шифрования HC-256 достигает 1.93 бит/цикл. HC-256 не запатентован и находится в свободном доступе.[7]

Примечания

  1. Hongjun Wu. Stream Cipher HC-256, p.1
  2. Hongjun Wu. Stream Cipher HC-256, p.2
  3. 1 2 Hongjun Wu. Stream Cipher HC-256, p.3
  4. Hongjun Wu. Stream Cipher HC-256, pp.4-6
  5. Erik Zenner. Cache Timing Analysis of eStream Finalists, pp.1-4
  6. Gautham Sekar and Bart Preneel. Improved Distinguishing Attacks on HC-256, pp.1,2,6
  7. Hongjun Wu. Stream Cipher HC-256, p.1,14

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "HC-256" в других словарях:

  • 256. Infanterie-Division (Wehrmacht) — 256. Infanterie Division Aktiv 26. August 1939–21. Juli. 1944 aufgelöst Land Deutsches Reich NS & …   Deutsch Wikipedia

  • 256 (число) — 256 двести пятьдесят шесть 253 · 254 · 255 · 256 · 257 · 258 · 259 Факторизация: Римская запись: CCLVI Двоичное: 100000000 Восьмеричное: 400 …   Википедия

  • 256 av. J.-C. — 256 Années : 259 258 257   256  255 254 253 Décennies : 280 270 260   250  240 230 220 Siècles : IVe siècle …   Wikipédia en Français

  • (256) Вальпурга — Открытие Первооткрыватель Иоганн Пализа Место обнаружения Вена Дата обнаружения 3 апреля 1886 Эпоним Святая Вальпурга  …   Википедия

  • (256) walpurga — 256 Walpurga pas de photo Caractéristiques orbitales Époque 18 août 2005 (JJ 2453600.5) Demi grand axe 448,687×106 km (2,999 ua) Aphélie …   Wikipédia en Français

  • 256 Walpurga — (256) Walpurga 256 Walpurga pas de photo Caractéristiques orbitales Époque 18 août 2005 (JJ 2453600.5) Demi grand axe 448,687×106 km (2,999 ua) Aphélie …   Wikipédia en Français

  • (256) Walpurga — 256 Walpurga Caractéristiques orbitales Époque 18 août 2005 (JJ 2453600.5) Demi grand axe 448,687×106 km (2,999 ua) Aphélie 480,615×106 km (3,213 ua) Périhélie …   Wikipédia en Français

  • 256 AH — is a year in the Islamic calendar that corresponds to 869 ndash; 870 CE.yearbox width = 500 in?= cp=2nd century AH c=3rd century AH cf=4th century AH| yp1=X AH yp2=X AH yp3=X AH year=X AH ya1=X AH ya2=X AH ya3=X AH dp3=X0s AH dp2=X0s AH dp1=X0s… …   Wikipedia

  • 256 (number) — Number|number = 256 range = 0 1000 cardinal = two hundred [and] fifty six ordinal = th ordinal text = numeral = factorization = 256 = 2^8 prime = divisor = roman = CCLVI unicode = greek prefix = latin prefix = bin = 100000000 oct = 400 duo = 194… …   Wikipedia

  • 256 — Années : 253 254 255  256  257 258 259 Décennies : 220 230 240  250  260 270 280 Siècles : IIe siècle  IIIe siècle …   Wikipédia en Français

  • 256 (nombre) — Cet article est relatif au nombre 256. Pour l année, voir 256. 256 Cardinal deux cent cinquante six Ordinal deux cent cinquante sixième 256e Adverbe …   Wikipédia en Français


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»