Математика криптографии и теория шифрования

Усовершенствованный стандарт шифрования (AES — Advanced Encryption Standard)

Разбить на страницы
Показывать лекцию целиком

10.1. Расширение ключей

Для того чтобы создать ключ для каждого раунда, AES использует процесс ключевого расширения. Если номер раунда — Nr, процедура расширения ключей создает Nr+1 ключи раунда на 128 бит от единственного 128 -битового ключа шифра. Первые ключи раунда используются для преобразования перед раундом (AddRoundKey); остающиеся ключи раунда применяются для последнего преобразования (AddRoundKey) в конце каждого раунда.

Процедура расширения ключей создает слово за словом ключи раунда, где слово — массив из четырех байтов. Процедура создает 4 x (Nr + 1) слова, которые обозначаются

w0, w1, w2..., w4(Nr+1)-1

Другими словами, в версии AES-128 ( 10 раундов) имеются 44 слова; в AES-192 версии ( 12 раундов), есть 52 слова; и в AES 256 версий (с 14 раундами) есть 60 слов. Каждый ключ раунда состоит из четырех слов. Таблица 10.1 показывает отношения между раундами и словами.

Слова для каждого раунда
Раунд Слова
1 w0 w1 w2 w3
2 w4 w5 w6 w7
..... .....
Nr w4Nr w4Nr+1 w4Nr+2 w4Nr+3

Расширение ключей в AES-128

Посмотрим, как создаются ключи в версии AES-128; процессы для других двух версий за исключением небольших изменений — те же самые. Рисунок 10.1 показывает, как из исходного ключа получить 44 слова.

(рис 10.1) Расширение ключей в AES

Процесс следующий:

1. Первые четыре слова ( W0,W1,W2,W3 ) получены из ключа шифра. Ключ шифра представлен как массив из 16 байтов ( k0 до k15 ). Первые четыре байта ( k0 до k3 ) становятся W0 ; следующие четыре байта ( k4 до k7 ) становятся w1 ; и так далее. Другими словами, последовательное соединение (конкатенация) слов в этой группе копирует ключ шифра.

2. Остальная часть слов ( wi ) от i = 4 – 43 получается следующим образом:

a. Если $$(i\ mod\ 4) \ne 0,\ w_{i} = w_{i - 1} \oplus w_{i - 4}$$, то согласно рисунку 10.1 это означает, что каждое слово получено из одного левого и одного верхнего.

b. Если $$(i\ mod\ 4) = 0,\ w_{i} = t \oplus w_{i - 4}$$. Здесь t — временное слово, результат применения двух процессов, subword и rotword, со словом wi-1 и применения операции ИСКЛЮЧАЮЩЕЕ ИЛИ c константой раунда Rcon. Другими словами, мы имеем

$$t = SubWord(Rotword\ (w_{i-1})) \oplus RCon_{i/4}.$$

RotWord

RotWord (rotate word) — процедура, подобная преобразованию ShiftRows, но применяется только к одной строке. Процедура принимает слово как массив из четырех байт и сдвигает каждый байт влево с конвертированием.

SubWord

SubWord (substitute word) — процедура, подобная преобразованию SubBytes, но применяется только к одной строке. Процедура принимает каждый байт в слове и заменяет его другим.

RoundConstants

Каждая константа раунда Rcon — это 4 -байтовое значение, в котором самые правые три байта являются всегда нулевыми. Таблица 10.2 показывает значения для версии AES-128 (с 10 раундами).

Константы RCon
Раунд Константа (RCon) Раунд Константа (RCon)
1 (01 00 00 00)16 6 (20 00 00 00)16
2 (02 00 00 00)16 7 (40 00 00 00)16
3 (04 00 00 00)16 8 (80 00 00 00)16
4 (08 00 00 00)16 9 (1B 00 00 00)16
5 (10 00 00 00)16 10 (36 00 00 00)16

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

RC1 -> x1-1 = x0 mod prime = 1 -> 00000001 -> 0116

RC2 -> x2-1 = x1 mod prime = x -> 00000010 -> 0216

RC3 -> x3-1 = x2 mod prime = x2 -> 00000100 -> 0416

RC4 -> x4-1 = x3 mod prime = x3 -> 00001000 -> 0816

RC5 -> x5-1 = x4 mod prime = x4 -> 00010000 -> 1016

RC6 -> x6-1 = x5 mod prime = x5 -> 0100000 -> 2016

RC7 -> x7-1 = x6 mod prime = x6 -> 01000000 -> 4016

RC8 -> x8-1 = x7 mod prime = x7 -> 10000000 -> 8016

RC9 -> x9-1 = x8 mod prime = x4+x3+x+1 -> 00011011 -> 1B16

RC10 -> x10-1 =x9 mod prime = x5+x4+x2+x -> 00110110 -> 3616

Крайний левый байт, который обозначен RCi — это xi-1, где i — номер раунда. AES использует неприводимый полином ( x8 + x4 + x3 + x +1 ).

Алгоритм

Алгоритм 10.1 — простой алгоритм для процедуры расширения ключа (версия AES-128).

$$\tt\parindent0pt

