Введение

Поточный шифр Grain — это поточный шифр, представленный в eSTREAM в 2004 году Мартином Хеллом, Томасом Йоханссоном и Вилли Мейером. Он был включен в финальный портфель eSTREAM для профиля 2 проектом eSTREAM. Grain разработан прежде всего для использования в средах с ограниченными аппаратными ресурсами. Он принимает 80-битный ключ и 64-битный вектор инициализации (IV). В спецификациях не указана максимальная длина выходных данных для каждой пары (ключ, IV). Было выявлено и устранено несколько потенциальных уязвимостей в шифре, в результате чего появилась версия Grain 128a, которая теперь рекомендуется для использования в аппаратных средах, обеспечивающих 128-битную безопасность и аутентификацию.

Описание

Внутреннее состояние Grain на 160 бит состоит из 80-битного линейного регистра сдвига с обратной связью (LFSR) и 80-битного нелинейного регистра сдвига с обратной связью (NLFSR). Grain обновляет один бит состояния LFSR и один бит состояния NLFSR для каждого бита шифротекста, формируемого нелинейной функцией фильтрации. 80-битный NLFSR обновляется с помощью нелинейной булевой функции 5 к 1 и 1-битного линейного входа, выбираемого из LFSR. Нелинейная функция 5 к 1 принимает в качестве входных данных 5 бит состояния NLFSR. 80-битный LFSR обновляется с помощью линейной функции 6 к 1. Во время операций установки ключа выход шифра дополнительно подается обратно в качестве линейных входов в функции обновления NLFSR и LFSR. В оригинальной версии Grain 0.0 один бит 80-битного NLFSR и четыре бита 80-битного LFSR подаются в нелинейную булеву функцию 5 к 1 (которая выбрана сбалансированной, устойчивой к корреляции первого порядка и имеющей алгебраическую степень 3), а выход линейно комбинируется с 1 битом 80-битного NLFSR и выдается в качестве результата. В обновленной версии Grain 1.0 один бит 80-битного NLFSR и четыре бита 80-битного LFSR подаются в (слегка пересмотренную) нелинейную булеву функцию 5 к 1, а выход линейно комбинируется с 7 битами 80-битного NLFSR и выдается в качестве результата. Для инициализации шифра 80-битный ключ загружается непосредственно в 80-битный NLFSR, а 64-битный IV загружается в младшие 64 бита LFSR, а оставшиеся 16 старших битов LFSR заполняются единицами. Шифр "запечатывается" на 160 раундов, в течение которых 160 битов сгенерированного ключевого потока подаются обратно линейно в функции обновления LFSR и NLFSR. Шифр не выдает ключевой поток во время процесса инициализации. Авторы Grain обсуждают полную скорость диффузии процесса инициализации Grain в спецификациях Grain Version 1.0: "При инициализации с двумя различными IV, отличающимися только одним битом, вероятность того, что бит регистра сдвига будет одинаковым для обеих инициализаций, должна быть близка к 0,5. Моделирование показывает, что этого достигают после 160 тактов".

Выступление

Шифр разработан для обеспечения возможности параллельного выполнения до 16 раундов, что позволяет ускорить реализацию за счет увеличения аппаратных затрат.

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

Размер ключа составляет 80 бит, а размер IV – 64 бита. Авторы утверждают, что шифр разработан таким образом, чтобы любая атака не могла быть быстрее, чем полный перебор ключа, следовательно, лучшая атака должна требовать вычислительной сложности, ненамного меньшей чем 280. В оригинальных спецификациях Grain Version 0.0 авторы утверждают: «Grain обеспечивает более высокую безопасность, чем несколько других хорошо известных шифров, предназначенных для использования в аппаратных приложениях. Хорошо известные примеры таких шифров – E0, используемый в Bluetooth, и A5/1, используемый в GSM. Эти шифры, несмотря на небольшую аппаратную реализацию, оказались очень небезопасными. По сравнению с E0 и A5/1, Grain обеспечивает более высокую безопасность, сохраняя при этом небольшую аппаратную сложность». Авторы приводят пример атаки на E0, требующей сложности 240 и 235 кадров (кадр длиной 2745 бит). Оригинальный шифр Grain версии 0.0 был взломан атакой восстановления ключа, для которой потребовалось 243 вычислений и 238 бит ключевого потока для определения 80-битного ключа. В пересмотренных спецификациях Grain Version 1.0 шифр имеет незначительно измененную функцию вывода, а функция обратной связи NLFSR претерпела небольшие изменения. В спецификациях указано: «Функция фильтра довольно мала – всего 5 переменных и нелинейность 12. Однако это частично компенсируется тем, что один из входных параметров берется из NLFSR. Входной бит из NLFSR будет зависеть от других битов в состоянии, как из LFSR, так и из NLFSR. Небольшая функция фильтра также компенсируется добавлением 7 бит из NLFSR в подходящие позиции для формирования выходной функции». По состоянию на октябрь 2006 года неизвестно атак восстановления ключа, превосходящих атаку полным перебором, против Grain Version 1.0. Однако в сентябре 2006 года Озгул Кучук опубликовал связанную ключевую атаку в статье «Атака скользящей ресинхронизации на инициализацию Grain 1.0». В статье утверждается: «мы находим связанные ключи и начальные значения потокового шифра Grain 1.0. Для любой пары (K, IV) существует связанная пара (K’, IV’) с вероятностью 1/22, которая генерирует ключевой поток, сдвинутый на 1 бит. Хотя это пока не приводит к эффективной атаке восстановления ключа, это указывает на слабость инициализации, которую можно устранить при небольших усилиях».