Serpent

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

Росс Андерсон, Эли Бихам, Ларс Кнудсен

Создан:

1998

Опубликован:

1998

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

128/192/256 бит

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

128 бит

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

32

Тип:

SP-сеть

Serpent («змея») — симметричный блочный алгоритм шифрования.

Разработан Россом Андерсоном, Эли Бихамом и Ларсом Кнудсеном. Некоторые предыдущие разработки авторов тоже носили названия в честь животных, например Tiger, Bear.

Алгоритм являлся одним из финалистов 2-го этапа конкурса AES. Как и другие алгоритмы, участвовавшие в конкурсе AES, Serpent имеет размер блока 128 бит и возможные длины ключа 128, 192 или 256 бит. Алгоритм представляет собой 32-раундовую SP-сеть, работающую с блоком из четырёх 32-битных слов. Serpent был разработан так, что все операции могут быть выполнены параллельно, используя 32 1-битных «потока».

При разработке Serpent использовался более консервативный подход к безопасности, нежели у других финалистов AES, проектировщики шифра считали, что 16 раундов достаточно, чтобы противостоять известным видам криптоанализа, но увеличили число раундов до 32, чтобы алгоритм мог лучше противостоять ещё неизвестным методам криптоанализа.

Став финалистом конкурса AES, алгоритм Serpent в результате голосования занял 2 место.

Шифр Serpent не запатентован и является общественным достоянием.





Основные принципы

Алгоритм создавался под лозунгом «криптографический алгоритм 21 века» для участия в конкурсе AES. При создании нового алгоритма Serpent его авторы придерживались консервативных взглядов на проектирование, что подтверждается первоначальным решением об использовании таблиц подстановок из известного много лет ранее алгоритма шифрования DES, который в течение долгого времени изучался ведущими специалистами в области криптографии и защиты информации и чьи свойства и особенности были хорошо известны научному миру. Одновременно с этим к новому алгоритму мог быть применен исчерпывающий анализ, уже разработанный для DES. Не использовались новые, непроверенные и неиспытанные технологии при создании шифра, который в случае принятия был бы использован для защиты огромных массивов финансовых транзакций и правительственной информации. Основным требованием к участникам конкурса AES было то, что алгоритм-претендент должен быть быстрее, чем 3DES, и предоставлять как минимум такой же уровень безопасности: он должен иметь блок данных длиной 128 бит и ключ длиной 256 бит. 16-раундовый Serpent был бы таким же надежным, как 3DES, но в два раза быстрее. Однако, авторы посчитали, что для большей надежности стоит увеличить количество раундов до 32. Это сделало шифр таким же быстрым, как DES, и намного более надежным, чем 3DES.

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

Алгоритм Serpent представляет собой SP-сеть, в которой весь блок данных длиной 128 бит на каждом раунде разбивается на 4 слова длиной по 32 бита. Все значения, использующиеся при шифровании, представляются битовыми потоками. Индексы бит пробегают значения от 0 до 31 для 32-битных слов, от 0 до 127 для 128-битных блоков, от 0 до 255 для 256-битных ключей и так далее. Для внутренних вычислений все биты величин представлены в прямом порядке (little-endian).

Serpent шифрует открытый текст P длиной 128 бит в шифротекст C длиной так же 128 бит за 32 раунда с помощью 33 подключей <math>K_{0}, ..., K_{32}</math> длиной 128 бит. Длина используемого ключа может принимать различные значения, но для конкретики зафиксируем их длину в 128, 192 или 256 бит. Короткие ключи длиной менее 256 бит дополняются до полной длины в 256 бит.

Шифрование состоит из следующих основных шагов:

  • начальная перестановка;
  • 32 раунда, каждый из которых состоит из операции смешивания с 128-битным ключом (побитовое логическое исключающее «или»), табличная замена (S-box) и линейное преобразование. В последнем раунде линейное преобразование заменяется дополнительным наложением ключа;
  • конечная перестановка;

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

Уравнения структуры алгоритма:

<math>\hat B_0 = IP(P)</math>
<math>\hat B_{i+1} = R_i(\hat B_{i})</math>
<math>C = FP(\hat B_{32})</math>,

где

