Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Стандарт шифрования США нового поколения




В 80-х годах в США был принят стандарт симметричного криптоалгоритма для внутреннего применения DES, который получил достаточно широкое распространение в свое время. Однако на текущий момент этот стандарт полностью неприемлем для использования по двум причинам:

1) основной – длина его ключа составляет 56 бит, что чрезвычайно мало на современном этапе развития ЭВМ;

2) второстепенной – при разработке алгоритм был ориентирован на аппаратную реализацию, то есть содержал операции, выполняемые на микропроцессорах за неприемлемо большое время (например, такие как перестановка бит внутри машинного слова по определенной схеме).

Все это привело к тому, что в 1997 году Американский институт стандартизации (NIST) объявил конкурс на новый стандарт симметричного криптоалгоритма (AES – Advanced Encryption Standard).

На первом этапе в оргкомитет соревнования поступило 15 заявок из разных стран мира. В течение 2 лет специалисты комитета, исследуя самостоятельно, и изучая публикации других исследователей, выбрали 5 лучших представителей, прошедших в финал соревнования: MARS, RC3, Rijndael, Serpent и TwoFish. Все эти алгоритмы были признаны достаточно стойкими и успешно противостоящими всем широко известным методам криптоанализа.

2 октября 2000 года NIST объявил о своем выборе: победителем конкурса стал бельгийский алгоритм Rijndael, разработанный Йоаном Даменом (Joan Daemen) и Винсентом Райменом (Vincent Rijnmen). Название алгоритма составлено из первых букв фамилий авторов.

Шифр Rijndael выполнен в архитектуре "Квадрат" (Square) и имеет следующие параметры:

· размер блока – 128, 192 или 256 бит;

· размер ключа – 128, 192 или 256 бит;

· число раундов – 10, 12 или 14.

В алгоритме Rijndael блоки открытых и зашифрованных данных, соответственно T и T', представляются в виде массивов из N = 16, 24 или 32 байтов. В ходе криптографических преобразований исходный и зашифрованный блоки данных, а также все промежуточные результаты процесса шифрования (состояния) интерпретируются как матрицы байтов, содержащие по 4 строки. Таким образом, в зависимости от размера блока, размер матрицы составляет байта. Количество столбцов , где . Матрицы заполняются байтами входного блока (открытого текста при шифровании и шифртекста при расшифровании) по столбцам – сверху вниз и слева направо, и

точно в таком же порядке извлекаются байты из матрицы-результата:

 

. (3.3)

 

Схема преобразования данных при шифровании показана на рис. 3.3. На рисунке использованы следующие обозначения: T, T ' – открытый и зашифрованный блоки данных соответственно; i -тый ключевой элемент; F, F ' – регулярное нелинейное преобразование и преобразование последнего раунда соответственно; – промежуточное состояние шифруемого блока после прибавления i -того ключевого элемента; R – количество раундов шифрования.

 

Рис. 3.3. Схема преобразования информации в алгоритме шифрования блока Rijndael.

 

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

.

Число раундов шифрования определяется в зависимости от размера блока и ключа: из двух размеров выбирается максимальный, и если он равен 128 бит, то используется 10 раундов, если 192 бита, то 12, и если 256 – то 14 раундов. Эту зависимость можно представить таблицей 3.2.

 

Таблица 3.2

Зависимость количества раундов от размеров блока и ключа
в алгоритме Rijndael

Размер блока (бит) Размер ключа (бит)
     
       
       
       

 

Прибавление ключевых элементов, которым начинается и заканчивается процесс шифрования, а также некоторые другие операции раундового преобразования выполняется побайтно в конечном поле Галуа GF(28). Операцией сложения в нем является побитовое сложение по модулю 2. Соответственно, каждый ключевой элемент является байтовой матрицей того же самого размера, что и блок данных.

За один раунд шифрования преобразуется полный блок данных, а не его часть, как в сетях Фейстеля. На последнем раунде функция нелинейного преобразования отличается от аналогичной функции, используемой в остальных раундах – это сделано для обеспечения алгоритмической эквивалентности прямого и обратного преобразований шифрования.

Нелинейное преобразование F матрицы данных состоит из трех шагов: ByteSub – замены байтов матрицы на новые значения (S[]), ShiftRows – циклического сдвига строк матрицы влево () и MixColumns – умножения матрицы данных слева на постоянную матрицу-циркулянт M:

.

Все входные (X), выходные (X') и промежуточные значения преобразования являются матрицами байтов одинакового размера .

Функция преобразования последнего раунда F' отличается от регулярной функции преобразования F отсутствием шага MixColumns:

.

В преобразовании ByteSub каждый байт исходной матрицы данных заменяется новым значением в соответствии с единственной таблицей замены (S-Box). В этой таблице замен (табл. 3.3) заменяющее значение выбирается на пересечении строки, определяемой старшей 16-ричной цифрой заменяемого значения, и столбца, определяемого его младшей цифрой.

 

Таблица 3.3

Таблица замен преобразования ByteSub

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x   7c   7b f2 6b 6f c5       2b fe d7 ab  
1x ca   c9 7d fa     f0 ad d4 a2 af 9c a4   c0
2x b7 fd       3f f7 cc   A5 e5 f1   d8    
3x   c7   c3       9a       e2 eb   b2  
4x     2c 1a 1b 6e 5a a0   3b d6 b3   e3 2f  
5x   d1   ed   fc b1 5b 6a cb be   4a 4c   cf
6x d0 ef aa fb   4d       f9   7f   3c 9f a8
7x   a3   8f   9d   f5 bc b6 da     ff f3 d2
8x cd 0c   ec 5f       c4 a7 7e 3d   5d    
9x     4f dc   2a       ee b8   de 5e 0b db
Ax e0   3a 0a       5c c2 d3 ac       e4  
Bx e7 c8   6d 8d d5 4e a9 6c   f4 ea   7a ae  
Cx ba     2e 1c a6 b4 c6 e8 dd   1f 4b bd 8b 8a
Dx   3e b5       f6 0e       b9   c1 1d 9e
Ex e1 f8       d9 8e   9b 1e   e9 ce     df
Fx 8c a1   0d bf e6         2d 0f b0   bb  

В ходе операции ShiftRows каждая строка матрицы данных, кроме первой, циклически сдвигается влево на определенное число позиций, зависящее от номера строки и от числа столбцов матрицы. Табл. 3.4 описывает указанную зависимость.

Таблица 3.4

Зависимость количества сдвигов строки
в преобразовании ShiftRows

№ строки Количество столбцов (n)
     
       
       
       
       

 

На шаге MixColumns каждый столбец исходной матрицы слева умножается на постоянную матрицу-циркулянт M:

,

.

При выполнении матричного умножения операции сложения и умножения выполняются в конечном поле GF(28). Матрица M является циркулянтом: каждая ее строка получается циклическим сдвигом предыдущей строки вправо на один элемент. Элементы матрицы выбраны таким образом, чтобы свести к минимуму трудоемкость операции умножения: в ней присутствуют лишь небольшие по значению числа 01, 02 и 03, половина элементов – единичные, т.е. реального умножения выполнять для них не требуется. Этим самым обеспечивается высокая эффективность возможных реализаций этой операции.

Следует добавить, что операция умножения в конечном поле GF(28) является достаточно трудоемкой в программной реализации и никаким образом не сводится к обычному арифметическому умножению. Если умножение двоичных чисел реализуется сдвигами и обычным арифметическим суммированием, то умножение полиномов над полем GF(28) – теми же сдвигами и побитовым суммированием по модулю 2. Однако в шифре Rijndael одним из множителей всегда является константа и размер операндов невелик – один байт. Это позволяет реализовать умножение на константу в поле GF(28) как замену, что существенно повышает эффективность программной реализации. Для каждого множителя-константы при этом требуется свой отдельный узел замен. Напротив, наиболее эффективной аппаратной реализацией этой операции является реализация в виде серии сдвигов и побитовых сложений по модулю два в соответствие с ее непосредственным определением.

Рис. 3.4 иллюстрирует операции ByteSub, ShiftRows и MixColumns.

Размер ключа в шифре Rijndael равен 128, 192 или 256 бит. Размер ключевого элемента, используемого на раунде, совпадает с размером блока и также равен 128, 192 или 256 бит независимо от размера ключа. Число раундов шифрования находится в пределах от 10 до 14. Массив ключевых элементов вырабатывается из ключа шифрования с использованием KeyExpansion – процедуры "развертывания" ключа.

Алгоритм KeyExpansion (развертывания ключа) оперирует 32-битовыми ключевыми словами Wi, интерпретируя их как четырехбайтовые массивы: .

Первые (здесь – количество байтов ключа) ключевых слов получаются простым разделением ключа K на 4-байтовые фрагменты аналогично тому, как байтами шифруемого блока заполняются столбцы матрицы данных:

Необходимое число ключевых элементов на 1 больше числа раундов R, каждый ключевой элемент по размеру равен блоку данных ( байт) и содержит ключевых слов. Таким образом, всего необходимо ключевых слов.

 

 

Рис. 3.4. Иллюстрация основных операций шифра Rijndael.

 

 

Первые q ключевых слов составлены из байтов ключа как показано выше, остальные Q – q вырабатываются по следующему алгоритму.

При размере ключа 16 или 24 байта () используется следующая итерационная формула:

а при размере ключа 32 байта (q = 8) – следующая:

В приведенных выше формулах использованы следующие обозначения: S(W) – побайтовая замена с использованием штатного узла замен S, – циклический сдвиг 4-байтового вектора на один элемент влево, – раундовая константа, представляющая собой 4-байтовый вектор , где возведение в степень выполняется в поле GF(28).

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

Как видно из приведенных выше соотношений, ключевые слова вырабатываются порциями, по размеру равными ключу, причем первое слово каждой порции вырабатывается по усложненной схеме с использованием приведенного выше нелинейного преобразования, а остальные – простым побитовым суммированием непосредственно предшествующего элемента с элементом, имеющим тот же порядковый номер в предыдущей порции ключевых слов. При размере ключа 256 бит (32 байта) усложнение используется также и при выработке каждого пятого элемента порции – при нумерации с нуля он имеет индекс 4 в группе из q слов.

Каждые последовательно выработанные ключевых слов (включая и те, что получены непосредственно из ключа) объединяются в раундовые ключевые элементы:

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

В этом случае столбцы матрицы ключевого элемента образуются ключевыми словами:

Процесс расшифрования блока данных алгоритмически идентичен процессу его шифрования (рис. 3.3), если через T обозначить блок зашифрованных данных, а через T' – открытых. Расшифрование отличается от шифрования по следующим четырем пунктам:

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

2. На шаге побайтовой замены используется узел замен обратный тому, что применяется в процедуре шифрования S. Это означает, что каково бы ни было байтовое значение b, всегда справедливо следующее соотношение: . Указанный узел замен представлен в табл. 3.5.

Таблица 3.5

Таблица замен обратного преобразования ByteSub

  x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF
0x     6a d5     a5   bf   a3 9e   f3 d7 fb
1x 7c e3     9b 2f ff     8e     c4 de e9 cb
2x   7b     a6 c2   3d ee 4c   0b   fa c3 4e
3x   2e a1     d9   b2   5b a2   6d 8b d1  
4x   f8 f6           d4 a4 5c cc 5d   b6  
5x 6c       fd ed b9 da 5e       a7 8d 9d  
6x   d8 ab   8c bc d3 0a f7 e4     b8 b3    
7x d0 2c 1e 8f ca 3f 0f   c1 af bd       8a 6b
8x 3a       4f   dc ea   f2 cf ce f0 b4 e6  
9x   ac     e7 ad     e2 f9   e8 1c   df 6e
Ax   f1 1a   1d   c5   6f b7   0e aa   be 1b
Bx fc   3e 4b c6 d2     9a db c0 fe   cd 5a f4
Cx 1f dd a8       c7   b1           ec 5f
Dx     7f a9   b5 4a 0d 2d e5 7a 9f   c9 9c ef
Ex a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c        
Fx   2b   7e ba   d6   e1           0c 7d

 

3. На шаге построчного вращения матрицы данных осуществляется циклический сдвиг строк на то же самое количество элементов, что и при шифровании, но в обратную сторону – вправо.

4. На шаге умножения слева на постоянную матрицу используется матрица , обратная используемой при шифровании матрице M:





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 1223 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Большинство людей упускают появившуюся возможность, потому что она бывает одета в комбинезон и с виду напоминает работу © Томас Эдисон
==> читать все изречения...

2551 - | 2215 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.