Whirlpool (криптография)

Поделись знанием:
Перейти к: навигация, поиск
Криптографическая</br>хеш-функция
Название

WHIRLPOOL

Разработчики

Vincent Rijmen (англ.), Paulo S. L. M. Barreto (англ.)

Впервые опубликован

Ноябрь 2000

Стандарты

[www.cryptonessie.org/ NESSIE] Portfolio (2003), [www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=39876&scopelist= ISO/IEC 10118-3:2004] (2004)

Размер хеша

512 бит

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

10

Тип

хеш-функция

Whirlpool — криптографическая хеш-функция, разработанная Vincent Rijmen (англ.) и Paulo S. L. M. Barreto (англ.). Впервые опубликована в ноябре 2000 года. Осуществляет хеширование входного сообщения с длиной до <math>2^{256}</math> бит. Выходное значение хеш-функции Whirlpool, называемое хешем, составляет 512 бит.





История

Название

Хеш-функция Whirlpool названа в честь Галактики Водоворот (M51) в созвездии Гончие Псы — первой галактики с наблюдаемой спиральной структурой.

Модификации

С момента создания в 2000 году Whirlpool дважды подвергалась модификации.

Первая версия, WHIRLPOOL-0, была представлена в качестве кандидата в проекте [www.cryptonessie.org/ NESSIE] (англ. New European Schemes for Signatures, Integrity and Encryption, новые европейские проекты по цифровой подписи, целостности и шифрованию).

Модификация WHIRLPOOL-0, названная WHIRLPOOL-T, в 2003 году была добавлена в [www.cosic.esat.kuleuven.be/nessie/deliverables/decision-final.pdf перечень рекомендованных к использованию криптографических функций NESSIE]. Изменения касались блока подстановки (S-box) Whirlpool: в первой версии структура S-box не была описана, и он генерировался совершенно произвольно, что создавало определённые проблемы при аппаратной реализации Whirlpool. В версии WHIRLPOOL-T S-box «приобрёл» чёткую структуру.

Дефект в диффузных матрицах WHIRLPOOL-T, обнаруженный Taizo Shirai (англ.) и Kyoji Shibutani (англ.)[1], был впоследствии исправлен, и конечная (третья) версия, названная для краткости просто WHIRLPOOL, была принята ISO (англ. International Organization for Standardization, международная организация по стандартизации) в стандарте [www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=39876&scopelist= ISO/IEC 10118-3:2004] в 2004 году.

Описание

Введение

В данной статье описывается последняя (третья) версия Whirlpool. В отличие от первой версии, S-box определен, а диффузная матрица заменена на новую после доклада Taizo Shirai (англ.) и Kyoji Shibutani (англ.)[1].

Whirlpool состоит из повторного применения функции сжатия (англ.), основой которой является специальный 512-битный блочный шифр <math>W</math> с 512-битным ключом.

Используемые обозначения и операции

В алгоритме используются операции в поле Галуа <math>\ GF(2^8)</math> по модулю неприводимого многочлена <math>\ p_8(x) = x^8 + x^4 + x^3 + x^2 + 1</math>.

Многочлены для краткости записываются в шестнадцатеричном представлении. Например, запись <math>\ 11D_x</math> означает <math>\ p_8(x)</math>.


Для обозначения композиции последовательности функций <math>f_m, f_{m+1},...,f_{n-1}, f_n, m \leq n</math> используется символ <math>\bigcirc_m^{r=n}</math>:
<math>\bigcirc_m^{r=n} f_r \equiv f_n \circ f_{n-1} \circ \dots \circ f_{m+1} \circ f_m.</math>


  • <math>M_{m \times n}[GF(2^8)]</math> — множество матриц <math>m \times n</math> над <math>\ GF(2^8).</math>


  • <math>\ cir(a_0, a_1, . . . , a_{m-1})</math> — циркулянтная матрица (англ.) <math>m \times m</math>, первая строка которой состоит из элементов <math>\ a_0, a_1, . . . , a_{m-1},</math> то есть:
<math>

cir(a_0, a_1, . . . , a_{m-1}) \equiv \begin{bmatrix} a_0 & a_1 & \dots & a_{m-1} \\ a_{m-1} & a_0 & \dots & a_{m-2} \\ \vdots & \vdots & \ddots & \vdots \\ a_1 & a_2 & \dots & a_0 \\ \end{bmatrix}, </math>

или просто <math>\ cir(a_0, a_1, . . . , a_{m-1}) = c \Leftrightarrow c_{ij} = a_{(j-i) mod m}, 0 \leq i,j \leq m-1.</math>

Формат данных

Как уже говорилось выше, Whirlpool построена на специальном блочном шифре <math>W</math>, который работает с 512-битными данными.

В преобразованиях промежуточный результат вычисления хеша называется хеш-состоянием или просто состоянием. При вычислениях состояние обычно представляется матрицей состояния. Для Whirlpool это матрица в <math>M_{8 \times 8}[GF(2^8)]</math>. Следовательно, 512-битные блоки данных должны быть преобразованы в этот формат перед дальнейшими вычислениями. Это достигается введением функции <math>\ \mu</math>:

<math>\mu: GF(2^8)^{64} \to M_{8 \times 8}[GF(2^8)], \qquad \mu(a) = b \Leftrightarrow b_{ij} = a_{8i+j}, 0 \leq i,j \leq 7. </math>

Проще говоря, заполнение матрицы состояния данными происходит построчно. При этом каждый байт матрицы представляет собой соответствующий многочлен в <math>\ GF(2^8)</math>.

Преобразования

Нелинейное преобразование <math>\gamma</math> (S-box)

Функция <math>\gamma: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math> состоит из параллельного применения блока подстановки (S-box) <math>S: GF(2^8) \to GF(2^8), x \to S[x]</math> ко всем байтам матрицы состояния:

<math>\gamma(a)=b \Leftrightarrow b_{ij} = S[a_{ij}], 0 \leq i,j \leq 7. </math>

Блок подстановки описывается следующей таблицей замен:

Таблица 1. Блок подстановки
<math> 00_x</math> <math> 01_x</math> <math> 02_x</math> <math> 03_x</math> <math> 04_x</math> <math> 05_x</math> <math> 06_x</math> <math> 07_x</math> <math> 08_x</math> <math> 09_x</math> <math> 0A_x</math> <math> 0B_x</math> <math> 0c_x</math> <math> 0d_x</math> <math> 0E_x</math> <math> 0F_x</math>

<math>00_x</math>

<math> 18_x</math> <math> 23_x</math> <math> c6_x</math> <math> E8_x</math> <math> 87_x</math> <math> B8_x</math> <math> 01_x</math> <math> 4F_x</math> <math> 36_x</math> <math> A6_x</math> <math> d2_x</math> <math> F5_x</math> <math> 79_x</math> <math> 6F_x</math> <math> 91_x</math> <math> 52_x</math>

<math>10_x</math>

<math> 60_x</math> <math> Bc_x</math> <math> 9B_x</math> <math> 8E_x</math> <math> A3_x</math> <math> 0c_x</math> <math> 7B_x</math> <math> 35_x</math> <math> 1d_x</math> <math> E0_x</math> <math> d7_x</math> <math> c2_x</math> <math> 2E_x</math> <math> 4B_x</math> <math> FE_x</math> <math> 57_x</math>

