SHARK
(
англ.
Secure Hash Algorithm Regenerative Keys
— безопасный хеширующий алгоритм с воссоздающимися ключами) —
симметричный алгоритм
блочного шифрования
, разработанный группой криптографов, среди которых
Винсент Рэймен
, — автор шифра
AES
. В теории позволяет использовать блоки и ключи различной длины, однако авторская реализация использует 128-битный ключ и 64-битные блоки. Структура схожа со структурой
подстановочно-перестановочной сети
.
Содержание
История SHARK
Шифр
SHARK
— первый в серии алгоритмов, разработанных в ходе исследования по созданию безопасных и эффективных алгоритмов блочного шифрования на основе метода
. Результатом исследования позже стало создание стандартного шифра AES
.
Авторы позиционировали SHARK как алгоритм, призванный заменить широко распространенный в то время шифр
DES
. К новому алгоритму были предъявлены следующие требования:
высокая производительность — небольшое число раундов. Для сравнения, в шифре DES использовалось 16 раундов. По словам автором, им удались достичь более чем четырёхкратного ускорения по сравнению с шифрами
SAFER
и
IDEA
;
Существует два варианта шифра
SHARK
: SHARK-A (
англ.
affine transform
) и SHARK-E (
англ.
exor
), получившие название благодаря различным способам введения раундовых ключей
.
расписание ключей для получения раундовых ключей из исходного ключа
.
Каждый компонент алгоритма рассматривается отдельно и каждый должен обладать определёнными свойствами. Так, слой диффузии должен обладать равномерными и хорошими диффузионными свойствами. Нелинейный слой также должен обладать равномерными нелинейными свойствами, причем компоненты алгоритма независимы в следующем смысле: при изменении реализации, например, нелинейного слоя (одни S-блоки заменяются другими S-блоками c такими же характеристиками), защищенность алгоритма остается неизменной. Такая стратегия является вариантом Wide trail strategy
, описанной в докторской диссертации Йоана Даймена
.
SHARK
состоит из
раундов, дополнительного слоя добавления ключа и дополнительно слоя инвертированной диффузии. Каждый раунд, в свою очередь, состоит из добавления ключа, нелинейной замены и слоя диффузии. Дополнительный слой добавления ключа нужен для того, чтобы злоумышленник не смог отделить последний раунд. Дополнительный слой инвертированной диффузии необходим для упрощения операции дешифрования
.
Слой нелинейный замены состоит из
S-блоков, каждый из которых представляет собой
-битную перестановку. Таким образом, алгоритм способен шифровать блоки длиной
.
Слой диффузии
На вход слою диффузии приходят
-битных чисел, которые можно рассматривать как элементы над
полем
. Рассматриваемый слой необходим для создания
лавинного эффекта
. Этот эффект проявляется в линейном и разностном контекстах:
Линейный контекст — нет
корреляции
между линейной комбинации небольшого набора
-битных входных данных и линейной комбинации небольшого набора (
-битных) выходных данных.
Разностный контекст — небольшое изменение входных данных влечет значительное изменение данных на выходе, и наоборот, для небольшого изменения выходных данных нужно значительно изменить входные данные
.
Если
, то
.
называют оптимальным числом скачка (
англ.
optimal branch number
). В основной статье авторы показали, что с помощью MDS-кодов можно сконструировать обратимое линейное преобразование с оптимальном числом скачка. В реализации используются
коды Рида-Соломона
.
Нелинейный слой (блоки подстановок)
Нелинейные S-блоки обеспечивают защиту от линейного и дифференциального криптоанализов. Одним из важных численных характеристик безопасности шифра служит матрица эксклюзивных ИЛИ (
англ.
exor table
)
отображения
, элементы которой определяются по формуле
, где
— обозначает число удовлетворяющих условию элементов,
— элементы поля
. Большие значения элементов матрицы могут привести к восприимчивости шифра к дифференциальной атаке
.
Авторами были выбраны S-блоки, основанные на отображении
над полем
. В этом случае при четном
матрица
обладает следующими свойствами:
Дифференциальная 4-стабильность — все элементы матрицы не превосходят 4. В действительности, в каждой строке такой матрицы присутствует ровно один элемент, равный 4, а остальные равны 2 либо 0.
Минимальное расстояние аффинной функции равно
.
Нелинейный порядок любой линейной комбинации выходных битов равен
.
Для того чтобы удалить фиксированные точки
и
, используется обратимое
аффинное преобразование
выходных бит
.
Расписание ключей
Расписание ключей (
англ.
key scheduling
) позволяет расширить исходный ключ
, получив
раундовых ключей
. Хорошее планирование позволяет получить раундовые ключи с максимальной энтропией. Авторами предлагаются два способа ввести раундовый ключ:
Exor — простое исключающее ИЛИ с входными данными в каждом раунде. Соответствующий алгоритм — SHARK-E.
Affine Transformation — aффинное преобразование входных данных, зависящее от ключа. Соответствующий алгоритм — SHARK-A
.
Exor
Вычисляется простое исключающее ИЛИ
входных бит раунда и
подключа. Преимущества метода — быстрота и стабильность: никакой ключ не является сильнее или слабее другого. Недостаток метода — энтропия раундового ключа не превосходит
.
Affine Transformation
Пусть
— невырожденная матрица
над полем
, зависящая от ключа
(точнее, от его расширения). Введем ключевую операцию над входными данными следующим образом:
. Это линейная операция, потому она не вводит слабых ключей. Кроме того, энтропия раундовых ключей увеличивается до
. Однако, это довольно дорогая в смысле производительности операция, поэтому авторами предлагается ограничить
на подпространстве
диагональных матриц
. В этом случае энтропия раундовых ключей становится близкой к
.
Генерация подключей
В алгоритме
SHARK
, генерация раундовых ключей осуществляется следующим образом:
раундовых
-битных ключей
инициализируются первыми
записями в
(
англ.
substitution table
).
Выбранный пользователем ключ конкатенируется сам с собой до тех пор, пока не будет иметь длину
бит.
К полученной в п. 3 последовательности применяется алгоритм
SHARK
в режиме
CFB
.
Первые
бит выходных данных используются для формирования раундовых ключей
.
Последние
бит выходных данных интерпретируются как
элементов поля
, и формируют диагональные элементы матриц
. Если какой-нибудь элемент равен нулю, то он отбрасываются, а все следующие элементы сдвигаются вниз на единицу. Дополнительные зашифрованные нулевые строки добавляются в конец, чтобы заполнить оставшиеся диагональные элементы
.
Механизм генерации подключей в принципе позволяет использовать ключ длины
бит, но авторы рекомендуют использовать ключ, не превышающий 128 бит
.
Заметки по реализации
Таблицы замещений
Для того, чтобы добиться высокой производительности, слой диффузии и блоки подстановок объединяются в одну операцию
. Пусть
обозначают входные данные раунда;
— выходные данные;
— матрицы перестановок (S-блоки);
— матрица, определяющая слой диффузии;
и
— обозначают сложение и умножение над полем
. Тогда
Используя расширенные таблицы замещений
размерности
, определяемые по формуле
, можно записать преобразование в простом виде:
Таким образом, один раунд требует
поисков по таблице и
бинарных операций. Однако, из-за того что при длине блока
бит таблицы занимают
байт, алгоритм для блоков длины 128 бит и более оказывался неэффективным для большинства процессоров того времени (1996 год), отсюда происходит существующее ограничение на длину блока в 64 бит (
)
.
Матрица MDS-кода
Для
можно построить матрицу, определяющую слой диффузии, на основе кода Рида-Соломона
.
Дешифрование
Для описания дешифрования рассмотрим 2-х раундовую версию
SHARK
. Пусть
— линейная операция,
— нелинейная замена,
— операция добавления ключа для раундового ключа
. Функция шифрования, в таком случае, равна
, где
— комбинированная из слоя диффузии и S-блоков операция. Так как операция добавления ключа и операция диффузии — линейные операции, их порядок можно поменять местами
:
,
где введено обозначение
Применим полученную формулу к
:
Теперь покажем, что операция дешифрования имеет ту же структуру. Для этого сначала обратим операцию шифрования
:
Меняя местами операцию добавления ключа и операцию диффузии, получаем ту же структуру, что и в операции шифрования
:
Известные атаки
На текущий момент не обнаружено уязвимостей у классической реализации алгоритма. Существуют атаки только на вариации алгоритма:
В 1997 году
и
Ларс Кнудсен
показали, что 64-битная реализация SHARK-E (
SHARK
с exor стратегией введения раундового ключа) теоретически уязвима для
интерполяционной атаки
при ограничении на количество раундов до 5, а также 128-битная реализация — при ограничении до 8 раундов. Но они также показали, что для достаточной безопасности необходимо по крайней мере 6 раундов
.
В 2013 году Янг Ши (
англ.
Yang Shi
) и Хонгвей Фан (
англ.
Hongfei Fan
) показали, что White-Box реализация
SHARK
недостаточно безопасна и может быть взломана с фактором работы примерно 1.5 * (2 ^ 47)
.