Skein

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

Skein

Создан

2008

Опубликован

2008

Размер хеша

переменный, 0<d≤264-1

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

переменное, 72 для 256/512-бит выхода, 80 - для 1024 бит

Тип

хеш-функция

Skein (англ. Skein) — алгоритм хеширования переменной разрядности, разработанный группой авторов во главе с Брюсом Шнайером. Хэш-функция Skein выполнена как универсальный криптографический примитив, на основе блочного шифра Threefish, работающего в режиме UBI-хэширования.[1] Основные требования, предъявлявшиеся при разработке — оптимизация под минимальное использование памяти, криптографически безопасное хэширование небольших сообщений, устойчивость ко всем существующим атакам на хэш-функции, оптимизация под 64-разрядные процессоры и активное использование обращений к таблицам.





История

Skein была создана в 2008 году группой авторов во главе с Брюсом Шнайером и вошла в пятёрку финалистов конкурса SHA-3, однако в 2012 в финале победителем был выбран алгоритм Keccak, наиболее производительный и нечувствительный к уязвимостям SHA-2[2]. Название хэш-функции Skein означает «моток пряжи».

Алгоритм

Threefish Block

Threefish — это настраиваемый блочный шифр, определённый для блоков размером 256, 512 и 1024 бит. Шифр реализован в виде подстановочно-перестановочной сети. В основе шифра лежит простая функция MIX, принимающая на вход два 64-битных слова и состоящая из блоков сложения, циклического сдвига на константу, и сложения по модулю 2 (XOR). Используется 72 раунда для 256-битного и 512-битного шифра, и 80 раундов для 1024-битного шифра. Между раундами происходит перестановка слов, а каждые четыре раунда добавляется ключ, за счёт чего появляется нелинейность.

UBI

Threefish в Skein используется в режиме UBI (Unique Block Iteration) хэширования. Режим UBI — это разновидность режима Matyas-Meyer-Oseas.[1] Каждое звено UBI комбинирует входные сообщения с предыдущего звена цепи с последовательностью произвольной длины и устанавливает на выходе значение фиксированного размера. Сообщение, передающееся между звеньями (твик), содержит информацию о том, сколько байт было обработано, флаги начала и конца цепочки, и поле типа данных, которое позволяет различать сферы применения UBI. UBI гарантирует невоспроизводимость результата хэширования одного и того же сообщения и дополнительную защиту за счёт того, что на вход хэш-функции и шифра попадают одни и те же сообщения. UBI устроен следующим образом. Каждое звено цепи — это функция <math>f(G,M,T_s)</math>

<math>G</math> — начальное <math>N_b</math>-байтное значение
<math>M</math> — сообщение, представленное строкой байт (длина этой строки может быть произвольной, но максимум <math>2^{99} - 8</math> бит)
<math>T_s</math> — стартовое значение твика целочисленного типа (128 бит).

Твик содержит следующие поля:

  • Position — количество уже обработанных байт.
  • Reserved — зарезервированные нулевые биты
  • TreeLevel — позиция в дереве хэширования, либо ноль, если этот способ хэширования не применяется.
  • BitPad — флаг, который поднимается в случае, если в блоке обрабатывался последний байт входного сообщения, которое содержит не целое число байт. В остальных случаях поле имеет значение 0.
  • Type тип вызова UBI. Возможные значения см. ниже.
  • First — флаг начала цепочки.
  • Final — флаг конца цепочки.

Вычисления происходят следующим образом. Если количество бит <math>M</math> делится на 8, то положим <math>B = 0</math> и <math>M' = M</math>. Если количество бит <math>M</math> не делится на 8, то дополним последний (неполный) байт следующим образом: старшему неиспользуемому биту присвоим значение 1, остальным 0 положим <math>B = 1</math> и <math>M' = M</math> с учётом дополненного байта. <math>N_M</math> — это число байт в <math>M'</math>. Входное значение ограничено <math>N_M < 2^{96}</math>. Далее дополним <math>M'</math> нулями так, чтобы количество бит <math>M'</math>, было кратно <math>N_b</math> и назовём полученный результат <math>M</math>. Разобьём <math>M</math> на <math>k</math> блоков по <math>N_b</math> байт каждый. Значение UBI вычисляется так:

<math>H_0 = G</math>
<math>H_{i+1} = E(H_i; ToBytes(T_s + min(N_M;(i + 1)N_b) + a_i2^{126} + b_i(B2^{119} + 2^{127}); 16); M_i) \bigoplus M_i</math>,

где <math>E</math> — функция вычисления блочного шифра, <math>a_0 = b_{k-1} = 1</math>, остальные <math>a_i = b_i = 0</math>

Твик вычисляется по формуле:

<math>T_s + min(N_M;(i + 1)N_b) + a_i2^{126} + b_i(B2^{119} + 2^{127})</math>

Первое слагаемое определяет поля TreeLevel и Type, второе — поле Position, третье — выставляет флаг First, четвёртое — флаги Final и BitPad.

Дополнительные аргументы

В поле Type путём присвоения соответствующего значения <math>T_s</math> могут быть заданы следующие параметры

  • Key (Ключ). Используется в случае, если Skein работает как MAC или KDF. Вызов UBI с этим параметром происходит первым, чтобы использовать дополнительные возможности защиты.
  • Configuration (Конфигурация). Используется всегда. Задаёт размер выходного значения и параметры для поддержки дерева хэширования.
  • Personalisation (Персонализация). Параметр, который используется, если для разных пользователей требуются разные функции.
  • Public Key (Открытый ключ). Используется для хэширования открытого ключа для подписи сообщения.
  • Key Derivation Identifer.
  • Nonce. Используется для работы в режиме потокового шифра
  • Message (Сообщение). Сообщение для хэширования
  • Output (Выход). Используется всегда, указывает на выходное преобразование.

Skein

В окончательном варианте вычисление Skein происходит следующим образом. Skein имеет следующие входные аргументы:

  • <math>N_b</math> Внутренний размер в байтах. Может принимать значения 32, 64, or 128.
  • <math>N_0</math> Размер выходного значения в битах.
  • <math>K</math> Ключ длиной <math>N_k</math> байт. Может быть пустой строкой.
  • <math>Y_l</math> Размер листа дерева хэширования.
  • <math>Y_f</math> Коэффициент разветвления дерева.
  • <math>Y_m</math> Максимальная высота дерева
  • <math>L</math> Список из <math>t</math> наборов (<math>T_i</math>, <math>M_i</math>) где <math>T_i</math> — значение поля Type, <math>M_i</math> — строка байт.

Сначала генерируется ключ <math>K'</math>. Если <math>K</math> — пустая строка, то начальное значение :<math>K' = 0^{N_b}</math>. Если нет, то <math>K'</math> вычисляется так:

<math>K' = UBI(0^{N_b}, K, T_{cfg}2^{120})</math>

Далее вычисления происходят по следующей схеме:

<math>G_0 = UBI(K', C, T_{cfg}2^{120})</math>

Здесь <math>C</math> — конфигурационная строка, которая содержит идентификатор (он нужен, чтобы различать разные функции, созданные на основе UBI), информацию о версии, длине выходного значения, параметрах дерева.

<math>G_{i+1} = UBI(G_i, M_i, T_{i}2^{120})</math>

Окончательный результат определяется так называемой функцией <math>Output(G_t,N_0)</math>, которая определяется, как ведущие <math>N_0/8</math> байт выражения

<math>UBI (G, ToBytes(0, 8), T_{out}2^{120})\|UBI (G, ToBytes(1, 8), T_{out}2^{120})\|...</math>

Если параметры <math>Y_l</math>, <math>Y_f</math>, <math>Y_m</math> ненулевые, то вычисления производятся иначе. Определяется размер листа дерева как <math>N_l = N_b2^{Y_l}</math> и размер узла как <math>N_n = N_b2^{Y_f}</math>.

Сообщение l-го уровня <math>M_l</math> делится на блоки <math>M_{li}</math> размером <math>8N_l</math> и вычисляется следующий уровень дерева, как слияние по всем <math>i\in(0,k-1)</math>

<math>M_{1+1} = UBI(G, M_{li}, iNn + (l + 1)2^{112} + T_{msg}2^{120})</math>

Если же длина <math>M_l</math> равна <math>N_b</math>, то хэширование окончено и его результат <math>G_0 = M_l </math>. Если длина <math>M_l</math> больше <math>N_b</math>, но <math>l = Y_m-1</math>, достигнута максимальная высота дерево, и в этом случае результат хэширования <math>G_0 = UBI(G, M_l, Y_m2^{112} + T_{msg}2^{120})</math>.

Также существует упрощённая версия Skein с аргументами <math>N_b</math>, <math>N_0</math>, <math>M</math>. Поле Type может принимать только значения Cfg и Msg

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

В 2009 году коллектив авторов[3] исследовал Threefish, как важную часть Skein, на криптоустойчивость. Совокупно с исследованиями создателей[1] , они пришли результату, указанному в таблице.

Кол-во раундов Время Память Вид криптоанализа
8 1 - 511-битная псевдоколлизия
16 26 - 459-битная псевдоколлизия
17 224 - 434-битная псевдоколлизия
17 28,6 - Related-key distinguisher
21 23.4 - Related-key distinguisher
21 - - Related-key impossible differential
25  ? - Related-key key recovery (conjectured)
25 2416.6 - Related-key key recovery
26 2507.8 - Related-key key recovery
32 2312 271 Related-key boomerang key recovery
34 2398 - Related-key boomerang distinguisher
35 2478 - Known-related-key boomerang distinguisher

Кроме того, ещё один коллектив авторов[4] в 2010 году показал, что используя циклический криптоанализ, можно провести атаку на основе подобранного ключа на Threefish, но только если используется 53/57 раундов вместо 72. Для атаки на Skein этого недостаточно, поэтому предлагается совмещать циклический криптоанализ с дифференциальным.

Быстродействие

Существуют реализации Skein для трёх вариантов значения внутреннего состояния: 256, 512 и 1024 бит. Основным вариантом считается Skein-512, который может быть безопасно использован для всех криптографических приложений в обозримом будущем. 1024-битный вариант ещё более безопасен и в существующих аппаратных реализациях работает в два раза быстрее. Skein-256 — оптимальный вариант для использования в устройствах с малым объёмом памяти (например, в смарт-картах), так как требует только 100 байт ОЗУ, в отличие от Skein-512, требующей 200 байт. В связи с устройством Threefish, Skein работает быстрее всего на 64-битных процессорах. В таблице ниже приведена сравнительная характеристика быстродействия Skein и алгоритмов SHA. В таблице показана скорость (в тактах на байт) реализации на языке Си на 64-битном процессоре.

Алгоритм/Длина сообщения (байт) 1 10 100 1000 10000 100000
Skein-256 774 77 16,6 9,8 9,2 9,2
Skein-512 1086 110 15,6 7,3 6,6 6,5
Skein-1024 3295 330 33,2 14,2 12,3 12,3
SHA-1 677 74,2 14,0 10,4 10,0 10,0
SHA-224 1379 143,1 27,4 20,7 20,1 20,0
SHA-256 1405 145,7 77,6 20,7 20,1 20,0
SHA-384 1821 187,3 19,6 13,7 13,4 13,3
SHA-512 1899 192,5 20,6 13,8 13,4 13,3

Как видно из таблицы, Skein работает в два раза быстрее, чем SHA-512.

Применение

Область применения Skein достаточно широка. Используя сообщение и ключ в качестве соответствующих входов, можно вычислить MAC. Возможно использование в качестве хэш-функции для вычисления HMAC. При помощи аргумента Nonce использовать Skein в режиме поточного шифра. Также возможно применение в качестве генератора псевдослучайных чисел, например, в алгоритмах Fortuna и Yarrow, в качестве Key Derivation Function и Password-Based Key Derivation Function(используя аргументы Key и Key Derivation Identifer ), в качестве хэш-функции для вычисления электронной подписи (подразумевается использование аргумента Public Key).

При помощи аргумента Personalisation все приложения Skein могут быть персонифицированы для конкретного пользователя. Например для приложения FOO строка персонализации в UTF8 Unicode может выглядеть так

20081031 somebody@example.com FOO/bar,

где bar — персонификация внутри приложения.

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

Значения разных вариантов хеша от пустой строки.

Skein256-224("")
0x 0fadf1fa39e3837a95b3660b4184d9c2f3cfc94b55d8e7a083278bf8

Skein256-256("") 0x c8877087da56e072870daa843f176e9453115929094c3a40c463a196c29bf7ba
Skein512-224("") 0x 1541ae9fc3ebe24eb758ccb1fd60c2c31a9ebfe65b220086e7819e25
Skein512-256("") 0x 39ccc4554a8b31853b9de7a1fe638a24cce6b35a55f2431009e18780335d2621
Skein512-384("") 0x dd5aaf4589dc227bd1eb7bc68771f5baeaa3586ef6c7680167a023ec8ce26980f06c4082c488b4ac9ef313f8cbe70808
Skein512-512("") 0x bc5b4c50925519c290cc634277ae3d6257212395cba733bbad37a4af0fa06af4 1fca7903d06564fea7a2d3730dbdb80c1f85562dfcc070334ea4d1d9e72cba7a
Skein1024-384("") 0x 1fdb081963b960e89eaa11b87dda55e8a55a3e1066b30e38d8ae2a45242f7dadfaf06d80ca8a73cd8242ce5eab84c164
Skein1024-512("") 0x e2943eb0bc0efabd49503a76edf7cfcf072db25bad94ed44fe537284163f3119 c47ac6f78699b4272255966e0aba65c75a0a64bd23df6996d1bc3174afd9fa8b
Skein1024-1024("") 0x 0fff9563bb3279289227ac77d319b6fff8d7e9f09da1247b72a0a265cd6d2a62 645ad547ed8193db48cff847c06494a03f55666d3b47eb4c20456c9373c86297 d630d5578ebd34cb40991578f9f52b18003efa35d3da6553ff35db91b81ab890 bec1b189b7f52cb2a783ebb7d823d725b0b4a71f6824e88f68f982eefc6d19c6

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

Skein512-256("The quick brown fox jumps over the lazy dog")
0x b3250457e05d3060b1a4bbc1428bc75a3f525ca389aeab96cfa34638d96e492a

Skein512-256("The quick brown fox jumps over the lazy dog.") 0x 41e829d7fca71c7d7154ed8fc8a069f274dd664ae0ed29d365d919f4e575eebb

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

Ссылки

  • [www.schneier.com/skein.html Официальная страница Skein]

Примечания

  1. 1 2 [www.skein-hash.info/sites/default/files/skein1.3.pdf Документация Skein, Версия 1.3 (2010-10-01)]
  2. [www.nist.gov/itl/csd/sha-100212.cfm NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition]. NIST. Проверено 2 октября 2012.
  3. Jean-Philippe Aumasson1, C¸ a˘gda¸s C¸ alık, Willi Meier1, Onur Ozen, Raphael C.-W. and Kerem Varıcı, (2009). «[eprint.iacr.org/2009/438.pdf Improved Cryptanalysis of Skein]» (University of Luxembourg).
  4. Dmitry Khovratovich and Ivica Nikolić (2010). «[www.skein-hash.info/sites/default/files/axr.pdf Rotational Cryptanalysis of ARX]» (University of Luxembourg).

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

Когда с левого фланга прискакал Щербинин с донесением о занятии французами флешей и Семеновского, Кутузов, по звукам поля сражения и по лицу Щербинина угадав, что известия были нехорошие, встал, как бы разминая ноги, и, взяв под руку Щербинина, отвел его в сторону.
– Съезди, голубчик, – сказал он Ермолову, – посмотри, нельзя ли что сделать.
Кутузов был в Горках, в центре позиции русского войска. Направленная Наполеоном атака на наш левый фланг была несколько раз отбиваема. В центре французы не подвинулись далее Бородина. С левого фланга кавалерия Уварова заставила бежать французов.
В третьем часу атаки французов прекратились. На всех лицах, приезжавших с поля сражения, и на тех, которые стояли вокруг него, Кутузов читал выражение напряженности, дошедшей до высшей степени. Кутузов был доволен успехом дня сверх ожидания. Но физические силы оставляли старика. Несколько раз голова его низко опускалась, как бы падая, и он задремывал. Ему подали обедать.
Флигель адъютант Вольцоген, тот самый, который, проезжая мимо князя Андрея, говорил, что войну надо im Raum verlegon [перенести в пространство (нем.) ], и которого так ненавидел Багратион, во время обеда подъехал к Кутузову. Вольцоген приехал от Барклая с донесением о ходе дел на левом фланге. Благоразумный Барклай де Толли, видя толпы отбегающих раненых и расстроенные зады армии, взвесив все обстоятельства дела, решил, что сражение было проиграно, и с этим известием прислал к главнокомандующему своего любимца.
Кутузов с трудом жевал жареную курицу и сузившимися, повеселевшими глазами взглянул на Вольцогена.
Вольцоген, небрежно разминая ноги, с полупрезрительной улыбкой на губах, подошел к Кутузову, слегка дотронувшись до козырька рукою.
Вольцоген обращался с светлейшим с некоторой аффектированной небрежностью, имеющей целью показать, что он, как высокообразованный военный, предоставляет русским делать кумира из этого старого, бесполезного человека, а сам знает, с кем он имеет дело. «Der alte Herr (как называли Кутузова в своем кругу немцы) macht sich ganz bequem, [Старый господин покойно устроился (нем.) ] – подумал Вольцоген и, строго взглянув на тарелки, стоявшие перед Кутузовым, начал докладывать старому господину положение дел на левом фланге так, как приказал ему Барклай и как он сам его видел и понял.
– Все пункты нашей позиции в руках неприятеля и отбить нечем, потому что войск нет; они бегут, и нет возможности остановить их, – докладывал он.
Кутузов, остановившись жевать, удивленно, как будто не понимая того, что ему говорили, уставился на Вольцогена. Вольцоген, заметив волнение des alten Herrn, [старого господина (нем.) ] с улыбкой сказал:
– Я не считал себя вправе скрыть от вашей светлости того, что я видел… Войска в полном расстройстве…
– Вы видели? Вы видели?.. – нахмурившись, закричал Кутузов, быстро вставая и наступая на Вольцогена. – Как вы… как вы смеете!.. – делая угрожающие жесты трясущимися руками и захлебываясь, закричал он. – Как смоете вы, милостивый государь, говорить это мне. Вы ничего не знаете. Передайте от меня генералу Барклаю, что его сведения неверны и что настоящий ход сражения известен мне, главнокомандующему, лучше, чем ему.
Вольцоген хотел возразить что то, но Кутузов перебил его.
– Неприятель отбит на левом и поражен на правом фланге. Ежели вы плохо видели, милостивый государь, то не позволяйте себе говорить того, чего вы не знаете. Извольте ехать к генералу Барклаю и передать ему назавтра мое непременное намерение атаковать неприятеля, – строго сказал Кутузов. Все молчали, и слышно было одно тяжелое дыхание запыхавшегося старого генерала. – Отбиты везде, за что я благодарю бога и наше храброе войско. Неприятель побежден, и завтра погоним его из священной земли русской, – сказал Кутузов, крестясь; и вдруг всхлипнул от наступивших слез. Вольцоген, пожав плечами и скривив губы, молча отошел к стороне, удивляясь uber diese Eingenommenheit des alten Herrn. [на это самодурство старого господина. (нем.) ]
– Да, вот он, мой герой, – сказал Кутузов к полному красивому черноволосому генералу, который в это время входил на курган. Это был Раевский, проведший весь день на главном пункте Бородинского поля.
Раевский доносил, что войска твердо стоят на своих местах и что французы не смеют атаковать более. Выслушав его, Кутузов по французски сказал:
– Vous ne pensez donc pas comme lesautres que nous sommes obliges de nous retirer? [Вы, стало быть, не думаете, как другие, что мы должны отступить?]
– Au contraire, votre altesse, dans les affaires indecises c'est loujours le plus opiniatre qui reste victorieux, – отвечал Раевский, – et mon opinion… [Напротив, ваша светлость, в нерешительных делах остается победителем тот, кто упрямее, и мое мнение…]
– Кайсаров! – крикнул Кутузов своего адъютанта. – Садись пиши приказ на завтрашний день. А ты, – обратился он к другому, – поезжай по линии и объяви, что завтра мы атакуем.
Пока шел разговор с Раевским и диктовался приказ, Вольцоген вернулся от Барклая и доложил, что генерал Барклай де Толли желал бы иметь письменное подтверждение того приказа, который отдавал фельдмаршал.
Кутузов, не глядя на Вольцогена, приказал написать этот приказ, который, весьма основательно, для избежания личной ответственности, желал иметь бывший главнокомандующий.
И по неопределимой, таинственной связи, поддерживающей во всей армии одно и то же настроение, называемое духом армии и составляющее главный нерв войны, слова Кутузова, его приказ к сражению на завтрашний день, передались одновременно во все концы войска.
Далеко не самые слова, не самый приказ передавались в последней цепи этой связи. Даже ничего не было похожего в тех рассказах, которые передавали друг другу на разных концах армии, на то, что сказал Кутузов; но смысл его слов сообщился повсюду, потому что то, что сказал Кутузов, вытекало не из хитрых соображений, а из чувства, которое лежало в душе главнокомандующего, так же как и в душе каждого русского человека.
И узнав то, что назавтра мы атакуем неприятеля, из высших сфер армии услыхав подтверждение того, чему они хотели верить, измученные, колеблющиеся люди утешались и ободрялись.


Полк князя Андрея был в резервах, которые до второго часа стояли позади Семеновского в бездействии, под сильным огнем артиллерии. Во втором часу полк, потерявший уже более двухсот человек, был двинут вперед на стоптанное овсяное поле, на тот промежуток между Семеновским и курганной батареей, на котором в этот день были побиты тысячи людей и на который во втором часу дня был направлен усиленно сосредоточенный огонь из нескольких сот неприятельских орудий.
Не сходя с этого места и не выпустив ни одного заряда, полк потерял здесь еще третью часть своих людей. Спереди и в особенности с правой стороны, в нерасходившемся дыму, бубухали пушки и из таинственной области дыма, застилавшей всю местность впереди, не переставая, с шипящим быстрым свистом, вылетали ядра и медлительно свистевшие гранаты. Иногда, как бы давая отдых, проходило четверть часа, во время которых все ядра и гранаты перелетали, но иногда в продолжение минуты несколько человек вырывало из полка, и беспрестанно оттаскивали убитых и уносили раненых.
С каждым новым ударом все меньше и меньше случайностей жизни оставалось для тех, которые еще не были убиты. Полк стоял в батальонных колоннах на расстоянии трехсот шагов, но, несмотря на то, все люди полка находились под влиянием одного и того же настроения. Все люди полка одинаково были молчаливы и мрачны. Редко слышался между рядами говор, но говор этот замолкал всякий раз, как слышался попавший удар и крик: «Носилки!» Большую часть времени люди полка по приказанию начальства сидели на земле. Кто, сняв кивер, старательно распускал и опять собирал сборки; кто сухой глиной, распорошив ее в ладонях, начищал штык; кто разминал ремень и перетягивал пряжку перевязи; кто старательно расправлял и перегибал по новому подвертки и переобувался. Некоторые строили домики из калмыжек пашни или плели плетеночки из соломы жнивья. Все казались вполне погружены в эти занятия. Когда ранило и убивало людей, когда тянулись носилки, когда наши возвращались назад, когда виднелись сквозь дым большие массы неприятелей, никто не обращал никакого внимания на эти обстоятельства. Когда же вперед проезжала артиллерия, кавалерия, виднелись движения нашей пехоты, одобрительные замечания слышались со всех сторон. Но самое большое внимание заслуживали события совершенно посторонние, не имевшие никакого отношения к сражению. Как будто внимание этих нравственно измученных людей отдыхало на этих обычных, житейских событиях. Батарея артиллерии прошла пред фронтом полка. В одном из артиллерийских ящиков пристяжная заступила постромку. «Эй, пристяжную то!.. Выправь! Упадет… Эх, не видят!.. – по всему полку одинаково кричали из рядов. В другой раз общее внимание обратила небольшая коричневая собачонка с твердо поднятым хвостом, которая, бог знает откуда взявшись, озабоченной рысцой выбежала перед ряды и вдруг от близко ударившего ядра взвизгнула и, поджав хвост, бросилась в сторону. По всему полку раздалось гоготанье и взвизги. Но развлечения такого рода продолжались минуты, а люди уже более восьми часов стояли без еды и без дела под непроходящим ужасом смерти, и бледные и нахмуренные лица все более бледнели и хмурились.
Князь Андрей, точно так же как и все люди полка, нахмуренный и бледный, ходил взад и вперед по лугу подле овсяного поля от одной межи до другой, заложив назад руки и опустив голову. Делать и приказывать ему нечего было. Все делалось само собою. Убитых оттаскивали за фронт, раненых относили, ряды смыкались. Ежели отбегали солдаты, то они тотчас же поспешно возвращались. Сначала князь Андрей, считая своею обязанностью возбуждать мужество солдат и показывать им пример, прохаживался по рядам; но потом он убедился, что ему нечему и нечем учить их. Все силы его души, точно так же как и каждого солдата, были бессознательно направлены на то, чтобы удержаться только от созерцания ужаса того положения, в котором они были. Он ходил по лугу, волоча ноги, шаршавя траву и наблюдая пыль, которая покрывала его сапоги; то он шагал большими шагами, стараясь попадать в следы, оставленные косцами по лугу, то он, считая свои шаги, делал расчеты, сколько раз он должен пройти от межи до межи, чтобы сделать версту, то ошмурыгывал цветки полыни, растущие на меже, и растирал эти цветки в ладонях и принюхивался к душисто горькому, крепкому запаху. Изо всей вчерашней работы мысли не оставалось ничего. Он ни о чем не думал. Он прислушивался усталым слухом все к тем же звукам, различая свистенье полетов от гула выстрелов, посматривал на приглядевшиеся лица людей 1 го батальона и ждал. «Вот она… эта опять к нам! – думал он, прислушиваясь к приближавшемуся свисту чего то из закрытой области дыма. – Одна, другая! Еще! Попало… Он остановился и поглядел на ряды. „Нет, перенесло. А вот это попало“. И он опять принимался ходить, стараясь делать большие шаги, чтобы в шестнадцать шагов дойти до межи.
Свист и удар! В пяти шагах от него взрыло сухую землю и скрылось ядро. Невольный холод пробежал по его спине. Он опять поглядел на ряды. Вероятно, вырвало многих; большая толпа собралась у 2 го батальона.
– Господин адъютант, – прокричал он, – прикажите, чтобы не толпились. – Адъютант, исполнив приказание, подходил к князю Андрею. С другой стороны подъехал верхом командир батальона.