Интернет магазин китайских планшетных компьютеров



Компьютеры - Grain

07 мая 2011


Оглавление:
1. Grain
2. Производительность



Grain - симметричный алгоритм синхронного потокового шифрования, ориентированный, в первую очередь на аппаратную реализацию. Шифр представлен на конкурсе eSTREAM в 2004 году Мартином Хеллом, Томасом Иохансоном и Вилли Мейером. Алгоритм стал одним из финалистов конкурса во втором профиле.

Описание

Структура шифра Grain

Шифр состоит из трёх основных блоков: двух 80-битных регистров сдвига с обратной связью и выходной функции. Один из регистров обладает линейной функцией обратной связи, второй регистр имеет нелинейную функцию обратной связи. Внутреннее состояние шифра полностью определяется регистрами сдвига.

Регистрах сдвига с линейной обратной связью

Функция обратной связи данного регистра задается задается примитивным полиномом ~f = 1 + x^{18} + x^{29} + x^{42} + x^{57} + x^{67} + x^{80}

Если представить состояние регистра в виде ~s_{i}, s_{i+1}, .. , s_{i+79}, то следующий младший бит будет задаваться соотношением

 ~s_{i+80} = s_{i+62} + s_{i+51} + s_{i+38} + s_{i+23} + s_{i+13} + s_{i}

Регистрах сдвига с нелинейной обратной связью

Функция обратной связи регистра с нелинейной обратной связью задается соотношением

  ~g = 1 + x^{18} + x^{20} + x^{28} + x^{35} + x^{43} + x^{47} + x^{52} + x^{59} + x^{66} + x^{71} + x^{80} + x^{17}x^{20} + x^{43}x^{47} + x^{65}x^{71} + x^{20}x^{28}x^{35} + x^{47}x^{52}x^{59} + x^{17}x^{35}x^{52}x^{71} + x^{20}x^{28}x^{43}x^{47} + x^{17}x^{20}x^{59}x^{65} + x^{17}x^{20}x^{28}x^{35}x^{43} + x^{47}x^{52}x^{59}x^{65}x^{71} + x^{28}x^{35}x^{43}x^{47}x^{52}x^{59}

Для битов bi регистра NLSR получается выражение

  ~b_{i+80} = s_{i} + b_{i+62} + b_{i+60} + b_{i+52} + b_{i+45} + b_{i+37} + b_{i+33} + b_{i+28} + b_{i+21} + b_{i+14} + b_{i+9} + b_{i} + b_{i+63}b_{i+60} + b_{i+37}b_{i+33} + b_{i+15}b_{i+9} + b_{i+60}b_{i+52}b_{i+45} + b_{i+33}b_{i+28}b_{i+21} + b_{i+63}b_{i+45}b_{i+28}b_{i+9} + b_{i+60}b_{i+52}b_{i+37}b_{i+33} + b_{i+63}b_{i+60}b_{i+21}b_{i+15} + b_{i+63}b_{i+60}b_{i+52}b_{i+45}b_{i+37} + b_{i+33}b_{i+28}b_{i+21}b_{i+15}b_{i+9} + b_{i+52}b_{i+45}b_{i+37}b_{i+33}b_{i+28}b_{i+21}

Выходная функция

В качестве аргументов функция ~h принимает значения битов из LFSR и NFSR:

 ~h = x_{1}+x_{4}+x_{0}x_{3}+x_{2}x_{3}+x_{3}x_{4}+x_{0}x_{1}x_{2}+x_{0}x_{2}x_{3}+x_{0}x_{2}x_{4}+x_{1}x_{2}x_{4}+x_{2}x_{3}x_{4}

где ~x_{0}, x_{1}, x_{2}, x_{3}, x_{4} равны соответственно ~s_{i+3}, s_{i+25}, s_{i+46}, s_{i+64}, b_{i+63}

В результате на выход поступает

 ~z_{i} = \sum_{k \in A}b_{i+k} + h, A = \{1, 2, 4, 10, 31, 43, 56 \} 

Инициализация состояния

Инициализация состояния


Шифр принимает на вход 80-битный ключ и 64-битный вектор инициализации.

Перед тем как начать генерировать ключевой поток, шифр должен инициализировать своё состояние.
Пусть ~K = K_{0}, .., K_{79} и ~IV = IV_{0}, .., IV_{63} . Можно выделить следующие этапы инициализации состояния:

1. Загрузка битов ключа ~K в NFSR, ~b_{i} = K_{i}, 0 \le i \le 79
2. Загрузка ~IV в LFSR, ~s_{i} = IV_{i}, 0 \le i \le 63
3. Заполнение оставшихся битов LFSR единицами, s_{i} = 1, 64 \le i \le 79

После этого шифр 160 тактов работает без выдачи ключевого потока, но результат работы шифра подается на вход NFSR и LFSR.



Просмотров: 959


<<< DFC
HC-256 >>>