<math>R_i(X) = L(\hat S_i(X \oplus \hat K_i)), i = 0, ..., 30</math>
<math>R_i(X) = \hat S_i(X \oplus \hat K_i) \oplus \hat K_{32}, i = 31</math>,

где <math>\hat S_i</math> — это применение таблицы подстановки <math>\hat S_{i mod 8}</math> 32 раз параллельно и <math>L</math> — линейное преобразование.

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

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

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

Как и другие алгоритмы, участвовавшие в конкурсе AES, Serpent имеет возможные длины ключа 128, 192 или 256 бит. «Неполный» ключ длиной меньше 256 бит дополняется по следующему правилу: прибавляется единичный бит справа, за ним следует столько нулевых битов, чтобы длина ключа стала равна 256 битам.

Алгоритм выбора подключей из ключа

Сначала при необходимости ключ дополняется до 256 бит и преобразуется в 33 подключа <math>K_{0}, ..., K_{32}</math> длиной 128 бит следующим способом:

Исходный ключ представляется в виде 8 32-битных слов <math>w_{-8}, ..., w_{-1}</math> для вычисления промежуточного ключа по правилу:

<math>w_i = (w_{i-8}+w_{i-5}+w_{i-3}+w_{i-1}+\phi+i) <<< 11</math>,

где <math>\phi</math> — это дробная часть золотого сечения <math>\frac{\sqrt{5}+1}{2}</math> или 0x9e3779b9 в шестнадцатеричной системе счисления, а <math><<<</math> — это циклический битовый сдвиг.

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

<math>\left \{ k_{0}, k_{1}, k_{2}, k_{3} \right \} = S_3\left ( w_{0}, w_{1}, w_{2}, w_{3} \right )</math>
<math>\left \{ k_{4}, k_{5}, k_{6}, k_{7} \right \} = S_2\left ( w_{4}, w_{5}, w_{6}, w_{7} \right )</math>
<math>\left \{ k_{8}, k_{9}, k_{10}, k_{11} \right \} = S_1\left ( w_{8}, w_{9}, w_{10}, w_{11} \right )</math>
<math>\left \{ k_{12}, k_{13}, k_{14}, k_{15} \right \} = S_0\left ( w_{12}, w_{13}, w_{14}, w_{15} \right )</math>
<math>\left \{ k_{16}, k_{17}, k_{18}, k_{19} \right \} = S_7\left ( w_{16}, w_{17}, w_{18}, w_{19} \right )</math>
<math> \cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots</math>
<math>\left \{ k_{124}, k_{125}, k_{126}, k_{127} \right \} = S_4\left ( w_{124}, w_{125}, w_{126}, w_{127} \right )</math>
<math>\left \{ k_{128}, k_{129}, k_{130}, k_{131} \right \} = S_3\left ( w_{128}, w_{129}, w_{130}, w_{131} \right )</math>

Промежуточные 32-битные величины <math>k_j</math> перенумеровываются и получаются 128-битные подключи:

<math>K_i = \left \{ k_{4i}, k_{4i+1}, k_{4i+2}, k_{4i+3} \right \}</math>

При стандартном описании алгоритма мы должны применить начальную перестановку <math>IP</math> к раундовому ключу, чтобы расположить биты ключа в надлежащем порядке, то есть <math>\hat K_i = IP(K_i)</math>

Начальная перестановка <math>IP</math>

Данная перестановка <math>IP</math> задается следующей таблицей, где указывается позиция, на которую перейдет соответствующий бит (например, 32-й бит перейдет на 1-ю позицию):

Начальная перестановка <math>IP</math>
0 32 64 96 1 33 65 97 2 34 66 98 3 35 67 99
4 36 68 100 5 37 69 101 6 38 70 102 7 39 71 103
8 40 72 104 9 41 73 105 10 42 74 106 11 43 75 107
12 44 76 108 13 45 77 109 14 46 78 110 15 47 79 111
16 48 80 112 17 49 81 113 18 50 82 114 19 51 83 115
20 52 84 116 21 53 85 117 22 54 86 118 23 55 87 119
24 56 88 120 25 57 89 121 26 58 90 122 27 59 91 123
28 60 92 124 29 61 93 125 30 62 94 126 31 63 95 127

S-боксы (таблицы замен)

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

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

Ниже представлены таблицы подстановок:

Таблица подстановок <math>S_i</math>
S0: 3 8 15 1 10 6 5 11 14 13 4 2 7 0 9 12
S1: 15 12 2 7 9 0 5 10 1 11 14 8 6 13 3 4
S2: 8 6 7 9 3 12 10 15 13 1 14 4 0 11 5 2
S3: 0 15 11 8 12 9 6 3 13 1 2 4 10 7 5 14
S4: 1 15 8 3 12 0 11 6 2 5 4 10 9 14 7 13
S5: 15 5 2 11 4 10 9 12 0 3 14 8 13 6 7 1
S6: 7 2 12 5 8 4 6 11 14 9 1 15 13 3 10 0
S7: 1 13 15 0 14 8 2 11 7 4 12 10 9 3 5 6

И инверсные таблицы подстановок:

Таблица инверсных подстановок <math>S_i^{-1}</math>
InvS0: 13 3 11 0 10 6 5 12 1 14 4 7 15 9 8 2
InvS1: 5 8 2 14 15 6 12 3 11 4 7 9 1 13 10 0
InvS2: 12 9 15 4 11 14 1 2 0 3 6 13 5 8 10 7
InvS3: 0 9 10 7 11 14 6 13 3 5 12 2 4 8 15 1
InvS4: 5 0 8 3 10 9 7 14 2 12 11 6 4 15 13 1
InvS5: 8 15 2 9 4 1 13 14 11 6 5 3 7 12 10 0
InvS6: 15 10 1 13 5 3 6 0 4 9 14 7 2 12 8 11
InvS7: 3 0 6 13 9 14 15 8 5 12 11 7 10 1 4 2

Линейное преобразование <math>LT</math>

Линейное преобразование <math>LT</math> задается следующей таблицей, где биты перечислены от 0 до 127 (например, выходной 2 бит образован 2, 9, 15, 30, 76, 84, 126 битами, сложенными по модулю 2). В каждой строке описывается 4 выходных бита, которые вместе составляют входные данные на одну таблицу замен в следующем раунде. Стоит отметить, что данный набор представляет собой таблицу <math>IP(LT(FP(x)))</math>, где <math>LT</math> и есть то линейное преобразование.

Таблица линейного преобразования:

Линейное преобразование <math>LT</math>
{16 52 56 70 83 94 105} {72 114 125} { 2 9 15 30 76 84 126} {36 90 103}
{20 56 60 74 87 98 109} { 1 76 118} { 2 6 13 19 34 80 88} {40 94 107}
{24 60 64 78 91 102 113} { 5 80 122} { 6 10 17 23 38 84 92} {44 98 111}
{28 64 68 82 95 106 117} { 9 84 126} {10 14 21 27 42 88 96} {48 102 115}
{32 68 72 86 99 110 121} { 2 13 88} {14 18 25 31 46 92 100} {52 106 119}
{36 72 76 90 103 114 125} { 6 17 92} {18 22 29 35 50 96 104} {56 110 123}
{ 1 40 76 80 94 107 118} {10 21 96} {22 26 33 39 54 100 108} {60 114 127}
{ 5 44 80 84 98 111 122} {14 25 100} {26 30 37 43 58 104 112} { 3 118 }
{ 9 48 84 88 102 115 126} {18 29 104} {30 34 41 47 62 108 116} { 7 122 }
{ 2 13 52 88 92 106 119} {22 33 108} {34 38 45 51 66 112 120} {11 126 }
{ 6 17 56 92 96 110 123} {26 37 112} {38 42 49 55 70 116 124} { 2 15 76}
{10 21 60 96 100 114 127} {30 41 116} { 0 42 46 53 59 74 120} { 6 19 80}
{ 3 14 25 100 104 118 } {34 45 120} { 4 46 50 57 63 78 124} {10 23 84}
{ 7 18 29 104 108 122 } {38 49 124} { 0 8 50 54 61 67 82} {14 27 88}
{11 22 33 108 112 126 } { 0 42 53} { 4 12 54 58 65 71 86} {18 31 92}
{ 2 15 26 37 76 112 116} { 4 46 57} { 8 16 58 62 69 75 90} {22 35 96}
{ 6 19 30 41 80 116 120} { 8 50 61} {12 20 62 66 73 79 94} {26 39 100}
{10 23 34 45 84 120 124} {12 54 65} {16 24 66 70 77 83 98} {30 43 104}
{ 0 14 27 38 49 88 124} {16 58 69} {20 28 70 74 81 87 102} {34 47 108}
{ 0 4 18 31 42 53 92} {20 62 73} {24 32 74 78 85 91 106} {38 51 112}
{ 4 8 22 35 46 57 96} {24 66 77} {28 36 78 82 89 95 110} {42 55 116}
{ 8 12 26 39 50 61 100} {28 70 81} {32 40 82 86 93 99 114} {46 59 120}
{12 16 30 43 54 65 104} {32 74 85} {36 90 103 118 } {50 63 124}
{16 20 34 47 58 69 108} {36 78 89} {40 94 107 122 } { 0 54 67}
{20 24 38 51 62 73 112} {40 82 93} {44 98 111 126 } { 4 58 71}
{24 28 42 55 66 77 116} {44 86 97} { 2 48 102 115 } { 8 62 75}
{28 32 46 59 70 81 120} {48 90 101} { 6 52 106 119 } {12 66 79}
{32 36 50 63 74 85 124} {52 94 105} {10 56 110 123 } {16 70 83}
{ 0 36 40 54 67 78 89} {56 98 109} {14 60 114 127 } {20 74 87}
{ 4 40 44 58 71 82 93} {60 102 113} { 3 18 72 114 118 125 } {24 78 91}
{ 8 44 48 62 75 86 97} {64 106 117} { 1 7 22 76 118 122 } {28 82 95}
{12 48 52 66 79 90 101} {68 110 121} { 5 11 26 80 122 126 } {32 86 99}

