Grain

Материал из testwiki
Перейти к навигации Перейти к поиску

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

Описание

Файл:Grain structure.png
Структура шифра Grain

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

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

Функция обратной связи данного регистра задаётся примитивным полиномом f(x)=1+x18+x29+x42+x57+x67+x80

Если представить состояние регистра в виде si,si+1,..,si+79, то следующий младший (правый) бит будет задаваться соотношением

 si+80=si+62+si+51+si+38+si+23+si+13+si

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

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

  g(x)=1+x18+x20+x28+x35+x43+x47+x52+x59+x66+x71+x80+x17x20+x43x47+x65x71+x20x28x35+x47x52x59+x17x35x52x71+x20x28x43x47+x17x20x59x65+x17x20x28x35x43+x47x52x59x65x71+x28x35x43x47x52x59

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

  bi+80=si+bi+62+bi+60+bi+52+bi+45+bi+37+bi+33+bi+28+bi+21+bi+14+bi+9+bi+bi+63bi+60+bi+37bi+33+bi+15bi+9+bi+60bi+52bi+45+bi+33bi+28bi+21+bi+63bi+45bi+28bi+9+bi+60bi+52bi+37bi+33+bi+63bi+60bi+21bi+15+bi+63bi+60bi+52bi+45bi+37+bi+33bi+28bi+21bi+15bi+9+bi+52bi+45bi+37bi+33bi+28bi+21

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

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

 h(x)=x1+x4+x0x3+x2x3+x3x4+x0x1x2+x0x2x3+x0x2x4+x1x2x4+x2x3x4

где x0,x1,x2,x3,x4 равны соответственно si+3,si+25,si+46,si+64,bi+63

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

 zi=kAbi+k+h(si+3,si+25,si+46,si+64,bi+63),A={1,2,4,10,31,43,56}

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

Файл:Grain (cipher) key initialization.png
Инициализация состояния

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

Перед тем как начать генерировать ключевой поток (keystream), шифр должен инициализировать своё состояние.
Пусть K=K0,..,K79 и IV=IV0,..,IV63. Можно выделить следующие этапы инициализации состояния:

1. Загрузка битов ключа K в NFSR, bi=Ki,0i79
2. Загрузка IV в LFSR, si=IVi,0i63
3. Заполнение оставшихся битов LFSR единицами, si=1,64i79

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

Производительность

Файл:Grain (cipher) throughput rate.png
Ускорение шифрования

В случае когда аппаратная платформа не ограничена в ресурсах, то шифр позволяет достаточно просто увеличить скорость шифрования. Т.к. оба регистра каждый такт сдвигаются на 1 бит, то если просто реализовать несколько раз (N) функции обратной связи f(x) и g(x) и выходную функцию h(x), то скорость шифрования можно увеличить в N раз, при этом регистры сдвига за каждый такт также должны сдвигаться на N бит. Младшие 15 бит регистров сдвига не используются в функциях обратной связи и поэтому N может принимать значения от 1 до 16.
Т.к. при инициализации состояния шифр должен отработать 160 тактов, то это накладывает некоторые ограничения на значение N, i=160/N должно быть целым числом.

Безопасность

Еще в версии 0.0 авторы заявляли, что шифр разработан таким образом, что невозможна атака быстрее, чем полный перебор ключей. Таким образом, лучшая атака должна иметь сложность порядка 280.

В спецификации версии 0.0 Grain [1] авторы утверждали: "Grain предоставляет большую надёжность, чем некоторые другие известные аппаратно ориентированные шифры. Хорошо известными примерами таких шифров является E0, используемый в Bluetooth, и A5/1, используемый в GSM. Хотя эти шифры просты в реализации, доказано, что они очень ненадёжны. По сравнению с E0 и A5/1, Grain предоставляет большую надёжность, сохраняя простоту реализации".

В версии 0.0 был обнаружен ряд серьёзных уязвимостей, поэтому в обновлённой версии 1.0 [2], у шифра немного изменилась выходная функция и функция обратной связи у регистра с нелинейтой обратной функцией (NFSR). После этого, с октября 2006 года не известно ни об одной атаке против Grain версии 1.0 быстрее, чем полный перебор. Однако, в сентябре 2006 года была опубликована попытка атаки на ключ[3]. В статье утверждается: "мы нашли связанные ключи и начальные значения в Grain, для любой пары(K,IV) с вероятностью 1/22 существует связанная пара (K’,IV’) которая генерирует ключевой поток сдвинутый на 1 бит. Хотя это и не является успешной атакой на ключ, данный факт показывает возможною слабость шифра при инициализации состояния."

См. также

Примечания

Ссылки

Шаблон:Симметричные криптоалгоритмы