SHARK ( — безопасный хеширующий алгоритм с воссоздающимися ключами) — симметричный алгоритм блочного шифрования, разработанный группой криптографов, среди которых Винсент Рэймен, — автор шифра AES. В теории позволяет использовать блоки и ключи различной длины, однако авторская реализация использует 128-битный ключ и 64-битные блоки. Структура схожа со структурой подстановочно-перестановочной сети.

История SHARK Шифр SHARK — первый в серии алгоритмов, разработанных в ходе исследования по созданию безопасных и эффективных алгоритмов блочного шифрования на основе метода Wide Trail design strategy. Результатом исследования позже стало создание стандартного шифра AES.

Авторы позиционировали SHARK как алгоритм, призванный заменить широко распространенный в то время шифр DES. К новому алгоритму были предъявлены следующие требования: высокая производительность — небольшое число раундов. Для сравнения, в шифре DES использовалось 16 раундов. По словам автором, им удались достичь более чем четырёхкратного ускорения по сравнению с шифрами SAFER и IDEA; неуязвимость для линейного и дифференциального криптоанализа, для которых был уязвим DES. Хотя до этого уже существовали шифры на основе SP-сети (MMB, SAFER, 3-Way), SHARK впервые использовал MDS-коды для линейного преобразования, а именно коды Рида-Соломона.

Существует два варианта шифра SHARK: SHARK-A () и SHARK-E (), получившие название благодаря различным способам введения раундовых ключей.

Дизайн алгоритма

Алгоритм SHARK состоит из трех компонентов: нелинейный слой — основан на S-блоках; слой диффузии — основан на MDS-кодахMDS-коды — коды с наибольшим кодовым расстоянием; расписание ключей для получения раундовых ключей из исходного ключа. Каждый компонент алгоритма рассматривается отдельно и каждый должен обладать определёнными свойствами. Так, слой диффузии должен обладать равномерными и хорошими диффузионными свойствами. Нелинейный слой также должен обладать равномерными нелинейными свойствами, причем компоненты алгоритма независимы в следующем смысле: при изменении реализации, например, нелинейного слоя (одни S-блоки заменяются другими S-блоками c такими же характеристиками), защищенность алгоритма остается неизменной. Такая стратегия является вариантом Wide trail strategy, описанной в докторской диссертации Йоана Даймена.

SHARK состоит из раундов, дополнительного слоя добавления ключа и дополнительно слоя инвертированной диффузии. Каждый раунд, в свою очередь, состоит из добавления ключа, нелинейной замены и слоя диффузии. Дополнительный слой добавления ключа нужен для того, чтобы злоумышленник не смог отделить последний раунд. Дополнительный слой инвертированной диффузии необходим для упрощения операции дешифрования.

Слой нелинейный замены состоит из S-блоков, каждый из которых представляет собой -битную перестановку. Таким образом, алгоритм способен шифровать блоки длиной .

Слой диффузии На вход слою диффузии приходят -битных чисел, которые можно рассматривать как элементы над полем . Рассматриваемый слой необходим для создания лавинного эффекта. Этот эффект проявляется в линейном и разностном контекстах: Линейный контекст — нет корреляции между линейной комбинации небольшого набора -битных входных данных и линейной комбинации небольшого набора (-битных) выходных данных. Разностный контекст — небольшое изменение входных данных влечет значительное изменение данных на выходе, и наоборот, для небольшого изменения выходных данных нужно значительно изменить входные данные. Пусть  — обратимое линейное преобразование,  — элемент поля ,  — расстояние Хэмминга, тогда количественно лавинный эффект оценивается числом скачка () .

Если , то . называют оптимальным числом скачка (). В основной статье авторы показали, что с помощью MDS-кодов можно сконструировать обратимое линейное преобразование с оптимальном числом скачка. В реализации используются коды Рида-Соломона.

Нелинейный слой (блоки подстановок) Нелинейные S-блоки обеспечивают защиту от линейного и дифференциального криптоанализов. Одним из важных численных характеристик безопасности шифра служит матрица эксклюзивных ИЛИ () отображения , элементы которой определяются по формуле , где  — обозначает число удовлетворяющих условию элементов,  — элементы поля . Большие значения элементов матрицы могут привести к восприимчивости шифра к дифференциальной атаке.

Авторами были выбраны S-блоки, основанные на отображении над полем . В этом случае при четном матрица обладает следующими свойствами: Дифференциальная 4-стабильность — все элементы матрицы не превосходят 4. В действительности, в каждой строке такой матрицы присутствует ровно один элемент, равный 4, а остальные равны 2 либо 0. Минимальное расстояние аффинной функции равно . Нелинейный порядок любой линейной комбинации выходных битов равен . Для того чтобы удалить фиксированные точки и , используется обратимое аффинное преобразование выходных бит.

