Jump to content

Змей (шифр)

Змея
Стадия линейного смешивания Serpent
Общий
Дизайнеры Росс Андерсон , Эли Бихам , Ларс Кнудсен
Впервые опубликовано 1998-08-21
Получено из Квадрат
Сертификация финалист AES
Деталь шифрования
Размеры ключей 128, 192 или 256 бит
Размеры блоков 128 бит
Структура Сеть замены-перестановки
Раунды 32
Лучший публичный криптоанализ
Все общеизвестные атаки вычислительно неосуществимы, и ни одна из них не затрагивает полный 32-раундовый Змей. Атака 2011 года разбивает 11-раундовый Змей (все размеры ключей) с помощью 2 116 известные открытые тексты, 2 107.5 время и 2 104 память (как описано в [1] ). В той же статье описаны две атаки, которые разрушают 12 снарядов Змея-256. Для первого требуется 2 118 известные открытые тексты, 2 228.8 время и 2 228 память. Другая атака требует 2 116 известные открытые тексты и 2 121 памяти, но также требует 2 237.5 время.

Serpent — это с симметричным ключом блочный шифр , который был финалистом конкурса Advanced Encryption Standard (AES) , в котором он занял второе место после Rijndael . [2] Змей был разработан Россом Андерсоном , Эли Бихамом и Ларсом Кнудсеном . [3]

Как и другие материалы AES , Serpent имеет размер блока 128 бит и поддерживает размер ключа 128, 192 или 256 бит. [4] Шифр работающую представляет собой 32-раундовую сеть подстановки-перестановки, на блоке из четырех 32-битных слов . В каждом раунде один из восьми 4-битных S-блоков применяется 32 раза параллельно. Serpent был разработан таким образом, чтобы все операции могли выполняться параллельно , используя 32- битные срезы . Это максимизирует параллелизм, но также позволяет использовать обширную работу по криптоанализу, выполненную на DES .

Serpent придерживался консервативного подхода к безопасности, отдавая предпочтение большому запасу безопасности: разработчики посчитали, что 16 раундов достаточно для защиты от известных типов атак, но указали 32 раунда в качестве страховки от будущих открытий в криптоанализе. [5] В официальном отчете NIST о конкуренции AES Serpent классифицируется как имеющий высокий уровень безопасности, такой как MARS и Twofish , и в отличие от достаточного уровня безопасности RC6 и Rijndael (в настоящее время AES). [2] В итоговом голосовании у Serpent было наименьшее количество отрицательных голосов среди финалистов, но он занял второе место в общем зачете, поскольку у Rijndael было значительно больше положительных голосов, причем решающим фактором было то, что Rijndael позволил гораздо более эффективно реализовать программное обеспечение. [ нужна ссылка ]

Алгоритм шифрования Serpent находится в открытом доступе и не запатентован . [6] Эталонный код является общедоступным программным обеспечением , а оптимизированный код распространяется под лицензией GPL . [7] Никаких ограничений и обременений относительно его использования нет. В результате каждый может включить Serpent в свое программное обеспечение (или в аппаратные реализации) без уплаты лицензионных сборов.

Ключевое расписание [ править ]

Расписание ключей Змея состоит из 3 основных этапов. На первом этапе ключ инициализируется путем добавления при необходимости дополнения. Это сделано для того, чтобы короткие ключи сопоставлялись с длинными ключами длиной 256 бит: к концу короткого ключа добавляется один бит «1», за которым следуют биты «0», пока короткий ключ не будет сопоставлен с длинным ключом. [4]

На следующем этапе «предварительные ключи» получаются с использованием ранее инициализированного ключа. 32-битные части ключа подвергаются операции XOR, FRAC , который представляет собой долю золотого сечения , и индекс раунда подвергаются операции XOR с частями ключа, результат операции XOR поворачивается влево на 11. FRAC и индекс раунда были добавлены для достижения равномерное распределение битов ключей во время раундов. [4]

Наконец, «подключи» получаются из ранее сгенерированных «предварительных ключей». В результате всего получается 33 128-битных «подключа». [4]

В конце раундовый ключ или «подключ» помещается в «начальный IP-адрес перестановки», чтобы поместить ключевые биты в правильный столбец. [4]

Расписание клавиш в C++ [ править ]

#define FRAC 0x9e3779b9     //  fractional part of the golden ratio
#define ROTL(A, n) ((A) << n | (A) >> 32-n)

uint32_t key[8];        // key provided by user
uint32_t subkey[33][4]; // roundkeys
const uint8_t S[8][16] = {}; // S-boxes

/* key schedule: get prekeys */
void get_pre(uint32_t w[4*33], const uint32_t k[8]) {
    uint32_t x[4*33+8];
    for (int i = 0; i < 8; i++)
        x[i] = k[i];
    for (int i = 8; i < 140; i++) {
        x[i] = ROTL(x[i-8] ^ x[i-5] ^ x[i-3] ^ x[i-1] ^ FRAC ^ (i-8), 11);
        w[i-8] = x[i];
    }
}

