Введение

Все известные атаки вычислительно невозможны, и ни одна из них не затрагивает полный 32-раундовый Serpent. В 2011 году была разработана атака, взламывающая 11 раундов Serpent (для всех размеров ключей) с использованием 2<sup>116</sup> известных открытых текстов, требующая 2<sup>107.5</sup> времени и 2<sup>104</sup> памяти (как описано в…). Serpent был разработан Россом Андерсоном, Эли Бихамом и Ларсом Кнудсеном. Как и другие кандидаты на конкурс AES, Serpent имеет размер блока 128 бит и поддерживает размеры ключей 128, 192 или 256 бит. Шифр представляет собой 32-раундовую сеть подстановок и перестановок, работающую с блоком, состоящим из четырех 32-битных слов. Каждый раунд применяет один из восьми 4-битных S-блоков 32 раза параллельно. Serpent был разработан таким образом, чтобы все операции могли выполняться параллельно, используя 32-битные срезы. Это максимизирует параллелизм, но также позволяет использовать обширные исследования в области криптоанализа, проведенные для DES. Serpent придерживался консервативного подхода к безопасности, выбирая большой запас прочности: разработчики сочли 16 раундов достаточными против известных типов атак, но указали 32 раунда в качестве страховки от будущих открытий в криптоанализе. В официальном отчете NIST о конкурсе AES Serpent был классифицирован как имеющий высокий запас прочности, как MARS и Twofish, в отличие от адекватного запаса прочности RC6 и Rijndael (в настоящее время AES). Референсный код является программным обеспечением, находящимся в общественном достоянии, а оптимизированный код лицензирован под GPL. Отсутствуют какие-либо ограничения или обременения в отношении его использования. В результате любой может свободно включать Serpent в свое программное обеспечение (или в аппаратные реализации) без уплаты лицензионных сборов.

Основные графики

График формирования ключа Serpent состоит из 3 основных этапов. На первом этапе ключ инициализируется путем добавления дополнения, если это необходимо. Это делается для того, чтобы короткие ключи соответствовали длинным ключам длиной 256 бит: к концу короткого ключа добавляется бит "1", за которым следуют биты "0" до достижения длины длинного ключа. Именно поэтому Rijndael был выбран победителем в конкурсе AES.

Змея-0 против Змеи-1

Оригинальный Serpent, Serpent 0, был представлен на 5-м семинаре по быстрому программному шифрованию, но несколько измененная версия, Serpent 1, была представлена на конкурс AES. В статье, представленной на конкурс AES, обсуждаются эти изменения, включая отличия в алгоритме формирования ключа.

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

Атака XSL, если она будет эффективной, ослабит Serpent (хотя и не так сильно, как Rijndael, который стал AES). Однако многие криптоаналитики считают, что с учетом особенностей реализации атака XSL окажется дороже, чем атака полным перебором. В 2000 году в статье Коно и др. представлена атака «встреча посередине» против 6 из 32 раундов Serpent и усиленная бумеранговая атака против 9 из 32 раундов Serpent. В 2001 году атака Эли Бихама, Орра Дункельмана и Натана Келлера представляет собой атаку линейного криптоанализа, которая взламывает 10 из 32 раундов Serpent 128, используя 2118 известных открытых текстов и требуя 289 единиц времени, а также 11 раундов Serpent 192/256, используя 2118 известных открытых текстов и 2187 единиц времени. В статье 2009 года было отмечено, что нелинейный порядок S-блоков Serpent не равен 3, как утверждали разработчики. В частности, четыре элемента имели порядок 2. В 2011 году атака Хунцзюна Ву, Хуасионга Ван и Фуонг Ха Нгуен, также использующая линейный криптоанализ, взламывает 11 раундов Serpent 128, используя 2116 известных открытых текстов, 2107,5 единиц времени и 2104 единицы памяти. В той же статье также описаны две атаки, которые взламывают 12 раундов Serpent 256. Первая требует 2118 известных открытых текстов, 2228,8 единиц времени и 2228 единиц памяти. Другая атака требует 2116 известных открытых текстов и 2121 единицы памяти, но также требует 2237,5 единиц времени.