KeyExpansion ([$key_{0}$ to $key_{15}$], [$w_{0}$ to $w_{43}$]

\{ 

for (i = 0 to 3) 

$w_{i} \gets  key_{4i} + key_{4i+1} + key_{4i+2} + key_{4i+3}$

\ for (i = 4 to 43) 

\ \{ 

\ \ \ if (i mod 4 $\ne$  0)  $w_{i} \gets  w_{i-1} + w_{i-4}$

\ \ \ else

\ \ \ \{ 

\ \ \ \ \ t $\gets$  SubWord (RotWord ($w_{i-1}$)) $\oplus$  $RCon_{i/4}$

\ \ \ \ \ $w_{i} \gets  t + w_{i-4}$ \ \ \ \ \     // t  is a temporary word

\ \ \ \} 

\ \} 

\}	$$

Пример 10.1

Таблица 10.3 показывает, как вычисляются ключи для каждого раунда. Предполагается, что между Алисой и Бобом согласован ключ шифра на 128 битов — (24 75 A2 B3 34 75 56 88 31 E2 12 00 13 AA 54 87) 16.

Пример расширения ключей
Раунд Значения t Первое слово в раунде Второе слово в раунде Третье слово в раунде Четвертое слово в раунде
- w00=2475A2B3 w01=34755688 w02=31E21200 w03=13AA5487
1 AD20177D w04=8955B5CE w05=BD20E346 w06=8CC2F146 w07=9F68A5C1
2 470678DB w08=CE53CD15 w09=73732E53 w10=FFB1DF15 w11=60D97AD4
3 31DA48DO w12=FF8985C5 w13=8CFAAB96 w14=734B7483 w15=2475A2B3
4 47AB5B7D w16=B822DEB8 w17=34D8752E w18=479301AD w19=54010FFA
5 6C762D20 w20=D454F398 w21=E08C86B6 w22=A71F871B w23=F31E88E1
6 52C4F80D w24=86900B95 w25=661C8D23 w26=C1030A38 w27=321D82D9
7 E4133523 w28=62833EB6 w29=049FB395 w30=C59CB9AD w31=F7813B74
8 8CE29268 w32=EE61ACDE w33=EAFE1F4B w34=2F62A6E6 w35=D8E39D92
9 OA5E4F61 w36=E43FE3BF w37=OEC1FCF4 w38=21A35A12 w39=F940C780
10 3PC6CD99 w40=DBF92E26 w41=D538D2D2 w42=F49B88CO w43=ODDB4F40

В каждом раунде вычисление последних трех слов очень просто. Для вычисления первого слова мы должны сначала вычислить значение временного слова (t). Например, первое t (для раунда 1 ) вычислено как

$$RotWord (13AA5487) = AA548713 \to SubWord (AA548713) = AC20177D \\ t = AC20177D \oplus Rcon_{1} = AC20 17 7D \oplus 01000000_{16} = AD20177D$$

Пример 10.2

Каждый ключ раунда в AES зависит от предыдущих ключей раунда. Зависимость, однако, нелинейная из-за преобразования SubWord. Сложение констант раунда также гарантирует, что каждый ключ раунда будет отличаться от предыдущего.

Пример 10.3

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

Как показывает таблица 10.4, имеются существенные разности между двумя соответствующими ключами раунда — R означает "раунд", B и D означают разность битов.

Сравнение двух множеств ключей раунда
R. Ключи для множества 1 Ключи для множества 2 B.D.
- 1245A2A1 2331A4A3 B2CCAA34 C2BB7723 1245A2A1 2331A4A3 B2CCAB34 C2BB7723 01
1 F9B08484 DA812027 684D8A13 AAF6FD30 F9B08484 DA812027 684D8B13 AAF6FC30 02
2 B9E48028 6365AOOF OB282A1C A1DED72C B9008028 6381AOOF OBCC2B1C A13AD72C 17
3 AOEAF11A C38F5115 C8A77B09 6979AC25 3DOEF11A 5E8F5115 55437A09 F479AD25 30
4 1E7BCEE3 DDF49FF6 1553E4FF 7C2A48DA 839BCEA5 DD149FBO 8857E5B9 7C2E489C 31
5 EB2999F3 36DD0605 238EE2FA 5FA4AA20 A2C910B5 7FDD8F05 F78A6ABC 8BA42220 34
6 82852E3C B4582839 97D6CAC3 C87260E3 CB5AA788 B487288D 430D4231 C8A96011 56
7 82553FD4 360D17ED A1DBDD2E 69A9BDCD 588A2560 ECODODED AF004FDC 67A92FCD 50
8 D12F822D E72295CO 46F948EE 2F50F523 OB9F98E5 E7929508 4892DAD4 2F3BF519 44
9 99C9A438 7EEB31F8 38127916 17428C35 F2794CFO 15EBD9F8 5D79032C 7242F635 51
10 83AD32C8 FD460330 C5547A26 D216F613 E83BDABO FDD00348 AOA90064 D2EBF651 52

Пример 10.4

Понятие слабых ключей, которое мы обсуждали для DES в лекции 8, не применимо к AES. Предположим, что все биты в ключе шифра — нули. Ниже для этого случая показаны слова для некоторых раундов:

Все слова перед раундом и в первом раунде равны между собой. Во втором раунде первое слово соответствует третьему; второе слово соответствует четвертому. Однако после второго раунда совпадений нет; каждое слово различно.

Расширение ключа в AES-192 и AES-256

Алгоритмы расширения ключей в AES-192 и AES-256 — очень похожи на алгоритм расширения ключа в AES-128, со следующими отличиями:

1. В AES-192 слова сгенерированы в группы по шесть вместо четырех.

a. Ключ шифра создает первые шесть слов ( w0 к w5 ).

b. Если $$i\ mod\ 6 \ne 0$$, то $${w_i} \leftarrow {w_{i - 1}} + {w_{i - 6}}$$ ; иначе $${w_i} \leftarrow t + {w_{i - 6}}$$.

1. В AES-256 слова сгенерированы в группы по восемь вместо четырех.

a. Ключ шифра создает первые восемь слов ( w0 до w7 ).

b. Если $$i{\text{ }}\bmod {\text{ }}8 \ne 0 $$, то $${w_i} \leftarrow {w_{i - 1}} + {w_{i - 8}}$$ ; иначе, wi <-t + wi-8.

c. Если i mod 4=0, но $$i{\text{ }}\bmod {\text{ }}8 \ne 0 $$, то wi = Subword (wi-1) + wi-8.

Анализ расширения ключа

Механизм расширения ключа в AES был разработан так, чтобы обеспечить несколько свойств, которые срывают действия криптоаналитика по раскрытию сообщения.

  • Даже если Ева знает только часть ключа шифра или значения слов в некотором ключевом раунде, этого недостаточно: она еще должна найти остальную часть ключа шифра, прежде чем сможет найти ключи всех раундов. Это обеспечивается нелинейностью процесса расширения ключа, полученной с помощью преобразования SubWord.
  • Два различных ключа шифра, независимо от того, как они соотносятся друг с другом, производят два расширения, которые отличаются по крайней мере в нескольких раундах.
  • Каждый бит ключа шифра изменяется в нескольких раундов. Например, изменение единственного бита в ключе шифра изменяет некоторые биты в нескольких раундах.
  • Использование констант, RCons, удаляет любую симметрию, которая может быть создана другими преобразованиями.
  • В отличие от DES в AES отсутствуют любые слабые ключи.
  • Процесс расширения ключа может быть легко реализован на всех платформах.
  • Процедура расширения ключа может быть реализована без применения отдельных таблиц; вычисления могут быть сделаны с использованием полей GF(28) и FG(2).
  • 10.2. Шифры

    Теперь посмотрим, как AES использует четыре типа преобразований для шифрования и дешифрования. В стандарте алгоритм шифрования упоминается как шифр и алгоритм дешифрования — как обратный шифр.

    Как мы упоминали прежде, ADVANCED ENCRYPTION STANDARD — шифр не-Файстеля, а это означает, что каждое преобразование или группа преобразований должны быть обратимыми. Кроме того, шифр и обратный шифр должны использовать эти операции таким способом, чтобы они отменяли друг друга. Ключи раунда должны использоваться в обратном порядке. Ниже приведены два различных проекта, которые могут быть использованы для различных реализаций. Мы обсудим оба проекта для AES-128; для других версий применяются те же самые проекты.

    (рис 10.2) Шифр и обратный шифр начального проекта

    Первоначальный проект

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

    Во-первых, в обратном шифре изменяется порядок следования SubBytes (InvSubBytes) и ShiftRows (InvShiftRows). Во-вторых, в обратном шифре изменен порядок выполнения MixColumns и AddRoundKey. Эти изменения в порядке необходимы, чтобы в обратном шифре сделать порядок работы обратных преобразований инверсным по отношению к прямому шифру. Следовательно, алгоритм дешифрования в целом — инверсия алгоритма шифрования. Мы показали только три раунда, но остальные имеют тот же самый вид. Обратите внимание, что ключи раунда используются в измененном порядке. Обратите также внимание, что алгоритмы шифрования и дешифрования в первоначальном проекте не совпадают.

    Алгоритм

    Код для версии AES-128 этого проекта показан в алгоритме 10.2. Код для обратного шифра оставляем как упражнение.

    $$\tt\parindent0pt
    
    Cipher( InBlock[16], OutBlock[16], w[0…43])
    
    \ 
    
    \{ 
    
    BlockToState (InBlock, S)
    
    \ 
    
    S $\gets$  SubBytes (S)
    
    for (round = 1 to 10)
    
    \{ 
    
    S $\gets$  ShiftRows (S)
    
    If (round $\ne$  10)   S $\gets$  MixColumns (S)
    
    S $\gets$  AddRoundKey (S, w[4 x round, 4 x round + 3])
    
    \} 
    
    StateToBlock (S, OutBlock);
    
    \}	$$

    Альтернативный проект

    Для тех приложений, которые предпочитают совпадающие алгоритмы для шифрования и дешифрования, был разработан обратный шифр. В такой версии преобразования в обратном шифре перестроены так, чтобы cделать порядок преобразований тем же самым в прямом шифре и обратном шифре. В этом проекте обеспечена обратимость для пары преобразований, а не для каждого одиночного преобразования.

    Пары SubBytes/ShiftRows

    SubBytes изменяет содержание каждого байта, не изменяя порядок байтов матрицы состояний; ShiftRows изменяет порядок байтов в матрице состояний, не изменяя содержание байтов. Это подразумевает, что мы можем изменить порядок этих двух преобразований в обратном шифре, не затрагивая обратимость целого алгоритма; рисунок 10.3 иллюстрирует идею. Обратите внимание, что комбинации двух преобразований — в шифре и обратном шифре — инверсны друг другу.

    (рис 10.3) Обратимость совокупности SubByte и SiftRows

    Пара MixColumns/AddRoundKey

    Здесь применяются два преобразования, которые имеют различные свойства. Однако эти пары могут стать инверсиями друг друга, если мы умножим матрицу ключей на инверсию матрицы констант, используемой в преобразовании MixColumns. Мы называем новое преобразование InvAddRoundKey. Рисунок 10.4 показывает новую конфигурацию.

    (рис 10.4) Обратимость совокупности MixColumns и AddRoundKey

    Можно доказать, что эти две комбинации теперь инверсны друг другу. В шифре мы обозначим входную матрицу состояний — S и выходную матрицу — T. В обратном шифре входная матрица — T. Ниже показано, что выходная матрица состояний — также S. Обратите внимание, что преобразование MixColumns — фактически произведение матрицы C (матрицы констант на матрицу состояний).

    $$Cipher: T = CS \oplus K \\ Inverse Cipher: С^{-1} \oplus C^{-1}'K=C^{-1}(CS \oplus K) \oplus C^{-1}K = C^{-1}CS \oplus C^{-1}K \oplus C^{-1}K = S$$

    Теперь мы можем показать шифр и обратный шифр для альтернативного проекта. Обратите внимание, что мы все еще должны использовать два преобразования AddRoundKey в дешифровании. Другими словами, мы имеем девять InvAddRoundKey и два AddRoundKey преобразования, как это показано на рис. 10.5.

    Изменение алгоритма расширения ключей

    Вместо того чтобы использовать преобразование InvRoundKey в обратном шифре, можно изменить алгоритм расширения ключей так, чтобы создавать различное множество ключей раунда для обратного шифра. Однако отметим, что ключ раунда для операций предварительного раунда и последнего раунда должен быть изменен. Ключи раунда от 1 до 9 необходимо умножить на матрицу констант. Этот алгоритм оставим для упражнений.

    10.3. Примеры

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

    (рис 10.5) Шифр и обратный шифр альтернативного проекта

    Пример 10.5

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

    Таблица 10.5. показывает значения матрицы состояний и ключей раунда для этого примера.

    Пример шифрования
    Раунд Входная матрица состояний Выходная матрица состояний Ключ раунда
    Предварительный раунд 00 12 OC 08 24 26 3D 1B 24 34 31 13
    04 04 00 23 71 71 E2 89 75 75 E2 AA
    12 12 13 19 BO 44 01 4D A2 56 12 54
    14 00 11 19 A7 88 11 9E B3 88 00 87
    1 24 26 3D 1B 6C 44 13 BD 89 BD 8C 9F
    71 71 E2 89 Bl 9E 46 35 55 20 C2 68
    BO 44 01 4D C5 B5 F3 02 B5 E3 F1 A5
    A7 88 11 9E 5D 87 FC 8C CE 46 46 C1
    2 6C 44 13 BD 1A 90 15 B2 CE 73 FF 60
    Bl 9E 46 35 66 09 ID FC 53 73 Bl D9
    C5 B5 F3 02 20 55 5A B2 CD 2E DF 7A
    5D 87 PC 8C 2B CB 8C 3C 15 53 15 D4
    3 1A 90 15 B2 F6 7D A2 BO FF 8C 73 13
    66 09 ID FC 1B 61 B4 B8 89 FA 4B 92
    20 55 5A B2 67 09 C9 45 85 AB 74 OE
    2B CB 8C 3C 4A 5C 51 09 C5 96 83 57
    4 F6 7D A2 BO CA E5 48 BB B8 34 47 54
    1B 61 B4 B8 D8 42 AF 71 22 D8 93 01
    67 09 C9 45 Dl BA 98 2D DE 75 01 OF
    4A 5C 51 09 4E 60 9E DF B8 2E AD FA
    5 CA E5 48 BB 90 35 13 60 D4 EO A7 F3
    D8 42 AF 71 2C FB 82 3A 54 8C IF IE
    Dl BA 98 2D 9E FC 61 ED F3 86 87 88
    4E 60 9E DF 49 39 CB 47 98 B6 1B El
    6 90 35 13 60 18 OA B9 B5 86 66 C1 32
    2C FB 82 3A 64 68 6A FB 90 1C 03 ID
    9E FC 61 ED 5A EF D7 79 OB 8D OA 82
    49 39 CB 47 8E B2 10 4D 95 23 38 D9
    7 18 OA B9 B5 01 63 F1 96 62 04 C5 F7
    64 68 6A FB 55 24 3A 62 83 9F 9C 81
    5A EF D7 79 F4 8A DE 4D 3E B3 B9 3B
    8E B2 10 4D CC BA 88 03 B6 95 AD 74
    8 01 63 F1 96 2A 34 D8 46 EE EA 2F D8
    55 24 3A 62 2D 6B A2 D6 61 FE 62 E3
    F4 8A DE 4D 51 64 CF 5A AC IF A6 9D
    CC BA 88 03 87 A8 F8 28 DE 4B E6 92
    9 2A 34 D8 46 OA D9 Fl 3C E4 OE 21 F9
    2D 6B A2 D6 95 63 9F 35 3P Cl A3 40
    51 64 CF 5A 2A 80 29 00 E3 FC 5A C7
    87 A8 F8 28 16 76 09 77 BF F4 12 80
    10 OA D9 Fl 3C BC EO 55 E6 DB D5 F4 OD
    95 63 9F 35 02 E3 OD Fl F9 38 9B DB
    2A 80 29 00 8B Bl 6D 82 2E D2 88 4F
    16 76 09 77 D3 95 F8 41 26 D2 CO 40

    Пример 10.6

    Пример показывает матрицы состояний, раунд 7 в примере 10.5.

    Пример 10.7

    Один из курьезных случаев при рассмотрении шифрования — когда исходный текст состоит из одних нулей. Используем ключ шифра из примера 10.5 и получаем зашифрованный текст:

    Пример 10.8

    Давайте проверим лавинный эффект, который мы обсуждали в лекции 8. Изменим только один бит в исходном тексте и сравним результаты. Мы изменили только один бит в последнем байте. Результат показывает эффект рассеивания и перемешивания. Изменение единственного бита в исходном тексте затронуло много бит в зашифрованном тексте.

    Пример 10.9

    Ниже показан эффект использования ключа шифрования "все нули".

    10.4. Анализ AES

    Далее дан краткий обзор трех характеристик AES.

    Безопасность

    AES был разработан после DES. Большинство известных атак на DES было проверено на AES; ни одна из них до сих пор не нарушила безопасность AES.

    Атака грубой силы

    AES явно более безопасен, чем DES, из-за большего размера ключа ( 128, 192 и 256 битов). Давайте сравним DES с ключом шифра на 56 битов и AES с ключом шифра на 128 битов. Для DES, чтобы найти ключ, мы нуждаемся в 256 испытаний (игнорируя проблему дополнения ключа); для AES — в 2128 испытаниях. Это означает, что если мы можем нарушить DES в t секунд, нам нужно ( $${2^{72}} \times t$$ ) секунд, чтобы нарушить AES. Это почти невозможно. Кроме того, AES обеспечивает две другие версии более длинными ключами шифра. Отсутствие слабых ключей — еще одно преимущество AES перед DES.

    Статистические атаки

    Сильное рассеивание и перемешивание, обеспеченное комбинацией преобразований SubByte, ShiftRows и MixColumns, удаляют любую частотную закономерность в исходном тексте. Многочисленные испытания не сумели выполнить статистический анализ зашифрованного текста.

    Дифференциальные и линейные атаки

    AES был разработан после DES. Дифференциальные и линейные атаки криптоанализа были, без сомнения, учтены. Подобные атаки на AES пока не обнаружены.

    Реализация

    AES может быть реализован в программном обеспечении, аппаратных средствах и программируемом оборудовании. Реализация может применять процесс поиска в таблице или процедуры, в которых использована четкая алгебраическая структура. Преобразование может быть ориентировано или на байт, или на слово. В ориентированной на байт версии алгоритм может использовать процессор на 8 битов; в ориентированной на слово версии — процессор на 32 бита. В любом случае, обработка делается очень быстро.

    Простота и стоимость

    Алгоритмы, используемые в AES, настолько просты, что могут быть легко реализованы с помощью дешевых процессоров и минимального объема памяти.

    10.5. Рекомендованная литература

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

    Книги

    [Sta06] [Sti06] [Rhe03], [Sal03], [Mao04] и [TW06] рассматривают AES.

    Сайты

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

  • csrc.nist.gov/publications/fips/ripsl97/fips-197.pdf
  • http://www.quadibloc.com/crypto/co040401 .htm
  • http: // www. ietef.org/rfc/rfc 3394. txt
  • 10.6. Итоги

  • Усовершенствованный стандарт шифрования (AES — ADVANCED ENCRYPTION STANDARD) — стандарт блочного шифра с симметричными ключами, опубликованный Национальным Институтом стандартов NIST (National Institute of Standard and Technology) как Федеральный Стандарт Обработки Информации 197 (FIPST-197 — FEDERAL INFORMATION PROCESSING STANDARD 197). AES базируется на Rijndael алгоритме.
  • AES — шифр не-Файстеля, который зашифровывает и расшифровывает блок данных длиной 128 битов. Оно использует 10, 12 или 14 раундов.
  • Размер ключа, который может быть 128, 192 или 256 битов, зависит от числа раундов.
  • AES ориентирован на работу с байтами. Исходный текст на 128 битов или зашифрованный текст рассматривается как шестнадцать байтов по 8 битов. Чтобы обеспечить выполнение некоторых математических преобразований на байтах, в AES определено понятие матрицы состояний. Матрица состояний — это матрица $$4 \times 4$$, в которой каждый вход является байтом.
  • Чтобы обеспечить безопасность, AES использует четыре типа преобразований: подстановка, перестановка, смешивание и добавление ключа. Каждый раунд AES, кроме последнего, применяет эти четыре преобразования. Последний раунд использует только три из четырех преобразований.
  • Подстановка определяется либо процессом поиска в таблице, либо математическим вычислением в поле GF(28). AES использует два обратимых преобразования — SubBytes и InvSubBytes, которые являются инверсиями друг друга.
  • Второе преобразование в раунде — сдвиг, которое переставляет байты. В шифровании преобразование названо ShiftRows, в дешифрованииInvShiftRows. Преобразования ShiftRows и InvShiftRows инверсны друг другу.
  • Преобразование смешивания изменяет содержание каждого байта, обрабатывая одновременно четыре байта и объединяя их, чтобы получить четыре новых байта. AES определяет два преобразования, MixColumns и InvMixColumns, используемые в шифровании и дешифровании. MixColumns умножает матрицу состояний на квадратную матрицу констант; InvMixColumns делает то же самое, используя обратную матрицу констант. Преобразования MixColumns и InvMixColumns инверсны друг другу.
  • Преобразование, которое выполняет отбеливание, называется AddRoundKey. Предыдущая матрица состояний складывается (матричное сложение) с матричным ключом раунда, чтобы создать новую матрицу. Сложение отдельных элементов в этих двух матрицах выполняется в GF(28), что означает, что над словами по 8 битов проводится операция ИСКЛЮЧАЮЩЕЕ ИЛИ ( XOR ). Преобразование AddRoundKey инверсно само себе.
  • В первой конфигурации ( 10 раундов с ключами на 128 битов) генератор ключей создает одиннадцать ключей раунда на 128 битов из ключа шифра на 128 битов. AES использует понятие слова для генерации ключей. Слова состоят из четырех байт. Ключи раунда генерируются слово за словом. AES нумерует слова от w2 до w43. Процесс называется "расширение ключа".
  • Шифр AES для дешифрования использует два алгоритма. В первоначальном проекте порядок преобразований в каждом раунде — различен при шифровании и дешифровании. В альтернативном проекте преобразования в алгоритмах дешифрования перестроены так, чтобы порядок в шифровании и дешифровании был один и тот же. Во второй версии обратимость обеспечена для пары преобразований.
  • 10.7. Набор для практики

    Обзорные вопросы

  • Перечислите критерии, определенные NIST для AES.
  • Перечислите параметры (размер блока, размер ключа и число раундов) для трех версий AES.
  • Сколько преобразований имеется в каждой версии AES? Сколько ключей необходимо для каждой версии?
  • Сравните DES и AES. Какой из них ориентирован на работу с битом, а какой — на работу с байтом?
  • Определите матрицу состояний в AES. Сколько матриц состояний имеется в каждой версии AES?
  • Какие из четырех преобразований, определенных для AES, изменяют содержание байтов, а какие — не изменяют?
  • Сравните подстановку в DES и AES. Почему мы имеем только одну таблицу перестановки ( S -блок) в AES и несколько — в DES?
  • Сравните перестановки в DES и AES. Почему надо иметь расширение и сжатие перестановки в DES и не надо — в AES?
  • Сравните ключи раунда в DES и AES. В каком шифре размер ключа раунда равен размеру блока?
  • Почему смешивающее преобразование ( MixColumns ) нужно в DES, но не нужно в AES?
  • Упражнения

  • При шифровании S -блоки могут быть или статическими, или динамическими. Параметры в статическом S -блоке не зависят от ключа.
  • Указать преимущества и недостатки статического и динамического S -блоков.
  • S -блоки в AES (таблицы подстановки), статические или динамические?
  • AES имеет больший размер блока, чем DES ( 128 — в AES и 64 — в DES). Объясните, преимущество это или недостаток.
  • AES определяет различные реализации с различным числом раундов ( 10, 12 и 14 ); DES определяет только одну реализацию с 16 раундами. Объясните, преимущество это или недостаток AES и DES и в чем отличие.
  • AES определяет три различных размера ключа к шифру ( 128, 192 и 256 ); DES определяет только один размер ключа к шифру ( 56 ). Каковы преимущества и недостатки такого отличия?
  • В AES размер блока равен размеру ключей раунда ( 128 бит). В DES размер блока 64 бита, но размер ключей раунда — только 48 бит. Является ли эта разница преимуществом или недостатком AES по сравнению с DES?
  • Докажите, что преобразования ShiftRows и InvShiftRows — инверсны:
  • Покажите таблицу перестановки для ShiftRows. Таблица должна иметь 128 входов, но так как содержание байта не изменяется, таблица может иметь только 16 выходов; каждый выход представляет байт.
  • Повторите часть a для InvShiftRows преобразования.
  • Используя результаты частей a и b, докажите, что преобразования ShiftRows и InvShiftRows инверсны друг другу.
  • Используйте один и тот же ключ шифра, применив его для каждого из следующих преобразований на двух исходных текстах, которые отличаются только по первому биту. Найдите число изменившихся битов после каждого преобразования.
  • SubBytes
  • ShiftRows
  • MixColumns
  • AddRoundKey (с теми же самыми ключами раунда по вашему выбору)
  • Для того чтобы увидеть нелинейность преобразования SubBytes, покажите, что если a и b — два байта, то мы имеем$$SubBytes(a \oplus b) \ne SubBytes(a) \oplus SubBytes(b)$$

    Как пример используйте a = 0 x 57 и b = 0 x A2.

  • Дайте общую формулу для вычисления числа в каждом из видов преобразования SubBytes, ShiftRows, MixColumns и AddRoundKey и числа полных преобразований для каждой версии AES. Формула должна быть функцией числа раундов.
  • Измените рисунок 10.1 для AES-192 и AES-256.
  • Создайте две новые таблицы, которые показывают RCons константы для реализаций AES-192 и AES-256 (см. таблицу 10.2).
  • В AES-128 для предварительного раунда используются такие же ключи, как ключи шифрования. Справедливо ли это для AES-192? Справедливо ли это для AES-256?
  • На рисунке 9.8 перемножьте X и X-1 матрицы, чтобы доказать, что они инверсны друг другу.
  • Используя рисунок 9.12, перепишите квадратные матрицы C и C-1, применяя полиномы с коэффициентами в GF(2). Перемножьте эти две матрицы и докажите, что они являются обратными друг другу.
  • Докажите, что код в алгоритме 9.1 (преобразование SubByte ) соответствует процессу, показанному на рис. 9.8.
  • Используя алгоритм 9.1 (преобразование SubByte ), сделайте следующее:
  • Напишите код для процедуры, которая вычисляет инверсию байта в GF(28).
  • Напишите код для ByteToMatrix.
  • Напишите код для MatrixToByte.
  • Напишите алгоритм для преобразования InvSubBytes.
  • Докажите, что код в алгоритме 9.2 (преобразование ShiftRows ) соответствует процессу, показанному на рис. 9.9.
  • Используя алгоритм 9.2 (преобразование ShiftRows ), напишите код для процедуры copyrow.
  • Напишите алгоритм для преобразования InvShiftRows.
  • Докажите, что код в алгоритме 9.3 (преобразование MixColumns ) соответствует процессу, показанному на рис. 9.13.
  • Используя алгоритм 9.3 (преобразование MixColumns ), напишите код для процедуры copycolumns.
  • Перепишите алгоритм 9.3 (преобразование MixColumns ), заменив операторы (.) процедурой, называемой multfield, чтобы вычислить произведение двух байтов в поле GF(28).
  • Напишите алгоритм для преобразования InvMixColumn.
  • Докажите, что код в алгоритме 9.4 (преобразование AddRoundKey ), соответствует процессу, показанному на рис. 9.15.
  • В алгоритме 10.1 (расширение ключа):
  • Напишите кодовую программу для процедуры Subbyte.
  • Напишите код программу для процедуры Rotword.
  • Дайте два новых алгоритма для расширения ключа в AES-192 и AES-256 (см. алгоритм 10.1).
  • Напишите алгоритм расширения ключей для обратного шифра в альтернативном проекте.
  • Напишите алгоритм для обратного шифра в первоначальном проекте.
  • Напишите алгоритм для обратного шифра в альтернативном проекте.
  • Страницы:

    10.1. Расширение ключей

    Для того чтобы создать ключ для каждого раунда, AES использует процесс ключевого расширения. Если номер раунда — Nr, процедура расширения ключей создает Nr+1 ключи раунда на 128 бит от единственного 128 -битового ключа шифра. Первые ключи раунда используются для преобразования перед раундом (AddRoundKey); остающиеся ключи раунда применяются для последнего преобразования (AddRoundKey) в конце каждого раунда.

    Процедура расширения ключей создает слово за словом ключи раунда, где слово — массив из четырех байтов. Процедура создает 4 x (Nr + 1) слова, которые обозначаются

    w0, w1, w2..., w4(Nr+1)-1

    Другими словами, в версии AES-128 ( 10 раундов) имеются 44 слова; в AES-192 версии ( 12 раундов), есть 52 слова; и в AES 256 версий (с 14 раундами) есть 60 слов. Каждый ключ раунда состоит из четырех слов. Таблица 10.1 показывает отношения между раундами и словами.

    Слова для каждого раунда
    Раунд Слова
    1 w0 w1 w2 w3
    2 w4 w5 w6 w7
    ..... .....
    Nr w4Nr w4Nr+1 w4Nr+2 w4Nr+3

    Расширение ключей в AES-128

    Посмотрим, как создаются ключи в версии AES-128; процессы для других двух версий за исключением небольших изменений — те же самые. Рисунок 10.1 показывает, как из исходного ключа получить 44 слова.

    (рис 10.1) Расширение ключей в AES

    Процесс следующий:

    1. Первые четыре слова ( W0,W1,W2,W3 ) получены из ключа шифра. Ключ шифра представлен как массив из 16 байтов ( k0 до k15 ). Первые четыре байта ( k0 до k3 ) становятся W0 ; следующие четыре байта ( k4 до k7 ) становятся w1 ; и так далее. Другими словами, последовательное соединение (конкатенация) слов в этой группе копирует ключ шифра.

    2. Остальная часть слов ( wi ) от i = 4 – 43 получается следующим образом:

    a. Если $$(i\ mod\ 4) \ne 0,\ w_{i} = w_{i - 1} \oplus w_{i - 4}$$, то согласно рисунку 10.1 это означает, что каждое слово получено из одного левого и одного верхнего.

    b. Если $$(i\ mod\ 4) = 0,\ w_{i} = t \oplus w_{i - 4}$$. Здесь t — временное слово, результат применения двух процессов, subword и rotword, со словом wi-1 и применения операции ИСКЛЮЧАЮЩЕЕ ИЛИ c константой раунда Rcon. Другими словами, мы имеем

    $$t = SubWord(Rotword\ (w_{i-1})) \oplus RCon_{i/4}.$$

    RotWord

    RotWord (rotate word) — процедура, подобная преобразованию ShiftRows, но применяется только к одной строке. Процедура принимает слово как массив из четырех байт и сдвигает каждый байт влево с конвертированием.

    SubWord

    SubWord (substitute word) — процедура, подобная преобразованию SubBytes, но применяется только к одной строке. Процедура принимает каждый байт в слове и заменяет его другим.

    RoundConstants

    Каждая константа раунда Rcon — это 4 -байтовое значение, в котором самые правые три байта являются всегда нулевыми. Таблица 10.2 показывает значения для версии AES-128 (с 10 раундами).

    Константы RCon
    Раунд Константа (RCon) Раунд Константа (RCon)
    1 (01 00 00 00)16 6 (20 00 00 00)16
    2 (02 00 00 00)16 7 (40 00 00 00)16
    3 (04 00 00 00)16 8 (80 00 00 00)16
    4 (08 00 00 00)16 9 (1B 00 00 00)16
    5 (10 00 00 00)16 10 (36 00 00 00)16

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

    RC1 -> x1-1 = x0 mod prime = 1 -> 00000001 -> 0116
    
    RC2 -> x2-1 = x1 mod prime = x -> 00000010 -> 0216
    
    RC3 -> x3-1 = x2 mod prime = x2 -> 00000100 -> 0416
    
    RC4 -> x4-1 = x3 mod prime = x3 -> 00001000 -> 0816
    
    RC5 -> x5-1 = x4 mod prime = x4 -> 00010000 -> 1016
    
    RC6 -> x6-1 = x5 mod prime = x5 -> 0100000 -> 2016
    
    RC7 -> x7-1 = x6 mod prime = x6 -> 01000000 -> 4016
    
    RC8 -> x8-1 = x7 mod prime = x7 -> 10000000 -> 8016
    
    RC9 -> x9-1 = x8 mod prime = x4+x3+x+1 -> 00011011 -> 1B16
    
    RC10 -> x10-1 =x9 mod prime = x5+x4+x2+x -> 00110110 -> 3616

    Крайний левый байт, который обозначен RCi — это xi-1, где i — номер раунда. AES использует неприводимый полином ( x8 + x4 + x3 + x +1 ).

    Алгоритм

    Алгоритм 10.1 — простой алгоритм для процедуры расширения ключа (версия AES-128).

    $$\tt\parindent0pt
    
    KeyExpansion ([$key_{0}$ to $key_{15}$], [$w_{0}$ to $w_{43}$]
    
    \{ 
    
    for (i = 0 to 3) 
    
    $w_{i} \gets  key_{4i} + key_{4i+1} + key_{4i+2} + key_{4i+3}$
    
    \ for (i = 4 to 43) 
    
    \ \{ 
    
    \ \ \ if (i mod 4 $\ne$  0)  $w_{i} \gets  w_{i-1} + w_{i-4}$
    
    \ \ \ else
    
    \ \ \ \{ 
    
    \ \ \ \ \ t $\gets$  SubWord (RotWord ($w_{i-1}$)) $\oplus$  $RCon_{i/4}$
    
    \ \ \ \ \ $w_{i} \gets  t + w_{i-4}$ \ \ \ \ \     // t  is a temporary word
    
    \ \ \ \} 
    
    \ \} 
    
    \}	$$

    Пример 10.1

    Таблица 10.3 показывает, как вычисляются ключи для каждого раунда. Предполагается, что между Алисой и Бобом согласован ключ шифра на 128 битов — (24 75 A2 B3 34 75 56 88 31 E2 12 00 13 AA 54 87) 16.

    Пример расширения ключей
    Раунд Значения t Первое слово в раунде Второе слово в раунде Третье слово в раунде Четвертое слово в раунде
    - w00=2475A2B3 w01=34755688 w02=31E21200 w03=13AA5487
    1 AD20177D w04=8955B5CE w05=BD20E346 w06=8CC2F146 w07=9F68A5C1
    2 470678DB w08=CE53CD15 w09=73732E53 w10=FFB1DF15 w11=60D97AD4
    3 31DA48DO w12=FF8985C5 w13=8CFAAB96 w14=734B7483 w15=2475A2B3
    4 47AB5B7D w16=B822DEB8 w17=34D8752E w18=479301AD w19=54010FFA
    5 6C762D20 w20=D454F398 w21=E08C86B6 w22=A71F871B w23=F31E88E1
    6 52C4F80D w24=86900B95 w25=661C8D23 w26=C1030A38 w27=321D82D9
    7 E4133523 w28=62833EB6 w29=049FB395 w30=C59CB9AD w31=F7813B74
    8 8CE29268 w32=EE61ACDE w33=EAFE1F4B w34=2F62A6E6 w35=D8E39D92
    9 OA5E4F61 w36=E43FE3BF w37=OEC1FCF4 w38=21A35A12 w39=F940C780
    10 3PC6CD99 w40=DBF92E26 w41=D538D2D2 w42=F49B88CO w43=ODDB4F40

    В каждом раунде вычисление последних трех слов очень просто. Для вычисления первого слова мы должны сначала вычислить значение временного слова (t). Например, первое t (для раунда 1 ) вычислено как

    $$RotWord (13AA5487) = AA548713 \to SubWord (AA548713) = AC20177D \\ t = AC20177D \oplus Rcon_{1} = AC20 17 7D \oplus 01000000_{16} = AD20177D$$

    Пример 10.2

    Каждый ключ раунда в AES зависит от предыдущих ключей раунда. Зависимость, однако, нелинейная из-за преобразования SubWord. Сложение констант раунда также гарантирует, что каждый ключ раунда будет отличаться от предыдущего.

    Пример 10.3

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

    Как показывает таблица 10.4, имеются существенные разности между двумя соответствующими ключами раунда — R означает "раунд", B и D означают разность битов.

    Сравнение двух множеств ключей раунда
    R. Ключи для множества 1 Ключи для множества 2 B.D.
    - 1245A2A1 2331A4A3 B2CCAA34 C2BB7723 1245A2A1 2331A4A3 B2CCAB34 C2BB7723 01
    1 F9B08484 DA812027 684D8A13 AAF6FD30 F9B08484 DA812027 684D8B13 AAF6FC30 02
    2 B9E48028 6365AOOF OB282A1C A1DED72C B9008028 6381AOOF OBCC2B1C A13AD72C 17
    3 AOEAF11A C38F5115 C8A77B09 6979AC25 3DOEF11A 5E8F5115 55437A09 F479AD25 30
    4 1E7BCEE3 DDF49FF6 1553E4FF 7C2A48DA 839BCEA5 DD149FBO 8857E5B9 7C2E489C 31
    5 EB2999F3 36DD0605 238EE2FA 5FA4AA20 A2C910B5 7FDD8F05 F78A6ABC 8BA42220 34
    6 82852E3C B4582839 97D6CAC3 C87260E3 CB5AA788 B487288D 430D4231 C8A96011 56
    7 82553FD4 360D17ED A1DBDD2E 69A9BDCD 588A2560 ECODODED AF004FDC 67A92FCD 50
    8 D12F822D E72295CO 46F948EE 2F50F523 OB9F98E5 E7929508 4892DAD4 2F3BF519 44
    9 99C9A438 7EEB31F8 38127916 17428C35 F2794CFO 15EBD9F8 5D79032C 7242F635 51
    10 83AD32C8 FD460330 C5547A26 D216F613 E83BDABO FDD00348 AOA90064 D2EBF651 52

    Пример 10.4

    Понятие слабых ключей, которое мы обсуждали для DES в лекции 8, не применимо к AES. Предположим, что все биты в ключе шифра — нули. Ниже для этого случая показаны слова для некоторых раундов:

    Все слова перед раундом и в первом раунде равны между собой. Во втором раунде первое слово соответствует третьему; второе слово соответствует четвертому. Однако после второго раунда совпадений нет; каждое слово различно.

    Расширение ключа в AES-192 и AES-256

    Алгоритмы расширения ключей в AES-192 и AES-256 — очень похожи на алгоритм расширения ключа в AES-128, со следующими отличиями:

    1. В AES-192 слова сгенерированы в группы по шесть вместо четырех.

    a. Ключ шифра создает первые шесть слов ( w0 к w5 ).

    b. Если $$i\ mod\ 6 \ne 0$$, то $${w_i} \leftarrow {w_{i - 1}} + {w_{i - 6}}$$ ; иначе $${w_i} \leftarrow t + {w_{i - 6}}$$.

    1. В AES-256 слова сгенерированы в группы по восемь вместо четырех.

    a. Ключ шифра создает первые восемь слов ( w0 до w7 ).

    b. Если $$i{\text{ }}\bmod {\text{ }}8 \ne 0 $$, то $${w_i} \leftarrow {w_{i - 1}} + {w_{i - 8}}$$ ; иначе, wi <-t + wi-8.

    c. Если i mod 4=0, но $$i{\text{ }}\bmod {\text{ }}8 \ne 0 $$, то wi = Subword (wi-1) + wi-8.

    Анализ расширения ключа

    Механизм расширения ключа в AES был разработан так, чтобы обеспечить несколько свойств, которые срывают действия криптоаналитика по раскрытию сообщения.

  • Даже если Ева знает только часть ключа шифра или значения слов в некотором ключевом раунде, этого недостаточно: она еще должна найти остальную часть ключа шифра, прежде чем сможет найти ключи всех раундов. Это обеспечивается нелинейностью процесса расширения ключа, полученной с помощью преобразования SubWord.
  • Два различных ключа шифра, независимо от того, как они соотносятся друг с другом, производят два расширения, которые отличаются по крайней мере в нескольких раундах.
  • Каждый бит ключа шифра изменяется в нескольких раундов. Например, изменение единственного бита в ключе шифра изменяет некоторые биты в нескольких раундах.
  • Использование констант, RCons, удаляет любую симметрию, которая может быть создана другими преобразованиями.
  • В отличие от DES в AES отсутствуют любые слабые ключи.
  • Процесс расширения ключа может быть легко реализован на всех платформах.
  • Процедура расширения ключа может быть реализована без применения отдельных таблиц; вычисления могут быть сделаны с использованием полей GF(28) и FG(2).
  • 10.2. Шифры

    Теперь посмотрим, как AES использует четыре типа преобразований для шифрования и дешифрования. В стандарте алгоритм шифрования упоминается как шифр и алгоритм дешифрования — как обратный шифр.

    Как мы упоминали прежде, ADVANCED ENCRYPTION STANDARD — шифр не-Файстеля, а это означает, что каждое преобразование или группа преобразований должны быть обратимыми. Кроме того, шифр и обратный шифр должны использовать эти операции таким способом, чтобы они отменяли друг друга. Ключи раунда должны использоваться в обратном порядке. Ниже приведены два различных проекта, которые могут быть использованы для различных реализаций. Мы обсудим оба проекта для AES-128; для других версий применяются те же самые проекты.

    (рис 10.2) Шифр и обратный шифр начального проекта

    Первоначальный проект

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

    Во-первых, в обратном шифре изменяется порядок следования SubBytes (InvSubBytes) и ShiftRows (InvShiftRows). Во-вторых, в обратном шифре изменен порядок выполнения MixColumns и AddRoundKey. Эти изменения в порядке необходимы, чтобы в обратном шифре сделать порядок работы обратных преобразований инверсным по отношению к прямому шифру. Следовательно, алгоритм дешифрования в целом — инверсия алгоритма шифрования. Мы показали только три раунда, но остальные имеют тот же самый вид. Обратите внимание, что ключи раунда используются в измененном порядке. Обратите также внимание, что алгоритмы шифрования и дешифрования в первоначальном проекте не совпадают.

    Алгоритм

    Код для версии AES-128 этого проекта показан в алгоритме 10.2. Код для обратного шифра оставляем как упражнение.

    $$\tt\parindent0pt
    
    Cipher( InBlock[16], OutBlock[16], w[0…43])
    
    \ 
    
    \{ 
    
    BlockToState (InBlock, S)
    
    \ 
    
    S $\gets$  SubBytes (S)
    
    for (round = 1 to 10)
    
    \{ 
    
    S $\gets$  ShiftRows (S)
    
    If (round $\ne$  10)   S $\gets$  MixColumns (S)
    
    S $\gets$  AddRoundKey (S, w[4 x round, 4 x round + 3])
    
    \} 
    
    StateToBlock (S, OutBlock);
    
    \}	$$

    Альтернативный проект

    Для тех приложений, которые предпочитают совпадающие алгоритмы для шифрования и дешифрования, был разработан обратный шифр. В такой версии преобразования в обратном шифре перестроены так, чтобы cделать порядок преобразований тем же самым в прямом шифре и обратном шифре. В этом проекте обеспечена обратимость для пары преобразований, а не для каждого одиночного преобразования.

    Пары SubBytes/ShiftRows

    SubBytes изменяет содержание каждого байта, не изменяя порядок байтов матрицы состояний; ShiftRows изменяет порядок байтов в матрице состояний, не изменяя содержание байтов. Это подразумевает, что мы можем изменить порядок этих двух преобразований в обратном шифре, не затрагивая обратимость целого алгоритма; рисунок 10.3 иллюстрирует идею. Обратите внимание, что комбинации двух преобразований — в шифре и обратном шифре — инверсны друг другу.

    (рис 10.3) Обратимость совокупности SubByte и SiftRows

    Пара MixColumns/AddRoundKey

    Здесь применяются два преобразования, которые имеют различные свойства. Однако эти пары могут стать инверсиями друг друга, если мы умножим матрицу ключей на инверсию матрицы констант, используемой в преобразовании MixColumns. Мы называем новое преобразование InvAddRoundKey. Рисунок 10.4 показывает новую конфигурацию.

    (рис 10.4) Обратимость совокупности MixColumns и AddRoundKey

    Можно доказать, что эти две комбинации теперь инверсны друг другу. В шифре мы обозначим входную матрицу состояний — S и выходную матрицу — T. В обратном шифре входная матрица — T. Ниже показано, что выходная матрица состояний — также S. Обратите внимание, что преобразование MixColumns — фактически произведение матрицы C (матрицы констант на матрицу состояний).

    $$Cipher: T = CS \oplus K \\ Inverse Cipher: С^{-1} \oplus C^{-1}'K=C^{-1}(CS \oplus K) \oplus C^{-1}K = C^{-1}CS \oplus C^{-1}K \oplus C^{-1}K = S$$

    Теперь мы можем показать шифр и обратный шифр для альтернативного проекта. Обратите внимание, что мы все еще должны использовать два преобразования AddRoundKey в дешифровании. Другими словами, мы имеем девять InvAddRoundKey и два AddRoundKey преобразования, как это показано на рис. 10.5.

    Изменение алгоритма расширения ключей

    Вместо того чтобы использовать преобразование InvRoundKey в обратном шифре, можно изменить алгоритм расширения ключей так, чтобы создавать различное множество ключей раунда для обратного шифра. Однако отметим, что ключ раунда для операций предварительного раунда и последнего раунда должен быть изменен. Ключи раунда от 1 до 9 необходимо умножить на матрицу констант. Этот алгоритм оставим для упражнений.

    10.3. Примеры

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

    (рис 10.5) Шифр и обратный шифр альтернативного проекта

    Пример 10.5

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

    Таблица 10.5. показывает значения матрицы состояний и ключей раунда для этого примера.

    Пример шифрования
    Раунд Входная матрица состояний Выходная матрица состояний Ключ раунда
    Предварительный раунд 00 12 OC 08 24 26 3D 1B 24 34 31 13
    04 04 00 23 71 71 E2 89 75 75 E2 AA
    12 12 13 19 BO 44 01 4D A2 56 12 54
    14 00 11 19 A7 88 11 9E B3 88 00 87
    1 24 26 3D 1B 6C 44 13 BD 89 BD 8C 9F
    71 71 E2 89 Bl 9E 46 35 55 20 C2 68
    BO 44 01 4D C5 B5 F3 02 B5 E3 F1 A5
    A7 88 11 9E 5D 87 FC 8C CE 46 46 C1
    2 6C 44 13 BD 1A 90 15 B2 CE 73 FF 60
    Bl 9E 46 35 66 09 ID FC 53 73 Bl D9
    C5 B5 F3 02 20 55 5A B2 CD 2E DF 7A
    5D 87 PC 8C 2B CB 8C 3C 15 53 15 D4
    3 1A 90 15 B2 F6 7D A2 BO FF 8C 73 13
    66 09 ID FC 1B 61 B4 B8 89 FA 4B 92
    20 55 5A B2 67 09 C9 45 85 AB 74 OE
    2B CB 8C 3C 4A 5C 51 09 C5 96 83 57
    4 F6 7D A2 BO CA E5 48 BB B8 34 47 54
    1B 61 B4 B8 D8 42 AF 71 22 D8 93 01
    67 09 C9 45 Dl BA 98 2D DE 75 01 OF
    4A 5C 51 09 4E 60 9E DF B8 2E AD FA
    5 CA E5 48 BB 90 35 13 60 D4 EO A7 F3
    D8 42 AF 71 2C FB 82 3A 54 8C IF IE
    Dl BA 98 2D 9E FC 61 ED F3 86 87 88
    4E 60 9E DF 49 39 CB 47 98 B6 1B El
    6 90 35 13 60 18 OA B9 B5 86 66 C1 32
    2C FB 82 3A 64 68 6A FB 90 1C 03 ID
    9E FC 61 ED 5A EF D7 79 OB 8D OA 82
    49 39 CB 47 8E B2 10 4D 95 23 38 D9
    7 18 OA B9 B5 01 63 F1 96 62 04 C5 F7
    64 68 6A FB 55 24 3A 62 83 9F 9C 81
    5A EF D7 79 F4 8A DE 4D 3E B3 B9 3B
    8E B2 10 4D CC BA 88 03 B6 95 AD 74
    8 01 63 F1 96 2A 34 D8 46 EE EA 2F D8
    55 24 3A 62 2D 6B A2 D6 61 FE 62 E3
    F4 8A DE 4D 51 64 CF 5A AC IF A6 9D
    CC BA 88 03 87 A8 F8 28 DE 4B E6 92
    9 2A 34 D8 46 OA D9 Fl 3C E4 OE 21 F9
    2D 6B A2 D6 95 63 9F 35 3P Cl A3 40
    51 64 CF 5A 2A 80 29 00 E3 FC 5A C7
    87 A8 F8 28 16 76 09 77 BF F4 12 80
    10 OA D9 Fl 3C BC EO 55 E6 DB D5 F4 OD
    95 63 9F 35 02 E3 OD Fl F9 38 9B DB
    2A 80 29 00 8B Bl 6D 82 2E D2 88 4F
    16 76 09 77 D3 95 F8 41 26 D2 CO 40

    Пример 10.6

    Пример показывает матрицы состояний, раунд 7 в примере 10.5.

    Пример 10.7

    Один из курьезных случаев при рассмотрении шифрования — когда исходный текст состоит из одних нулей. Используем ключ шифра из примера 10.5 и получаем зашифрованный текст:

    Пример 10.8

    Давайте проверим лавинный эффект, который мы обсуждали в лекции 8. Изменим только один бит в исходном тексте и сравним результаты. Мы изменили только один бит в последнем байте. Результат показывает эффект рассеивания и перемешивания. Изменение единственного бита в исходном тексте затронуло много бит в зашифрованном тексте.

    Пример 10.9

    Ниже показан эффект использования ключа шифрования "все нули".

    10.4. Анализ AES

    Далее дан краткий обзор трех характеристик AES.

    Безопасность

    AES был разработан после DES. Большинство известных атак на DES было проверено на AES; ни одна из них до сих пор не нарушила безопасность AES.

    Атака грубой силы

    AES явно более безопасен, чем DES, из-за большего размера ключа ( 128, 192 и 256 битов). Давайте сравним DES с ключом шифра на 56 битов и AES с ключом шифра на 128 битов. Для DES, чтобы найти ключ, мы нуждаемся в 256 испытаний (игнорируя проблему дополнения ключа); для AES — в 2128 испытаниях. Это означает, что если мы можем нарушить DES в t секунд, нам нужно ( $${2^{72}} \times t$$ ) секунд, чтобы нарушить AES. Это почти невозможно. Кроме того, AES обеспечивает две другие версии более длинными ключами шифра. Отсутствие слабых ключей — еще одно преимущество AES перед DES.

    Статистические атаки

    Сильное рассеивание и перемешивание, обеспеченное комбинацией преобразований SubByte, ShiftRows и MixColumns, удаляют любую частотную закономерность в исходном тексте. Многочисленные испытания не сумели выполнить статистический анализ зашифрованного текста.

    Дифференциальные и линейные атаки

    AES был разработан после DES. Дифференциальные и линейные атаки криптоанализа были, без сомнения, учтены. Подобные атаки на AES пока не обнаружены.

    Реализация

    AES может быть реализован в программном обеспечении, аппаратных средствах и программируемом оборудовании. Реализация может применять процесс поиска в таблице или процедуры, в которых использована четкая алгебраическая структура. Преобразование может быть ориентировано или на байт, или на слово. В ориентированной на байт версии алгоритм может использовать процессор на 8 битов; в ориентированной на слово версии — процессор на 32 бита. В любом случае, обработка делается очень быстро.

    Простота и стоимость

    Алгоритмы, используемые в AES, настолько просты, что могут быть легко реализованы с помощью дешевых процессоров и минимального объема памяти.

    10.5. Рекомендованная литература

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

    Книги

    [Sta06] [Sti06] [Rhe03], [Sal03], [Mao04] и [TW06] рассматривают AES.

    Сайты

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

  • csrc.nist.gov/publications/fips/ripsl97/fips-197.pdf
  • http://www.quadibloc.com/crypto/co040401 .htm
  • http: // www. ietef.org/rfc/rfc 3394. txt
  • 10.6. Итоги

  • Усовершенствованный стандарт шифрования (AES — ADVANCED ENCRYPTION STANDARD) — стандарт блочного шифра с симметричными ключами, опубликованный Национальным Институтом стандартов NIST (National Institute of Standard and Technology) как Федеральный Стандарт Обработки Информации 197 (FIPST-197 — FEDERAL INFORMATION PROCESSING STANDARD 197). AES базируется на Rijndael алгоритме.
  • AES — шифр не-Файстеля, который зашифровывает и расшифровывает блок данных длиной 128 битов. Оно использует 10, 12 или 14 раундов.
  • Размер ключа, который может быть 128, 192 или 256 битов, зависит от числа раундов.
  • AES ориентирован на работу с байтами. Исходный текст на 128 битов или зашифрованный текст рассматривается как шестнадцать байтов по 8 битов. Чтобы обеспечить выполнение некоторых математических преобразований на байтах, в AES определено понятие матрицы состояний. Матрица состояний — это матрица $$4 \times 4$$, в которой каждый вход является байтом.
  • Чтобы обеспечить безопасность, AES использует четыре типа преобразований: подстановка, перестановка, смешивание и добавление ключа. Каждый раунд AES, кроме последнего, применяет эти четыре преобразования. Последний раунд использует только три из четырех преобразований.
  • Подстановка определяется либо процессом поиска в таблице, либо математическим вычислением в поле GF(28). AES использует два обратимых преобразования — SubBytes и InvSubBytes, которые являются инверсиями друг друга.
  • Второе преобразование в раунде — сдвиг, которое переставляет байты. В шифровании преобразование названо ShiftRows, в дешифрованииInvShiftRows. Преобразования ShiftRows и InvShiftRows инверсны друг другу.
  • Преобразование смешивания изменяет содержание каждого байта, обрабатывая одновременно четыре байта и объединяя их, чтобы получить четыре новых байта. AES определяет два преобразования, MixColumns и InvMixColumns, используемые в шифровании и дешифровании. MixColumns умножает матрицу состояний на квадратную матрицу констант; InvMixColumns делает то же самое, используя обратную матрицу констант. Преобразования MixColumns и InvMixColumns инверсны друг другу.
  • Преобразование, которое выполняет отбеливание, называется AddRoundKey. Предыдущая матрица состояний складывается (матричное сложение) с матричным ключом раунда, чтобы создать новую матрицу. Сложение отдельных элементов в этих двух матрицах выполняется в GF(28), что означает, что над словами по 8 битов проводится операция ИСКЛЮЧАЮЩЕЕ ИЛИ ( XOR ). Преобразование AddRoundKey инверсно само себе.
  • В первой конфигурации ( 10 раундов с ключами на 128 битов) генератор ключей создает одиннадцать ключей раунда на 128 битов из ключа шифра на 128 битов. AES использует понятие слова для генерации ключей. Слова состоят из четырех байт. Ключи раунда генерируются слово за словом. AES нумерует слова от w2 до w43. Процесс называется "расширение ключа".
  • Шифр AES для дешифрования использует два алгоритма. В первоначальном проекте порядок преобразований в каждом раунде — различен при шифровании и дешифровании. В альтернативном проекте преобразования в алгоритмах дешифрования перестроены так, чтобы порядок в шифровании и дешифровании был один и тот же. Во второй версии обратимость обеспечена для пары преобразований.
  • 10.7. Набор для практики

    Обзорные вопросы

  • Перечислите критерии, определенные NIST для AES.
  • Перечислите параметры (размер блока, размер ключа и число раундов) для трех версий AES.
  • Сколько преобразований имеется в каждой версии AES? Сколько ключей необходимо для каждой версии?
  • Сравните DES и AES. Какой из них ориентирован на работу с битом, а какой — на работу с байтом?
  • Определите матрицу состояний в AES. Сколько матриц состояний имеется в каждой версии AES?
  • Какие из четырех преобразований, определенных для AES, изменяют содержание байтов, а какие — не изменяют?
  • Сравните подстановку в DES и AES. Почему мы имеем только одну таблицу перестановки ( S -блок) в AES и несколько — в DES?
  • Сравните перестановки в DES и AES. Почему надо иметь расширение и сжатие перестановки в DES и не надо — в AES?
  • Сравните ключи раунда в DES и AES. В каком шифре размер ключа раунда равен размеру блока?
  • Почему смешивающее преобразование ( MixColumns ) нужно в DES, но не нужно в AES?
  • Упражнения

  • При шифровании S -блоки могут быть или статическими, или динамическими. Параметры в статическом S -блоке не зависят от ключа.
  • Указать преимущества и недостатки статического и динамического S -блоков.
  • S -блоки в AES (таблицы подстановки), статические или динамические?
  • AES имеет больший размер блока, чем DES ( 128 — в AES и 64 — в DES). Объясните, преимущество это или недостаток.
  • AES определяет различные реализации с различным числом раундов ( 10, 12 и 14 ); DES определяет только одну реализацию с 16 раундами. Объясните, преимущество это или недостаток AES и DES и в чем отличие.
  • AES определяет три различных размера ключа к шифру ( 128, 192 и 256 ); DES определяет только один размер ключа к шифру ( 56 ). Каковы преимущества и недостатки такого отличия?
  • В AES размер блока равен размеру ключей раунда ( 128 бит). В DES размер блока 64 бита, но размер ключей раунда — только 48 бит. Является ли эта разница преимуществом или недостатком AES по сравнению с DES?
  • Докажите, что преобразования ShiftRows и InvShiftRows — инверсны:
  • Покажите таблицу перестановки для ShiftRows. Таблица должна иметь 128 входов, но так как содержание байта не изменяется, таблица может иметь только 16 выходов; каждый выход представляет байт.
  • Повторите часть a для InvShiftRows преобразования.
  • Используя результаты частей a и b, докажите, что преобразования ShiftRows и InvShiftRows инверсны друг другу.
  • Используйте один и тот же ключ шифра, применив его для каждого из следующих преобразований на двух исходных текстах, которые отличаются только по первому биту. Найдите число изменившихся битов после каждого преобразования.
  • SubBytes
  • ShiftRows
  • MixColumns
  • AddRoundKey (с теми же самыми ключами раунда по вашему выбору)
  • Для того чтобы увидеть нелинейность преобразования SubBytes, покажите, что если a и b — два байта, то мы имеем$$SubBytes(a \oplus b) \ne SubBytes(a) \oplus SubBytes(b)$$

    Как пример используйте a = 0 x 57 и b = 0 x A2.

  • Дайте общую формулу для вычисления числа в каждом из видов преобразования SubBytes, ShiftRows, MixColumns и AddRoundKey и числа полных преобразований для каждой версии AES. Формула должна быть функцией числа раундов.
  • Измените рисунок 10.1 для AES-192 и AES-256.
  • Создайте две новые таблицы, которые показывают RCons константы для реализаций AES-192 и AES-256 (см. таблицу 10.2).
  • В AES-128 для предварительного раунда используются такие же ключи, как ключи шифрования. Справедливо ли это для AES-192? Справедливо ли это для AES-256?
  • На рисунке 9.8 перемножьте X и X-1 матрицы, чтобы доказать, что они инверсны друг другу.
  • Используя рисунок 9.12, перепишите квадратные матрицы C и C-1, применяя полиномы с коэффициентами в GF(2). Перемножьте эти две матрицы и докажите, что они являются обратными друг другу.
  • Докажите, что код в алгоритме 9.1 (преобразование SubByte ) соответствует процессу, показанному на рис. 9.8.
  • Используя алгоритм 9.1 (преобразование SubByte ), сделайте следующее:
  • Напишите код для процедуры, которая вычисляет инверсию байта в GF(28).
  • Напишите код для ByteToMatrix.
  • Напишите код для MatrixToByte.
  • Напишите алгоритм для преобразования InvSubBytes.
  • Докажите, что код в алгоритме 9.2 (преобразование ShiftRows ) соответствует процессу, показанному на рис. 9.9.
  • Используя алгоритм 9.2 (преобразование ShiftRows ), напишите код для процедуры copyrow.
  • Напишите алгоритм для преобразования InvShiftRows.
  • Докажите, что код в алгоритме 9.3 (преобразование MixColumns ) соответствует процессу, показанному на рис. 9.13.
  • Используя алгоритм 9.3 (преобразование MixColumns ), напишите код для процедуры copycolumns.
  • Перепишите алгоритм 9.3 (преобразование MixColumns ), заменив операторы (.) процедурой, называемой multfield, чтобы вычислить произведение двух байтов в поле GF(28).
  • Напишите алгоритм для преобразования InvMixColumn.
  • Докажите, что код в алгоритме 9.4 (преобразование AddRoundKey ), соответствует процессу, показанному на рис. 9.15.
  • В алгоритме 10.1 (расширение ключа):
  • Напишите кодовую программу для процедуры Subbyte.
  • Напишите код программу для процедуры Rotword.
  • Дайте два новых алгоритма для расширения ключа в AES-192 и AES-256 (см. алгоритм 10.1).
  • Напишите алгоритм расширения ключей для обратного шифра в альтернативном проекте.
  • Напишите алгоритм для обратного шифра в первоначальном проекте.
  • Напишите алгоритм для обратного шифра в альтернативном проекте.
  • Вернуться к учебному плану