Алгоритм SAFER+

был разработан в 1998 г. по заказу той же корпорации Cylink, что и рассмотренные в разд. 3.44 алгоритмы семейства SAFER, специально для участия в конкурсе AES (см. разд. 2.1). SAFER+ является усовершенствованием ранее разработанных алгоритмов семейства SAFER. В его разработке, помимо Джеймса Мэсси, принимали участие специалисты Академии Наук Армении Гурген Хачатрян (Gurgen Н. Khachatrian) и Мельсик Курегян (Melsik К. Kuregian).

Структура алгоритма

Согласно требованиям конкурса AES, в отличие от алгоритмов SAFER К и SAFER SK, алгоритм SAFER+ шифрует данные 128-битными блоками. Таким образом, обрабатываемый блок данных имеет размер 16 байтов, которые нумеруются слева направо от 1 до 16. Для удобства дальнейшего описания байты данных можно разделить на 2 группы:

?      группа № 1: байты №№ 1,4,5,8,9, 12, 13 и46;

?      группа № 2: остальные байты.

Количество раундов R определяется размером ключа (согласно требованиям конкурса, алгоритм должен поддерживать 128-, 192- и 256-битные ключи):

?        R = 8 для 128-битного ключа;

?        R = 12 для 192-битного ключа;

?        R = 16 для 256-битного ключа.

Рис. 3.171. Раунд алгоритма SAFER+

По своей структуре алгоритм SAFER+ весьма похож на SAFER К-64 (с учетом измененного размера блока; алгоритм SAFER К-64 подробно описан в разд. 3.44). В каждом раунде алгоритма выполняются следующие действия (рис. 3.171) [253]:

1.        Первое наложение ключа. На данные накладывается 16-байтный фрагмент расширенного ключа К1{_х, где i — номер текущего раунда (раунды нумеруются, начиная с 1; процедура расширения ключа будет описана далее). Группа № 1 байтов ключа накладывается на аналогичные байты данных с помощью операции XOR; для наложения остальных байтов ключа используется операция сложения по модулю 256.

2.        Нелинейное преобразование. Выполняется с помощью тех же описанных в разд. 3.44 операций L и Е: операция Е применяется к байтам 1-й группы, а к остальным байтам применяется операция L.

3.        Второе наложение ключа с использованием фрагмента К1{. Для обработки 1-й группы байтов используется операция сложения по модулю 256, для остальных — операция XOR.

4.        Умножение 16-байтного блока данных на матрицу М (по модулю 256), приведенную в табл. 3.102.

Таблица 3.102

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

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

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

В зависимости от требований к реализации алгоритма, умножение на матрицу М может быть заменено 4-мя уровнями преобразований РНТ (РНТ было описано в разд. 3.44), между которыми выполняются три байтовые перестановки (по одной между каждыми двумя уровнями — см. рис. 3.172), представленные в табл. 3.103, 3.104 и 3.105 [336]:

Таблица 3.103

9

2

11

4

5

16

7

14

3

12

1

10

15

8

13

6

Таблица 3.104

5

2

3

8

1

6

7

10

9

14

15

12

13

14

11

16

Таблица 3.105

1

4

3

6

5

8

7

2

9

12

И

10

13

16

15

14

Рис. 3.172. Альтернативное представление умножения на матрицу М

Это означает (на примере последней из данных перестановок), что байт № 1 остается на своем месте, входное значение байта № 4 становится выходным значением байта № 2 и т. д.

После выполнения R раундов алгоритма производится выходное преобразование, которое полностью аналогично описанной выше операции первого наложения ключа; здесь используется последний из фрагментов расширенного ключа K2r+\ •

Таким образом, различия между SAFER+ и SAFER К-64 (не считая процедуры расширения ключа) сводятся к следующим:

?     размер шифруемого блока данных удвоен, причем первые три операции раунда, фактически, не изменились, а просто «расширились» на 128- битный блок;

?     более существенно изменилось применение преобразований РНТ— теперь 4 уровня вместо трех плюс «несимметричность» перестановок между уровнями.

Расшифровывание

Как и в алгоритме SAFER К-64, расшифровывание в SAFER+ выполняется применением обратных операций в обратной последовательности (см., в частности, рис. 3.173). Поэтому не привожу здесь подробное описание расшифровывания, ограничившись только матрицей М-1, заменяющей 4 уровня обратных преобразований IPHT— см. табл. 3.106.

Таблица 3.106

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

-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

 

Рис. 3.173. Раунд расшифровывания алгоритма SAFER+

Процедура расширения ключа

Расширение ключа алгоритма SAFER+ похоже на таковое у алгоритма

SAFER SK-64 с учетом увеличения размера блока (и, соответственно, удвоения размера каждого фрагмента расширенного ключа). Данная процедура

выполняется следующим образом (рис. 3.174):

1.        Вычисляется дополнительный байт (как и в SAFER SK-64, операцией XOR, применяемой ко всем байтам исходного ключа шифрования). То есть, например, для 256-битного ключа получается временный ключ размером 33 байта.

2.        Значение каждого байта временного ключа циклически сдвигается влево на 3 бита.

3.        После выполнения сдвига выбираются 16 байтов, начиная с байта, номер которого соответствует номеру раунда расширения ключа / (например, для раунда № 18 расширения 256-битного ключа выбираются байты с 18 по 33-й, для последующих раундов необходимое количество байтов «добирается», начиная с 1-го байта).

4.         Выбранные байты побайтно складываются по модулю 256 с соответствующими байтами 16-байтной константы В(. Константы Bt описаны далее. Результатом данного шага является очередной фрагмент ключа К{.

5.           Шаги 2-4 представляют собой раунд процедуры расширения ключа. Раунды нумеруются, начиная с 2. Фрагментом К j являются первые 16 байтов исходного ключа шифрования без каких-либо изменений.

Константы Bi вычисляются с помощью следующих формул:


Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100