/* key schedule: get subkeys */
void get_sk(const uint32_t w[4*33], uint32_t (*sk)[4]) { 

	uint8_t i, p, j, s, k;
	
	for (i = 0; i < 33; i++) {
		p = 32 + 3 - i;
        for (j = 0; j < 4; j++)
            sk[i][j] = 0;
		for (k = 0; k < 32; k++) {
			s = S[p % 8][((w[4 * i + 0] >> k) & 0x1) << 0 |
						 ((w[4 * i + 1] >> k) & 0x1) << 1 |
						 ((w[4 * i + 2] >> k) & 0x1) << 2 |
						 ((w[4 * i + 3] >> k) & 0x1) << 3 ];
			for (j = 0; j < 4; j++) {
				sk[i][j] |= ((s >> j) & 0x1) << k;
			}
		}
	}
}

void key_schedule() {
    uint32_t w[4*33];
    get_pre(w, key);
    get_sk(w, subkey);
}

S-Box [ править ]

S-блоки Serpent представляют собой 4-битные перестановки и подчиняются следующим свойствам:

  • разница на входе в 1 бит никогда не приведет к разнице на выходе в 1 бит, вероятность дифференциальной характеристики составляет 1:4 или меньше. [8]
  • линейные характеристики имеют вероятность от 1:2 до 1:4, линейная связь между входными и выходными битами имеет вероятность от 1:2 до 1:8. [8]
  • нелинейный порядок выходных битов как функция входных битов равен 3. Однако были обнаружены выходные биты, которые в зависимости от входных битов имеют порядок только 2. [8]

S-блоки Serpent созданы на основе 32 строк S-блоков DES . Они были преобразованы путем замены записей, в результате чего массивы с желаемыми свойствами были сохранены как S-блоки Serpent. Этот процесс повторялся до тех пор, пока не было найдено в общей сложности 8 s-блоков. В этом процессе использовался следующий ключ: "sboxesforserpent". [4]

Перестановки и преобразования [ править ]

Начальная перестановка (ИП) [ править ]

Первоначальная перестановка работает с 128 битами за раз, перемещая биты.

for i in 0 .. 127
    swap( bit(i), bit((32 * i) % 127) )

Окончательная перестановка (ФП) [ править ]

Последняя перестановка работает с 128 битами за раз, перемещая биты.

for i in 0 .. 127
    swap( bit(i), bit((4 * i) % 127) )

Линейное преобразование (LT) [ править ]

Состоит из операций XOR, S-Box, битового сдвига влево и битового поворота влево. Эти операции выполняются над четырьмя 32-битными словами.

for (short i = 0; i < 4; i++) {
    X[i] = S[i][B[i] ^ K[i]];
}
X[0] = ROTL(X[0], 13);
X[2] = ROTL(X[2], 3 );
X[1] = X[1] ^ X[0] ^ X[2];
X[3] = X[3] ^ X[2] ^ (X[0] << 3);
X[1] = ROTL(X[1], 1 );
X[3] = ROTL(X[3], 7 );
X[0] = X[0] ^ X[1] ^ X[3];
X[2] = X[2] ^ X[3] ^ (X[1] << 7);
X[0] = ROTL(X[0], 5 );
X[2] = ROTL(X[2], 22);
for (short i = 0; i < 4; i++) {
    B[i + 1] = X[i];
}

Рейндал против Змея [ править ]

Rijndael — это сеть преобразования с линейным замещением с десятью, двенадцатью или четырнадцатью раундами, в зависимости от размера ключа, и с размерами ключей 128 бит, 192 бит или 256 бит, определяемыми независимо. Serpent — это сеть замен-перестановок, состоящая из тридцати двух раундов, а также начальной и конечной перестановок для упрощения оптимизированной реализации. Функция округления в Rijndael состоит из трех частей: нелинейного уровня, уровня линейного смешивания и слоя XOR смешивания ключей. Функция раунда в Serpent состоит из XOR для смешивания ключей, тридцати двух параллельных приложений одного и того же S-блока 4×4 и линейного преобразования, за исключением последнего раунда, в котором линейное преобразование заменяется другим XOR для смешивания ключей. Нелинейный слой в Rijndael использует S-блок 8×8, тогда как Serpent использует восемь различных S-блоков 4×4. 32 раунда означают, что у Serpent более высокий запас прочности, чем у Rijndael; однако Rijndael с 10 раундами быстрее и проще реализовать для небольших блоков. [9] Таким образом, Rijndael был выбран победителем конкурса AES.

Змей-0 против Змея-1 [ править ]

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

Безопасность [ править ]

Атака XSL , если бы она была эффективной, ослабила бы Serpent (хотя и не так сильно, как ослабила бы Rijndael , ставшую AES ). Однако многие криптоаналитики считают, что если принять во внимание соображения реализации, атака XSL будет более дорогостоящей, чем атака методом перебора . [ нужна ссылка ]