Таблица обратного линейного преобразования, которое используется при расшифровке:

Обратное линейное преобразование <math>ILT</math>
{ 53 55 72} { 1 5 20 90 } { 15 102} { 3 31 90 }
{ 57 59 76} { 5 9 24 94 } { 19 106} { 7 35 94 }
{ 61 63 80} { 9 13 28 98 } { 23 110} {11 39 98 }
{ 65 67 84} {13 17 32 102 } { 27 114} { 1 3 15 20 43 102 }
{ 69 71 88} {17 21 36 106 } { 1 31 118} { 5 7 19 24 47 106 }
{ 73 75 92} {21 25 40 110 } { 5 35 122} { 9 11 23 28 51 110 }
{ 77 79 96} {25 29 44 114 } { 9 39 126} {13 15 27 32 55 114 }
{ 81 83 100} { 1 29 33 48 118} { 2 13 43} { 1 17 19 31 36 59 118}
{ 85 87 104} { 5 33 37 52 122} { 6 17 47} { 5 21 23 35 40 63 122}
{ 89 91 108} { 9 37 41 56 126} {10 21 51} { 9 25 27 39 44 67 126}
{ 93 95 112} { 2 13 41 45 60} {14 25 55} { 2 13 29 31 43 48 71}
{ 97 99 116} { 6 17 45 49 64} {18 29 59} { 6 17 33 35 47 52 75}
{101 103 120} {10 21 49 53 68} {22 33 63} {10 21 37 39 51 56 79}
{105 107 124} {14 25 53 57 72} {26 37 67} {14 25 41 43 55 60 83}
{ 0 109 111} {18 29 57 61 76} {30 41 71} {18 29 45 47 59 64 87}
{ 4 113 115} {22 33 61 65 80} {34 45 75} {22 33 49 51 63 68 91}
{ 8 117 119} {26 37 65 69 84} {38 49 79} {26 37 53 55 67 72 95}
{ 12 121 123} {30 41 69 73 88} {42 53 83} {30 41 57 59 71 76 99}
{ 16 125 127} {34 45 73 77 92} {46 57 87} {34 45 61 63 75 80 103}
{ 1 3 20} {38 49 77 81 96} {50 61 91} {38 49 65 67 79 84 107}
{ 5 7 24} {42 53 81 85 100} {54 65 95} {42 53 69 71 83 88 111}
{ 9 11 28} {46 57 85 89 104} {58 69 99} {46 57 73 75 87 92 115}
{ 13 15 32} {50 61 89 93 108} {62 73 103} {50 61 77 79 91 96 119}
{ 17 19 36} {54 65 93 97 112} {66 77 107} {54 65 81 83 95 100 123}
{ 21 23 40} {58 69 97 101 116} {70 81 111} {58 69 85 87 99 104 127}
{ 25 27 44} {62 73 101 105 120} {74 85 115} { 3 62 73 89 91 103 108}
{ 29 31 48} {66 77 105 109 124} {78 89 119} { 7 66 77 93 95 107 112}
{ 33 35 52} { 0 70 81 109 113} {82 93 123} {11 70 81 97 99 111 116}
{ 37 39 56} { 4 74 85 113 117} {86 97 127} {15 74 85 101 103 115 120}
{ 41 43 60} { 8 78 89 117 121} { 3 90} {19 78 89 105 107 119 124}
{ 45 47 64} {12 82 93 121 125} { 7 94} { 0 23 82 93 109 111 123}
{ 49 51 68} { 1 16 86 97 125} { 11 98} { 4 27 86 97 113 115 127}

