Advanced Encryption Standard

Поделись знанием:
Перейти к: навигация, поиск
AES, Rijndael-AES, Rijndael
Создатель:

Винсент Рэймен
Йоан Даймен

Создан:

1998 г.

Размер ключа:

128/192/256 бит

Размер блока:

128 бит

Число раундов:

10/12/14 (зависит от размера ключа)

Тип:

Подстановочно-перестановочная сеть

Advanced Encryption Standard (AES), также известный как Rijndael (произносится [rɛindaːl] (Рэндал[1])) — симметричный алгоритм блочного шифрования (размер блока 128 бит, ключ 128/192/256 бит), принятый в качестве стандарта шифрования правительством США по результатам конкурса AES. Этот алгоритм хорошо проанализирован и сейчас широко используется, как это было с его предшественником DES. Национальный институт стандартов и технологий США (англ. National Institute of Standards and Technology, NIST) опубликовал спецификацию AES 26 ноября 2001 года после пятилетнего периода, в ходе которого были созданы и оценены 15 кандидатур. 26 мая 2002 года AES был объявлен стандартом шифрования. По состоянию на 2009 год AES является одним из самых распространённых алгоритмов симметричного шифрования.[2][3] Поддержка AES (и только его) введена фирмой Intel в семейство процессоров x86 начиная с Intel Core i7-980X Extreme Edition, а затем на процессорах Sandy Bridge.





История AES

2 января 1997 года NIST объявляет[4] о намерении выбрать преемника для DES, являвшегося американским стандартом с 1977 года. 2 октября 2000 года было объявлено, что победителем конкурса стал алгоритм Rijndael[5], и началась процедура стандартизации. 28 февраля 2001 года был опубликован проект, а 26 ноября 2001 года AES был принят как FIPS 197. Историческую ретроспективу конкурса можно проследить на веб-сайте NIST [6].

Описание AES

Определения и вспомогательные процедуры

Определения
Block последовательность бит, из которых состоит input, output, State и Round Key. Также под Block можно понимать последовательность байтов
Cipher Key секретный, криптографический ключ, который используется Key Expansion процедурой, чтобы произвести набор ключей для раундов(Round Keys); может быть представлен как прямоугольный массив байтов, имеющий четыре строки и Nk колонок.
Ciphertext выходные данные алгоритма шифрования
Key Expansion процедура генерации Round Keys из Cipher Key
Round Key Round Keys получаются из Cipher Key использованием процедуры Key Expansion. Они применяются к State при шифровании и расшифровании
State промежуточный результат шифрования, который может быть представлен как прямоугольный массив байтов имеющий 4 строки и Nb колонок
S-box нелинейная таблица замен, использующаяся в нескольких трансформациях замены байтов и в процедуре Key Expansion для взаимнооднозначной замены значения байта. Предварительно рассчитанный S-box можно увидеть ниже.
Nb число столбцов (32-битных слов), составляющих State. Для AES, Nb = 4
Nk число 32-битных слов, составляющих шифроключ. Для AES, Nk = 4, 6, или 8
Nr число раундов, которое является функцией Nk и Nb. Для AES, Nr = 10, 12, 14
Rcon[] массив, который состоит из битов 32-разрядного слова и является постоянным для данного раунда. Предварительно рассчитанный Rcon[] можно увидеть ниже.
S-box

Sbox = array{
        0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 
        0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 
        0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 
        0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 
        0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 
        0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 
        0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 
        0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 
        0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 
        0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 
        0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 
        0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 
        0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 
        0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 
        0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 
        0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
    };

Обратный S-box для процедуры InvSubBytes
InvSbox = array{
        0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
        0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
        0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
        0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
        0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
        0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
        0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
        0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
        0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
        0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
        0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
        0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
        0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
        0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
        0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
        0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
        };

Rcon[]

Rcon = array{
        array{0x00, 0x00, 0x00, 0x00},
        array{0x01, 0x00, 0x00, 0x00},
        array{0x02, 0x00, 0x00, 0x00},
        array{0x04, 0x00, 0x00, 0x00},
        array{0x08, 0x00, 0x00, 0x00},
        array{0x10, 0x00, 0x00, 0x00},
        array{0x20, 0x00, 0x00, 0x00},
        array{0x40, 0x00, 0x00, 0x00},
        array{0x80, 0x00, 0x00, 0x00},
        array{0x1b, 0x00, 0x00, 0x00},
        array{0x36, 0x00, 0x00, 0x00}
    };

Вспомогательные процедуры
AddRoundKey() трансформация при шифровании и обратном шифровании, при которой Round Key XOR’ится c State. Длина RoundKey равна размеру State(то есть, если Nb = 4, то длина RoundKey равна 128 бит или 16 байт)
InvMixColumns() трансформация при расшифровании, которая является обратной по отношению к MixColumns()
InvShiftRows() трансформация при расшифровании, которая является обратной по отношению к ShiftRows()
InvSubBytes() трансформация при расшифровании, которая является обратной по отношению к SubBytes()
MixColumns()[7] трансформация при шифровании, которая берёт все столбцы State и смешивает их данные (независимо друг от друга), чтобы получить новые столбцы
RotWord() функция, использующаяся в процедуре Key Expansion, которая берёт 4-байтовое слово и производит над ним циклическую перестановку
ShiftRows() трансформации при шифровании, которые обрабатывают State, циклически смещая последние три строки State на разные величины
SubBytes() трансформации при шифровании, которые обрабатывают State используя нелинейную таблицу замещения байтов (S-box), применяя её независимо к каждому байту State
SubWord() функция, используемая в процедуре Key Expansion, которая берёт на входе четырёхбайтовое слово и, применяя S-box к каждому из четырёх байтов, выдаёт выходное слово

Шифрование

AES является стандартом, основанным на алгоритме Rijndael. Для AES длина input (блока входных данных) и State (состояния) постоянна и равна 128 бит, а длина шифроключа K составляет 128, 192, или 256 бит. При этом, исходный алгоритм Rijndael допускает длину ключа и размер блока от 128 до 256 бит с шагом в 32 бита. Для обозначения выбранных длин input, State и Cipher Key в 32-битных словах используется нотация Nb = 4 для input и State, Nk = 4, 6, 8 для Cipher Key соответственно для разных длин ключей.