В 2000 году статья Коно и др. представляет собой атаку «встреча посередине» против 6 из 32 раундов Змея и усиленную атаку бумерангом против 9 из 32 раундов Змея. [10]

Атака 2001 года, проведенная Эли Бихамом , Орром Данкельманом и Натаном Келлером, представляет собой атаку линейного криптоанализа , которая взламывает 10 из 32 раундов Serpent-128 с помощью 2 118 известные открытые тексты и 2 89 время, и 11 раундов Змея-192/256 с 2 118 известные открытые тексты и 2 187 время. [11]

В статье 2009 года было отмечено, что нелинейный порядок S-блоков Serpent не равен 3, как утверждали дизайнеры. В частности, четыре элемента имели порядок 2. [8]

Атака Хонгджун Ву, Хуаксьонга Вана и Фуонг Ха Нгуена в 2011 году, также использующая линейный криптоанализ, взломала 11 раундов Serpent-128 с помощью 2 116 известные открытые тексты, 2 107.5 время и 2 104 память. [1]

В той же статье описаны две атаки, которые разрушают 12 снарядов Змея-256. Для первого требуется 2 118 известные открытые тексты, 2 228.8 время и 2 228 память. Другая атака требует 2 116 известные открытые тексты и 2 121 памяти, но также требует 2 237.5 время.

См. также [ править ]

  • Tiger — хэш-функция тех же авторов

Сноски [ править ]

  1. Перейти обратно: Перейти обратно: а б Хуасюн Ван, Хонгджун Ву и Фуонг Ха Нгуен (2011). «Улучшение алгоритма 2 в многомерном линейном криптоанализе» (PDF) . Информационная безопасность и конфиденциальность . Конспекты лекций по информатике. Том. 6812. ACISP 2011. стр. 61–74. дои : 10.1007/978-3-642-22497-3_5 . ISBN  978-3-642-22496-6 . Архивировано из оригинала (PDF) 14 апреля 2017 года . Проверено 25 сентября 2014 г.
  2. Перейти обратно: Перейти обратно: а б Нечватал, Дж.; Баркер, Э.; Бэшем, Л.; Берр, В.; Дворкин, М.; Фоти, Дж.; Робак, Э. (май 2001 г.). «Отчет о разработке расширенного стандарта шифрования (AES)» . Журнал исследований Национального института стандартов и технологий . 106 (3): 511–577. дои : 10.6028/jres.106.023 . ISSN   1044-677X . ПМЦ   4863838 . ПМИД   27500035 .
  3. ^ «Домашняя страница Змеи» .
  4. Перейти обратно: Перейти обратно: а б с д и ж Росс Дж. Андерсон (23 октября 2006 г.). «Змей: кандидат на блочный шифр для расширенного стандарта шифрования» . Компьютерная лаборатория Кембриджского университета . Проверено 14 января 2013 г.
  5. ^ "змей.pdf" (PDF) . Проверено 25 апреля 2022 г.
  6. ^ Змей держит ключ к интернет-безопасности - объявлены финалисты всемирного конкурса шифрования (1999 г.)
  7. ^ SERPENT - кандидат на блочный шифр для расширенного стандарта шифрования «Serpent теперь полностью находится в свободном доступе, и мы не налагаем никаких ограничений на его использование. Об этом было объявлено 21 августа на Первой кандидатской конференции AES. Оптимизированные реализации в пакет отправки теперь находится под лицензией General Public License (GPL), хотя некоторые комментарии в коде по-прежнему говорят об обратном. Вы можете использовать Serpent для любого приложения. Если вы его используете, мы будем признательны, если вы сообщите нам об этом! " (1999)
  8. Перейти обратно: Перейти обратно: а б с д Бхупендра Сингх; Лекси Александр; Санджай Бурман (2009). «Об алгебраических отношениях змеиных S-блоков» (PDF) . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  9. ^ Брюс Шнайер; Джон Келси; Дуг Уайтинг; Дэвид Вагнер; Крис Холл. Нильс Фергюсонк; Тадаёси Коно; Майк Стэй (2000). «Заключительные комментарии команды Twofish по выбору AES» (PDF) . Архивировано из оригинала (PDF) 2 января 2010 года . Проверено 19 января 2015 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  10. ^ Тадаёси Коно; Джон Келси и Брюс Шнайер (2000). «Предварительный криптоанализ змеи уменьшенной круглой формы» . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  11. ^ Эли Бихам, Орр Данкельман и Натан Келлер (2001). «Линейный криптоанализ уменьшенного круглого змея». ФСЕ 2001. CiteSeerX   10.1.1.78.6148 . {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: c1bca22900225c69c1971cda216fbb87__1717840440
URL1:https://arc.ask3.ru/arc/aa/c1/87/c1bca22900225c69c1971cda216fbb87.html
Заголовок, (Title) документа по адресу, URL1:
Serpent (cipher) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)