<math>20_x</math>

<math> 15_x</math> <math> 77_x</math> <math> 37_x</math> <math> E5_x</math> <math> 9F_x</math> <math> F0_x</math> <math> 4A_x</math> <math> dA_x</math> <math> 58_x</math> <math> c9_x</math> <math> 29_x</math> <math> 0A_x</math> <math> B1_x</math> <math> A0_x</math> <math> 6B_x</math> <math> 85_x</math>

<math>30_x</math>

<math> Bd_x</math> <math> 5d_x</math> <math> 10_x</math> <math> F4_x</math> <math> cB_x</math> <math> 3E_x</math> <math> 05_x</math> <math> 67_x</math> <math> E4_x</math> <math> 27_x</math> <math> 41_x</math> <math> 8B_x</math> <math> A7_x</math> <math> 7d_x</math> <math> 95_x</math> <math> d8_x</math>

<math>40_x</math>

<math> FB_x</math> <math> EE_x</math> <math> 7c_x</math> <math> 66_x</math> <math> dd_x</math> <math> 17_x</math> <math> 47_x</math> <math> 9E_x</math> <math> cA_x</math> <math> 2d_x</math> <math> BF_x</math> <math> 07_x</math> <math> Ad_x</math> <math> 5A_x</math> <math> 83_x</math> <math> 33_x</math>

<math>50_x</math>

<math> 63_x</math> <math> 02_x</math> <math> AA_x</math> <math> 71_x</math> <math> c8_x</math> <math> 19_x</math> <math> 49_x</math> <math> d9_x</math> <math> F2_x</math> <math> E3_x</math> <math> 5B_x</math> <math> 88_x</math> <math> 9A_x</math> <math> 26_x</math> <math> 32_x</math> <math> B0_x</math>

<math>60_x</math>

<math> E9_x</math> <math> 0F_x</math> <math> d5_x</math> <math> 80_x</math> <math> BE_x</math> <math> cd_x</math> <math> 34_x</math> <math> 48_x</math> <math> FF_x</math> <math> 7A_x</math> <math> 90_x</math> <math> 5F_x</math> <math> 20_x</math> <math> 68_x</math> <math> 1A_x</math> <math> AE_x</math>

<math>70_x</math>

<math> B4_x</math> <math> 54_x</math> <math> 93_x</math> <math> 22_x</math> <math> 64_x</math> <math> F1_x</math> <math> 73_x</math> <math> 12_x</math> <math> 40_x</math> <math> 08_x</math> <math> c3_x</math> <math> Ec_x</math> <math> dB_x</math> <math> A1_x</math> <math> 8d_x</math> <math> 3d_x</math>

<math>80_x</math>

<math> 97_x</math> <math> 00_x</math> <math> cF_x</math> <math> 2B_x</math> <math> 76_x</math> <math> 82_x</math> <math> d6_x</math> <math> 1B_x</math> <math> B5_x</math> <math> AF_x</math> <math> 6A_x</math> <math> 50_x</math> <math> 45_x</math> <math> F3_x</math> <math> 30_x</math> <math> EF_x</math>

<math>90_x</math>

<math> 3F_x</math> <math> 55_x</math> <math> A2_x</math> <math> EA_x</math> <math> 65_x</math> <math> BA_x</math> <math> 2F_x</math> <math> c0_x</math> <math> dE_x</math> <math> 1c_x</math> <math> Fd_x</math> <math> 4d_x</math> <math> 92_x</math> <math> 75_x</math> <math> 06_x</math> <math> 8A_x</math>

<math>A0_x</math>

<math> B2_x</math> <math> E6_x</math> <math> 0E_x</math> <math> 1F_x</math> <math> 62_x</math> <math> d4_x</math> <math> A8_x</math> <math> 96_x</math> <math> F9_x</math> <math> c5_x</math> <math> 25_x</math> <math> 59_x</math> <math> 84_x</math> <math> 72_x</math> <math> 39_x</math> <math> 4c_x</math>

<math>B0_x</math>

<math> 5E_x</math> <math> 78_x</math> <math> 38_x</math> <math> 8c_x</math> <math> d1_x</math> <math> A5_x</math> <math> E2_x</math> <math> 61_x</math> <math> B3_x</math> <math> 21_x</math> <math> 9c_x</math> <math> 1E_x</math> <math> 43_x</math> <math> c7_x</math> <math> Fc_x</math> <math> 04_x</math>

<math>c0_x</math>

<math> 51_x</math> <math> 99_x</math> <math> 6d_x</math> <math> 0d_x</math> <math> FA_x</math> <math> dF_x</math> <math> 7E_x</math> <math> 24_x</math> <math> 3B_x</math> <math> AB_x</math> <math> cE_x</math> <math> 11_x</math> <math> 8F_x</math> <math> 4E_x</math> <math> B7_x</math> <math> EB_x</math>

<math>d0_x</math>

<math> 3c_x</math> <math> 81_x</math> <math> 94_x</math> <math> F7_x</math> <math> B9_x</math> <math> 13_x</math> <math> 2c_x</math> <math> d3_x</math> <math> E7_x</math> <math> 6E_x</math> <math> c4_x</math> <math> 03_x</math> <math> 56_x</math> <math> 44_x</math> <math> 7F_x</math> <math> A9_x</math>

<math>E0_x</math>

<math> 2A_x</math> <math> BB_x</math> <math> c1_x</math> <math> 53_x</math> <math> dc_x</math> <math> 0B_x</math> <math> 9d_x</math> <math> 6c_x</math> <math> 31_x</math> <math> 74_x</math> <math> F6_x</math> <math> 46_x</math> <math> Ac_x</math> <math> 89_x</math> <math> 14_x</math> <math> E1_x</math>

<math>F0_x</math>

<math> 16_x</math> <math> 3A_x</math> <math> 69_x</math> <math> 09_x</math> <math> 70_x</math> <math> B6_x</math> <math> d0_x</math> <math> Ed_x</math> <math> cc_x</math> <math> 42_x</math> <math> 98_x</math> <math> A4_x</math> <math> 28_x</math> <math> 5c_x</math> <math> F8_x</math> <math> 86_x</math>

Циклическая перестановка <math>\pi</math>

Перестановка <math>\pi: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math> циклически сдвигает каждый столбец матрицы состояния так, что столбец <math>j</math> сдвигается вниз на <math>j</math> позиций:

<math>\pi(a)=b \Leftrightarrow b_{ij} = a_{(i-j) mod 8, j}, 0 \leq i,j \leq 7. </math>

Задача данного преобразования — перемешать байты строк матрицы состояния между собой.

Линейная диффузия <math>\theta</math>

Линейная диффузия <math>\theta: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math> — это линейное преобразование, матрицей которого является MDS-матрица (англ.) <math>\ C = cir(01_x, 01_x, 04_x, 01_x, 08_x, 05_x, 02_x, 09_x)</math>, то есть:


<math>