Конечная перестановка <math>FP</math>

Данная перестановка является обратной к начальной, то есть <math>FP = IP^{-1}</math>, и задается следующей таблицей:

Конечная перестановка <math>FP</math>
0 4 8 12 16 20 24 28 32 36 40 44 48 52 56 60
64 68 72 76 80 84 88 92 96 100 104 108 112 116 120 124
1 5 9 13 17 21 25 29 33 37 41 45 49 53 57 61
65 69 73 77 81 85 89 93 97 101 105 109 113 117 121 125
2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62
66 70 74 78 82 86 90 94 98 102 106 110 114 118 122 126
3 7 11 15 19 23 27 31 35 39 43 47 51 55 59 63
67 71 75 79 83 87 91 95 99 103 107 111 115 119 123 127

Эффективная реализация

Желание авторов сделать алгоритм именно таким, какой он есть, становится понятным при рассмотрении его эффективной низкоуровневой реализации.

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

Шифрование состоит из 32 раундов. Открытый текст является первыми промежуточными данными <math>B_0 = P</math>. Затем выполняется 32 раунда, каждый i раунд состоит из:

  • смешивания с ключом. Производится побитовое исключающее «или» промежуточных данных <math>B_i</math> с ключом длиной 128 бит;
  • применение таблиц подстановок. Входные данные длиной 128 бит разделяются на 4 слова по 32 бита. Таблица подстановок, реализованная последовательностью логических операций (как если это было бы реализовано аппаратно), применяется к этим 4 словам. В результате получается 4 выходных слова. Таким образом, центральный процессор выполняет подстановку по 32 копиям таблицы одновременно;
  • линейное преобразование. 32-битные слова преобразуются следующим образом:

<math>X_0, X_1, X_2, X_3 = S_i(B_i \oplus K_i)</math>

<math>X_0 = X_0 <<< 13</math>
<math>X_2 = X_2 <<< 3</math>
<math>X_1 = X_1 \oplus X_0 \oplus X2</math>
<math>X_3 = X_3 \oplus X_2 \oplus (X_0 << 3)</math>
<math>X_1 = X_1 <<< 1</math>
<math>X_3 = X_3 <<< 7</math>
<math>X_0 = X_0 \oplus X_1 \oplus X3</math>
<math>X_2 = X_2 \oplus X_3 \oplus (X_1 << 7)</math>
<math>X_0 = X_0 <<< 5</math>
<math>X_2 = X_2 <<< 22</math>
<math>B_{i+1} = X_0, X_1, X_2, X_3</math>,

где <math><<<</math> обозначает циклический битовый сдвиг, а <math><<</math> — битовый сдвиг. В последнем раунде это линейное преобразование заменено дополнительным смешиванием с ключом <math>B_{32} = S_7(B_{31} \oplus K_{31}) \oplus K_{32}</math>

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

Вторая причина состоит в простоте преобразования. Оно может быть реализовано на любом современном процессоре с минимальными затратами.

Безопасность и криптостойкость

При разработке и анализе алгоритма Serpent не было выявлено каких-либо уязвимостей в полной 32-раундовой версии. Но при выборе победителя конкурса AES это было справедливо и для остальных алгоритмов-финалистов.

По мнению создателей Serpent, алгоритм может быть взломан, только если будет создана новая мощная математическая теория.

