Зима. Время валяться в сугробах и играть в снежки. Или почитать статью о поточных шифрах. Кому что больше нравится.

Данная статья является обзорной. Мы поговорим о принципе работы 1 версии SNOW 1.0, вкратце о различных, совершенных на шифр атаках и о применении его модификаций.

Основная информация

И самая важная, на мой взгляд.

Шифр SNOW относится к словоориентированным поточным шифрам. Он работает с 32-битными словами и поддерживает как 128-, так и 256-битные ключи и состоит из комбинации регистра сдвига с линейной обратной связью (РСЛОС) и конечного автомата (КА).

У него есть 3 модификации. Причем одна из них — SNOW 3G, используется для передачи мобильных данных. Последняя версия SNOW-V была разработана для 5G сетей, но пока не используется.

Немного про историю

SNOW 1.0, первоначально просто SNOW, был разработан в 2000 году в Лундском университете (Швеция).

В первой версии были обнаружены слабые места, и в результате SNOW не был включен в набор алгоритмов NESSIE. В 2003 году авторы разработали новую версию шифра SNOW 2.0, в которой устранили недостатки и улучшили производительность. Во время оценки ETSI SAGE алгоритм шифрования был дополнительно изменён, чтобы повысить его устойчивость к алгебраическим атакам. Результатом таких улучшений в 2006 году стала модификация шифра SNOW 3G.

В 2019 году Ericsson Research совместно с Лундским университетом пересмотрели алгоритм SNOW 3G и обновили его до нового, более быстрого шифра под названием SNOW-V.

Схема работы SNOW

Принцип работы нарисован на картинке. Подробности описаны ниже.

Общая схема работы

Генератор состоит из регистра сдвига с линейной обратной связью длины 16 над полем \mathbb{F}_{2^{32}}. Выход регистра подается на вход конечного автомата. КА состоит из двух 32-битных регистров, называемых R1 и R2, а также некоторых операций для вычисления вывода и следующего состояния (следующего значения R1 и R2). Работа шифра выглядит следующим образом. Сначала выполняется инициализация ключа. Эта процедура обеспечивает начальные значения для РСЛОС, а также для регистров R1, R2 в конечном автомате. Затем первые 32 бита ключевого потока вычисляются путем поразрядного сложения выходных данных КА и последней записи РСЛОС. После этого весь процесс синхронизируется, и следующие 32 бита ключевого потока вычисляются путем ещё одного побитового сложения выходных данных конечного автомата и последней записи РСЛОС. Мы снова синхронизируемся и продолжаем в том же духе.

Детальная схема работы

В начальный момент времени t = 0 происходит инициализация регистра сдвига 32-битными значениями s(1), s(2),…, s(16) , которые задаются при помощи сгенерированного ключа.

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

p (x) = x^{16} + x^{13} + x^{7} + \alpha^{-1}

над полем \mathbb{F}_{2^{32}}, которое задаётся неприводимым многочленом

 \pi (x) = x^{32} + x^{29} + x^{20} + x^{15} + x^{10} + x + 1,

над \mathbb{F}_{2}, \pi (\alpha) = 0 .

Выход КА назовемFSM_{out}. Он рассчитывается по следующей формуле:

FSM_{out} = (s(1) \boxplus R1) \oplus R2,

где \boxplusцелочисленное сложение по\mod2^{32}.

Выход конечного автоматаFSM_{out}сравнивается с s(16) модулю 2 для формирования потокового ключа, то есть

running key = FSM_{out} \oplus s(16),

где \oplusсложение по mod 2.

Внутри конечного автомата новые значения для R1 и R2 присваиваются по следующим формулам:

newR1 = ((FSM_{out}\boxplus R2) \lll 7) \oplus R1,

где \lll - циклический сдвиг влево,

R2=S(R1),R1=newR1

Наконец, S-блок, обозначаемый S(x), cостоит из четырёх идентичных битовых S-блоков 8?8 и перестановки полученных битов. Входные данные разделены на 4 байта, каждый байт входит в нелинейное отображение от 8 бит до 8 бит. После этого отображения биты в результирующем слове переставляются, чтобы сформировать окончательный результат S-блока

Для конечного формирования шифртекста потоковый ключ сравнивается с открытым текстом по модулю 2.

Более подробно описан алгоритм шифрования здесь.

Известные атаки

  • В феврале 2002 года Филипп Хоукс и Грегори Роуз описали атаку «Guess and determine attack» на SNOW 1.0, в котором используются в основном два свойства, чтобы снизить сложность атаки ниже исчерпывающего поиска ключей. Во-первых, тот факт, что автомат имеет только один вход s(1). Это позволяет злоумышленнику инвертировать операции в конечном автомате и получать больше неизвестных только из нескольких предположений. Второе свойство — неудачный выбор полинома обратной связи в SNOW 1.0.

  • В августе 2003 года Ватанабе, Бирюков и Канньер описали атаку на SNOW 2.0 методом линейной маскировки. Эта атака использует  2^{230} битов потока и  2^{215} анализа, что быстрее, чем исчерпывающий поиск 256-битного ключа.

  • В 2010 году был описан механизм ресинхронизации SNOW 3G и аналогичного шифра SNOW 3G ? с использованием атак с коллизией нескольких наборов. В алгоритме описано полное восстановление ключа выбранных атак ресинхронизации IV для 18 из 33 раундов инициализации SNOW3G ? со сложностью 2^{57}для генерации данных и 2^{53}этапами анализа.

  • В 2020 Lin Jiao, Yongqiang Li и Yonglin Hao совершили атаку на SNOW-V под названием «Guess and determine attack». Хмм.. Такое же название атаки, как и на SNOW 1.0. Мы, кажется, зациклились. Или нет?

Теперь о применении

  • SNOW 2.0 — один из потоковых шифров, вошедших в стандарт шифрования ISO/IEC 18033-4, который определяет функции вывода для объединения ключевого потока с открытым текстом, генераторы ключевого потока для создания ключевого потока и идентификаторы объектов.

  • SNOW 3G выбран в качестве генератора потоковых ключей для алгоритмов шифрования 3GPP UEA2 и UIA3.

  • SNOW-V пока не используется, но всё возможно!

Еще есть шифр потоковый STRUMOK (стандартизирован в Украине: ДСТУ 8845:2019 "Струмок"), у которого генератор ключевого потока в своей концептуальной схеме подобен SNOW 2.0.

(Разница в длине секретного ключа и вектора инициализации. Так же SNOW 2.0 ориентирован на на использование в 32-разрядных вычислительных систем, а STRUMOK в 64-разрядных).

Небольшой итог

Данный шифр, конечно, не идеальный.. А кто идеален? Но он современный и, я думаю, у него есть будущее. Проблема безопасной передачи данных как была актуальной, так и является до сих пор!