В начале шифрования input копируется в массив State по правилу <math> \mathrm{state}[r,c] = \mathrm{input}[r+4c] </math>, для <math> 0 \le r < 4 </math> и <math> 0 \le c < Nb </math>. После этого к State применяется процедура AddRoundKey() и затем State проходит через процедуру трансформации (раунд) 10, 12, или 14 раз (в зависимости от длины ключа), при этом надо учесть, что последний раунд несколько отличается от предыдущих. В итоге, после завершения последнего раунда трансформации, State копируется в output по правилу <math>\mathrm{output}[r+4c] = \mathrm{state}[r,c]</math>, для <math> 0 \le r < 4 </math> и <math> 0 \le c < Nb </math>.

Отдельные трансформации SubBytes(), ShiftRows(), MixColumns() и AddRoundKey() — обрабатывают State. Массив w[] — содержит key schedule.


Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
begin
    byte state[4,Nb]
    
    state = in

    AddRoundKey(state, w[0, Nb-1])

    for round = 1 step 1 to Nr-1
        SubBytes(state)
        ShiftRows(state)
        MixColumns(state)
        AddRoundKey(state, w[round*Nb, (round+1)*Nb-1])
    end for

    SubBytes(state)
    ShiftRows(state)
    AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1])

    out = state
end

Рис1. Псевдокод для Cipher

SubBytes()

Процедура SubBytes() обрабатывает каждый байт состояния, независимо производя нелинейную замену байтов используя таблицу замен (S-box). Такая операция обеспечивает нелинейность алгоритма шифрования. Построение S-box состоит из двух шагов. Во-первых, производится взятие обратного числа в поле Галуа <math>GF\left( {2^8 } \right)</math>. Во-вторых, к каждому байту b, из которых состоит S-box, применяется следующая операция:

<math>b'_i = b_i \oplus b_{\left( {i + 4} \right)\bmod 8} \oplus b_{\left( {i + 5} \right)\bmod 8} \oplus b_{\left( {i + 6} \right)\bmod 8} \oplus b_{\left( {i + 7} \right)\bmod 8} \oplus c_i </math>

где <math>0 \le i < 8</math>, и где <math>b_i</math> есть i-ый бит b, а <math>c_i</math> — i-ый бит константы <math>c = 63_{16} = 99_{10} = 01100011_2</math>. Таким образом обеспечивается защита от атак, основанных на простых алгебраических свойствах.

<math>

\begin{Vmatrix} b^{'}_{0}\\b^{'}_{1}\\b^{'}_{2}\\b^{'}_{3}\\b^{'}_{4}\\b^{'}_{5}\\b^{'}_{6}\\b^{'}_{7} \end{Vmatrix} =

\begin{Vmatrix} 1 & 0 & 0 & 0 & 1 & 1 & 1 & 1 \\ 1 & 1 & 0 & 0 & 0 & 1 & 1 & 1\\ 1 & 1 & 1 & 0 & 0 & 0 & 1 & 1\\
                      1 & 1 & 1 & 1 & 0 & 0 & 0 & 1 \\ 1 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\ 0 & 1 & 1 & 1 & 1 & 1 & 0 & 0\\
                      0 & 0 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 1 & 1 & 1 & 1 & 1 \end{Vmatrix} *
\begin{Vmatrix} b_{0}\\b_{1}\\b_{2}\\b_{3}\\b_{4}\\b_{5}\\b_{6}\\b_{7} \end{Vmatrix} +  \begin{Vmatrix} 1\\1\\0\\0\\0\\1\\1\\0 \end{Vmatrix}   
</math>

ShiftRows()

ShiftRows работает со строками State. При этой трансформации строки состояния циклически сдвигаются на r байт по горизонтали, в зависимости от номера строки. Для нулевой строки r = 0, для первой строки r = 1 Б и т. д. Таким образом, каждая колонка выходного состояния после применения процедуры ShiftRows состоит из байтов из каждой колонки начального состояния. Для алгоритма Rijndael паттерн смещения строк для 128- и 192-битных строк одинаков. Однако для блока размером 256 бит отличается от предыдущих тем, что 2-е, 3-и и 4-е строки смещаются на 1, 3 и 4 байта, соответственно.

MixColumns()

В процедуре MixColumns четыре байта каждой колонки State смешиваются, используя для этого обратимую линейную трансформацию. MixColumns обрабатывает состояния по колонкам, трактуя каждую из них как полином четвёртой степени. Над этими полиномами производится умножение[8] в <math>GF(2^8)</math> по модулю <math>x^4+1</math> на фиксированный многочлен <math>c(x) = 3x^3 + x^2 + x + 2</math>. Вместе с ShiftRows , MixColumns вносит диффузию в шифр

AddRoundKey()

В процедуре AddRoundKey, RoundKey каждого раунда объединяется со State. Для каждого раунда Roundkey получается из CipherKey c помощью процедуры KeyExpansion; каждый RoundKey такого же размера, что и State. Процедура производит побитовый XOR каждого байта State с каждым байтом RoundKey.

Алгоритм обработки ключа

Алгоритм обработки ключа состоит из двух процедур:

  • Алгоритм расширения ключа
  • Алгоритм выбора раундового ключа (ключа итерации)

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

Алгоритм AES, используя процедуру KeyExpansion() и подавая в неё Cipher Key, K, получает ключи для всех раундов. Всего получается Nb*(Nr + 1) слов: изначально для алгоритма требуется набор из Nb слов, и каждому из Nr раундов требуется Nb ключевых набора данных. Полученный массив ключей для раундов обозначается как <math>w \left[ i \right]</math>, <math> 0 \le i < Nb*(Nr + 1) </math>. Алгоритм KeyExpansion() показан в псевдокоде ниже.

