Remove ads
Из Википедии, свободной энциклопедии
SÁFER (англ. Secure And Fast Encryption Routine — безопасная и быстрая процедура шифрования) — в криптографии семейство симметричных блочных криптоалгоритмов на основе подстановочно-перестановочной сети. Основной вклад в разработку алгоритмов внёс Джеймс Мэсси. Первый вариант шифра был создан и опубликован в 1993 году.
SAFER | |
---|---|
Создатель | Джеймс Мэсси |
Создан | 1993 г. |
Опубликован | 1993 г. |
Размер ключа | 64 (128, 192, 256) бит |
Размер блока | 64 (40, 128) бит |
Число раундов | 6-16 |
Тип | Подстановочно-перестановочная сеть |
Медиафайлы на Викискладе |
Существует несколько вариантов шифра, отличающихся друг от друга длиной ключа шифрования и размерами блоков исходного текста.
Первая разновидность алгоритма — SAFER K-64 была разработана Джэймсом Мэсси для калифорнийской корпорации «Cylinc» в 1993 году[1]. Опубликованный в том же году, алгоритм имел блок и ключ шифрования длиной в 64 бита. Для него рекомендовалось использовать 6 раундов шифрования. Однако, из-за необходимости увеличить длину ключа до 128 бит (так как была обнаружена слабость в первоначальном варианте алгоритма), Мэсси разработал новый вариант шифра SAFER K-128, который был опубликован на следующий год после SAFER K-64. Новый алгоритм включал в себя расписание ключей, разработанное министерством внутренних дел Сингапура, и в дальнейшем использовался им для различных целей. Также для этого алгоритма рекомендовалось использовать 10 (максимум 12) раундов шифрования.
Спустя некоторое время в первых вариантах алгоритма выявились некоторые слабости, обнаруженные Ларсом Кнудсеном и Шоном Мёрфи[1]. Это повлекло за собой создание новых версий алгоритма, названных SAFER SK-64 и SAFER SK-128, в которых расписание ключей было изменено в соответствии со схемой, предложенной Кнудсеном. Также был разработан вариант с длиной ключа, уменьшенной до 40 бит — SAFER SK-40. Сокращение «SK» в названии алгоритмов расшифровывается как «Strengthened Key schedule» (Усиленное расписание ключей). Для новых вариантов шифра предлагалось использовать не 6, а по крайней мере 8 (максимум 10) раундов шифрования.
Алгоритм SAFER+ был разработан в 1998 году калифорнийской корпорацией Cylinc совместно с Армянской академией наук для участия в конкурсе AES, на котором прошёл лишь первый отборочный тур. Данный шифр имеет входной блок длиной 128 бит и размер ключа 128, 192 или 256 бит.
Последней из созданных разновидностей алгоритма SAFER является SAFER++, разработанный Мэсси в 2000 году и ставший дальнейшим развитием алгоритма SAFER+. Алгоритм принял участие в европейском конкурсе алгоритмов NESSIE, где был представлен в двух вариантах: шифр с 64-битным блоком и 128-битным блоком. Он прошёл во вторую фазу конкурса, но не был выбран в набор рекомендуемых NESSIE криптографических примитивов. Эксперты сочли, что шифр слишком медленный на всех машинах, кроме 8-битных (таких как смарт-карты), а запас безопасности шифра слишком мал[2][3].
Алгоритмы SAFER не являются частной собственностью и не защищены авторскими правами, то есть могут быть использованы без каких либо ограничений. Поскольку они целиком состоят из простых байтовых операций (за исключением поворота байтов при генерации ключей), эти алгоритмы могут быть реализованы процессорами с малой разрядностью[4].
Ниже приведена сводная таблица всех существующих вариантов шифра SAFER
название | англ. | дата создания | длина блока | длина ключа | число раундов |
---|---|---|---|---|---|
SAFER K-64 | key 64 bit | 1993 | 64 | 64 | 6 |
SAFER K-128 | key 128 bit | 1995 | 64 | 128 | 10 (максимум 12) |
SAFER SK-64 | Strengthened Key schedule, 64 bit | 1995 | 64 | 64 | 8 (минимум 6, максимум 10) |
SAFER SK-128 | Strengthened Key schedule, 128 bit | 1995 | 64 | 128 | 10 (максимум 12) |
SAFER SK-40 | Strengthened Key schedule, 40 bit | 1995 | 64 | 40 | |
SAFER+ | SAFER Plus | 1998 | 128 | 128, 192, 256 | 8, 12, 16 |
SAFER++ | SAFER Plus Plus | 2000 | 64, 128 | 128, 256 | 7, 10 |
Длина шифруемого блока и длина ключа равны 64 битам. Алгоритм является итеративным блочным шифром, то есть одна и та же функция шифрования последовательно применяется к входному блоку r раз, при этом на каждом этапе используются различные ключи. На каждой итерации (этапе, раунде) в рассматриваемом алгоритме берутся два 64-битных подключа.
Структура одного раунда алгоритма представлена на схеме. Опишем алгоритм поэтапно (ниже i пробегает значения от 1 до r, где r — число раундов шифрования):
По завершении последовательных раундов, над полученным результатом применяется операция, аналогичная п.1, где в качестве ключа используется последний подключ.
Автор алгоритма рекомендует использовать раундов, но можно увеличить их количество для увеличения надёжности[5].
Расшифрование производятся в обратном порядке, но при этом операции заменяются обратными. Так, операции сложения по модулю 256 заменяются операциями вычитания, а сложение по модулю 2 выполняется точно так же, как и при зашифровании. Операции и меняются местами. Псевдопреобразования Адамара заменяются обратными (Inverse PHT, IPHT), действующими следующим образом:
Первый ключ шифрования является секретным ключом, задаваемым пользователем. Каждый последующий ключ шифрования получается из предыдущего по формуле (сложение производится по модулю 256, при этом байты складываются отдельно). Здесь операция «» — побайтовый циклический сдвиг влево на 3 бита, то есть сдвиг происходит внутри каждого отдельного байта ключа. Величина называется константой этапа шифрования. Получить её можно следующим образом: если — j-й байт константы i-го этапа, то все константы этапов выражаются следующей формулой: [5]. Получаемые таким образом константы этапов с хорошей точностью ведут себя как случайные числа. Как правило, значения для всех этих констант хранят в специальных таблицах, чтобы уменьшить время на вычисления.
Формальное описание алгоритма генерации ключей:[6]
ВХОД: 64-битовый ключ ; количество раундов .
ВЫХОД: 64-битовые подключи . Байт — -байт ключа (нумерация слева направо).
Джэймс Мэсси доказал, что после шести раундов шифрования алгоритмом SAFER K-64 обеспечивается абсолютная устойчивость к дифференциальному криптоанализу[5]. При этом, уже после трёх раундов шифрования линейный криптоанализ также становится неэффективным для взлома[5].
Несмотря на это, в 1995 году Ларсом Кнудсеном была обнаружена слабость в алгоритме генерации ключей для SAFER K-64. Он показал[5], что для любого ключа шифрования можно найти один или несколько (вплоть до девяти) ключей (отличающихся от него значением лишь одного байта), таких, что при зашифровании двух различных исходных текстов и получается один и тот же шифротекст, что можно записать в виде . Число различных открытых текстов M, из которых получается один и тот же шифротекст, лежит в промежутке между и из возможных текстов. Таким образом, путём анализа от до открытых текстов можно вычислить 8 бит секретного ключа длиной 64-бита. Эта атака в дальнейшем была значительно усилена Джоном Келси, Брюсом Шнайером и Дэвидом Вагнером[англ.] (англ. David A. Wagner). Авторы атаки утверждали, что алгоритм легко поддаётся атакам на связанных ключах за счёт очень простой и однообразной процедуры генерации подключей[7].
Это свойство значительно уменьшает надёжность алгоритма SAFER K-64 при использовании его в качестве однонаправленной хеш-функции. Его надёжность как алгоритма шифрования при этом не уменьшается. Тем не менее, эта слабость алгоритма, вместе с атакой, в дальнейшем опубликованной Мёрфи, побудили Мэсси улучшить алгоритм генерации ключей. В результате в сентябре 1995 года им был опубликован алгоритм SAFER SK-64.
Ещё одна сертифицированная атака на алгоритм SAFER K-64 была осуществлена Ларсом Кнудсеном и Томасом Бёрсоном[англ.] (англ. Thomas A. Berson)[6]. Она была рассчитана на исходный текст длиной , зашифрованный 5 раундами алгоритма SAFER K-64. Хотя эта атака и не была способна взломать шифротекст уже при 6 раундах шифрования, она показала, что криптостойкость алгоритма меньше, чем изначально заявлял Мэсси (он утверждал, что алгоритм является абсолютно стойким к методам линейного криптоанализа).
Французский криптограф Серж Водено[фр.] (фр. Serge Vaudenay) показал, что при замене содержимого S-блоков случайными перестановками, алгоритм SAFER K-64 становится менее криптостойким[6].
Алгоритм отличается от SAFER K-64 только длиной пользовательского ключа и, соответственно, самим способом генерации ключей. Этот способ был разработан Министерством внутренних дел Сингапура[5] и впоследствии использован Джеймсом Мэсси в его алгоритме.
В этом алгоритме вместо одного ключа длиной 64 бита используется ключ длиной 128 бит, что эквивалентно заданию двух ключей длиной по 64 бита. Из этих двух ключей по методу, крайне схожему с использованным в шифре SAFER K-64, генерируются две независимые последовательности подключей. Ключи из этих последовательностей попеременно используются на всех раундах шифрования.
Как видно из схемы, на каждом этапе происходит побитовый сдвиг байтов ключа не на 3, а на 6 бит. Это приводит к тому, что, задавшись одинаковыми начальными ключами , получим, что 128-битовый ключ совместим с 64-битовым ключом . То есть, используя ключ вида в алгоритме SAFER K-128 и ключ в SAFER K-64, получим одинаковые последовательности подключей, а значит и само шифрование в SAFER K-128 ничем не будет отличаться от такового в SAFER K-64.
При всей схожести алгоритма SAFER K-128 с его предшественником, существует и ряд отличий. Так, в новой версии алгоритма Джеймс Мэсси рекомендует использовать уже не 6, а 10 (максимум 12) раундов шифрования[7]. Это связано с тем, что при меньшем количестве итераций алгоритм, так же как и SAFER K-64, подвержен атаке, осуществлённой Ларсом Кнудсеном. Напомним, что она касается использования алгоритма в качестве основы для хеш-функции. Увеличение же количества раундов шифрования, по мнению автора, значительно повышает криптостойкость алгоритма в этом смысле[7].
Данный алгоритм отличается от SAFER K-64 лишь способом генерации подключей. Этот способ был предложен Ларсом Кнудсеном, после того как им же была найдена атака на алгоритм SAFER K-64. Рекомендуемое количество раундов шифрования увеличено по сравнению с изначальным вариантом с 6 до 8[7]. Различия в способах расширения ключа хорошо видны при формальном описании алгоритма:
Формальное описание алгоритма генерации ключей:[6]
ВХОД: 64-битовый ключ ; количество раундов .
ВЫХОД: 64-битовые подключи . Байт — -байт ключа (нумерация слева направо).
Главной отличительной чертой этого алгоритма является использование дополнительного байта , который получается из побитового сложения восьми байт ключа. Далее, на каждом этапе алгоритма происходит циклический сдвиг этих байтов, в результате получается, что подключ зависит от байтов , подключ — от байтов , подключ — от байтов и т. д. Побитовый сдвиг на 3 бита и структура констант шифрования остаются без изменений.
Такие, казалось бы, незначительные изменения в алгоритме генерации ключей, значительно повышают криптостойкость алгоритма. В настоящее время не известны атаки на алгоритмы SAFER SK-64 и SAFER SK-128 более эффективные, чем полный перебор ключей[7].
При этом существуют атаки, направленные на урезанные версии этих алгоритмов. Приведём некоторые из них:[7]
Как видно, все эти атаки не очень практичны, поскольку требуют достаточно больших ресурсов и времени.
Данный алгоритм шифрования отличается от SAFER SK-64 точно таким же образом, каким SAFER K-128 отличается от SAFER K-64. А именно, сами алгоритмы шифрования и генерации подключей остаются прежними, но вместо одного исходного ключа длиной в 64 бита используется два таких ключа, для каждого из которых независимо формируются последовательности подключей, которые затем применяются поочерёдно. При этом каждая последовательность для чётных и для нечётных ключей аналогична по структуре алгоритму расширения ключа в SAFER SK-64. В ней точно так же на первом этапе вводится дополнительный байт, являющийся суммой по модулю 2 остальных восьми байт, и затем на каждом этапе происходит побайтовый циклический сдвиг.
Как и для алгоритмов SAFER K-64 и SAFER K-128, при использовании пользовательского ключа вида в SAFER SK-128 и ключа в SAFER SK-64, действие алгоритмов оказывается совершенно одинаковым. При этом количество раундов шифрования, рекомендуемое для SAFER SK-128, остаётся таким же, как и в SAFER K-128, и равно 10[7].
Данный вариант шифра использует уменьшенный ключ длиной всего 40 бит (5 байт). Это позволяло алгоритму обойти экспортные ограничения, существовавшие на тот момент в США. Алгоритм работает практически таким же образом, как и SAFER SK-64, с одним небольшим отличием на начальном этапе генерации подключей.
В алгоритме SAFER SK-64 к 8 байтам исходного ключа приписывался девятый байт, равный их побитовой сумме по модулю 2. В SAFER SK-40 эти 9 байт получаются совершенно иначе. Обозначим их , , … . Первые 5 из них — это байты исходного ключа. Остальные 4 байта получаются из первых следующим образом[11]:
,
,
,
;
Первый подключ получается из первых восьми полученных байт. Последующие подключи генерируются с их использованием точно таким же образом, как и в алгоритме SAFER SK-64.
SAFER+ представляет собой улучшенный вариант алгоритмов семейства SAFER. Алгоритм разработан в 1998 году для участия в конкурсе на стандарт AES. Над его созданием совместно трудились специалисты из калифорнийской корпорации Cylinc (Джеймс Мэсси) и Академии наук республики Армении (Гурген Хачатрян и Мельсик Курегян)[2].
В конкурсе AES алгоритм прошёл первый отборочный тур наряду с 14 другими алгоритмами. В финал конкурса, к которому допускались лишь 5 алгоритмов, SAFER+ не прошёл, поскольку по результатам тщательного анализа оказалось, что он подвержен ряду атак и имеет низкую скорость выполнения[12]. Алгоритм создавался для работы на 8-битных процессорах, и как следствие, достаточно медленно работает на 32-битных процессорах[3].
SAFER+ обрабатывает данные 128-битным блоком. Алгоритм поддерживает 128, 192 и 256-битные ключи в соответствии с требованиями, предъявленными Национальным институтом стандартов и технологий США (NIST)[13]. Количество раундов шифрования зависит от размера ключа:
По структуре алгоритм SAFER+ напоминает SAFER K-64. Он состоит из тех же основных этапов, несколько отличающихся по своей структуре. На каждом раунде работы алгоритма сначала происходит подмешивание одного подключа, после этого байты проходят через блоки нелинейной замены, затем подмешивается второй подключ и происходит линейное перемешивание байтов. Подключи последовательно генерируются с использованием входного ключа. Ниже приведено более подробное описание работы одной итерации (i — номер итерации):
После проведения r раундов шифрования производится подмешивание ключа , аналогичное подмешиванию ключей .
Операции в алгоритме расшифрования подобны операциям шифрования и производятся в обратном порядке. Разница состоит в следующем:
2 | 2 | 1 | 1 | 16 | 8 | 2 | 1 | 4 | 2 | 4 | 2 | 1 | 1 | 4 | 4 |
1 | 1 | 1 | 1 | 8 | 4 | 2 | 1 | 2 | 1 | 4 | 2 | 1 | 1 | 2 | 2 |
1 | 1 | 4 | 4 | 2 | 1 | 4 | 2 | 4 | 2 | 16 | 8 | 2 | 2 | 1 | 1 |
1 | 1 | 2 | 2 | 2 | 1 | 2 | 1 | 4 | 2 | 8 | 4 | 1 | 1 | 1 | 1 |
4 | 4 | 2 | 1 | 4 | 2 | 4 | 2 | 16 | 8 | 1 | 1 | 1 | 1 | 2 | 2 |
2 | 2 | 2 | 1 | 2 | 1 | 4 | 2 | 8 | 4 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 4 | 2 | 4 | 2 | 16 | 8 | 2 | 1 | 2 | 2 | 4 | 4 | 1 | 1 |
1 | 1 | 2 | 1 | 4 | 2 | 8 | 4 | 2 | 1 | 1 | 1 | 2 | 2 | 1 | 1 |
2 | 1 | 16 | 8 | 1 | 1 | 2 | 2 | 1 | 1 | 4 | 4 | 4 | 2 | 4 | 2 |
2 | 1 | 8 | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 4 | 2 | 2 | 1 |
4 | 2 | 4 | 2 | 4 | 4 | 1 | 1 | 2 | 2 | 1 | 1 | 16 | 8 | 2 | 1 |
2 | 1 | 4 | 2 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 8 | 4 | 2 | 1 |
4 | 2 | 2 | 2 | 1 | 1 | 4 | 4 | 1 | 1 | 4 | 2 | 2 | 1 | 16 | 8 |
4 | 2 | 1 | 1 | 1 | 1 | 2 | 2 | 1 | 1 | 2 | 1 | 2 | 1 | 8 | 4 |
16 | 8 | 1 | 1 | 2 | 2 | 1 | 1 | 4 | 4 | 2 | 1 | 4 | 2 | 4 | 2 |
8 | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 1 | 2 | 1 | 4 | 2 |
2 | −2 | 1 | −2 | 1 | −1 | 4 | −8 | 2 | −4 | 1 | −1 | 1 | −2 | 1 | −1 |
−4 | 4 | −2 | 4 | −2 | 2 | −8 | 16 | −2 | 4 | −1 | 1 | −1 | 2 | −1 | 1 |
1 | −2 | 1 | −1 | 2 | −4 | 1 | −1 | 1 | −1 | 1 | −2 | 2 | −2 | 4 | −8 |
−2 | 4 | −2 | 2 | −2 | 4 | −1 | 1 | −1 | 1 | −1 | 2 | −4 | 4 | −8 | 16 |
1 | −1 | 2 | −4 | 1 | −1 | 1 | −2 | 1 | −2 | 1 | −1 | 4 | −8 | 2 | −2 |
−1 | 1 | −2 | 4 | −1 | 1 | −1 | 2 | −2 | 4 | −2 | 2 | −8 | 16 | −4 | 4 |
2 | −4 | 1 | −1 | 1 | −2 | 1 | −1 | 2 | −2 | 4 | −8 | 1 | −1 | 1 | −2 |
−2 | 4 | −1 | 1 | −1 | 2 | −1 | 1 | −4 | 4 | −8 | 16 | −2 | 2 | −2 | 4 |
1 | −1 | 1 | −2 | 1 | −1 | 2 | −4 | 4 | −8 | 2 | −2 | 1 | −2 | 1 | −1 |
−1 | 1 | −1 | 2 | −1 | 1 | −2 | 4 | −8 | 16 | −4 | 4 | −2 | 4 | −2 | 2 |
1 | −2 | 1 | −1 | 4 | −8 | 2 | −2 | 1 | −1 | 1 | −2 | 1 | −1 | 2 | −4 |
−1 | 2 | −1 | 1 | −8 | 16 | −4 | 4 | −2 | 2 | −2 | 4 | −1 | 1 | −2 | 4 |
4 | −8 | 2 | −2 | 1 | −2 | 1 | −1 | 1 | −2 | 1 | −1 | 2 | −4 | 1 | −1 |
−8 | 16 | −4 | 4 | −2 | 4 | −2 | 2 | −1 | 2 | −1 | 1 | −2 | 4 | −1 | 1 |
1 | −1 | 4 | −8 | 2 | −2 | 1 | −2 | 1 | −1 | 2 | −4 | 1 | −1 | 1 | −2 |
−2 | 2 | −8 | 16 | −4 | 4 | −2 | 4 | −1 | 1 | −2 | 4 | −1 | 1 | −1 | 2 |
Излагаемый алгоритм применим для входных ключей длиной в 128, 192 и 256 бит (16, 24 и 32 байт соответственно). Первый подключ представляет собой первые 16 байт входного ключа. Генерация остальных ключей производится следующим образом: сначала исходный ключ целиком записывается в ключевой регистр длиной на 1 байт длиннее самого ключа (то есть длина регистра равна для разных входных ключей 17, 25 или 33 байтам). Все байты ключа суммируются по модулю 2 поразрядно, результат записывается в последний байт регистра. Для получения каждого следующего ключа над содержимым регистра выполняются следующие операции (для i от 2 до 2r+1):
Слова смещения — это 16-байтные константы, вычисляемые по следующей формуле:
— j-й байт i-го слова смещения. Если то этот байт заменяется на 0.
Понятно, что поскольку для различных длин ключей количество итераций шифрования различно (и равно 8, 12 и 16 для ключей длиной 128, 192 и 256 бит соответственно), то и использованы будут не все блоки смещения. Так, при длине ключа в 128 бит будут использованы только , … , для ключа в 192 бита — , … , а для ключа в 256 бит — все слова смещения.
В связи с участием алгоритма SAFER+ в конкурсе AES, к его криптоанализу было обращено весьма пристальное внимание криптологов. В результате было найдено несколько атак на алгоритм. Перечислим некоторые из них:
В ходе конкурса AES алгоритм SAFER+ был охарактеризован следующим образом:[2]
Алгоритм является дальнейшим развитием SAFER+, и практически полностью наследует его структуру. Различия заключаются в основном в оптимизации (с точки зрения облегчения вычислений) некоторых участков алгоритма. Он использует меньшее число раундов: семь для 128-битного ключа и десять для 256-битного ключа. Длина блока в этом шифре равна 128 битам, но помимо этого предусматривается режим «обратной совместимости» при использовании блоков длиной 64 бита.
Алгоритм прошёл во вторую фазу конкурса NESSIE, но не был выбран в набор рекомендуемых NESSIE криптографических примитивов. Эксперты сочли, что шифр слишком медленный на всех машинах, кроме смарт-карт, а запас безопасности шифра слишком мал[17].
Значительная часть процедуры шифрования ничем не отличается от таковой в алгоритме SAFER+. Главное различие заключается в процедуре линейного преобразования, которая была значительно оптимизирована с вычислительной точки зрения (в SAFER+ необходимо производить перемножение с матрицей размеров 16x16, что требует большого количества операций побайтового сложения).
Линейное преобразование, как видно из схемы, состоит из следующих этапов:
Псевдопреобразование Адамара заключается в умножении 4-байтовой строки на невырожденную матрицу 4x4, которая имеет следующую структуру:
Обратная матрица, используемая при расшифровании, имеет вид
Преимущество такого подхода по сравнению с умножением на матрицу 16x16, используемую в SAFER+, состоит в том, что для линейного преобразования, в силу структуры матриц преобразования Адамара, требуется значительно меньшее количество элементарных операций. А именно, при умножении 16-байтовой строки на матрицу 16x16 в общем случае требуется 15*16 операций сложения и 16*16 операций умножения. Умножение же на матрицу Адамарова преобразования требует всего лишь 6 операций сложения:[13]
Если a, b, c, d — входные байты, A, B, C, D — выходные байты, то вычисления представимы формулами (сложение производится по модулю 256):
Таким образом, даже принимая во внимание, что умножение на матрицу производится 8 раз, получаем всего 6*8=48 операций, что значительно меньше, чем в SAFER+ (даже с учётом всех производимых байтовых перестановок в алгоритме SAFER++).
Всю структуру линейного преобразования можно, так же, как и в SAFER+, представить в виде невырожденной матрицы 16x16. Однако, большинство элементов в этой матрице будет равно единице. В обратной матрице, необходимой для совершения процедуры расшифрования, большинство элементов будет равно нулю.
Существуют также некоторые отличия от SAFER+ в алгоритме генерации подключей, используемых на различных раундах шифрования. В этом плане различия между SAFER+ и SAFER++ подобны различиям между SAFER K-64 и SAFER K-128, в том смысле, что в SAFER++ чётные и нечётные подключи генерируются независимо друг от друга. Рассмотрим алгоритм более детально.
Используются 2 ключевых регистра длиной 16+1=17 байт. В случае, если длина пользовательского ключа равна 128 битам (16 байт), в оба регистра изначально записывается этот ключ. Если же длина ключа равна 256 битам (32 байта), в первый регистр вписываются байты ключа с 1-го по 16-й, а во второй — с 17-го по 32-й. На место 17-го байта в каждый регистр вписывается байтовая контрольная сумма от первых 16-и байт. После этого для i от 1 до (r — количество раундов шифрования) производятся следующие действия (для i = 1,3, … 2r+1 рассматривается первый регистр, для i = 2,4, … 2r — второй регистр):
Слова смещения вычисляются практически так же, как и в SAFER+, с той лишь разницей, что изменяются диапазоны изменения параметра i:
В рамках конкурса NESSIE алгоритм SAFER++ был тщательно исследован на криптостойкость. По заключению экспертов уязвимости предшествующего ему алгоритма SAFER+ не были унаследованы. Для полнораундового алгоритма SAFER++ не было найдено никаких новых атак. При этом был осуществлён ряд атак на варианты шифра с уменьшенным числом раундов шифрования[9][18][19] Одна из них, будучи неосуществимой вследствие огромного числа необходимых вычислений, теоретически способна взломать SAFER++ с 5,5 раундами вместо семи.[20]. Эта атака послужила одной из основных причин, по которым алгоритм не победил в конкурсе. Также, по мнению некоторых экспертов, алгоритм вполне может содержать невыявленные на настоящий момент слабости. Основной же причиной явилось недостаточное быстродействие алгоритма при реализации на многоразрядных устройствах.
Хотя алгоритмы SAFER не получили статуса стандартов в США или ЕС, они нашли весьма широкое применение. В частности, SAFER+ используется в качестве основы протокола аутентификации в Bluetooth. Однако, в самом алгоритме шифрования в Bluetooth этот алгоритм не используется[1].
Несмотря на то, что в названии алгоритма фигурирует слово «fast» (быстрый), по современным меркам алгоритмы семейства SAFER являются достаточно медленными.
С точки зрения криптостойкости даже самая первая версия алгоритма SAFER K-64 является абсолютно устойчивой к дифференциальному криптоанализу. Последний алгоритм семейства — SAFER++, будучи значительно модифицированным с учетом множества атак, осуществленных на более ранние версии алгоритма, стал ещё более устойчивым. В настоящее время никаких реально осуществимых атак на алгоритм не найдено[1].
Учитывая, насколько далеко продвинулись алгоритмы SAFER за время своего существования — от SAFER K-64 до SAFER++, можно предположить, что на этом развитие этих алгоритмов не закончено[2].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.