Расписание ключей Расписание ключей () позволяет расширить исходный ключ , получив раундовых ключей . Хорошее планирование позволяет получить раундовые ключи с максимальной энтропией. Авторами предлагаются два способа ввести раундовый ключ: Exor — простое исключающее ИЛИ с входными данными в каждом раунде. Соответствующий алгоритм — SHARK-E. Affine Transformation — aффинное преобразование входных данных, зависящее от ключа. Соответствующий алгоритм — SHARK-A.

Exor Вычисляется простое исключающее ИЛИ входных бит раунда и подключа. Преимущества метода — быстрота и стабильность: никакой ключ не является сильнее или слабее другого. Недостаток метода — энтропия раундового ключа не превосходит .

Affine Transformation Пусть  — невырожденная матрица над полем , зависящая от ключа (точнее, от его расширения). Введем ключевую операцию над входными данными следующим образом: . Это линейная операция, потому она не вводит слабых ключей. Кроме того, энтропия раундовых ключей увеличивается до . Однако, это довольно дорогая в смысле производительности операция, поэтому авторами предлагается ограничить на подпространстве диагональных матриц. В этом случае энтропия раундовых ключей становится близкой к .

Генерация подключей В алгоритме SHARK, генерация раундовых ключей осуществляется следующим образом: раундовых -битных ключей инициализируются первыми записями в таблице замещений (). Матрицы инициализируются единичными матрицами. Выбранный пользователем ключ конкатенируется сам с собой до тех пор, пока не будет иметь длину бит. К полученной в п. 3 последовательности применяется алгоритм SHARK в режиме CFB. Первые бит выходных данных используются для формирования раундовых ключей . Последние бит выходных данных интерпретируются как элементов поля , и формируют диагональные элементы матриц . Если какой-нибудь элемент равен нулю, то он отбрасываются, а все следующие элементы сдвигаются вниз на единицу. Дополнительные зашифрованные нулевые строки добавляются в конец, чтобы заполнить оставшиеся диагональные элементы. Механизм генерации подключей в принципе позволяет использовать ключ длины бит, но авторы рекомендуют использовать ключ, не превышающий 128 бит.

Заметки по реализации

Таблицы замещений Для того, чтобы добиться высокой производительности, слой диффузии и блоки подстановок объединяются в одну операцию. Пусть обозначают входные данные раунда;  — выходные данные;  — матрицы перестановок (S-блоки);  — матрица, определяющая слой диффузии; и  — обозначают сложение и умножение над полем . Тогда

Используя расширенные таблицы замещений размерности , определяемые по формуле , можно записать преобразование в простом виде:

Таким образом, один раунд требует поисков по таблице и бинарных операций. Однако, из-за того что при длине блока бит таблицы занимают байт, алгоритм для блоков длины 128 бит и более оказывался неэффективным для большинства процессоров того времени (1996 год), отсюда происходит существующее ограничение на длину блока в 64 бит ().

Матрица MDS-кода Для можно построить матрицу, определяющую слой диффузии, на основе кода Рида-Соломона.

Дешифрование Для описания дешифрования рассмотрим 2-х раундовую версию SHARK. Пусть  — линейная операция,  — нелинейная замена,  — операция добавления ключа для раундового ключа . Функция шифрования, в таком случае, равна , где  — комбинированная из слоя диффузии и S-блоков операция. Так как операция добавления ключа и операция диффузии — линейные операции, их порядок можно поменять местами:

,

где введено обозначение

Применим полученную формулу к :

Теперь покажем, что операция дешифрования имеет ту же структуру. Для этого сначала обратим операцию шифрования:

Меняя местами операцию добавления ключа и операцию диффузии, получаем ту же структуру, что и в операции шифрования:

Известные атаки На текущий момент не обнаружено уязвимостей у классической реализации алгоритма. Существуют атаки только на вариации алгоритма: В 1997 году и Ларс Кнудсен показали, что 64-битная реализация SHARK-E (SHARK с exor стратегией введения раундового ключа) теоретически уязвима для интерполяционной атаки при ограничении на количество раундов до 5, а также 128-битная реализация — при ограничении до 8 раундов. Но они также показали, что для достаточной безопасности необходимо по крайней мере 6 раундов. В 2013 году Янг Ши () и Хонгвей Фан () показали, что White-Box реализацияWhite-box attack context — злоумышленник имеет полный доступ к программной реализации шифра. SHARK недостаточно безопасна и может быть взломана с фактором работы примерно 1.5 * (2 ^ 47).

Примечания

Литература Vincent Rijmen, Joan Daemen, Bart Preneel, Antoon Bosselaers, Erik De Win The Cipher SHARK. — The cipher SHARK . Joan Daemen, Vincent Rijmen The Design of Rijndael. — The Design of Rijndael . Thomas Jakobsen, Lars R. Knudsen The interpolation attack on block ciphers. — The interpolation attack on block ciphers . Yang Shi, Hongfei Fan On Security of a White-Box Implementation of SHARK. — On Security of a White-Box Implementation of SHARK .

Ссылки

Категория:Блочные шифры Категория:SP-сеть