Это не официальный сайт wikipedia.org 01.01.2023

SOSEMANUK — Википедия

Sosemanuk — синхронный поточный шифр, разработанный в ноябре 2004 года группой французских учёных во главе с Комом Бербеном (фр. Côme Berbain)[1]. В апреле 2008 года стал одним из финалистов проекта eStream по профилю 1 (высокоэффективные поточные шифры для программной реализации)[2]. Согласно портфолио проекта eStream, Sosemanuk представляет собой полностью свободное программное обеспечение с открытым исходным кодом, которое может быть использовано для любых целей, включая коммерческие[3].

АннотацияПравить

В основе Sosemanuk лежит поточный шифр SNOW 2.0 и усечённый вариант блочного шифра SERPENT. Его длина ключа варьируется между 128 и 256 битами, а для инициализации используется 128-битное начальное значение (англ. initial value). Как утверждают авторы шифра, любая длина ключа обеспечивает 128-битную безопасность.[4]

Шифр устойчив ко всем известным видам атак. Самая успешная атака на Sosemanuk оценивалась 2138 порядком сложности, что, тем не менее, хуже заявленной сложности в 128 бит[5].

В реализации шифра Sosemanuk были исправлены некоторые структурные недостатки SNOW 2.0, а также увеличена производительность за счёт уменьшения размера внешних и статических данных.

Общая схема работыПравить

 
схема работы SNOW 2.0

Как и поточный шифр SNOW, алгоритм Sosemanuk использует два основных понятия: регистр сдвига с линейной обратной связью (LFSR) и конечный автомат (FSM). Так, данные, полученные с помощью LFSR, поступают на вход FSM, где происходит их нелинейное преобразование. Затем к четырём выходным значениям конечного автомата применяется табличная замена (S-box) и XOR с соответствующими значениями регистра сдвига. Расписание ключей для шифра составляется с помощью примитива Serpent24 — усечённого варианта SERPENT. Кроме того, выходные значения двенадцатого, восемнадцатого и двадцать четвёртого раунда Serpent24 используются для инъекции начального значения: задания состояния LSM и регистров FSM.[4]

Следует заметить, что Sosemanuk использует регистр сдвига длины 10, тогда как в SNOW его длина равнялась шестнадцати. Кроме того, в FSM операция применения S-box заменена на операцию Trans, представляющую собой умножение над 32-битным полем и последующий побитовый циклический сдвиг.[6]

Спецификация[4]Править

Sosemanuk использует два основных понятия шифра SNOW: регистр сдвига с линейной обратной связью (LFSR) и конечный автомат (FSM). Кроме того, используются два примитива из алгоритма SERPENT: serpent1 и serpent24.

Serpent1 — один раунд SERPENT, без смешивания с ключом и линейного преобразования. Представляет собой использование таблицы подстановок (S-box), при этом входные 128 бит, разбитые на четыре 32-битных слова, преобразуются в выходные четыре 32-битных слова.

Serpent24 — алгоритм SERPENT, использующий 24 раунда из 32. Последний раунд является полным, при этом включает в себя линейное преобразование и XOR с 25-м раундовым ключом. В Sosemanuk используется для инициализации в режиме шифрования.

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

 
LFSR algorithm

Sosemanuk использует линейный регистр сдвига длины 10 над конечным 32-битным полем F 2 32 [ X ]  .

В начальный момент времени t = 0   происходит инициализация регистра сдвига 32-битными значениями s 1 , s 2 , . . . , s 10  . Затем, на каждом шаге вычисляется новое значение по формуле:

s t + 10 = s t + 9 α 1 s t + 3 α s t  .

Обратная связь регистра сдвига задается многочленом:

π ( X ) = α X 10 + α π 1 X 7 + X + 1 F 2 32 [ X ]  

Здесь α   — корень примитивного многочлена над полем F 2 8 [ X ]  :

P ( X ) = X 4 + β 23 X 3 + β 245 X 2 + β 48 X + β 239  

β   — корень примитивного многочлена над полем F 2 [ X ]  :

Q ( X ) = X 8 + X 7 + X 5 + X 3 + 1  

Поле F 2 8 [ X ]   представляет собой отношение F 2 [ X ] / Q ( X )  , а конечное поле F 2 32 [ X ]   получается из отношения F 2 8 [ X ] / P ( X )  . Последовательность ( s t ) t > 1   является периодической с максимальным периодом 2 320 1  .

 
Выходное преобразования Sosemanuk

Конечный автоматПравить

Sosemanuk использует конечный автомат с 64 битами памяти, что соответствует двум 32-битным регистрам R 1   и R 2  . Он принимает на вход несколько значений, полученных с помощью LFSR, обновляет регистры, после чего выдаёт 32-битное значение f t   по схеме:

F S M t : ( R 1 t 1 , R 2 t 1 , s t + 1 , s t + 8 , s t + 9 ) ( R 1 t , R 2 t , f t )  

R 1 t = { ( R 2 t 1 + s t + 1 ) m o d 2 32 , l s b ( R 1 t 1 ) = 0 ( R 2 t 1 + s t + 1 s t + 8 ) m o d 2 32 , l s b ( R 1 t 1 ) = 1  

R 2 t = T r a n s ( R 1 t 1 )  

f t = ( s t + 9 + R 1 t m o d 2 32 ) R 2 t  

l s b ( X )   — последний значащий бит X   (используется little-endian нотация).

T r a n s ( X ) = ( M × X m o d 2 32 ) 7  

M = 0 x 54655307   (шестнадцатеричная запись первых десяти знаков числа π)

  — побитовый циклический сдвиг.

Выходное преобразованиеПравить

К четырём выходным значениям конечного автомата применяется алгоритм Serpent1, после чего к результату и соответствующим значениям, полученным из регистра сдвига, применяется операция XOR:

( z t + 3 , z t + 2 , z t + 1 , z t ) = S e r p e n t 1 ( f t + 3 , f t + 2 , f t + 1 , f t ) ( s t + 3 , s t + 2 , s t + 1 , s t )  

Схема шифрованияПравить

 
Схема шифрования

Для получения выходных значений используется связка LFSR и FSM. В начальный момент времени t = 0   LFSR инициализируется значениями s 1 , s 2 , . . . , s 10  , а в регистры FSM записываются значения R 1 0  и R 2 0  . В момент времени t 1   выполняются следующие действия:

  1. Обновление FSM: вычисляются значения R 1 t  , R 2 t   и f t  , исходя из известных R 1 t 1  , R 2 t 1  , s t + 1  , s t + 8   и s t + 9  .
  2. Обновление LFSR: вычисляется s t + 10  , значение s t   переходит во внутренний буфер, регистр сдвига сдвигается.

Каждые четыре шага из промежуточных значений f t  , f t + 1  , f t + 2  , f t + 3   и значений внутреннего буфера s t + 1  , s t + 1  , s t + 1  , s t + 1   посредством применения Serpent1 и XOR вычисляются итоговые значения z t + 3 , z t + 2 , z t + 1 , z t .   Авторы шифра рекомендуют шифровать группы по четыре байта, используя при этом прямой (little-endian) порядок байтов для увеличения производительности.

Расписание ключей и введение начального значенияПравить

В шифре Sosemanuk процесс инициализации происходит в два этапа:

  • Задается расписание ключей (key schedule), в котором секретный ключ не зависит от начального значения
  • Вводится начальное значение (IV injection), при этом используется заданное расписание ключей и IV. Таким образом, происходит инициализация внутреннего состояния поточного шифра.

Key sheduleПравить

Расписание ключей шифра Sosemanuk задается с помощью Serpent24, который предоставляет 25 128-битных раундовых ключей. Эти ключи идентичны первым 25 ключам, полученным из расписания ключей SERPENT. Несмотря на то, что можно задать ключ любой длины от 128 до 256, шифр обеспечивает лишь 128-битную безопасность, вследствие чего длина ключа 128 считается стандартной.

IV injectionПравить

Для введения IV используются выходные значения двенадцатого, восемнадцатого и двадцать четвёртого раунда Serpent24.

( Y 3 12 , Y 2 12 , Y 1 12 , Y 0 12 )   — выходные значения 12-го раунда

( Y 3 18 , Y 2 18 , Y 1 18 , Y 0 18 )   — выходные значения 18-го раунда

( Y 3 24 , Y 2 24 , Y 1 24 , Y 0 24 )   — выходные значения 24-го раунда

Начальные значения LFSR и FSM:

( s 7 , s 8 , s 9 , s 10 ) = ( Y 3 12 , Y 2 12 , Y 1 12 , Y 0 12 )  

( s 5 , s 6 ) = ( Y 1 18 , Y 3 18 )  

( s 1 , s 2 , s 3 , s 4 ) = ( Y 3 24 , Y 2 24 , Y 1 24 , Y 0 24 )  

R 1 0 = Y 0 18  

R 2 0 = Y 2 18  

Известные атакиПравить

Атаки, предусмотренные разработчиками[4]Править

Компромисс времени и данныхПравить

Атака компромисса времени и данных (англ. Time-memory-data tradeoff attack) основана на предположении, что злоумышленнику известен алгоритм шифрования и выходное значение. Авторы шифра рассматривают случай восстановления пары «ключ — начальное значение». В связи с 128-битной длиной ключа и такой же длиной начального значения сложность такой атаки оценивается 2128 количеством операций.

«Предполагай и определяй»Править

Атака «Предполагай и определяй» (англ. Guess and determine attack) основана на утверждении, что, предполагая значения нескольких ключей, злоумышленник может восстановить все внутреннее состояние. Авторы шифра рассматривают данный вид атаки в предположении, что злоумышленник получает значения шести 32-битных ключей. В этом случае сложность атаки составляет 256 бит.

Корреляционная атакаПравить

По утверждению авторов, известные корреляционные атаки (англ. Correlation attacks) на шифр SNOW не имеет смысла применять к шифру Sosemanuk, в связи с тем, что линейные соотношения входных и выходных данных не сохраняются после применения алгоритма Serpent1.

Различающая атакаПравить

В описании шифра рассмотрены известные на момент разработки различающие атаки (англ. Distinguishing attacks) на шифр SNOW. В явном виде они не могут быть применены к Sosemanuk из-за сложности подбора маски после применения Serpent1.

Алгебраическая атакаПравить

Разработчики шифра считают, что ни одна из известных на момент разработки алгебраических атак (англ. Algebraic attacks) не применима к шифру ввиду невозможности явно вычислить алгебраическую иммунность (англ. algebraic immunity) выходных функций от входных значений.

Новые атакиПравить

После того, как шифр стал широко известен в криптографическом сообществе, в литературе было опубликовано несколько новых атак на Sosemanuk. Тем не менее, изначально заявленная сложность в 128 бит так и не была взломана.http://www.ecrypt.eu.org/stream/e2-sosemanuk.html[5]

Guess-and-Determine Attack, 2006[7]Править

В 2006 году коллектив учёных из Японии и Ирана, Юкиясу Цуно (Yukiyasu Tsunoo) Теруо Сайто (Teruo Saito) и др., представили атаку «Предполагай и определяй» сложностью 2224. Для её осуществления необходимо знать 16 слов ключевого потока. При этом, увеличение длины ключа ведет к уменьшению сложности атаки.

Атака основывается на предположении, что последний значащий бит в регистре R 1 t 1   конечного автомата в момент времени t   равен нулю. Если при t = 1   это утверждение не выполняется, взломать шифр данным способом не получится.

Для осуществления атаки необходимо предположить значения s 1 , s 2 , s 3 , s 4 , R 1 0 , R 2 0 , s 7 , s 8 .  

Using Linear Masks Attack, 2008[8]Править

В 2008 году на конференции ASIACRYPT[en] учёные из Кореи Юнг-Кеун Ли, Донг Хун Ли и Парк Сангву представили корреляционную атаку на Sosemanuk с помощью использования метода линейной маски (linear masking method). Сложность такой атаки составляла 2148, и внутреннее 384-битное состояние восстанавливалось с вероятностью 99 %. Для проведения атаки используется линейная аппроксимация с коэффициентом корреляции 2−21.41, построенная по словам ключевого потока и начальному состоянию регистра сдвига. При этом, начальное состояние LFSR восстанавливается с помощью быстрого преобразования Уолша.

ПримечанияПравить

  1. Sosemanuk Algorithm forencryption and decryption Video on Demand (VoD) (PDF Download Available) (англ.). ResearchGate. Дата обращения: 14 октября 2017. Архивировано 15 октября 2017 года.
  2. The eSTREAM portfolio page (англ.). www.ecrypt.eu.org. Дата обращения: 14 октября 2017. Архивировано 13 февраля 2017 года.
  3. The eSTREAM Project - eSTREAM Phase 3  (неопр.). www.ecrypt.eu.org. Дата обращения: 14 октября 2017. Архивировано 4 сентября 2012 года.
  4. 1 2 3 4 Архивированная копия  (неопр.). Дата обращения: 7 декабря 2010. Архивировано 27 мая 2011 года.
  5. 1 2 The eSTREAM portfolio page (англ.). www.ecrypt.eu.org. Дата обращения: 16 декабря 2017. Архивировано 5 апреля 2016 года.
  6. Patrik Ekdahl and Thomas Johansson. A New Version of the Stream Cipher SNOW (англ.) // Springer-Verlag Berlin Heidelberg 2003. Архивировано 14 декабря 2017 года.
  7. [http://www.ecrypt.eu.org/stream/papersdir/2006/009.pdf Evaluation of SOSEMANUK With Regard to Guess-and-Determine Attacks] (англ.) // eSTREAM portfolio. Архивировано 13 января 2017 года.
  8. [https://link.springer.com/content/pdf/10.1007%2F978-3-540-89255-7.pdf Cryptanalysis of Sosemanuk and SNOW 2.0 Using Linear Masks] (англ.) // J. Pieprzyk (Ed.): ASIACRYPT 2008, LNCS 5350, pp. 524–538, 2008..

ЛитератураПравить