Функция SubWord() берёт четырёхбайтовое входное слово и применяет S-box к каждому из четырёх байтов. То, что получилось, подаётся на выход. На вход RotWord() подаётся слово <math>[a_{0}, a_{1}, a_{2}, a_{3}]</math>, которое она циклически переставляет и возвращает <math> [a_{1}, a_{2}, a_{3}, a_{0}]</math>. Массив слов, постоянный для данного раунда, <math>Rcon\left[ i \right]</math>, содержит значения <math>[x^{i-1}, {00}, {00}, {00}] </math>, где x = {02}, а <math> x^{i-1} </math> является степенью <math>x</math> в <math>GF \left( 2^8 \right) </math> (<math>i</math> начинается с 1).

Из рисунка можно видеть, что первые <math>Nk</math> слов расширенного ключа заполнены Cipher Key. В каждое последующее слово, <math>w[i]</math>, кладётся значение полученное при операции XOR <math>w[i-1]</math> и <math>w\left[ {i - Nk} \right]</math>, те XOR’а предыдущего и на Nk позиций раньше слов. Для слов, позиция которых кратна Nk, перед XOR’ом к w[i-1] применяется трасформация, за которой следует XOR с константой раунда Rcon[i]. Указанная выше трансформация состоит из циклического сдвига байтов в слове (RotWord()), за которой следует процедура SubWord() — то же самое, что и SubBytes(), только входные и выходные данные будут размером в слово.

Важно заметить, что процедура KeyExpansion() для 256 битного Cipher Key немного отличается от тех, которые применяются для 128 и 192 битных шифроключей. Если <math>Nk = 8</math> и <math>i - 4</math> кратно <math>Nk</math>, то SubWord() применяется к <math>w[i-1]</math> до XOR’а.

KeyExpansion(byte key[4 * Nk], word w[Nb * (Nr+1)], Nk)
begin
    word temp
    i = 0;
    
    while(i < Nk)
        w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3])
        i = i + 1
    end while
    
    i = Nk

    while(i < Nb * (Nr+1))
        temp = w[i - 1]
        if (i mod Nk = 0)
            temp = SubWord(RotWord(temp)) xor Rcon[i / Nk]
        else if (Nk > 6 and i mod Nk = 4)
            temp = SubWord(temp)
        end if
        w[i] = w[i - Nk] xor temp
        i = i + 1
    end while
end
Псевдокод для Key Expansion

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


InvCipher(byte in[4 * Nb], byte out[4 * Nb], word w[Nb * (Nr+1)])
begin
    byte state[4, Nb]
    
    state = in

    AddRoundKey(state, w[Nr * Nb, Nb * (Nr+1) - 1])

    for round = Nr - 1 step -1 downto 1
        InvShiftRows(state)
        InvSubBytes(state)
        AddRoundKey(state, w[Nb * round, Nb * (round+1) - 1])
        InvMixColumns(state)
    end for

    InvShiftRows(state)
    InvSubBytes(state)
    AddRoundKey(state, w[0, Nb - 1])

    out = state
end

Псевдокод для Inverse Cipher

Алгоритм выбора раундового ключа

На каждой итерации <math>i</math> раундовый ключ для операции AddRoundKey выбирается из массива <math>w \left[ i \right]</math> начиная с элемента <math>w \left[ Nb * i \right]</math> до <math>w \left[ Nb * \left( i + 1 \right) \right]</math>.

Варианты алгоритма

На базе алгоритма Rijndael, лежащего в основе AES, реализованы альтернативные криптоалгоритмы. Среди наиболее известных — участники конкурса Nessie: Anubis на инволюциях, автором которого является Винсент Рэймен и усиленный вариант шифра — Grand Cru Йохана Борста.

Криптостойкость

В июне 2003 года Агентство национальной безопасности США постановило, что шифр AES является достаточно надёжным, чтобы использовать его для защиты сведений, составляющих государственную тайну (англ. classified information). Вплоть до уровня SECRET было разрешено использовать ключи длиной 128 бит, для уровня TOP SECRET требовались ключи длиной 192 и 256 бит[9].

XSL-атака

В отличие от большинства других шифров, AES имеет простое математическое описание. Это беспокоило в том числе и Нильса Фергюсона (англ. Niels Ferguson), который в своей работе отметил, что безопасность шифра основывается на новом непроверенном предположении о сложности решения определённых видов уравнений (англ. «The security of Rijndael depends on a new and untested hardness assumption: it is computationally infeasible to solve equations of this type»)[10][11], а также Брюса Шнайера, который написал в совместной с Нильсом книге:

У нас есть одно критическое замечание к AES: мы не совсем доверяем его безопасности. Что беспокоит нас больше всего в AES, так это его простая алгебраическая структура… Ни один другой блочный шифр не имеет столь простого алгебраического представления. Мы понятия не имеем, ведёт это к атаке или нет, но незнание этого является достаточной причиной, чтобы скептически относиться к использованию AES.

Niels Ferguson, Bruce Schneier Practical Cryptography — 2003 — pp. 56—57

Николя Куртуа (англ. Nicolas Courtois) и Йозеф Пепшик (англ. Josef Pieprzyk) в 2002 году опубликовали статью, в которой описали теоретическую атаку, названную ими XSL-атакой (англ. eXtended Sparse Linearization), которая могла бы позволить вскрыть шифры AES и Serpent[12][13]. Тем не менее, результаты работы не всеми были восприняты оптимистично:

Я считаю, что в работе Куртуа-Пепшика есть ошибка. Они переоценили число линейно-независимых уравнений. В результате у них нет достаточного количества линейных уравнений для решения системы, и [указанный] метод не может взломать Rijndael. Он имеет определённые достоинства и заслуживает изучения, но не взламывает Rijndael в его нынешнем виде.