Стоит отметить, что XSL-атака, если будет доказана эффективность её проведения, ослабит криптостойкость Serpent.

Напишите отзыв о статье "Serpent"

Литература

  • Ross Anderson, Eli Biham, Lars Knudsen. [www.cl.cam.ac.uk/~rja14/Papers/serpent.pdf Serpent: A Proposal for the Advanced Encryption Standard] (англ.). [www.webcitation.org/65kpOWDiQ Архивировано из первоисточника 27 февраля 2012].
  • Ross Anderson, Eli Biham and Lars Knudsen. [www.cl.cam.ac.uk/~rja14/Papers/serpentcase.pdf The Case for Serpent] (англ.) (2000). [www.webcitation.org/65kpP1Awg Архивировано из первоисточника 27 февраля 2012].
  • Ross Anderson, Eli Biham, Lars Knudsen. [www.cl.cam.ac.uk/~rja14/Papers/ventura.pdf Serpent: A Flexible Block Cipher With Maximum Assurance] (англ.). [www.webcitation.org/65kpPTKlP Архивировано из первоисточника 27 февраля 2012].
  • Nicolas T. Courtois, Josef Pieprzyk. [eprint.iacr.org/2002/044 Cryptanalysis of Block Ciphers with Overdefined Systems of Equations] (англ.). [www.webcitation.org/65kpPxaJj Архивировано из первоисточника 27 февраля 2012].

Ссылки

  • [www.cl.cam.ac.uk/~rja14/serpent.html Домашняя страница Serpent]
  • [www.users.zetnet.co.uk/hopwood/crypto/scan/cs.html#Serpent SCAN’s entry for Serpent]
  • [www.nytimes.com/2008/05/05/business/media/05trial.html? In Pellicano Case, Lessons in Wiretapping Skills] — NYTimes, 5 мая 2008

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

– Кто такой? – спрашивали с подъезда.
– Графские наряженные, по лошадям вижу, – отвечали голоса.


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


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


Вскоре после святок Николай объявил матери о своей любви к Соне и о твердом решении жениться на ней. Графиня, давно замечавшая то, что происходило между Соней и Николаем, и ожидавшая этого объяснения, молча выслушала его слова и сказала сыну, что он может жениться на ком хочет; но что ни она, ни отец не дадут ему благословения на такой брак. В первый раз Николай почувствовал, что мать недовольна им, что несмотря на всю свою любовь к нему, она не уступит ему. Она, холодно и не глядя на сына, послала за мужем; и, когда он пришел, графиня хотела коротко и холодно в присутствии Николая сообщить ему в чем дело, но не выдержала: заплакала слезами досады и вышла из комнаты. Старый граф стал нерешительно усовещивать Николая и просить его отказаться от своего намерения. Николай отвечал, что он не может изменить своему слову, и отец, вздохнув и очевидно смущенный, весьма скоро перервал свою речь и пошел к графине. При всех столкновениях с сыном, графа не оставляло сознание своей виноватости перед ним за расстройство дел, и потому он не мог сердиться на сына за отказ жениться на богатой невесте и за выбор бесприданной Сони, – он только при этом случае живее вспоминал то, что, ежели бы дела не были расстроены, нельзя было для Николая желать лучшей жены, чем Соня; и что виновен в расстройстве дел только один он с своим Митенькой и с своими непреодолимыми привычками.
Отец с матерью больше не говорили об этом деле с сыном; но несколько дней после этого, графиня позвала к себе Соню и с жестокостью, которой не ожидали ни та, ни другая, графиня упрекала племянницу в заманивании сына и в неблагодарности. Соня, молча с опущенными глазами, слушала жестокие слова графини и не понимала, чего от нее требуют. Она всем готова была пожертвовать для своих благодетелей. Мысль о самопожертвовании была любимой ее мыслью; но в этом случае она не могла понять, кому и чем ей надо жертвовать. Она не могла не любить графиню и всю семью Ростовых, но и не могла не любить Николая и не знать, что его счастие зависело от этой любви. Она была молчалива и грустна, и не отвечала. Николай не мог, как ему казалось, перенести долее этого положения и пошел объясниться с матерью. Николай то умолял мать простить его и Соню и согласиться на их брак, то угрожал матери тем, что, ежели Соню будут преследовать, то он сейчас же женится на ней тайно.