Существует несколько вариантов шифра, отличающихся друг от друга длиной ключа шифрования и размерами блоков исходного текста.
Первая разновидность алгоритма — 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 и SAFER SK-64
Длина шифруемого блока и длина ключа равны 64 битам. Алгоритм является итеративнымблочным шифром, то есть одна и та же функция шифрования последовательно применяется к входному блоку r раз, при этом на каждом этапе используются различные ключи. На каждой итерации (этапе, раунде) в рассматриваемом алгоритме берутся два 64-битных подключа.
Структура одного раунда алгоритма представлена на схеме. Опишем алгоритм поэтапно (ниже i пробегает значения от 1 до r, где r — число раундов шифрования):
Входной блок B и оба ключа и разбиваются на 8 частей длиной по одному байту (8 бит). Соответствующие подблоки входного текста и ключа либо складываются по модулю два (операция XOR) — для подблоков № 1, 4, 5 и 8, либо складываются по обычным правилам (операция сложения байтов по модулю 256) — для подблоков № 2, 3, 6 и 7.
Результаты сложения проходят через так называемые S-блоки (S-boxes). Их содержимое представляет собой одну из нелинейных операций: (где y = 0 когда x = 128) либо (y = 128 когда x = 0). Здесь x — входной байт, y — выходной байт. Данные операции являются операциями в конечном поле GF(257), где 45 — примитивный элемент поля. Поскольку каждый раз рассчитывать результаты этих операций в практических реализациях алгоритма весьма неудобно, как правило используются специально составляемые таблицы для получения результатов их действия.
Над результатами предыдущего действия производится операция, аналогичная п.1, с той лишь разницей, что используется второй подключ , а операции XOR и сложения по модулю 256 меняются местами.
Полученные байты проходят через многоуровневую систему преобразований, взаимно складываясь в различном порядке. Это делается для достижения лучшего лавинного эффекта, то есть увеличения зависимости выходных битов от всех битов входного блока. На схеме преобразования представлены в виде сети операций сложения по модулю 256. Эта сеть эквивалентна трём уровням псевдопреобразований Адамара (Pseudo-Hadamard Transform, PHT)[5]. Каждое преобразование действует таким образом, что при входных байтах и на выходе получим:
По завершении последовательных раундов, над полученным результатом применяется операция, аналогичная п.1, где в качестве ключа используется последний подключ.
Автор алгоритма рекомендует использовать раундов, но можно увеличить их количество для увеличения надёжности[5].
Расшифрование производятся в обратном порядке, но при этом операции заменяются обратными. Так, операции сложения по модулю 256 заменяются операциями вычитания, а сложение по модулю 2 выполняется точно так же, как и при зашифровании. Операции и меняются местами. Псевдопреобразования Адамара заменяются обратными (Inverse PHT, IPHT), действующими следующим образом:
Первый ключ шифрования является секретным ключом, задаваемым пользователем. Каждый последующий ключ шифрования получается из предыдущего по формуле (сложение производится по модулю 256, при этом байты складываются отдельно). Здесь операция «» — побайтовый циклический сдвиг влево на 3 бита, то есть сдвиг происходит внутри каждого отдельного байта ключа. Величина называется константой этапа шифрования. Получить её можно следующим образом: если — j-й байт константы i-го этапа, то все константы этапов выражаются следующей формулой:
[5]. Получаемые таким образом константы этапов с хорошей точностью ведут себя как случайные числа. Как правило, значения для всех этих констант хранят в специальных таблицах, чтобы уменьшить время на вычисления.
Алгоритм генерации ключей в SAFER K-64
Формальное описание алгоритма генерации ключей:[6]
Джэймс Мэсси доказал, что после шести раундов шифрования алгоритмом SAFER K-64 обеспечивается абсолютная устойчивость к дифференциальному криптоанализу[5]. При этом, уже после трёх раундов шифрования линейный криптоанализ также становится неэффективным для взлома[5].
Несмотря на это, в 1995 годуЛарсом Кнудсеном была обнаружена слабость в алгоритме генерации ключей для SAFER K-64. Он показал[5], что для любого ключа шифрования можно найти один или несколько (вплоть до девяти) ключей (отличающихся от него значением лишь одного байта), таких, что при зашифровании двух различных исходных текстов и получается один и тот же шифротекст, что можно записать в виде . Число различных открытых текстов M, из которых получается один и тот же шифротекст, лежит в промежутке между и из возможных текстов. Таким образом, путём анализа от до открытых текстов можно вычислить 8 бит секретного ключа длиной 64-бита. Эта атака в дальнейшем была значительно усилена Джоном Келси, Брюсом Шнайером и Дэвидом Вагнером[en] (англ.David A. Wagner). Авторы атаки утверждали, что алгоритм легко поддаётся атакам на связанных ключах за счёт очень простой и однообразной процедуры генерации подключей[7].
Это свойство значительно уменьшает надёжность алгоритма SAFER K-64 при использовании его в качестве однонаправленной хеш-функции. Его надёжность как алгоритма шифрования при этом не уменьшается. Тем не менее, эта слабость алгоритма, вместе с атакой, в дальнейшем опубликованной Мёрфи, побудили Мэсси улучшить алгоритм генерации ключей. В результате в сентябре 1995 года им был опубликован алгоритм SAFER SK-64.
Ещё одна сертифицированная атака на алгоритм SAFER K-64 была осуществлена Ларсом Кнудсеном и Томасом Бёрсоном[en] (англ.Thomas A. Berson)[6]. Она была рассчитана на исходный текст длиной , зашифрованный 5 раундами алгоритма SAFER K-64. Хотя эта атака и не была способна взломать шифротекст уже при 6 раундах шифрования, она показала, что криптостойкость алгоритма меньше, чем изначально заявлял Мэсси (он утверждал, что алгоритм является абсолютно стойким к методам линейного криптоанализа).
Французский криптограф Серж Водено[fr] (фр.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]. Различия в способах расширения ключа хорошо видны при формальном описании алгоритма:
Схема генерации подключей в SAFER SK-64
Формальное описание алгоритма генерации ключей:[6]
Главной отличительной чертой этого алгоритма является использование дополнительного байта , который получается из побитового сложения восьми байт ключа. Далее, на каждом этапе алгоритма происходит циклический сдвиг этих байтов, в результате получается, что подключ зависит от байтов , подключ — от байтов , подключ — от байтов и т. д. Побитовый сдвиг на 3 бита и структура констант шифрования остаются без изменений.
Такие, казалось бы, незначительные изменения в алгоритме генерации ключей, значительно повышают криптостойкость алгоритма. В настоящее время не известны атаки на алгоритмы SAFER SK-64 и SAFER SK-128 более эффективные, чем полный перебор ключей[7].
При этом существуют атаки, направленные на урезанные версии этих алгоритмов. Приведём некоторые из них:[7]
Атака на SAFER SK-64 с 3,75 раундами. Имеется в виду, что при шифровании таким алгоритмом сначала осуществляются 3 раунда, а в четвёртом раунде опускаются линейные преобразования PHT. В ней используется метод т. н. невозможных дифференциалов[8], относящийся к методам дифференциального криптоанализа. Для его применения нужно задействовать пробных открытых текстов и тестовых операций шифрования[9].
Square-атака на SAFER SK-64 и SK-128 с 3,25 раундами. Здесь имеется в виду, что на четвёртом раунде происходит лишь подмешивание первого из двух ключей. Она использует пробных открытых текстов и тестовых операций шифрования.[9]
Атака на SAFER SK-128 с 4,75 раундами, применяющая методы линейного криптоанализа. Атака требует открытых текстов и тестовых операций шифрования[10].
Как видно, все эти атаки не очень практичны, поскольку требуют достаточно больших ресурсов и времени.
Данный алгоритмшифрования отличается от 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+ напоминает SAFER K-64. Он состоит из тех же основных этапов, несколько отличающихся по своей структуре. На каждом раунде работы алгоритма сначала происходит подмешивание одного подключа, после этого байты проходят через блоки нелинейной замены, затем подмешивается второй подключ и происходит линейное перемешивание байтов. Подключи последовательно генерируются с использованием входного ключа. Ниже приведено более подробное описание работы одной итерации (i — номер итерации):
Наложение ключа : байты входного блока складываются с байтами ключа , причём используется сложение по модулю 2 для байтов с номерами 1, 4, 5, 8, 9, 12, 13 и 16, и сложение по модулю 256 для байтов с номерами 2, 3, 6, 7, 10, 11, 14 и 15.
Нелинейное преобразование: к байтам с номерами 1, 4, 5, 8, 9, 12, 13 и 16 применяется операция (причём заменяется нулём). К байтам с номерами 2, 3, 6, 7, 10, 11, 14 и 15 применяется операция (причём ). результаты действия этих операций как и для других разновидностей алгоритма SAFER на практике часто хранят в специальных таблицах. В данном случае для этого требуется 512 байт.
Наложение ключа : байты входного блока складываются с байтами ключа , но в отличие от п.1 операции сложения по модулю 2 и по модулю 256 меняются местами.
Линейное преобразование: умножение 16-байтного блока данных справа на специальную невырожденную матрицуM (все операции при этом байтовые и производятся по модулю 256). Умножение на эту матрицу эквивалентно четырём уровням преобразования PHT, между которыми выполняются некоторые байтовые перестановки[2]. Эта часть алгоритма является наиболее громоздкой с вычислительной точки зрения.
После проведения r раундов шифрования производится подмешивание ключа , аналогичное подмешиванию ключей .
Излагаемый алгоритм применим для входных ключей длиной в 128, 192 и 256 бит (16, 24 и 32 байт соответственно). Первый подключ представляет собой первые 16 байт входного ключа. Генерация остальных ключей производится следующим образом:
сначала исходный ключ целиком записывается в ключевой регистр длиной на 1 байт длиннее самого ключа (то есть длина регистра равна для разных входных ключей 17, 25 или 33 байтам). Все байты ключа суммируются по модулю 2 поразрядно, результат записывается в последний байт регистра. Для получения каждого следующего ключа над содержимым регистра выполняются следующие операции (для i от 2 до 2r+1):
Содержимое байтов ключевого регистра циклически сдвигается влево на 3 позиции (сдвиг происходит внутри байтов в отдельности, а не регистра как целого);
Из регистра выбираются 16 байт. При этом для ключа выбираются байты регистра начиная с i-го и далее по циклу.
Отобранные 16 байт складываются по модулю 256 с байтами слова смещения (смотри ниже). Результат сложения и будет являться подключом .
Слова смещения — это 16-байтные константы, вычисляемые по следующей формуле:
— j-й байт i-го слова смещения. Если то этот байт заменяется на 0.
Понятно, что поскольку для различных длин ключей количество итераций шифрования различно (и равно 8, 12 и 16 для ключей длиной 128, 192 и 256 бит соответственно), то и использованы будут не все блоки смещения. Так, при длине ключа в 128 бит будут использованы только , … , для ключа в 192 бита — , … , а для ключа в 256 бит — все слова смещения.
В связи с участием алгоритма SAFER+ в конкурсе AES, к его криптоанализу было обращено весьма пристальное внимание криптологов. В результате было найдено несколько атак на алгоритм. Перечислим некоторые из них:
Атака на SAFER+ с длиной входного ключа равной 256. Для её осуществления необходимо знать всего 3 открытых текста и соответствующих им шифротекста, но при этом требуется провести тестовых операций шифрования. Понятно, что такое колоссальное количество операций делает атаку абсолютно непрактичной. Тем не менее, она показывает, что алгоритм SAFER+ обладает недостаточным запасом прочности[14].
Атака на связанных ключах, требующая около тестовых операций шифрования. Также является неосуществимой с практической точки зрения. Сами авторы этих двух атак предложили способ усиления алгоритма SAFER+, полностью защищающий от этих атак.[14] Способ заключается в усилении процедуры генерации подключей.
Алгоритм является дальнейшим развитием SAFER+, и практически полностью наследует его структуру. Различия заключаются в основном в оптимизации (с точки зрения облегчения вычислений) некоторых участков алгоритма. Он использует меньшее число раундов: семь для 128-битного ключа и десять для 256-битного ключа. Длина блока в этом шифре равна 128 битам, но помимо этого предусматривается режим «обратной совместимости» при использовании блоков длиной 64 бита.
Алгоритм прошёл во вторую фазу конкурса NESSIE, но не был выбран в набор рекомендуемых NESSIE криптографических примитивов. Эксперты сочли, что шифр слишком медленный на всех машинах, кроме смарт-карт, а запас безопасности шифра слишком мал[17].
структура блока линейного преобразования алгоритма SAFER++
Значительная часть процедуры шифрования ничем не отличается от таковой в алгоритме SAFER+. Главное различие заключается в процедуре линейного преобразования, которая была значительно оптимизирована с вычислительной точки зрения (в SAFER+ необходимо производить перемножение с матрицей размеров 16x16, что требует большого количества операций побайтового сложения).
Преимущество такого подхода по сравнению с умножением на матрицу 16x16, используемую в SAFER+, состоит в том, что для линейного преобразования, в силу структуры матриц преобразования Адамара, требуется значительно меньшее количество элементарных операций. А именно, при умножении 16-байтовой строки на матрицу 16x16 в общем случае требуется 15*16 операций сложения и 16*16 операций умножения. Умножение же на матрицу Адамарова преобразования требует всего лишь 6 операций сложения:[13]
схематическое представление умножения на матрицу 4-точечного псевдопреобразования Адамара
Если a, b, c, d — входные байты, A, B, C, D — выходные байты, то вычисления представимы формулами (сложение производится по модулю 256):
(3 операции сложения),
(1 операция сложения),
(1 операция сложения),
(1 операция сложения).
Таким образом, даже принимая во внимание, что умножение на матрицу производится 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 — второй регистр):
Выбираются 16 байт из регистра, начиная с номера i и далее по циклу. Так, для ключа с номером i=5 байты будут выбраны следующим образом: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 1, 2, 3],
Полученные байты складываются с соответствующим словом смещения (смотри ниже)
Содержимое всех байтов регистра циклически сдвигается на 6 бит в случае нечётного i, и на 3 бита в случае чётного i.
Слова смещения вычисляются практически так же, как и в 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].
↑ 1234567Шнайер Б.Глава 14. И ещё блочные шифры // Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — С. 382—384. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
Шнайер Б.Глава 14. И ещё блочные шифры // Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — С. 382—384. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.
Панасенко С.П.Эволюция алгоритмов шифрования(рус.) (15 июня 2007). — Статья с подробным рассмотрением алгоритмов SAFER K-64/128 и SAFER SK-64/128. Дата обращения: 12 ноября 2009. (недоступная ссылка)
Горбенко И.Д., Головашич С.А., Лепеха А.Н.Сравнительный анализ симметричных шифров(рус.) (2004). — сравнительный анализ блочных симметричных шифров, представленных в проекте NESSIE (включая SAFER++). Дата обращения: 12 ноября 2009. Архивировано из оригинала 16 июня 2012 года.
James L. Massey.On the Optimality of SAFER+ Diffusion.(англ.). Cylink Corporation, Sunnyvale, CA, USA. — Анализ оптимальности диффузионной части алгоритма SAFER+. Дата обращения: 12 ноября 2009. Архивировано 18 августа 2011 года.
Gurgen Khachatrian, Melsik Kuregian, Karen Ispiryan, James Massey. Differential analysis of SAFER++ algorithm // Second NESSIE workshop, Egham, UK. — Сентябрь 12-13, (2001).
Richard De Moliner.Block-cipher algorithm SAFER(англ.). — Реализация на языке C алгоритмов SAFER-K64, SAFER-K128, SAFER-SK64, SAFER-SK128. (недоступная ссылка)