Дон Копперсмит, [www.schneier.com/crypto-gram-0210.html#8 комментарий к записи] в блоге Брюса Шнайера

На странице, посвящённой обсуждению конкурса NESSIE, в конце 2002 года один из авторов шифра, Винсент Рэймен, заявил, что XSL-атака является всего лишь мечтой (англ. The XSL attack is not an attack. It is a dream) (данная точка зрения позже была повторена в 2004 году на 4-й конференции AES в Бонне). На это Куртуа ответил, что данная мечта может стать для автора AES кошмаром (англ. It may also be a very bad dream and turn into a nightmare)[14] (игра слов: dream переводится и как мечта и как сновидение. Nightmare переводится как кошмарный сон, ночной кошмар).

В 2003 году Шон Мёрфи и Мэтт Робшоу (англ. Matt Robshaw) опубликовали работу, в которой, в предположении что результаты Куртуа и Пепшика верны, обосновали возможность атаки на алгоритм AES, сокращающей количество операций для взлома с 2128 до 2100. Однако на 4-й конференции AES Илья Толи (англ. Ilia Toli) и Альберто Дзанони (англ. Alberto Zanoni) показали, что работа Мёрфи и Робшоу неверна[15]. Позже, в 2007 году, Чу-Ви Лим (англ. Chu-Wee Lim) и Хунгминг Ху (англ. Khoongming Khoo) также показали, что данная атака не может работать в том виде, как она была описана[16].

Атака по сторонним каналам

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

В апреле 2005 года Дэниел Бернштейн (англ.) (Daniel J. Bernstein) опубликовал работу с описанием атаки, использующей для взлома информацию о времени выполнения каждой операции шифрования[17]. Данная атака потребовала более 200 миллионов выбранных шифротекстов для нахождения ключа[18].

В октябре 2005 года Даг Арне Освик, Ади Шамир и Эран Трумер представили работу с описанием нескольких атак, использующих время выполнения операций для нахождения ключа. Одна из представленных атак получала ключ после 800 операций шифрования. Атака требовала от криптоаналитика возможности запускать программы на той же системе, где выполнялось шифрование[19].

В декабре 2009 года была опубликована работа, в которой использование дифференциального анализа ошибок (англ. Differential Fault Analysis), искусственно создаваемых в матрице состояния на 8-м раунде шифрования, позволило восстановить ключ за 232 операций[20].

См. также

Напишите отзыв о статье "Advanced Encryption Standard"

Примечания

  1. "…В соответствии с фламандскими правилами название читается как «Рэндал» — «Компьютерра», декабрь 1999, № 49
  2. Лаборатория Чеканова. [www.thg.ru/cpu/aes_clarkdale/index.html Intel Core i5 (Clarkdale): анализ аппаратного ускорения шифрования AES] (рус.). THG (19 января 2010). — «наиболее популярный стандарт симметричного шифрования в мире ИТ»  Проверено 14 ноября 2010. [www.webcitation.org/65YiuXrGU Архивировано из первоисточника 19 февраля 2012].
  3. Biryukov, Alex and Khovratovich, Dmitry [www.impic.org/papers/Aes-192-256.pdf Related-key Cryptanalysis of the Full AES-192 and AES-256] (англ.) // Advances in Cryptology – ASIACRYPT 2009. — Springer Berlin / Heidelberg, 2009. — Vol. 5912. — P. 1—18. — DOI:10.1007/978-3-642-10366-7_1.
  4. csrc.nist.gov/CryptoToolkit/aes/pre-round1/aes_9701.txt
  5. [www.nist.gov/public_affairs/releases/g00-176.htm NIST Error Page]
  6. [csrc.nist.gov/CryptoToolkit/aes/ Bounce to index.html]
  7. en:Rijndael mix columns
  8. csrc.nist.gov/publications/fips/fips197/fips-197.pdf "5.1.3 MixColumns() Transformation .. The columns are considered as polynomials over GF(2^8) and multiplied modulo x^4 + 1 with a fixed polynomial a(x), given by a(x) = {03}x^3 + {01}x^2 + {01}x + {02}."
  9. [cryptome.org/aes-natsec.htm National Policy on the Use of the Advanced Encryption Standard (AES) to Protect National Security Systems and National Security Information] (англ.). Committee on National Security Systems (June 2003). Проверено 27 октября 2010. [www.webcitation.org/65Yixk1FT Архивировано из первоисточника 19 февраля 2012].
  10. James McLaughlin. The XSL controversy // [www-users.cs.york.ac.uk/~jmclaugh/XSL_chapter.pdf A survey of block cipher cryptanalysis techniques]. — preprint. — York: University of York, 2009.
  11. Niels Ferguson, Richard Schroeppel, and Doug Whiting [www.macfergus.com/pub/rdalgeq.html A simple algebraic representation of Rijndael] (англ.) // Selected Areas in Cryptography, Proc. SAC 2001, Lecture Notes in Computer Science #2259. — Springer Verlag, 2001. — P. 103—111.
  12. Bruce Schneier. [www.schneier.com/crypto-gram-0209.html Crypto-Gram Newsletter] (англ.). Schneier on Security (15 September 2002). Проверено 27 октября 2010. [www.webcitation.org/65YiyrUTe Архивировано из первоисточника 19 февраля 2012].
  13. Nicolas Courtois, Josef Pieprzyk [eprint.iacr.org/2002/044 Cryptanalysis of Block Ciphers with Overdefined Systems of Equations] (англ.) // Advances in Cryptology — ASIACRYPT 2002 8th International Conference on the Theory Application of Cryptology and Information Security Queenstown, New Zealand, December 1—5, 2002 Proceedings. Lecture Notes in Computer Science (2501). — Springer, 2002. — P. 267—287. — DOI:10.1007/3-540-36178-2.
  14. [web.archive.org/web/20031108050830/www.cosic.esat.kuleuven.ac.be/nessie/forum/read.php?f=1&i=82&t=82 NESSIE Discussion Forum]
  15. Ilia Toli, Alberto Zanoni [www.springerlink.com/content/3q790mfnr6bk70pf/ An Algebraic Interpretation of AES-128] (англ.) // Proc. of AES Conference. — 2005. — Vol. 2005. — P. 84—97. — DOI:10.1007/11506447_8.
  16. Chu-wee Lim, Khoongming Khoo [www.springerlink.com/content/6x35t1u383824353/ An Analysis of XSL Applied to BES] (англ.) // Fast Software Encryption. — Heidelberg: Springer Berlin / Heidelberg, 2007. — Vol. 4593. — P. 242—253. — DOI:10.1007/978-3-540-74619-5_16.
  17. Daniel J. Bernstein [cr.yp.to/papers.html#cachetiming Cache-timing attacks on AES] (англ.). — 2004.
  18. Bruce Schneier. [www.schneier.com/blog/archives/2005/05/aes_timing_atta_1.html AES Timing Attack] (англ.). Schneier on Security (17 May 2005). Проверено 27 октября 2010. [www.webcitation.org/65YizbRPr Архивировано из первоисточника 19 февраля 2012].
  19. Dag Arne Osvik; Adi Shamir and Eran Tromer [eprint.iacr.org/2005/271.pdf Cache Attacks and Countermeasures: the Case of AES] // Topics in Cryptology — CT-RSA 2006, The Cryptographers’ Track at the RSA Conference. — Springer-Verlag, 2005. — P. 1—20.
  20. Dhiman Saha, Debdeep Mukhopadhyay, Dipanwita RoyChowdhury [eprint.iacr.org/2009/581 A Diagonal Fault Attack on the Advanced Encryption Standar] (англ.) // Cryptology ePrint Archive. — 2009.

Литература

  • [csrc.nist.gov/publications/fips/fips197/fips-197.pdf Federal Information Processing Standards Publication 197 November 26, 2001 Specification for the ADVANCED ENCRYPTION STANDARD (AES)]  (англ.)
  • Ошибка Lua : attempt to index local 'entity' (a nil value).

Ссылки

  • [web.archive.org/web/20140529233954/www.cs.bc.edu/~straubin/cs381-05/blockciphers/rijndael_ingles2004.swf Подробная анимация про реализацию и устройство AES]
  • [byrd.narod.ru/aes/aes2.htm О процессе принятия AES]
  • [mzdm.narod.ru/ Любительский перевод стандарта (AES)]
  • Jeff Moser. [www.moserware.com/2009/09/stick-figure-guide-to-advanced.html A Stick Figure Guide to the Advanced Encryption Standard (AES)] (англ.) (22 September 2009). Проверено 22 ноября 2010. [www.webcitation.org/65Yj0G6mK Архивировано из первоисточника 19 февраля 2012]. — AES в картинках ([www.pgpru.com/biblioteka/statji/aesvkartinkah русский перевод])

Отрывок, характеризующий Advanced Encryption Standard

Крики и огни в неприятельской армии происходили оттого, что в то время, как по войскам читали приказ Наполеона, сам император верхом объезжал свои бивуаки. Солдаты, увидав императора, зажигали пуки соломы и с криками: vive l'empereur! бежали за ним. Приказ Наполеона был следующий:
«Солдаты! Русская армия выходит против вас, чтобы отмстить за австрийскую, ульмскую армию. Это те же баталионы, которые вы разбили при Голлабрунне и которые вы с тех пор преследовали постоянно до этого места. Позиции, которые мы занимаем, – могущественны, и пока они будут итти, чтоб обойти меня справа, они выставят мне фланг! Солдаты! Я сам буду руководить вашими баталионами. Я буду держаться далеко от огня, если вы, с вашей обычной храбростью, внесете в ряды неприятельские беспорядок и смятение; но если победа будет хоть одну минуту сомнительна, вы увидите вашего императора, подвергающегося первым ударам неприятеля, потому что не может быть колебания в победе, особенно в тот день, в который идет речь о чести французской пехоты, которая так необходима для чести своей нации.
Под предлогом увода раненых не расстроивать ряда! Каждый да будет вполне проникнут мыслию, что надо победить этих наемников Англии, воодушевленных такою ненавистью против нашей нации. Эта победа окончит наш поход, и мы можем возвратиться на зимние квартиры, где застанут нас новые французские войска, которые формируются во Франции; и тогда мир, который я заключу, будет достоин моего народа, вас и меня.
Наполеон».


В 5 часов утра еще было совсем темно. Войска центра, резервов и правый фланг Багратиона стояли еще неподвижно; но на левом фланге колонны пехоты, кавалерии и артиллерии, долженствовавшие первые спуститься с высот, для того чтобы атаковать французский правый фланг и отбросить его, по диспозиции, в Богемские горы, уже зашевелились и начали подниматься с своих ночлегов. Дым от костров, в которые бросали всё лишнее, ел глаза. Было холодно и темно. Офицеры торопливо пили чай и завтракали, солдаты пережевывали сухари, отбивали ногами дробь, согреваясь, и стекались против огней, бросая в дрова остатки балаганов, стулья, столы, колеса, кадушки, всё лишнее, что нельзя было увезти с собою. Австрийские колонновожатые сновали между русскими войсками и служили предвестниками выступления. Как только показывался австрийский офицер около стоянки полкового командира, полк начинал шевелиться: солдаты сбегались от костров, прятали в голенища трубочки, мешочки в повозки, разбирали ружья и строились. Офицеры застегивались, надевали шпаги и ранцы и, покрикивая, обходили ряды; обозные и денщики запрягали, укладывали и увязывали повозки. Адъютанты, батальонные и полковые командиры садились верхами, крестились, отдавали последние приказания, наставления и поручения остающимся обозным, и звучал однообразный топот тысячей ног. Колонны двигались, не зная куда и не видя от окружавших людей, от дыма и от усиливающегося тумана ни той местности, из которой они выходили, ни той, в которую они вступали.
Солдат в движении так же окружен, ограничен и влеком своим полком, как моряк кораблем, на котором он находится. Как бы далеко он ни прошел, в какие бы странные, неведомые и опасные широты ни вступил он, вокруг него – как для моряка всегда и везде те же палубы, мачты, канаты своего корабля – всегда и везде те же товарищи, те же ряды, тот же фельдфебель Иван Митрич, та же ротная собака Жучка, то же начальство. Солдат редко желает знать те широты, в которых находится весь корабль его; но в день сражения, Бог знает как и откуда, в нравственном мире войска слышится одна для всех строгая нота, которая звучит приближением чего то решительного и торжественного и вызывает их на несвойственное им любопытство. Солдаты в дни сражений возбужденно стараются выйти из интересов своего полка, прислушиваются, приглядываются и жадно расспрашивают о том, что делается вокруг них.
Туман стал так силен, что, несмотря на то, что рассветало, не видно было в десяти шагах перед собою. Кусты казались громадными деревьями, ровные места – обрывами и скатами. Везде, со всех сторон, можно было столкнуться с невидимым в десяти шагах неприятелем. Но долго шли колонны всё в том же тумане, спускаясь и поднимаясь на горы, минуя сады и ограды, по новой, непонятной местности, нигде не сталкиваясь с неприятелем. Напротив того, то впереди, то сзади, со всех сторон, солдаты узнавали, что идут по тому же направлению наши русские колонны. Каждому солдату приятно становилось на душе оттого, что он знал, что туда же, куда он идет, то есть неизвестно куда, идет еще много, много наших.
– Ишь ты, и курские прошли, – говорили в рядах.
– Страсть, братец ты мой, что войски нашей собралось! Вечор посмотрел, как огни разложили, конца краю не видать. Москва, – одно слово!
Хотя никто из колонных начальников не подъезжал к рядам и не говорил с солдатами (колонные начальники, как мы видели на военном совете, были не в духе и недовольны предпринимаемым делом и потому только исполняли приказания и не заботились о том, чтобы повеселить солдат), несмотря на то, солдаты шли весело, как и всегда, идя в дело, в особенности в наступательное. Но, пройдя около часу всё в густом тумане, большая часть войска должна была остановиться, и по рядам пронеслось неприятное сознание совершающегося беспорядка и бестолковщины. Каким образом передается это сознание, – весьма трудно определить; но несомненно то, что оно передается необыкновенно верно и быстро разливается, незаметно и неудержимо, как вода по лощине. Ежели бы русское войско было одно, без союзников, то, может быть, еще прошло бы много времени, пока это сознание беспорядка сделалось бы общею уверенностью; но теперь, с особенным удовольствием и естественностью относя причину беспорядков к бестолковым немцам, все убедились в том, что происходит вредная путаница, которую наделали колбасники.
– Что стали то? Аль загородили? Или уж на француза наткнулись?
– Нет не слыхать. А то палить бы стал.
– То то торопили выступать, а выступили – стали без толку посереди поля, – всё немцы проклятые путают. Эки черти бестолковые!
– То то я бы их и пустил наперед. А то, небось, позади жмутся. Вот и стой теперь не емши.
– Да что, скоро ли там? Кавалерия, говорят, дорогу загородила, – говорил офицер.
– Эх, немцы проклятые, своей земли не знают, – говорил другой.
– Вы какой дивизии? – кричал, подъезжая, адъютант.
– Осьмнадцатой.
– Так зачем же вы здесь? вам давно бы впереди должно быть, теперь до вечера не пройдете.
– Вот распоряжения то дурацкие; сами не знают, что делают, – говорил офицер и отъезжал.
Потом проезжал генерал и сердито не по русски кричал что то.
– Тафа лафа, а что бормочет, ничего не разберешь, – говорил солдат, передразнивая отъехавшего генерала. – Расстрелял бы я их, подлецов!
– В девятом часу велено на месте быть, а мы и половины не прошли. Вот так распоряжения! – повторялось с разных сторон.
И чувство энергии, с которым выступали в дело войска, начало обращаться в досаду и злобу на бестолковые распоряжения и на немцев.
Причина путаницы заключалась в том, что во время движения австрийской кавалерии, шедшей на левом фланге, высшее начальство нашло, что наш центр слишком отдален от правого фланга, и всей кавалерии велено было перейти на правую сторону. Несколько тысяч кавалерии продвигалось перед пехотой, и пехота должна была ждать.
Впереди произошло столкновение между австрийским колонновожатым и русским генералом. Русский генерал кричал, требуя, чтобы остановлена была конница; австриец доказывал, что виноват был не он, а высшее начальство. Войска между тем стояли, скучая и падая духом. После часовой задержки войска двинулись, наконец, дальше и стали спускаться под гору. Туман, расходившийся на горе, только гуще расстилался в низах, куда спустились войска. Впереди, в тумане, раздался один, другой выстрел, сначала нескладно в разных промежутках: тратта… тат, и потом всё складнее и чаще, и завязалось дело над речкою Гольдбахом.
Не рассчитывая встретить внизу над речкою неприятеля и нечаянно в тумане наткнувшись на него, не слыша слова одушевления от высших начальников, с распространившимся по войскам сознанием, что было опоздано, и, главное, в густом тумане не видя ничего впереди и кругом себя, русские лениво и медленно перестреливались с неприятелем, подвигались вперед и опять останавливались, не получая во время приказаний от начальников и адъютантов, которые блудили по туману в незнакомой местности, не находя своих частей войск. Так началось дело для первой, второй и третьей колонны, которые спустились вниз. Четвертая колонна, при которой находился сам Кутузов, стояла на Праценских высотах.
В низах, где началось дело, был всё еще густой туман, наверху прояснело, но всё не видно было ничего из того, что происходило впереди. Были ли все силы неприятеля, как мы предполагали, за десять верст от нас или он был тут, в этой черте тумана, – никто не знал до девятого часа.
Было 9 часов утра. Туман сплошным морем расстилался по низу, но при деревне Шлапанице, на высоте, на которой стоял Наполеон, окруженный своими маршалами, было совершенно светло. Над ним было ясное, голубое небо, и огромный шар солнца, как огромный пустотелый багровый поплавок, колыхался на поверхности молочного моря тумана. Не только все французские войска, но сам Наполеон со штабом находился не по ту сторону ручьев и низов деревень Сокольниц и Шлапаниц, за которыми мы намеревались занять позицию и начать дело, но по сю сторону, так близко от наших войск, что Наполеон простым глазом мог в нашем войске отличать конного от пешего. Наполеон стоял несколько впереди своих маршалов на маленькой серой арабской лошади, в синей шинели, в той самой, в которой он делал итальянскую кампанию. Он молча вглядывался в холмы, которые как бы выступали из моря тумана, и по которым вдалеке двигались русские войска, и прислушивался к звукам стрельбы в лощине. В то время еще худое лицо его не шевелилось ни одним мускулом; блестящие глаза были неподвижно устремлены на одно место. Его предположения оказывались верными. Русские войска частью уже спустились в лощину к прудам и озерам, частью очищали те Праценские высоты, которые он намерен был атаковать и считал ключом позиции. Он видел среди тумана, как в углублении, составляемом двумя горами около деревни Прац, всё по одному направлению к лощинам двигались, блестя штыками, русские колонны и одна за другой скрывались в море тумана. По сведениям, полученным им с вечера, по звукам колес и шагов, слышанным ночью на аванпостах, по беспорядочности движения русских колонн, по всем предположениям он ясно видел, что союзники считали его далеко впереди себя, что колонны, двигавшиеся близ Працена, составляли центр русской армии, и что центр уже достаточно ослаблен для того, чтобы успешно атаковать его. Но он всё еще не начинал дела.
Нынче был для него торжественный день – годовщина его коронования. Перед утром он задремал на несколько часов и здоровый, веселый, свежий, в том счастливом расположении духа, в котором всё кажется возможным и всё удается, сел на лошадь и выехал в поле. Он стоял неподвижно, глядя на виднеющиеся из за тумана высоты, и на холодном лице его был тот особый оттенок самоуверенного, заслуженного счастья, который бывает на лице влюбленного и счастливого мальчика. Маршалы стояли позади его и не смели развлекать его внимание. Он смотрел то на Праценские высоты, то на выплывавшее из тумана солнце.
Когда солнце совершенно вышло из тумана и ослепляющим блеском брызнуло по полям и туману (как будто он только ждал этого для начала дела), он снял перчатку с красивой, белой руки, сделал ею знак маршалам и отдал приказание начинать дело. Маршалы, сопутствуемые адъютантами, поскакали в разные стороны, и через несколько минут быстро двинулись главные силы французской армии к тем Праценским высотам, которые всё более и более очищались русскими войсками, спускавшимися налево в лощину.


В 8 часов Кутузов выехал верхом к Працу, впереди 4 й Милорадовичевской колонны, той, которая должна была занять места колонн Пржебышевского и Ланжерона, спустившихся уже вниз. Он поздоровался с людьми переднего полка и отдал приказание к движению, показывая тем, что он сам намерен был вести эту колонну. Выехав к деревне Прац, он остановился. Князь Андрей, в числе огромного количества лиц, составлявших свиту главнокомандующего, стоял позади его. Князь Андрей чувствовал себя взволнованным, раздраженным и вместе с тем сдержанно спокойным, каким бывает человек при наступлении давно желанной минуты. Он твердо был уверен, что нынче был день его Тулона или его Аркольского моста. Как это случится, он не знал, но он твердо был уверен, что это будет. Местность и положение наших войск были ему известны, насколько они могли быть известны кому нибудь из нашей армии. Его собственный стратегический план, который, очевидно, теперь и думать нечего было привести в исполнение, был им забыт. Теперь, уже входя в план Вейротера, князь Андрей обдумывал могущие произойти случайности и делал новые соображения, такие, в которых могли бы потребоваться его быстрота соображения и решительность.
Налево внизу, в тумане, слышалась перестрелка между невидными войсками. Там, казалось князю Андрею, сосредоточится сражение, там встретится препятствие, и «туда то я буду послан, – думал он, – с бригадой или дивизией, и там то с знаменем в руке я пойду вперед и сломлю всё, что будет предо мной».
Князь Андрей не мог равнодушно смотреть на знамена проходивших батальонов. Глядя на знамя, ему всё думалось: может быть, это то самое знамя, с которым мне придется итти впереди войск.
Ночной туман к утру оставил на высотах только иней, переходивший в росу, в лощинах же туман расстилался еще молочно белым морем. Ничего не было видно в той лощине налево, куда спустились наши войска и откуда долетали звуки стрельбы. Над высотами было темное, ясное небо, и направо огромный шар солнца. Впереди, далеко, на том берегу туманного моря, виднелись выступающие лесистые холмы, на которых должна была быть неприятельская армия, и виднелось что то. Вправо вступала в область тумана гвардия, звучавшая топотом и колесами и изредка блестевшая штыками; налево, за деревней, такие же массы кавалерии подходили и скрывались в море тумана. Спереди и сзади двигалась пехота. Главнокомандующий стоял на выезде деревни, пропуская мимо себя войска. Кутузов в это утро казался изнуренным и раздражительным. Шедшая мимо его пехота остановилась без приказания, очевидно, потому, что впереди что нибудь задержало ее.
– Да скажите же, наконец, чтобы строились в батальонные колонны и шли в обход деревни, – сердито сказал Кутузов подъехавшему генералу. – Как же вы не поймете, ваше превосходительство, милостивый государь, что растянуться по этому дефилею улицы деревни нельзя, когда мы идем против неприятеля.
– Я предполагал построиться за деревней, ваше высокопревосходительство, – отвечал генерал.
Кутузов желчно засмеялся.
– Хороши вы будете, развертывая фронт в виду неприятеля, очень хороши.
– Неприятель еще далеко, ваше высокопревосходительство. По диспозиции…
– Диспозиция! – желчно вскрикнул Кутузов, – а это вам кто сказал?… Извольте делать, что вам приказывают.
– Слушаю с.
– Mon cher, – сказал шопотом князю Андрею Несвицкий, – le vieux est d'une humeur de chien. [Мой милый, наш старик сильно не в духе.]
К Кутузову подскакал австрийский офицер с зеленым плюмажем на шляпе, в белом мундире, и спросил от имени императора: выступила ли в дело четвертая колонна?
Кутузов, не отвечая ему, отвернулся, и взгляд его нечаянно попал на князя Андрея, стоявшего подле него. Увидав Болконского, Кутузов смягчил злое и едкое выражение взгляда, как бы сознавая, что его адъютант не был виноват в том, что делалось. И, не отвечая австрийскому адъютанту, он обратился к Болконскому:
– Allez voir, mon cher, si la troisieme division a depasse le village. Dites lui de s'arreter et d'attendre mes ordres. [Ступайте, мой милый, посмотрите, прошла ли через деревню третья дивизия. Велите ей остановиться и ждать моего приказа.]
Только что князь Андрей отъехал, он остановил его.
– Et demandez lui, si les tirailleurs sont postes, – прибавил он. – Ce qu'ils font, ce qu'ils font! [И спросите, размещены ли стрелки. – Что они делают, что они делают!] – проговорил он про себя, все не отвечая австрийцу.
Князь Андрей поскакал исполнять поручение.
Обогнав всё шедшие впереди батальоны, он остановил 3 ю дивизию и убедился, что, действительно, впереди наших колонн не было стрелковой цепи. Полковой командир бывшего впереди полка был очень удивлен переданным ему от главнокомандующего приказанием рассыпать стрелков. Полковой командир стоял тут в полной уверенности, что впереди его есть еще войска, и что неприятель не может быть ближе 10 ти верст. Действительно, впереди ничего не было видно, кроме пустынной местности, склоняющейся вперед и застланной густым туманом. Приказав от имени главнокомандующего исполнить упущенное, князь Андрей поскакал назад. Кутузов стоял всё на том же месте и, старчески опустившись на седле своим тучным телом, тяжело зевал, закрывши глаза. Войска уже не двигались, а стояли ружья к ноге.
– Хорошо, хорошо, – сказал он князю Андрею и обратился к генералу, который с часами в руках говорил, что пора бы двигаться, так как все колонны с левого фланга уже спустились.
– Еще успеем, ваше превосходительство, – сквозь зевоту проговорил Кутузов. – Успеем! – повторил он.
В это время позади Кутузова послышались вдали звуки здоровающихся полков, и голоса эти стали быстро приближаться по всему протяжению растянувшейся линии наступавших русских колонн. Видно было, что тот, с кем здоровались, ехал скоро. Когда закричали солдаты того полка, перед которым стоял Кутузов, он отъехал несколько в сторону и сморщившись оглянулся. По дороге из Працена скакал как бы эскадрон разноцветных всадников. Два из них крупным галопом скакали рядом впереди остальных. Один был в черном мундире с белым султаном на рыжей энглизированной лошади, другой в белом мундире на вороной лошади. Это были два императора со свитой. Кутузов, с аффектацией служаки, находящегося во фронте, скомандовал «смирно» стоявшим войскам и, салютуя, подъехал к императору. Вся его фигура и манера вдруг изменились. Он принял вид подначальственного, нерассуждающего человека. Он с аффектацией почтительности, которая, очевидно, неприятно поразила императора Александра, подъехал и салютовал ему.
Неприятное впечатление, только как остатки тумана на ясном небе, пробежало по молодому и счастливому лицу императора и исчезло. Он был, после нездоровья, несколько худее в этот день, чем на ольмюцком поле, где его в первый раз за границей видел Болконский; но то же обворожительное соединение величавости и кротости было в его прекрасных, серых глазах, и на тонких губах та же возможность разнообразных выражений и преобладающее выражение благодушной, невинной молодости.
На ольмюцком смотру он был величавее, здесь он был веселее и энергичнее. Он несколько разрумянился, прогалопировав эти три версты, и, остановив лошадь, отдохновенно вздохнул и оглянулся на такие же молодые, такие же оживленные, как и его, лица своей свиты. Чарторижский и Новосильцев, и князь Болконский, и Строганов, и другие, все богато одетые, веселые, молодые люди, на прекрасных, выхоленных, свежих, только что слегка вспотевших лошадях, переговариваясь и улыбаясь, остановились позади государя. Император Франц, румяный длиннолицый молодой человек, чрезвычайно прямо сидел на красивом вороном жеребце и озабоченно и неторопливо оглядывался вокруг себя. Он подозвал одного из своих белых адъютантов и спросил что то. «Верно, в котором часу они выехали», подумал князь Андрей, наблюдая своего старого знакомого, с улыбкой, которую он не мог удержать, вспоминая свою аудиенцию. В свите императоров были отобранные молодцы ординарцы, русские и австрийские, гвардейских и армейских полков. Между ними велись берейторами в расшитых попонах красивые запасные царские лошади.
Как будто через растворенное окно вдруг пахнуло свежим полевым воздухом в душную комнату, так пахнуло на невеселый Кутузовский штаб молодостью, энергией и уверенностью в успехе от этой прискакавшей блестящей молодежи.
– Что ж вы не начинаете, Михаил Ларионович? – поспешно обратился император Александр к Кутузову, в то же время учтиво взглянув на императора Франца.
– Я поджидаю, ваше величество, – отвечал Кутузов, почтительно наклоняясь вперед.
Император пригнул ухо, слегка нахмурясь и показывая, что он не расслышал.
– Поджидаю, ваше величество, – повторил Кутузов (князь Андрей заметил, что у Кутузова неестественно дрогнула верхняя губа, в то время как он говорил это поджидаю ). – Не все колонны еще собрались, ваше величество.
Государь расслышал, но ответ этот, видимо, не понравился ему; он пожал сутуловатыми плечами, взглянул на Новосильцева, стоявшего подле, как будто взглядом этим жалуясь на Кутузова.
– Ведь мы не на Царицыном лугу, Михаил Ларионович, где не начинают парада, пока не придут все полки, – сказал государь, снова взглянув в глаза императору Францу, как бы приглашая его, если не принять участие, то прислушаться к тому, что он говорит; но император Франц, продолжая оглядываться, не слушал.
– Потому и не начинаю, государь, – сказал звучным голосом Кутузов, как бы предупреждая возможность не быть расслышанным, и в лице его еще раз что то дрогнуло. – Потому и не начинаю, государь, что мы не на параде и не на Царицыном лугу, – выговорил он ясно и отчетливо.
В свите государя на всех лицах, мгновенно переглянувшихся друг с другом, выразился ропот и упрек. «Как он ни стар, он не должен бы, никак не должен бы говорить этак», выразили эти лица.
Государь пристально и внимательно посмотрел в глаза Кутузову, ожидая, не скажет ли он еще чего. Но Кутузов, с своей стороны, почтительно нагнув голову, тоже, казалось, ожидал. Молчание продолжалось около минуты.