20-08-2023
Grain - симметричный алгоритм синхронного потокового шифрования, ориентированный, в первую очередь на аппаратную реализацию. Шифр представлен на конкурсе eSTREAM в 2004 году Мартином Хеллом, Томасом Юханссоном и Вилли Мейером. Алгоритм стал одним из финалистов конкурса во втором профиле (аппаратно ориентированные шифры).
Содержание |
Шифр состоит из трёх основных блоков: двух 80-битных регистров сдвига с обратной связью и выходной функции. Один из регистров обладает линейной функцией обратной связи (LFSR), второй регистр имеет нелинейную функцию обратной связи (NFSR). Внутреннее состояние шифра полностью определяется регистрами сдвига.
Функция обратной связи данного регистра задается задается примитивным полиномом
Если представить состояние регистра в виде , то следующий младший (правый) бит будет задаваться соотношением
Функция обратной связи регистра с нелинейной обратной связью задается соотношением
Для битов регистра NLSR получается выражение
В качестве аргументов функция принимает значения битов из LFSR и NFSR:
где равны соответственно
В результате на выход поступает
Шифр принимает на вход 80-битный ключ (secret key) и 64-битный вектор инициализации (initialization vector).
Перед тем как начать генерировать ключевой поток (keystream), шифр должен инициализировать своё состояние.
Пусть и . Можно выделить следующие этапы инициализации состояния:
1. Загрузка битов ключа в NFSR, 2. Загрузка в LFSR, 3. Заполнение оставшихся битов LFSR единицами,
После этого шифр 160 тактов работает без выдачи ключевого потока, но результат работы шифра подается на вход NFSR и LFSR.
В случае когда аппаратная платформа не ограничена в ресурсах, то шифр позволяет достаточно просто увеличить скорость шифрования. Т.к. оба регистра каждый такт сдвигаются на 1 бит, то если просто реализовать несколько раз () функции обратной связи и и выходную функцию , то скорость шифрования можно увеличить в раз, при этом регистры сдвига за каждый такт также должны сдвигаться на бит. Младшие 15 бит регистров сдвига не используются в функциях обратной связи и поэтому может принимать значения от 1 до 16.
Т.к. при инициализации состояния шифр должен отработать 160 тактов, то это накладывает некоторые ограничения на значение , должно быть целым числом.
Еще в версии 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 бит. Хотя это и не является успешной атакой на ключ, данный факт показывает возможною слабость шифра при инициализации состояния."
Симметричные криптоалгоритмы | |
---|---|
Поточный шифр | |
Сеть Фейстеля |
ГОСТ 28147-89 • Blowfish • Camellia • CAST-128 • CAST-256 • CIPHERUNICORN-A • CIPHERUNICORN-E • CLEFIA • Cobra • DFC • DEAL • DES • DESX • EnRUPT • FEAL • FNAm2 • HPC • IDEA • KASUMI • Khufu • LOKI97 • MARS • NewDES • Raiden • RC5 • RC6 • RTEA • SEED • Sinople • TEA • Triple DES • Twofish • XTEA • XXTEA |
SP-сеть | |
Другие |
Grain.