C = cir(01_x, 01_x, 04_x, 01_x, 08_x, 05_x, 02_x, 09_x) = \begin{bmatrix} 01_x & 01_x & 04_x & 01_x & 08_x & 05_x & 02_x & 09_x \\ 09_x & 01_x & 01_x & 04_x & 01_x & 08_x & 05_x & 02_x \\ 02_x & 09_x & 01_x & 01_x & 04_x & 01_x & 08_x & 05_x \\ 05_x & 02_x & 09_x & 01_x & 01_x & 04_x & 01_x & 08_x \\ 08_x & 05_x & 02_x & 09_x & 01_x & 01_x & 04_x & 01_x \\ 01_x & 08_x & 05_x & 02_x & 09_x & 01_x & 01_x & 04_x \\ 04_x & 01_x & 08_x & 05_x & 02_x & 09_x & 01_x & 01_x \\ 01_x & 04_x & 01_x & 08_x & 05_x & 02_x & 09_x & 01_x \\ \end{bmatrix}, </math>

так что
<math>\theta(a)=b \Leftrightarrow b = a \cdot C. </math>

Другими словами, матрица состояния умножается справа на матрицу <math>\ C</math>. Напомним, что операции сложения и умножения элементов матриц производятся в <math>\ GF(2^8)</math>.


MDS-матрица (англ.) — это такая матрица над конечным полем <math>\ K</math>, что если взять её в качестве матрицы линейного преобразования <math>\ f(x)=(MDS)x</math> из пространства <math>\ K^n</math> в пространство <math>\ K^m</math>, то любые два вектора из пространства <math>\ K^{n+m}</math> вида <math>\ (x, f(x))</math> будут иметь как минимум <math>\ m+1</math> различий в компонентах. То есть набор векторов вида <math>\ (x, f(x))</math> образует код, обладающий свойством максимальной разнесённости (англ. Maximum Distance Separable code). Таким кодом является, например, код Рида-Соломона.


В Whirlpool свойство максимальной разнесённости MDS-матрицы (англ.) означает, что общее количество меняющихся байт вектора <math>\ x</math> и вектора <math>\ f(x)=(MDS)x</math> не меньше <math>\ 8+1=9</math>. Другими словами, любое изменение только одного байта <math>\ x</math> приводит к изменению всех 8 байтов <math>\ f(x)</math>. В этом и состоит задача линейной диффузии (англ.).

Как уже упоминалось выше, MDS-матрица (англ.) в последней (третьей) версии Whirlpool была изменена благодаря статье Taizo Shirai (англ.) и Kyoji Shibutani (англ.)[1]. Они проанализировали MDS-матрицу (англ.) второй версии Whirlpool и указали на возможность повышения устойчивости Whirlpool к дифференциальному криптоанализу. Также они предложили 224 кандидата на место новой MDS-матрицы (англ.). Из этого списка авторы Whirlpool выбрали вариант, наиболее легко реализуемый в аппаратном обеспечении.

Добавление ключа <math>\sigma[k]</math>

Функция добавления ключа <math>\sigma[k]: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math> представляет собой побитовое сложение (XOR) матриц состояния <math>\ a</math> и ключа <math> k \in M_{8 \times 8}[GF(2^8)]</math>:

<math>\sigma[k](a)=b \Leftrightarrow b_{i,j} = a_{i,j} \oplus k_{i,j}, 0 \leq i,j \leq 7. </math>

Константы раунда <math>c^r</math>

В каждом раунде <math>\ r, r > 0</math> используется матрица констант <math>c^r \in M_{8 \times 8}[GF(2^8)]</math>, такая, что:

<math>c_{0j}^r \equiv S[8(r-1)+j], \qquad 0 \leq j \leq 7,</math>
<math>c_{ij}^r \equiv 0, \qquad \qquad \qquad \qquad 1 \leq i \leq 7, 0 \leq j \leq 7.</math>

Отсюда видно, что первая строка матрицы <math>c^r</math> является результатом применения блока подстановки <math>S</math> к байтовым числам <math>[8(r-1)+j], 0 \leq j \leq 7</math>.

Остальные 7 строк — нулевые.

Функция раунда <math>\rho[k]</math>

Для каждого раунда <math>\ r</math> функция раунда — это составное преобразование <math>\rho[k]: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math>, параметром <math>k</math> которого является матрица ключа <math> k \in M_{8 \times 8}[GF(2^8)]</math>. Описывается функция раунда следующим образом:

<math>\rho[k] \equiv \sigma[k] \circ \theta \circ \pi \circ \gamma.</math>

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

Для каждого раунда <math>\ r, 0 \leq r \leq R</math> необходим 512-битный ключ шифрования. Для решения данной проблемы во многих алгоритмах вводится так называемая процедура расширения ключа. В Whirlpool расширение ключа реализуется следующим образом:

<math>\ K^0 = K,</math>
<math>\ K^r = \rho[c^r](K^{r-1}), r > 0.</math>

Таким образом, из известного ключа <math>K</math> производится необходимая последовательность <math>K^0,...,K^R</math> ключей для каждого раунда блочного шифра <math>W</math>.

Блочный шифр <math>W</math>

Специальный 512-битный блочный шифр <math>W[K]: M_{8 \times 8}[GF(2^8)] \to M_{8 \times 8}[GF(2^8)]</math> в качестве параметра использует 512-битный ключ <math>K</math> и выполняет следующую последовательность преобразований:

<math>W[K] = \left( \bigcirc_1^{r=R} \rho[K^r] \right) \circ \sigma[K^0],</math>

где ключи <math>K^0,...,K^R</math> порождены описанной выше процедурой расширения ключа. В хеш-функции Whirlpool число раундов <math>R=10</math>.

Дополнение входного сообщения

Whirlpool, как и любая другая хеш-функция, должна осуществлять хеширование сообщения произвольной длины. Поскольку внутренний блок шифрования <math>W</math> работает с 512-битными входными сообщениями, то исходное сообщение необходимо разбить на блоки по 512 бит. При этом последний блок, который содержит конец сообщения, может оказаться неполным.

Для решения данной задачи Whirlpool использует алгоритм Меркле-Дамгаарда (англ.) дополнения входного сообщения. Результатом дополнения сообщения <math>M</math> является сообщение <math>M'</math>, длина которого кратна 512. Пусть <math>L</math> — длина исходного сообщения. Тогда <math>M'</math> получается в несколько шагов:

  1. К концу сообщения <math>M</math> приписать бит «1».
  2. Приписать <math>x</math> битов «0» так, чтобы длина полученной строки <math>L+1+x</math> была кратна <math>256</math> нечетное число раз.
  3. Наконец, приписать 256-битное представление числа <math>L</math>.

Дополненное сообщение <math>M'</math> записывается в виде

<math>M' = \overbrace{M}^{L} \| 1 \| \overbrace{0 \dots 0}^{x} \| \overbrace{L}^{256}</math>

и разбивается на 512-битные блоки для дальнейшей обработки.

Функция сжатия

В Whirlpool применяется схема хеширования Miyaguchi-Preneel (англ.).

<math>\ t</math> блоков <math>m_i, 1 \leq i \leq t</math> дополненного сообщения <math>M'</math> последовательно шифруются блочным шифром <math>W</math>:


<math>\ \eta_i = \mu (m_i),</math>
<math>\ H_0 = \mu (IV),</math>
<math>H_i = W[H_{i-1}](\eta_i)\oplus H_{i-1}\oplus \eta_i, 1 \leq i \leq t,</math>

где <math>IV</math> (англ. initialization vector, вектор инициализации (англ.)) — 512-битная строка, заполненная "0".

Вычисление хеша

Дайджестом для сообщения <math>M</math> является выходное значение <math>H_t</math> функции сжатия, преобразованное обратно в 512-битную строку:

<math>Whirlpool(M) \equiv \mu^{-1}(H_t).</math>

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

Хеш-функция <math>H</math> считается криптографически стойкой, если она удовлетворяет трём основным требованиям, на которых основано большинство применений хеш-функций в криптографии: необратимость, стойкость к коллизиям первого рода и стойкость к коллизиям второго рода.

Пусть <math>h_n</math> — произвольная <math>n</math>-битная подстрока 512-битного хеша Whirlpool. Авторы Whirlpool утверждают, что созданная ими хеш-функция удовлетворяет следующим требованиям криптостойкости:

  • Генерация коллизии требует порядка <math>2^{n/2}</math> вычислений хеша WHIRLPOOL (стойкость к коллизиям второго рода).
  • Для заданной <math>h_n</math> поиск такого сообщения <math>M</math>, что <math>H(M)=h_n</math>, потребует порядка <math>2^{n}</math> вычислений хеша WHIRLPOOL (необратимость).
  • Для заданного сообщения <math>M</math> обнаружение другого сообщения <math>N</math>, для которого <math>H(N)=H(M)</math>, потребует порядка <math>2^{n}</math> вычислений хеша WHIRLPOOL (стойкость к коллизиям первого рода).
  • Невозможно обнаружить систематические корреляции между любой линейной комбинацией входных бит и любой линейной комбинацией бит хеша или предсказать, какие биты хеша изменят своё значение при изменении определенных входных бит (стойкость к линейному криптоанализу и дифференциальному криптоанализу).

К данному заявлению авторы Whirlpool добавили примечание:

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

Криптоанализ

На сегодняшний день WHIRLPOOL устойчива ко всем видам криптоанализа. На протяжении 8 лет существования Whirlpool не было зарегистрировано ни одной атаки на неё.

Однако в 2009 году был опубликован новый способ атаки на хеш-функции — The Rebound Attack[2][3]. Первыми «подопытными» новой атаки стали хеш-функции Whirlpool и Grøstl. Результаты проведённого криптоанализа приведены в таблице.

Таблица 2. Результаты криптоанализа хеш-функций Whirlpool и Grøstl по методу The Rebound Attack[2][3]
Хеш-функция Число раундов Сложность Требуемый объём памяти Тип коллизии
Whirlpool <math>4.5/10</math> <math>2^{120}</math> <math>2^{16}</math> коллизия
<math>5.5/10</math> <math>2^{120}</math> <math>2^{16}</math> полусвободная коллизия
<math>7.5/10</math> <math>2^{128}</math> <math>2^{16}</math> полусвободная почти коллизия
Grøstl-256 <math>6/10</math> <math>2^{120}</math> <math>2^{70}</math> полусвободная коллизия

Авторы исследования использовали следующие понятия и термины:

Типы коллизий:

  • коллизия:
    • <math>\ IV</math> — фиксирован
    • <math>f(M_t, IV) = f(M_t', IV), M_t \neq M_t'</math>
  • почти коллизия:
    • <math>\ IV</math> — фиксирован
    • <math>f_{M_t} = f(M_t, IV), f_{M_t'} = f(M_t', IV), M_t \neq M_t'</math>
    • небольшое число бит хешей <math>f_{M_t}</math> и <math>f_{M_t'}</math> различны
  • полусвободная коллизия:
    • <math>f(M_t, H_{t-1}) = f(M_t', H_{t-1}), M_t \neq M_t'</math>
  • свободная коллизия:
    • <math>f(M_t, H_{t-1}) = f(M_t', H_{t-1}'), M_t \neq M_{t-1}', H_t \neq H_{t-1}'</math>


Как видно из таблицы, сгенерировать коллизию для Whirlpool удалось лишь для её «урезанного» варианта в 4.5 раунда. К тому же сложность необходимых вычислений довольно высока.

Применение

Whirlpool — свободно распространяемая хеш-функция. Поэтому она находит широкое применение в открытом программном обеспечении. Здесь перечислены некоторые примеры использования Whirlpool:

Примеры хешей

Для удобства 512 бит (64 байта) хеша Whirlpool часто представляются в виде 128-значного шестнадцатеричного числа.

Как говорилось выше, алгоритм потерпел два изменения с момента выпуска в 2000 году. Ниже приведены примеры хешей, вычисленных по ASCII тексту панграммы The quick brown fox jumps over the lazy dog для всех трех версий Whirlpool:

Whirlpool-0("The quick brown fox jumps over the lazy dog") =
4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C
3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D
Whirlpool-T("The quick brown fox jumps over the lazy dog") =
3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183
AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1
Whirlpool("The quick brown fox jumps over the lazy dog") =
B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F
D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

Даже небольшое изменение исходного текста сообщения (в данном случае подменяется одна буква: символ «d» заменяется на символ «e») приводит к полному изменению хеша:

Whirlpool-0("The quick brown fox jumps over the lazy eog") =
228FBF76B2A93469D4B25929836A12B7D7F2A0803E43DABA0C7FC38BC11C8F2A
9416BBCF8AB8392EB2AB7BCB565A64AC50C26179164B26084A253CAF2E012676
Whirlpool-T("The quick brown fox jumps over the lazy eog") =
C8C15D2A0E0DE6E6885E8A7D9B8A9139746DA299AD50158F5FA9EECDDEF744F9
1B8B83C617080D77CB4247B1E964C2959C507AB2DB0F1F3BF3E3B299CA00CAE3

Whirlpool("The quick brown fox jumps over the lazy eog") =
C27BA124205F72E6847F3E19834F925CC666D0974167AF915BB462420ED40CC5
0900D85A1F923219D832357750492D5C143011A76988344C2635E69D06F2D38C

Добавление символов в строку, конкатенация строк и другие изменения также влияют на результат.

Примеры хешей для «нулевой» строки:

Whirlpool-0("") =
B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473
39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8
Whirlpool-T("") =
470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F
EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A
Whirlpool("") =
19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7
3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3

Примеры в программировании

Среда исполнения Код Результат
PHP 5.0
echo hash( 'whirlpool', 'test' );
b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f
8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6
Ruby
puts Whirlpool.calc_hex('test')
b913d5bbb8e461c2c5961cbe0edcdadfd29f068225ceb37da6defcf89849368f
8c6c2eb6a4c4ac75775d032a0ecfdfe8550573062b653fe92fc7b8fb3b7be8d6

Напишите отзыв о статье "Whirlpool (криптография)"

Примечания

  1. 1 2 3 Taizo Shirai, Kyoji Shibutani. [www.cosic.esat.kuleuven.be/nessie/reports/phase2/whirlpool-20030311.pdf On the diffusion matrix employed in the Whirlpool hashing function] (англ.) (2003). — NESSIE public report. Проверено 16 ноября 2009. [www.webcitation.org/65p0SPRnR Архивировано из первоисточника 29 февраля 2012].
  2. 1 2 Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen. [www.cosic.esat.kuleuven.be/fse2009/slides/2402_1150_Schlaeffer.pdf The Rebound Attack: Cryptanalysis of Reduced Whirlpool and Grøstl] (англ.) (2009). — презентация нового способа криптоанализа и его применения для криптоанализа хеш-функций Whirlpool и Grøstl. Проверено 27 ноября 2009.
  3. 1 2 Florian Mendel, Christian Rechberger, Martin Schläffer, Søren S. Thomsen. [www.springerlink.com/content/11vh57xqn72562l3/ The Rebound Attack: Cryptanalysis of Reduced Whirlpool and Grøstl] (англ.) (2009). — статья о новом способе криптоанализа и его применении для криптоанализа хеш-функций Whirlpool и Grøstl. Проверено 27 ноября 2009.

Ссылки

  • [www.larc.usp.br/~pbarreto/WhirlpoolPage.html Whirlpool homepage] (англ.). — главная страница Whirlpool. Проверено 15 ноября 2009. [www.webcitation.org/65p0SttYl Архивировано из первоисточника 29 февраля 2012].
  • [hash.online-convert.com/whirlpool-generator Calculate a Whirlpool hash] (англ.). — онлайн вычисление хешей Whirlpool. Проверено 16 ноября 2009. [www.webcitation.org/65p0UDGco Архивировано из первоисточника 29 февраля 2012].

Стандарты

  • [www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=39876&scopelist= The ISO/IEC 10118-3:2004 standard] (англ.). — стандарт ISO/IEC 10118-3:2004. Проверено 15 ноября 2009. [www.webcitation.org/65p0V4lI1 Архивировано из первоисточника 29 февраля 2012].
  • [www.cryptonessie.org/ NESSIE] (англ.). — англ. New European Schemes for Signatures, Integrity and Encryption, новые европейские проекты по цифровой подписи, целостности и шифрованию. Проверено 15 ноября 2009. [www.webcitation.org/65p0W5Ozj Архивировано из первоисточника 29 февраля 2012].
  • [www.cosic.esat.kuleuven.be/nessie/deliverables/decision-final.pdf Portfolio of recommended cryptographic primitives] (англ.). — перечень рекомендованных к использованию криптографических функций NESSIE. Проверено 15 ноября 2009.

Программные реализации

  • [www.jonelo.de/java/jacksum/index.html A Java implementation of all three revisions of Whirlpool] (англ.). — реализация всех трех модификаций Whirlpool на языке программирования Java. Проверено 15 ноября 2009. [www.webcitation.org/65p0WZQa4 Архивировано из первоисточника 29 февраля 2012].
  • [www.karljapetre.com/whirlpool/ A Matlab Implementation of the Whirlpool Hashing Function] (англ.). — реализация Whirlpool в пакете Matlab. Проверено 15 ноября 2009. [www.webcitation.org/65p0XVMV7 Архивировано из первоисточника 29 февраля 2012].
  • [metacpan.org/module/Digest::Whirlpool Perl Whirlpool module at CPAN] (англ.). — модуль Whirlpool на языке Perl в CPAN.
  • [raa.ruby-lang.org/project/whirlpool/ Ruby Whirlpool library] (англ.). — библиотека Ruby с реализацией Whirlpool. Проверено 15 ноября 2009. [www.webcitation.org/65p0XxjKK Архивировано из первоисточника 29 февраля 2012].

Аппаратные реализации

  • [ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1277864 Efficient architecture and hardware implementation of the Whirlpool hash function] (англ.). — Эффективная аппаратная реализация Whirlpool. Статья IEEE Transactions on Consumer Electronics. Проверено 18 ноября 2009. [www.webcitation.org/65p0YWH5h Архивировано из первоисточника 29 февраля 2012].
  • [www.sersc.org/journals/IJAST/vol7/3.pdf High-Speed Parallel Architecture of the Whirlpool Hash Function] (англ.). — Высокоскоростная параллельная архитектура Whirlpool. Статья журнала International Journal of Advanced Science and Technology, выпуск 7, Июнь, 2009. Проверено 18 ноября 2009. [www.webcitation.org/65p0ZFFyq Архивировано из первоисточника 29 февраля 2012].

Отрывок, характеризующий Whirlpool (криптография)

– До свидания, очень благодарю вас. Государь император, вероятно, пожелает вас видеть, – повторил он и наклонил голову.
Когда князь Андрей вышел из дворца, он почувствовал, что весь интерес и счастие, доставленные ему победой, оставлены им теперь и переданы в равнодушные руки военного министра и учтивого адъютанта. Весь склад мыслей его мгновенно изменился: сражение представилось ему давнишним, далеким воспоминанием.


Князь Андрей остановился в Брюнне у своего знакомого, русского дипломата .Билибина.
– А, милый князь, нет приятнее гостя, – сказал Билибин, выходя навстречу князю Андрею. – Франц, в мою спальню вещи князя! – обратился он к слуге, провожавшему Болконского. – Что, вестником победы? Прекрасно. А я сижу больной, как видите.
Князь Андрей, умывшись и одевшись, вышел в роскошный кабинет дипломата и сел за приготовленный обед. Билибин покойно уселся у камина.
Князь Андрей не только после своего путешествия, но и после всего похода, во время которого он был лишен всех удобств чистоты и изящества жизни, испытывал приятное чувство отдыха среди тех роскошных условий жизни, к которым он привык с детства. Кроме того ему было приятно после австрийского приема поговорить хоть не по русски (они говорили по французски), но с русским человеком, который, он предполагал, разделял общее русское отвращение (теперь особенно живо испытываемое) к австрийцам.
Билибин был человек лет тридцати пяти, холостой, одного общества с князем Андреем. Они были знакомы еще в Петербурге, но еще ближе познакомились в последний приезд князя Андрея в Вену вместе с Кутузовым. Как князь Андрей был молодой человек, обещающий пойти далеко на военном поприще, так, и еще более, обещал Билибин на дипломатическом. Он был еще молодой человек, но уже немолодой дипломат, так как он начал служить с шестнадцати лет, был в Париже, в Копенгагене и теперь в Вене занимал довольно значительное место. И канцлер и наш посланник в Вене знали его и дорожили им. Он был не из того большого количества дипломатов, которые обязаны иметь только отрицательные достоинства, не делать известных вещей и говорить по французски для того, чтобы быть очень хорошими дипломатами; он был один из тех дипломатов, которые любят и умеют работать, и, несмотря на свою лень, он иногда проводил ночи за письменным столом. Он работал одинаково хорошо, в чем бы ни состояла сущность работы. Его интересовал не вопрос «зачем?», а вопрос «как?». В чем состояло дипломатическое дело, ему было всё равно; но составить искусно, метко и изящно циркуляр, меморандум или донесение – в этом он находил большое удовольствие. Заслуги Билибина ценились, кроме письменных работ, еще и по его искусству обращаться и говорить в высших сферах.
Билибин любил разговор так же, как он любил работу, только тогда, когда разговор мог быть изящно остроумен. В обществе он постоянно выжидал случая сказать что нибудь замечательное и вступал в разговор не иначе, как при этих условиях. Разговор Билибина постоянно пересыпался оригинально остроумными, законченными фразами, имеющими общий интерес.
Эти фразы изготовлялись во внутренней лаборатории Билибина, как будто нарочно, портативного свойства, для того, чтобы ничтожные светские люди удобно могли запоминать их и переносить из гостиных в гостиные. И действительно, les mots de Bilibine se colportaient dans les salons de Vienne, [Отзывы Билибина расходились по венским гостиным] и часто имели влияние на так называемые важные дела.
Худое, истощенное, желтоватое лицо его было всё покрыто крупными морщинами, которые всегда казались так чистоплотно и старательно промыты, как кончики пальцев после бани. Движения этих морщин составляли главную игру его физиономии. То у него морщился лоб широкими складками, брови поднимались кверху, то брови спускались книзу, и у щек образовывались крупные морщины. Глубоко поставленные, небольшие глаза всегда смотрели прямо и весело.
– Ну, теперь расскажите нам ваши подвиги, – сказал он.
Болконский самым скромным образом, ни разу не упоминая о себе, рассказал дело и прием военного министра.
– Ils m'ont recu avec ma nouvelle, comme un chien dans un jeu de quilles, [Они приняли меня с этою вестью, как принимают собаку, когда она мешает игре в кегли,] – заключил он.
Билибин усмехнулся и распустил складки кожи.
– Cependant, mon cher, – сказал он, рассматривая издалека свой ноготь и подбирая кожу над левым глазом, – malgre la haute estime que je professe pour le православное российское воинство, j'avoue que votre victoire n'est pas des plus victorieuses. [Однако, мой милый, при всем моем уважении к православному российскому воинству, я полагаю, что победа ваша не из самых блестящих.]
Он продолжал всё так же на французском языке, произнося по русски только те слова, которые он презрительно хотел подчеркнуть.
– Как же? Вы со всею массой своею обрушились на несчастного Мортье при одной дивизии, и этот Мортье уходит у вас между рук? Где же победа?
– Однако, серьезно говоря, – отвечал князь Андрей, – всё таки мы можем сказать без хвастовства, что это немного получше Ульма…
– Отчего вы не взяли нам одного, хоть одного маршала?
– Оттого, что не всё делается, как предполагается, и не так регулярно, как на параде. Мы полагали, как я вам говорил, зайти в тыл к семи часам утра, а не пришли и к пяти вечера.
– Отчего же вы не пришли к семи часам утра? Вам надо было притти в семь часов утра, – улыбаясь сказал Билибин, – надо было притти в семь часов утра.
– Отчего вы не внушили Бонапарту дипломатическим путем, что ему лучше оставить Геную? – тем же тоном сказал князь Андрей.
– Я знаю, – перебил Билибин, – вы думаете, что очень легко брать маршалов, сидя на диване перед камином. Это правда, а всё таки, зачем вы его не взяли? И не удивляйтесь, что не только военный министр, но и августейший император и король Франц не будут очень осчастливлены вашей победой; да и я, несчастный секретарь русского посольства, не чувствую никакой потребности в знак радости дать моему Францу талер и отпустить его с своей Liebchen [милой] на Пратер… Правда, здесь нет Пратера.
Он посмотрел прямо на князя Андрея и вдруг спустил собранную кожу со лба.
– Теперь мой черед спросить вас «отчего», мой милый, – сказал Болконский. – Я вам признаюсь, что не понимаю, может быть, тут есть дипломатические тонкости выше моего слабого ума, но я не понимаю: Мак теряет целую армию, эрцгерцог Фердинанд и эрцгерцог Карл не дают никаких признаков жизни и делают ошибки за ошибками, наконец, один Кутузов одерживает действительную победу, уничтожает charme [очарование] французов, и военный министр не интересуется даже знать подробности.
– Именно от этого, мой милый. Voyez vous, mon cher: [Видите ли, мой милый:] ура! за царя, за Русь, за веру! Tout ca est bel et bon, [все это прекрасно и хорошо,] но что нам, я говорю – австрийскому двору, за дело до ваших побед? Привезите вы нам свое хорошенькое известие о победе эрцгерцога Карла или Фердинанда – un archiduc vaut l'autre, [один эрцгерцог стоит другого,] как вам известно – хоть над ротой пожарной команды Бонапарте, это другое дело, мы прогремим в пушки. А то это, как нарочно, может только дразнить нас. Эрцгерцог Карл ничего не делает, эрцгерцог Фердинанд покрывается позором. Вену вы бросаете, не защищаете больше, comme si vous nous disiez: [как если бы вы нам сказали:] с нами Бог, а Бог с вами, с вашей столицей. Один генерал, которого мы все любили, Шмит: вы его подводите под пулю и поздравляете нас с победой!… Согласитесь, что раздразнительнее того известия, которое вы привозите, нельзя придумать. C'est comme un fait expres, comme un fait expres. [Это как нарочно, как нарочно.] Кроме того, ну, одержи вы точно блестящую победу, одержи победу даже эрцгерцог Карл, что ж бы это переменило в общем ходе дел? Теперь уж поздно, когда Вена занята французскими войсками.
– Как занята? Вена занята?
– Не только занята, но Бонапарте в Шенбрунне, а граф, наш милый граф Врбна отправляется к нему за приказаниями.
Болконский после усталости и впечатлений путешествия, приема и в особенности после обеда чувствовал, что он не понимает всего значения слов, которые он слышал.
– Нынче утром был здесь граф Лихтенфельс, – продолжал Билибин, – и показывал мне письмо, в котором подробно описан парад французов в Вене. Le prince Murat et tout le tremblement… [Принц Мюрат и все такое…] Вы видите, что ваша победа не очень то радостна, и что вы не можете быть приняты как спаситель…
– Право, для меня всё равно, совершенно всё равно! – сказал князь Андрей, начиная понимать,что известие его о сражении под Кремсом действительно имело мало важности ввиду таких событий, как занятие столицы Австрии. – Как же Вена взята? А мост и знаменитый tete de pont, [мостовое укрепление,] и князь Ауэрсперг? У нас были слухи, что князь Ауэрсперг защищает Вену, – сказал он.
– Князь Ауэрсперг стоит на этой, на нашей, стороне и защищает нас; я думаю, очень плохо защищает, но всё таки защищает. А Вена на той стороне. Нет, мост еще не взят и, надеюсь, не будет взят, потому что он минирован, и его велено взорвать. В противном случае мы были бы давно в горах Богемии, и вы с вашею армией провели бы дурную четверть часа между двух огней.
– Но это всё таки не значит, чтобы кампания была кончена, – сказал князь Андрей.
– А я думаю, что кончена. И так думают большие колпаки здесь, но не смеют сказать этого. Будет то, что я говорил в начале кампании, что не ваша echauffouree de Durenstein, [дюренштейнская стычка,] вообще не порох решит дело, а те, кто его выдумали, – сказал Билибин, повторяя одно из своих mots [словечек], распуская кожу на лбу и приостанавливаясь. – Вопрос только в том, что скажет берлинское свидание императора Александра с прусским королем. Ежели Пруссия вступит в союз, on forcera la main a l'Autriche, [принудят Австрию,] и будет война. Ежели же нет, то дело только в том, чтоб условиться, где составлять первоначальные статьи нового Саmро Formio. [Кампо Формио.]
– Но что за необычайная гениальность! – вдруг вскрикнул князь Андрей, сжимая свою маленькую руку и ударяя ею по столу. – И что за счастие этому человеку!
– Buonaparte? [Буонапарте?] – вопросительно сказал Билибин, морща лоб и этим давая чувствовать, что сейчас будет un mot [словечко]. – Bu onaparte? – сказал он, ударяя особенно на u . – Я думаю, однако, что теперь, когда он предписывает законы Австрии из Шенбрунна, il faut lui faire grace de l'u . [надо его избавить от и.] Я решительно делаю нововведение и называю его Bonaparte tout court [просто Бонапарт].
– Нет, без шуток, – сказал князь Андрей, – неужели вы думаете,что кампания кончена?
– Я вот что думаю. Австрия осталась в дурах, а она к этому не привыкла. И она отплатит. А в дурах она осталась оттого, что, во первых, провинции разорены (on dit, le православное est terrible pour le pillage), [говорят, что православное ужасно по части грабежей,] армия разбита, столица взята, и всё это pour les beaux yeux du [ради прекрасных глаз,] Сардинское величество. И потому – entre nous, mon cher [между нами, мой милый] – я чутьем слышу, что нас обманывают, я чутьем слышу сношения с Францией и проекты мира, тайного мира, отдельно заключенного.
– Это не может быть! – сказал князь Андрей, – это было бы слишком гадко.
– Qui vivra verra, [Поживем, увидим,] – сказал Билибин, распуская опять кожу в знак окончания разговора.
Когда князь Андрей пришел в приготовленную для него комнату и в чистом белье лег на пуховики и душистые гретые подушки, – он почувствовал, что то сражение, о котором он привез известие, было далеко, далеко от него. Прусский союз, измена Австрии, новое торжество Бонапарта, выход и парад, и прием императора Франца на завтра занимали его.
Он закрыл глаза, но в то же мгновение в ушах его затрещала канонада, пальба, стук колес экипажа, и вот опять спускаются с горы растянутые ниткой мушкатеры, и французы стреляют, и он чувствует, как содрогается его сердце, и он выезжает вперед рядом с Шмитом, и пули весело свистят вокруг него, и он испытывает то чувство удесятеренной радости жизни, какого он не испытывал с самого детства.
Он пробудился…
«Да, всё это было!…» сказал он, счастливо, детски улыбаясь сам себе, и заснул крепким, молодым сном.


На другой день он проснулся поздно. Возобновляя впечатления прошедшего, он вспомнил прежде всего то, что нынче надо представляться императору Францу, вспомнил военного министра, учтивого австрийского флигель адъютанта, Билибина и разговор вчерашнего вечера. Одевшись в полную парадную форму, которой он уже давно не надевал, для поездки во дворец, он, свежий, оживленный и красивый, с подвязанною рукой, вошел в кабинет Билибина. В кабинете находились четыре господина дипломатического корпуса. С князем Ипполитом Курагиным, который был секретарем посольства, Болконский был знаком; с другими его познакомил Билибин.
Господа, бывавшие у Билибина, светские, молодые, богатые и веселые люди, составляли и в Вене и здесь отдельный кружок, который Билибин, бывший главой этого кружка, называл наши, les nфtres. В кружке этом, состоявшем почти исключительно из дипломатов, видимо, были свои, не имеющие ничего общего с войной и политикой, интересы высшего света, отношений к некоторым женщинам и канцелярской стороны службы. Эти господа, повидимому, охотно, как своего (честь, которую они делали немногим), приняли в свой кружок князя Андрея. Из учтивости, и как предмет для вступления в разговор, ему сделали несколько вопросов об армии и сражении, и разговор опять рассыпался на непоследовательные, веселые шутки и пересуды.
– Но особенно хорошо, – говорил один, рассказывая неудачу товарища дипломата, – особенно хорошо то, что канцлер прямо сказал ему, что назначение его в Лондон есть повышение, и чтоб он так и смотрел на это. Видите вы его фигуру при этом?…
– Но что всего хуже, господа, я вам выдаю Курагина: человек в несчастии, и этим то пользуется этот Дон Жуан, этот ужасный человек!
Князь Ипполит лежал в вольтеровском кресле, положив ноги через ручку. Он засмеялся.
– Parlez moi de ca, [Ну ка, ну ка,] – сказал он.
– О, Дон Жуан! О, змея! – послышались голоса.
– Вы не знаете, Болконский, – обратился Билибин к князю Андрею, – что все ужасы французской армии (я чуть было не сказал – русской армии) – ничто в сравнении с тем, что наделал между женщинами этот человек.
– La femme est la compagne de l'homme, [Женщина – подруга мужчины,] – произнес князь Ипполит и стал смотреть в лорнет на свои поднятые ноги.
Билибин и наши расхохотались, глядя в глаза Ипполиту. Князь Андрей видел, что этот Ипполит, которого он (должно было признаться) почти ревновал к своей жене, был шутом в этом обществе.
– Нет, я должен вас угостить Курагиным, – сказал Билибин тихо Болконскому. – Он прелестен, когда рассуждает о политике, надо видеть эту важность.
Он подсел к Ипполиту и, собрав на лбу свои складки, завел с ним разговор о политике. Князь Андрей и другие обступили обоих.
– Le cabinet de Berlin ne peut pas exprimer un sentiment d'alliance, – начал Ипполит, значительно оглядывая всех, – sans exprimer… comme dans sa derieniere note… vous comprenez… vous comprenez… et puis si sa Majeste l'Empereur ne deroge pas au principe de notre alliance… [Берлинский кабинет не может выразить свое мнение о союзе, не выражая… как в своей последней ноте… вы понимаете… вы понимаете… впрочем, если его величество император не изменит сущности нашего союза…]
– Attendez, je n'ai pas fini… – сказал он князю Андрею, хватая его за руку. – Je suppose que l'intervention sera plus forte que la non intervention. Et… – Он помолчал. – On ne pourra pas imputer a la fin de non recevoir notre depeche du 28 novembre. Voila comment tout cela finira. [Подождите, я не кончил. Я думаю, что вмешательство будет прочнее чем невмешательство И… Невозможно считать дело оконченным непринятием нашей депеши от 28 ноября. Чем то всё это кончится.]
И он отпустил руку Болконского, показывая тем, что теперь он совсем кончил.
– Demosthenes, je te reconnais au caillou que tu as cache dans ta bouche d'or! [Демосфен, я узнаю тебя по камешку, который ты скрываешь в своих золотых устах!] – сказал Билибин, y которого шапка волос подвинулась на голове от удовольствия.
Все засмеялись. Ипполит смеялся громче всех. Он, видимо, страдал, задыхался, но не мог удержаться от дикого смеха, растягивающего его всегда неподвижное лицо.
– Ну вот что, господа, – сказал Билибин, – Болконский мой гость в доме и здесь в Брюнне, и я хочу его угостить, сколько могу, всеми радостями здешней жизни. Ежели бы мы были в Брюнне, это было бы легко; но здесь, dans ce vilain trou morave [в этой скверной моравской дыре], это труднее, и я прошу у всех вас помощи. Il faut lui faire les honneurs de Brunn. [Надо ему показать Брюнн.] Вы возьмите на себя театр, я – общество, вы, Ипполит, разумеется, – женщин.
– Надо ему показать Амели, прелесть! – сказал один из наших, целуя кончики пальцев.
– Вообще этого кровожадного солдата, – сказал Билибин, – надо обратить к более человеколюбивым взглядам.
– Едва ли я воспользуюсь вашим гостеприимством, господа, и теперь мне пора ехать, – взглядывая на часы, сказал Болконский.
– Куда?
– К императору.
– О! о! о!
– Ну, до свидания, Болконский! До свидания, князь; приезжайте же обедать раньше, – пocлшaлиcь голоса. – Мы беремся за вас.
– Старайтесь как можно более расхваливать порядок в доставлении провианта и маршрутов, когда будете говорить с императором, – сказал Билибин, провожая до передней Болконского.
– И желал бы хвалить, но не могу, сколько знаю, – улыбаясь отвечал Болконский.
– Ну, вообще как можно больше говорите. Его страсть – аудиенции; а говорить сам он не любит и не умеет, как увидите.


На выходе император Франц только пристально вгляделся в лицо князя Андрея, стоявшего в назначенном месте между австрийскими офицерами, и кивнул ему своей длинной головой. Но после выхода вчерашний флигель адъютант с учтивостью передал Болконскому желание императора дать ему аудиенцию.
Император Франц принял его, стоя посредине комнаты. Перед тем как начинать разговор, князя Андрея поразило то, что император как будто смешался, не зная, что сказать, и покраснел.
– Скажите, когда началось сражение? – спросил он поспешно.
Князь Андрей отвечал. После этого вопроса следовали другие, столь же простые вопросы: «здоров ли Кутузов? как давно выехал он из Кремса?» и т. п. Император говорил с таким выражением, как будто вся цель его состояла только в том, чтобы сделать известное количество вопросов. Ответы же на эти вопросы, как было слишком очевидно, не могли интересовать его.
– В котором часу началось сражение? – спросил император.
– Не могу донести вашему величеству, в котором часу началось сражение с фронта, но в Дюренштейне, где я находился, войско начало атаку в 6 часу вечера, – сказал Болконский, оживляясь и при этом случае предполагая, что ему удастся представить уже готовое в его голове правдивое описание всего того, что он знал и видел.
Но император улыбнулся и перебил его:
– Сколько миль?
– Откуда и докуда, ваше величество?
– От Дюренштейна до Кремса?
– Три с половиною мили, ваше величество.
– Французы оставили левый берег?
– Как доносили лазутчики, в ночь на плотах переправились последние.
– Достаточно ли фуража в Кремсе?
– Фураж не был доставлен в том количестве…
Император перебил его.
– В котором часу убит генерал Шмит?…
– В семь часов, кажется.
– В 7 часов. Очень печально! Очень печально!
Император сказал, что он благодарит, и поклонился. Князь Андрей вышел и тотчас же со всех сторон был окружен придворными. Со всех сторон глядели на него ласковые глаза и слышались ласковые слова. Вчерашний флигель адъютант делал ему упреки, зачем он не остановился во дворце, и предлагал ему свой дом. Военный министр подошел, поздравляя его с орденом Марии Терезии З й степени, которым жаловал его император. Камергер императрицы приглашал его к ее величеству. Эрцгерцогиня тоже желала его видеть. Он не знал, кому отвечать, и несколько секунд собирался с мыслями. Русский посланник взял его за плечо, отвел к окну и стал говорить с ним.
Вопреки словам Билибина, известие, привезенное им, было принято радостно. Назначено было благодарственное молебствие. Кутузов был награжден Марией Терезией большого креста, и вся армия получила награды. Болконский получал приглашения со всех сторон и всё утро должен был делать визиты главным сановникам Австрии. Окончив свои визиты в пятом часу вечера, мысленно сочиняя письмо отцу о сражении и о своей поездке в Брюнн, князь Андрей возвращался домой к Билибину. У крыльца дома, занимаемого Билибиным, стояла до половины уложенная вещами бричка, и Франц, слуга Билибина, с трудом таща чемодан, вышел из двери.
Прежде чем ехать к Билибину, князь Андрей поехал в книжную лавку запастись на поход книгами и засиделся в лавке.
– Что такое? – спросил Болконский.
– Ach, Erlaucht? – сказал Франц, с трудом взваливая чемодан в бричку. – Wir ziehen noch weiter. Der Bosewicht ist schon wieder hinter uns her! [Ах, ваше сиятельство! Мы отправляемся еще далее. Злодей уж опять за нами по пятам.]
– Что такое? Что? – спрашивал князь Андрей.
Билибин вышел навстречу Болконскому. На всегда спокойном лице Билибина было волнение.
– Non, non, avouez que c'est charmant, – говорил он, – cette histoire du pont de Thabor (мост в Вене). Ils l'ont passe sans coup ferir. [Нет, нет, признайтесь, что это прелесть, эта история с Таборским мостом. Они перешли его без сопротивления.]
Князь Андрей ничего не понимал.
– Да откуда же вы, что вы не знаете того, что уже знают все кучера в городе?
– Я от эрцгерцогини. Там я ничего не слыхал.
– И не видали, что везде укладываются?
– Не видал… Да в чем дело? – нетерпеливо спросил князь Андрей.
– В чем дело? Дело в том, что французы перешли мост, который защищает Ауэсперг, и мост не взорвали, так что Мюрат бежит теперь по дороге к Брюнну, и нынче завтра они будут здесь.
– Как здесь? Да как же не взорвали мост, когда он минирован?
– А это я у вас спрашиваю. Этого никто, и сам Бонапарте, не знает.
Болконский пожал плечами.
– Но ежели мост перейден, значит, и армия погибла: она будет отрезана, – сказал он.
– В этом то и штука, – отвечал Билибин. – Слушайте. Вступают французы в Вену, как я вам говорил. Всё очень хорошо. На другой день, то есть вчера, господа маршалы: Мюрат Ланн и Бельяр, садятся верхом и отправляются на мост. (Заметьте, все трое гасконцы.) Господа, – говорит один, – вы знаете, что Таборский мост минирован и контраминирован, и что перед ним грозный tete de pont и пятнадцать тысяч войска, которому велено взорвать мост и нас не пускать. Но нашему государю императору Наполеону будет приятно, ежели мы возьмем этот мост. Проедемте втроем и возьмем этот мост. – Поедемте, говорят другие; и они отправляются и берут мост, переходят его и теперь со всею армией по сю сторону Дуная направляются на нас, на вас и на ваши сообщения.