Введение
Блок-шифр
В криптографии ICE (Information Concealment Engine) — это симметричный блочный шифр, опубликованный Мэтью Кваном в 1997 году. Алгоритм по структуре схож с DES, но с добавлением ключевой зависимой битовой перестановки в раундовой функции. Ключевая зависимая битовая перестановка эффективно реализована в программном обеспечении. Алгоритм ICE не запатентован, а исходный код переведен в общественное достояние. ICE — это сеть Фейстеля с размером блока 64 бита. Стандартный алгоритм ICE использует 64-битный ключ и состоит из 16 раундов. Быстрый вариант, Thin ICE, использует только 8 раундов. Открытый вариант, ICE n, использует 16n раундов с 64n-битным ключом. Ван Ромпай и др. (1998) попытались применить дифференциальный криптоанализ к ICE. Они описали атаку на Thin ICE, которая позволяет восстановить секретный ключ, используя 223 выбранных открытых текста с вероятностью успеха 25%. При использовании 227 выбранных открытых текстов вероятность может быть увеличена до 95%. Для стандартной версии ICE была найдена атака на 15 из 16 раундов, требующая 2<sup>56</sup> операций и не более 256 выбранных открытых текстов.
Структура
ICE - это сеть Фейстеля из 16 раундов. Каждый раунд использует 32→32-битную F-функцию, которая использует 60 бит ключевого материала. Структура F-функции в некоторой степени напоминает DES: вход расширяется за счет использования перекрывающихся полей, расширенный вход складывается по модулю 2 (XOR) с ключом, а результат подается в ряд редуцирующих S-блоков, которые отменяют расширение. Сначала ICE разделяет входные данные на 4 перекрывающихся 10-битных значения. Это биты 30, 31 и 0–7 для первого 10-битного значения, а для последующих значений – 6–15, 14–23 и 22–31. Вторым этапом является ключевая перестановка, уникальная для ICE. Используя 20-битный подключ, биты меняются местами между половинами 40-битного расширенного ввода. (Если бит подключа i равен 1, то биты i и i+20 меняются местами.) Третьим этапом является сложение по модулю 2 (XOR) 40-битного значения с еще 40 битами подключа. Четвертым этапом является прохождение значения через 4 10-битных S-блока, каждый из которых выдает 8 бит выходных данных. (Эти блоки значительно больше, чем 8 S-блоков 6→4 бита в DES.) Пятым этапом является перестановка выходных битов S-блоков таким образом, чтобы выходы каждого S-блока направлялись в каждое 4-битное поле 32-битного слова, включая 2 из 8 "перекрывающихся" битов, дублируемых во время расширения следующего раунда. Как и в DES, программная реализация обычно хранит S-блоки предварительно переставленными в 4 таблицах поиска размером 1024×32 бита.