MD5

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

MD5

Создан

1991 г.

Опубликован

апрель 1992 г.

Преемник

SHA-2

Стандарты

RFC 1321

Размер хеша

128 бит

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

4

Тип

хеш-функция

MD5 (англ. Message Digest 5) — 128-битный алгоритм хеширования, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института (Massachusetts Institute of Technology, MIT) в 1991 году. Предназначен для создания «отпечатков» или дайджестов сообщения произвольной длины и последующей проверки их подлинности. Широко применялся для проверки целостности информации и хранения паролей в закрытом виде.





История

MD5 — один из серии алгоритмов по построению дайджеста сообщения, разработанный профессором Рональдом Л. Ривестом из Массачусетского технологического института. Был разработан в 1991 году как более надёжный вариант предыдущего алгоритма MD4[1]. Описан в RFC 1321[2]. Позже Гансом Доббертином были найдены недостатки алгоритма MD4.

В 1993 году Берт ден Бур (Bert den Boer) и Антон Босселарс (Antoon Bosselaers) показали, что в алгоритме возможны псевдоколлизии, когда разным инициализирующим векторам соответствуют одинаковые дайджесты для входного сообщения[3].

В 1996 году Ганс Доббертин (Hans Dobbertin) объявил о коллизии в алгоритме[4], и уже в то время было предложено использовать другие алгоритмы хеширования, такие как Whirlpool, SHA-1 или RIPEMD-160.

Из-за небольшого размера хеша в 128 бит можно рассматривать birthday-атаки. В марте 2004 года был запущен проект MD5CRK с целью обнаружения уязвимостей алгоритма, используя birthday-атаки. Проект MD5CRK закончился 17 августа 2004 года, когда Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) обнаружили уязвимости в алгоритме[5].

1 марта 2005 года Арьен Ленстра, Ван Сяоюнь и Бенне де Вегер продемонстрировали построение двух документов X.509 с различными открытыми ключами и одинаковым хешем MD5[6].

18 марта 2006 года исследователь Властимил Клима (Vlastimil Klima) опубликовал алгоритм, который может найти коллизии за одну минуту на обычном компьютере, метод получил название «туннелирование»[7].

В конце 2008 года US-CERT призвал разработчиков программного обеспечения, владельцев веб-сайтов и пользователей прекратить использовать MD5 в любых целях, так как исследования продемонстрировали ненадёжность этого алгоритма[8].

24 декабря 2010 года Тао Се (Tao Xie) и Фэн Дэнго (Feng Dengguo) впервые представили коллизию сообщений длиной в один блок (512 бит)[9]. Ранее коллизии были найдены для сообщений длиной в два блока и более. Позднее Марк Стивенс (Marc Stevens) повторил успех, опубликовав блоки с одинаковым хешем MD5, а также алгоритм для получения таких коллизий[10].

В 2011 году был опубликован информационный документ RFC 6151. Он признаёт алгоритм хеширования MD5[2] небезопасным для некоторых целей и рекомендует отказаться от его использования.

Алгоритм MD5

На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Длина сообщения может быть любой (в том числе нулевой). Запишем длину сообщения в L. Это число целое и неотрицательное. Кратность каким-либо числам необязательна. После поступления данных идёт процесс подготовки потока к вычислениям.

Ниже приведены 5 шагов алгоритма[2]:

Шаг 1. Выравнивание потока

Сначала дописывают единичный бит в конец потока (байт 80h), затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер <math>L'</math> был сравним с 448 по модулю 512, (<math>L' = 512 \times N + 448</math>). Выравнивание происходит, даже если длина уже сравнима с 448.

Шаг 2. Добавление длины сообщения

В конец сообщения дописывают 64-битное представление длины данных (количество бит в сообщении) до выравнивания. Сначала записывают младшие 4 байта, затем старшие. Если длина превосходит <math>2^{64}-1</math>, то дописывают только младшие биты (эквивалентно взятию по модулю <math>2^{64}</math>). После этого длина потока станет кратной 512. Вычисления будут основываться на представлении этого потока данных в виде массива слов по 512 бит.

Шаг 3. Инициализация буфера

Для вычислений инициализируются 4 переменных размером по 32 бита и задаются начальные значения шестнадцатеричными числами (порядок байтов little-endian, сначала младший байт):

А = 01 23 45 67; // 67452301h
В = 89 AB CD EF; // EFCDAB89h
С = FE DC BA 98; // 98BADCFEh
D = 76 54 32 10. // 10325476h

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

Определим ещё функции и константы, которые нам понадобятся для вычислений.

  • Потребуются 4 функции для четырёх раундов. Введём функции от трёх параметров — слов, результатом также будет слово:
1-й раунд: <math>\operatorname{Fun F}(X,Y,Z) = (X \wedge Y) \vee (\neg X \wedge Z)</math>,
2-й раунд: <math>\operatorname{Fun G}(X,Y,Z) = (X \wedge Z) \vee (\neg Z \wedge Y)</math>,
3-й раунд: <math>\operatorname{Fun H}(X,Y,Z) = X \oplus Y \oplus Z</math>,
4-й раунд: <math>\operatorname{Fun I}(X,Y,Z) = Y \oplus (\neg{Z} \vee X)</math>,
где <math>\oplus, \wedge, \vee, \neg</math> побитовые логические операции XOR, AND, OR и NOT соответственно.
  • Определим таблицу констант <math>T[1\ldots64]</math> — 64-элементная таблица данных, построенная следующим образом: <math>T[n] = \operatorname{int}(2^{32} \cdot |\sin n|)</math>.[11]
  • Каждый 512-битный блок проходит 4 этапа вычислений по 16 раундов. Для этого блок представляется в виде массива X из 16 слов по 32 бита. Все раунды однотипны и имеют вид: [abcd k s i], определяемый как <math>a = b + ((a + \operatorname{Fun}(b, c, d) + X[k] + T[i]) \lll s)</math>, где k — номер 32-битного слова из текущего 512-битного блока сообщения, и <math>\ldots \lll s</math> — циклический сдвиг влево на s бит полученного 32-битного аргумента. Число s задается отдельно для каждого раунда.

Шаг 4. Вычисление в цикле

Заносим в блок данных элемент n из массива 512-битных блоков. Сохраняются значения A, B, C и D, оставшиеся после операций над предыдущими блоками (или их начальные значения, если блок первый).

AA = A
BB = B
CC = C
DD = D

Этап 1

/* [abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  0 7  1][DABC  1 12  2][CDAB  2 17  3][BCDA  3 22  4]
[ABCD  4 7  5][DABC  5 12  6][CDAB  6 17  7][BCDA  7 22  8]
[ABCD  8 7  9][DABC  9 12 10][CDAB 10 17 11][BCDA 11 22 12]
[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]

Этап 2

/* [abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  1 5 17][DABC  6 9 18][CDAB 11 14 19][BCDA  0 20 20]
[ABCD  5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA  4 20 24]
[ABCD  9 5 25][DABC 14 9 26][CDAB  3 14 27][BCDA  8 20 28]
[ABCD 13 5 29][DABC  2 9 30][CDAB  7 14 31][BCDA 12 20 32]

Этап 3

/* [abcd k s i] a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  5 4 33][DABC  8 11 34][CDAB 11 16 35][BCDA 14 23 36]
[ABCD  1 4 37][DABC  4 11 38][CDAB  7 16 39][BCDA 10 23 40]
[ABCD 13 4 41][DABC  0 11 42][CDAB  3 16 43][BCDA  6 23 44]
[ABCD  9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA  2 23 48]

Этап 4

/* [abcd k s i] a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
[ABCD  0 6 49][DABC  7 10 50][CDAB 14 15 51][BCDA  5 21 52]
[ABCD 12 6 53][DABC  3 10 54][CDAB 10 15 55][BCDA  1 21 56]
[ABCD  8 6 57][DABC 15 10 58][CDAB  6 15 59][BCDA 13 21 60]
[ABCD  4 6 61][DABC 11 10 62][CDAB  2 15 63][BCDA  9 21 64]

Суммируем с результатом предыдущего цикла:

A = AA + A
B = BB + B
C = CC + C
D = DD + D

После окончания цикла необходимо проверить, есть ли ещё блоки для вычислений. Если да, то переходим к следующему элементу массива (n + 1) и повторяем цикл.

Шаг 5. Результат вычислений

Результат вычислений находится в буфере ABCD, это и есть хеш. Если выводить побайтово, начиная с младшего байта A и закончив старшим байтом D, то мы получим MD5-хеш. 1, 0, 15, 34, 17, 18…

Сравнение MD5 и MD4

Алгоритм MD5 происходит от MD4. В новый алгоритм добавили ещё один раунд, теперь их стало 4 вместо 3 в MD4. Добавили новую константу для того, чтобы свести к минимуму влияние входного сообщения, в каждом раунде на каждом шаге и каждый раз константа разная, она суммируется с результатом F и блоком данных. Изменилась функция <math>G = XZ \vee (Y \neg Z)</math> вместо <math>XY \vee XZ \vee YZ</math>. Результат каждого шага складывается с результатом предыдущего шага, из-за этого происходит более быстрое изменение результата. Для этой же цели оптимизирована величина сдвига на каждом круге. Изменился порядок работы с входными словами в раундах 2 и 3[2].

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

Хеш содержит 128 бит (16 байт) и обычно представляется как последовательность из 32 шестнадцатеричных цифр[12].

Несколько примеров хеша:

 MD5("md5") = 1BC29B36F623BA82AAF6724FD3B16718

Даже небольшое изменение входного сообщения (в нашем случае на один бит: ASCII символ «5» с кодом 3516 = 0001101012 заменяется на символ «4» с кодом 3416 = 0001101002) приводит к полному изменению хеша. Такое свойство алгоритма называется лавинным эффектом.

 MD5("md4") = C93D3BF7A7C4AFE94B64E30C2CE39F4F

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

 MD5("") = D41D8CD98F00B204E9800998ECF8427E

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

На данный момент существуют несколько видов «взлома» хешей MD5 — подбора сообщения с заданным хешем[13][14]:

При этом методы перебора по словарю и brute-force могут использоваться для взлома хеша других хеш-функций (с небольшими изменениями алгоритма). В отличие от них, RainbowCrack требует предварительной подготовки радужных таблиц, которые создаются для заранее определённой хеш-функции. Поиск коллизий специфичен для каждого алгоритма.

Атаки переборного типа

Для полного перебора или перебора по словарю можно использовать программы PasswordsPro[15], MD5BFCPF[16], John the Ripper. Для перебора по словарю существуют готовые словари[17]. Основным недостатком такого типа атак является высокая вычислительная сложность.

RainbowCrack — ещё один метод нахождения прообраза хеша из заданного множества. Он основан на генерации цепочек хешей, чтобы по получившейся базе вести поиск заданного хеша. Хотя создание радужных таблиц занимает много времени и памяти, последующий взлом производится очень быстро. Основная идея данного метода — достижение компромисса между временем поиска по таблице и занимаемой памятью.

Коллизии MD5

Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений и идентичного начального буфера. В отличие от коллизий, псевдоколлизии определяются как равные значения хеша для разных значений начального буфера, причём сами сообщения могут совпадать или отличаться. В MD5 вопрос коллизий не решается[14].

В 1996 году Ганс Доббертин нашёл псевдоколлизии в MD5, используя определённые инициализирующие векторы, отличные от стандартных. Оказалось, что можно для известного сообщения построить второе, такое, что оно будет иметь такой же хеш, как и исходное. C точки зрения математики это означает: MD5(IV,L1) = MD5(IV,L2), где IV — начальное значение буфера, а L1 и L2 — различные сообщения. Например, если взять начальное значение буфера[4]:

A = 0x12AC2375
В = 0x3B341042
C = 0x5F62B97C
D = 0x4BA763E 

и задать входное сообщение

AA1DDABE D97ABFF5 BBF0E1C1 32774244
1006363E 7218209D E01C136D 9DA64D0E
98A1FB19 1FAE44B0 236BB992 6B7A779B
1326ED65 D93E0972 D458C868 6B72746A

то, добавляя число <math>2^9</math> к определённому 32-разрядному слову в блочном буфере, можно получить второе сообщение с таким же хешем. Ханс Доббертин представил такую формулу:

<math>L2_i=\begin{cases} L1_i, & i\ne 14;\\ L1_i + 2^9, & i = 14. \end{cases}</math>

Тогда MD5(IV, L1) = MD5(IV, L2) = BF90E670752AF92B9CE4E3E1B12CF8DE.

В 2004 году китайские исследователи Ван Сяоюнь (Wang Xiaoyun), Фэн Дэнго (Feng Dengguo), Лай Сюэцзя (Lai Xuejia) и Юй Хунбо (Yu Hongbo) объявили об обнаруженной ими уязвимости в алгоритме, позволяющей за небольшое время (1 час на кластере IBM p690) находить коллизии[5][18].

В 2005 году Ван Сяоюнь и Юй Хунбо из университета Шаньдуна в Китае опубликовали алгоритм, который может найти две различные последовательности в 128 байт, которые дают одинаковый MD5-хеш. Одна из таких пар (отличающиеся разряды выделены):

d131dd02c5e6eec4693d9a0698aff95c 2fcab58712467eab4004583eb8fb7f89
55ad340609f4b30283e488832571415a 085125e8f7cdc99fd91dbdf280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e2b487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080a80d1e c69821bcb6a8839396f9652b6ff72a70

и

d131dd02c5e6eec4693d9a0698aff95c 2fcab50712467eab4004583eb8fb7f89
55ad340609f4b30283e4888325f1415a 085125e8f7cdc99fd91dbd7280373c5b
d8823e3156348f5bae6dacd436c919c6 dd53e23487da03fd02396306d248cda0
e99f33420f577ee8ce54b67080280d1e c69821bcb6a8839396f965ab6ff72a70

Каждый из этих блоков даёт MD5-хеш, равный 79054025255fb1a26e4bc422aef54eb4[19].

В 2006 году чешский исследователь Властимил Клима опубликовал алгоритм, позволяющий находить коллизии на обычном компьютере с любым начальным вектором (A,B,C,D) при помощи метода, названного им «туннелирование»[7][20].

Алгоритм MD5 использует итерационный метод Меркла-Дамгарда, поэтому становится возможным построение коллизий с одинаковым, заранее выбранным префиксом. Аналогично, коллизии получаются при добавлении одинакового суффикса к двум различным префиксам, имеющим одинаковый хеш. В 2009 году было показано, что для любых двух заранее выбранных префиксов можно найти специальные суффиксы, с которыми сообщения будут иметь одинаковое значение хеша. Сложность такой атаки составляет всего 239 операций подсчета хеша[21].

Метод Ван Сяоюня и Юй Хунбо

Метод Ван Сяоюня и Юй Хунбо использует тот факт, что MD5 построен на итерационном методе Меркла-Дамгарда. Поданный на вход файл сначала дополняется, так чтобы его длина была кратна 64 байтам, после этого он делится на блоки по 64 байта каждый M0,M1,…,Mn-1. Далее вычисляется последовательность 16-байтных состояний s0,…,sn по правилу si+1=f(si,Mi), где f некоторая фиксированная функция. Начальное состояние s0 называется инициализирующим вектором.

Метод позволяет для заданного инициализирующего вектора найти две пары <math>M,M'</math> и <math>N,N'</math>, такие что <math>f(f(s,M),M')=f(f(s,N),N')</math>. Важно отметить, что этот метод работает для любого инициализирующего вектора, а не только для вектора используемого по стандарту.

Эта атака является разновидностью дифференциальной атаки, которая, в отличие от других атак этого типа, использует целочисленное вычитание, а не XOR в качестве меры разности. При поиске коллизий используется метод модификации сообщений: сначала выбирается произвольное сообщение M0, далее оно модифицируется по некоторым правилам, сформулированным в статье, после чего вычисляется дифференциал хеш-функции, причём <math>M'_0=M_0+dM_0</math> с вероятностью 2−37. К <math>M_0</math> и <math>M'_0</math> применяется функция сжатия для проверки условий коллизии; далее выбирается произвольное <math>M_1</math>, модифицируется, вычисляется новый дифференциал, равный нулю с вероятностью 2−30, а равенство нулю дифференциала хеш-функции как раз означает наличие коллизии. Оказалось, что найдя одну пару <math>M_0</math> и <math>M'_0</math>, можно менять лишь два последних слова в <math>M_0</math>, тогда для нахождения новой пары <math>M_1</math> и <math>M'_1</math> требуется всего около 239 операций хеширования[19].

Применение этой атаки к MD4 позволяет найти коллизию меньше чем за секунду. Она также применима к другим хеш-функциям, таким как RIPEMD и HAVAL[5].

Примеры использования

Ранее считалось, что MD5 позволяет получать относительно надёжный идентификатор для блока данных. На данный момент данная хеш-функция не рекомендуется к использованию, так как существуют способы нахождения коллизий с приемлемой вычислительной сложностью[14][22].

Свойство уникальности хеша широко применяется в разных областях[23]. Стоит отметить, что приведенные примеры относятся и к другим криптографическим хеш-функциям.

С помощью MD5 проверяли целостность и подлинность скачанных файлов — так, некоторые программы поставляются вместе со значением контрольной суммы. Например, пакеты для инсталляции свободного ПООшибка Lua : attempt to index local 'entity' (a nil value)..

MD5 использовался для хеширования паролей. В системе UNIX каждый пользователь имеет свой пароль и его знает только пользователь. Для защиты паролей используется хеширование. Предполагалось, что получить настоящий пароль можно только полным перебором. При появлении UNIX единственным способом хеширования был DES (Data Encryption Standard), но им могли пользоваться только жители США, потому что исходные коды DES нельзя было вывозить из страны. Во FreeBSD решили эту проблему. Пользователи США могли использовать библиотеку DES, а остальные пользователи имеют метод, разрешённый для экспорта. Поэтому в FreeBSD стали использовать MD5 по умолчанию.[24]. Некоторые Linux-системы также используют MD5 для хранения паролей[25].

Многие системы используют базы данных для аутентификации пользователей и существует несколько способов хранения паролей[26]:

  1. Пароли хранятся как есть. При взломе такой базы все пароли станут известны.
  2. Хранятся только хеши паролей. Найти пароли можно используя заранее подготовленные таблицы хешей. Такие таблицы составляются из хешей простых или популярных паролей.
  3. К каждому паролю добавляется несколько случайных символов (их называют «соль») и результат хешируется. Полученный хеш вместе с «солью» сохраняются в открытом виде. Найти пароль с помощью таблиц таким методом не получится.

Существует несколько надстроек над MD5.

  • MD5 (HMAC) — Keyed-Hashing for Message Authentication (хеширование с ключом для аутентификации сообщения) — алгоритм позволяет хешировать входное сообщение L с некоторым ключом K, такое хеширование позволяет аутентифицировать подпись[27].
  • MD5 (Base64) — здесь полученный MD5-хеш кодируется алгоритмом Base64.
  • MD5 (Unix) — алгоритм вызывает тысячу раз стандартный MD5, для усложнения процесса. Также известен как MD5crypt[28].

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

Примечания

  1. [www.rsa.com/rsalabs/node.asp?id=2253 What are MD2, MD4, and MD5?] (англ.). RSA Laboratories (2000). Проверено 11 июля 2009. [www.webcitation.org/61AADFziE Архивировано из первоисточника 24 августа 2011].
  2. 1 2 3 4 Rivest, 1992.
  3. Boer, Bosselaers, 1993.
  4. 1 2 Hans Dobbertin. The Status of MD5 After a Recent Attack. Проверено 22 октября 2015.
  5. 1 2 3 Xiaoyun Wang, Dengguo Feng, Xuejia Lai, Hongbo Yu. [eprint.iacr.org/2004/199 Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD] (англ.) (17 августа 2004). Проверено 19 ноября 2008. [www.webcitation.org/61AAF4PT7 Архивировано из первоисточника 24 августа 2011].
  6. Arjen Lenstra, Xiaoyun Wang and Benne de Weger. [eprint.iacr.org/2005/067.pdf Colliding X.509 Certificates]. eprint.iacr.org (1 марта 2005).
  7. 1 2 Vlastimil Kli'ma. [eprint.iacr.org/2006/105 Tunnels in Hash Functions: MD5 Collisions Within a Minute] (англ.) (17 апреля 2006). Проверено 19 ноября 2008. [www.webcitation.org/61AAFv2q7 Архивировано из первоисточника 24 августа 2011].
  8. [www.kb.cert.org/vuls/id/836068 CERT Vulnerability Note VU#836068] (англ.). kb.cert.org (30 December 2008). Проверено 10 октября 2015.
  9. Tao Xie, Dengguo Feng. [eprint.iacr.org/2010/643 Construct MD5 Collisions Using Just A Single Block Of Message] (PDF) (16 декабря 2010). Проверено 16 октября 2015.
  10. [marc-stevens.nl/research/md5-1block-collision/ Marc Stevens – Research – Single-block collision attack on MD5]. Marc-stevens.nl (2012). Проверено 16 октября 2015.
  11. Иными словами, в таблице представлены по 32 бита после десятичной запятой от значений функции sin, где аргумент n в радианах.
  12. [interscience.in/IJCNS_Vol1Iss2/paper3.pdf Detection Of Phishing Websites And Secure Transactions]. Anna University (2012). Проверено 20 октября 2015.
  13. Ah Kioon, Wang, Deb Das, 2013.
  14. 1 2 3 [tools.ietf.org/html/rfc6151 Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms]. Internet Engineering Task Force (март 2011). Проверено 23 октября 2015.
  15. [www.insidepro.com/rus/passwordspro.shtml PasswordsPro]. InsidePro Software. — Программа для восстановления паролей к хешам различных типов. Проверено 19 ноября 2008. [www.webcitation.org/61AAEI0wj Архивировано из первоисточника 24 августа 2011].
  16. [md5bfcpf.sourceforge.net Проект MD5] на сайте SourceForge.net
  17. CERIAS — Security Archive. Center for Education and Research in Information Assurance and Security (июнь 2000). Проверено 19 ноября 2008.
  18. Philip Hawkes, Michael Paddon, Gregory G. Rose. [eprint.iacr.org/2004/264 Musings on the Wang et al. MD5 Collision] (англ.) (13 октября 2004). Проверено 19 ноября 2008. [www.webcitation.org/61AAFVLMw Архивировано из первоисточника 24 августа 2011].
  19. 1 2 Wang, Yu, 2005.
  20. Vlastimil Klima. [cryptography.hyperlink.cz/MD5_collisions.html MD5 collisions] (англ.). Проверено 19 ноября 2008. [www.webcitation.org/61AAGKcF4 Архивировано из первоисточника 24 августа 2011].
  21. Stevens, Lenstra, Weger, 2012.
  22. Marc Stevens, Arjen Lenstra and Benne de Weger. [www.win.tue.nl/hashclash/SoftIntCodeSign/ Vulnerability of software integrity and code signing applications to chosen-prefix collisions for MD5] (30 ноября 2007).
  23. Ilya Mironov. [research.microsoft.com/pubs/64588/hash_survey.pdf Hash functions: Theory, attacks, and applications]. Microsoft Research (14 ноября 2005).
  24. Bill Swingle. [www.nbuv.gov.ua/books/2004/freebsd/crypt.html Руководство FreeBSD (DES, MD5 и шифрование)] (2006). Проверено 20 ноября 2008. [www.webcitation.org/61AAGo23S Архивировано из первоисточника 24 августа 2011].
  25. Vicki Stanfield, Roderick W. Smith. Linux System Administration (Craig Hunt Linux Library). — 2. — Sybex, 2002. — С. 479—483. — 656 с. — ISBN 978-0782141382.
  26. Hossein Bidgoli. The Internet Encyclopedia, Volume 3. — 1. — Wiley, 2003. — С. 3—4. — 908 с. — ISBN 978-0471222019.
  27. Krawczyk, Hugo, Canetti, Ran, Bellare, Mihir. [tools.ietf.org/html/rfc2104 HMAC: Keyed-Hashing for Message Authentication]. tools.ietf.org. Проверено 5 декабря 2015.
  28. Steven Alexander. [c59951.r51.cf2.rackcdn.com/4902-1103-alexander.pdf password protection for modern operating systems]. USENIX 2004 (июнь 2004).

Литература

  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).
  • Ошибка Lua : attempt to index local 'entity' (a nil value).

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

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



Пьер после сватовства князя Андрея и Наташи, без всякой очевидной причины, вдруг почувствовал невозможность продолжать прежнюю жизнь. Как ни твердо он был убежден в истинах, открытых ему его благодетелем, как ни радостно ему было то первое время увлечения внутренней работой самосовершенствования, которой он предался с таким жаром, после помолвки князя Андрея с Наташей и после смерти Иосифа Алексеевича, о которой он получил известие почти в то же время, – вся прелесть этой прежней жизни вдруг пропала для него. Остался один остов жизни: его дом с блестящею женой, пользовавшеюся теперь милостями одного важного лица, знакомство со всем Петербургом и служба с скучными формальностями. И эта прежняя жизнь вдруг с неожиданной мерзостью представилась Пьеру. Он перестал писать свой дневник, избегал общества братьев, стал опять ездить в клуб, стал опять много пить, опять сблизился с холостыми компаниями и начал вести такую жизнь, что графиня Елена Васильевна сочла нужным сделать ему строгое замечание. Пьер почувствовав, что она была права, и чтобы не компрометировать свою жену, уехал в Москву.
В Москве, как только он въехал в свой огромный дом с засохшими и засыхающими княжнами, с громадной дворней, как только он увидал – проехав по городу – эту Иверскую часовню с бесчисленными огнями свеч перед золотыми ризами, эту Кремлевскую площадь с незаезженным снегом, этих извозчиков и лачужки Сивцева Вражка, увидал стариков московских, ничего не желающих и никуда не спеша доживающих свой век, увидал старушек, московских барынь, московские балы и Московский Английский клуб, – он почувствовал себя дома, в тихом пристанище. Ему стало в Москве покойно, тепло, привычно и грязно, как в старом халате.
Московское общество всё, начиная от старух до детей, как своего давно жданного гостя, которого место всегда было готово и не занято, – приняло Пьера. Для московского света, Пьер был самым милым, добрым, умным веселым, великодушным чудаком, рассеянным и душевным, русским, старого покроя, барином. Кошелек его всегда был пуст, потому что открыт для всех.
Бенефисы, дурные картины, статуи, благотворительные общества, цыгане, школы, подписные обеды, кутежи, масоны, церкви, книги – никто и ничто не получало отказа, и ежели бы не два его друга, занявшие у него много денег и взявшие его под свою опеку, он бы всё роздал. В клубе не было ни обеда, ни вечера без него. Как только он приваливался на свое место на диване после двух бутылок Марго, его окружали, и завязывались толки, споры, шутки. Где ссорились, он – одной своей доброй улыбкой и кстати сказанной шуткой, мирил. Масонские столовые ложи были скучны и вялы, ежели его не было.
Когда после холостого ужина он, с доброй и сладкой улыбкой, сдаваясь на просьбы веселой компании, поднимался, чтобы ехать с ними, между молодежью раздавались радостные, торжественные крики. На балах он танцовал, если не доставало кавалера. Молодые дамы и барышни любили его за то, что он, не ухаживая ни за кем, был со всеми одинаково любезен, особенно после ужина. «Il est charmant, il n'a pas de seхе», [Он очень мил, но не имеет пола,] говорили про него.
Пьер был тем отставным добродушно доживающим свой век в Москве камергером, каких были сотни.
Как бы он ужаснулся, ежели бы семь лет тому назад, когда он только приехал из за границы, кто нибудь сказал бы ему, что ему ничего не нужно искать и выдумывать, что его колея давно пробита, определена предвечно, и что, как он ни вертись, он будет тем, чем были все в его положении. Он не мог бы поверить этому! Разве не он всей душой желал, то произвести республику в России, то самому быть Наполеоном, то философом, то тактиком, победителем Наполеона? Разве не он видел возможность и страстно желал переродить порочный род человеческий и самого себя довести до высшей степени совершенства? Разве не он учреждал и школы и больницы и отпускал своих крестьян на волю?
А вместо всего этого, вот он, богатый муж неверной жены, камергер в отставке, любящий покушать, выпить и расстегнувшись побранить легко правительство, член Московского Английского клуба и всеми любимый член московского общества. Он долго не мог помириться с той мыслью, что он есть тот самый отставной московский камергер, тип которого он так глубоко презирал семь лет тому назад.
Иногда он утешал себя мыслями, что это только так, покамест, он ведет эту жизнь; но потом его ужасала другая мысль, что так, покамест, уже сколько людей входили, как он, со всеми зубами и волосами в эту жизнь и в этот клуб и выходили оттуда без одного зуба и волоса.
В минуты гордости, когда он думал о своем положении, ему казалось, что он совсем другой, особенный от тех отставных камергеров, которых он презирал прежде, что те были пошлые и глупые, довольные и успокоенные своим положением, «а я и теперь всё недоволен, всё мне хочется сделать что то для человечества», – говорил он себе в минуты гордости. «А может быть и все те мои товарищи, точно так же, как и я, бились, искали какой то новой, своей дороги в жизни, и так же как и я силой обстановки, общества, породы, той стихийной силой, против которой не властен человек, были приведены туда же, куда и я», говорил он себе в минуты скромности, и поживши в Москве несколько времени, он не презирал уже, а начинал любить, уважать и жалеть, так же как и себя, своих по судьбе товарищей.
На Пьера не находили, как прежде, минуты отчаяния, хандры и отвращения к жизни; но та же болезнь, выражавшаяся прежде резкими припадками, была вогнана внутрь и ни на мгновенье не покидала его. «К чему? Зачем? Что такое творится на свете?» спрашивал он себя с недоумением по нескольку раз в день, невольно начиная вдумываться в смысл явлений жизни; но опытом зная, что на вопросы эти не было ответов, он поспешно старался отвернуться от них, брался за книгу, или спешил в клуб, или к Аполлону Николаевичу болтать о городских сплетнях.
«Елена Васильевна, никогда ничего не любившая кроме своего тела и одна из самых глупых женщин в мире, – думал Пьер – представляется людям верхом ума и утонченности, и перед ней преклоняются. Наполеон Бонапарт был презираем всеми до тех пор, пока он был велик, и с тех пор как он стал жалким комедиантом – император Франц добивается предложить ему свою дочь в незаконные супруги. Испанцы воссылают мольбы Богу через католическое духовенство в благодарность за то, что они победили 14 го июня французов, а французы воссылают мольбы через то же католическое духовенство о том, что они 14 го июня победили испанцев. Братья мои масоны клянутся кровью в том, что они всем готовы жертвовать для ближнего, а не платят по одному рублю на сборы бедных и интригуют Астрея против Ищущих манны, и хлопочут о настоящем Шотландском ковре и об акте, смысла которого не знает и тот, кто писал его, и которого никому не нужно. Все мы исповедуем христианский закон прощения обид и любви к ближнему – закон, вследствие которого мы воздвигли в Москве сорок сороков церквей, а вчера засекли кнутом бежавшего человека, и служитель того же самого закона любви и прощения, священник, давал целовать солдату крест перед казнью». Так думал Пьер, и эта вся, общая, всеми признаваемая ложь, как он ни привык к ней, как будто что то новое, всякий раз изумляла его. – «Я понимаю эту ложь и путаницу, думал он, – но как мне рассказать им всё, что я понимаю? Я пробовал и всегда находил, что и они в глубине души понимают то же, что и я, но стараются только не видеть ее . Стало быть так надо! Но мне то, мне куда деваться?» думал Пьер. Он испытывал несчастную способность многих, особенно русских людей, – способность видеть и верить в возможность добра и правды, и слишком ясно видеть зло и ложь жизни, для того чтобы быть в силах принимать в ней серьезное участие. Всякая область труда в глазах его соединялась со злом и обманом. Чем он ни пробовал быть, за что он ни брался – зло и ложь отталкивали его и загораживали ему все пути деятельности. А между тем надо было жить, надо было быть заняту. Слишком страшно было быть под гнетом этих неразрешимых вопросов жизни, и он отдавался первым увлечениям, чтобы только забыть их. Он ездил во всевозможные общества, много пил, покупал картины и строил, а главное читал.
Он читал и читал всё, что попадалось под руку, и читал так что, приехав домой, когда лакеи еще раздевали его, он, уже взяв книгу, читал – и от чтения переходил ко сну, и от сна к болтовне в гостиных и клубе, от болтовни к кутежу и женщинам, от кутежа опять к болтовне, чтению и вину. Пить вино для него становилось всё больше и больше физической и вместе нравственной потребностью. Несмотря на то, что доктора говорили ему, что с его корпуленцией, вино для него опасно, он очень много пил. Ему становилось вполне хорошо только тогда, когда он, сам не замечая как, опрокинув в свой большой рот несколько стаканов вина, испытывал приятную теплоту в теле, нежность ко всем своим ближним и готовность ума поверхностно отзываться на всякую мысль, не углубляясь в сущность ее. Только выпив бутылку и две вина, он смутно сознавал, что тот запутанный, страшный узел жизни, который ужасал его прежде, не так страшен, как ему казалось. С шумом в голове, болтая, слушая разговоры или читая после обеда и ужина, он беспрестанно видел этот узел, какой нибудь стороной его. Но только под влиянием вина он говорил себе: «Это ничего. Это я распутаю – вот у меня и готово объяснение. Но теперь некогда, – я после обдумаю всё это!» Но это после никогда не приходило.
Натощак, поутру, все прежние вопросы представлялись столь же неразрешимыми и страшными, и Пьер торопливо хватался за книгу и радовался, когда кто нибудь приходил к нему.
Иногда Пьер вспоминал о слышанном им рассказе о том, как на войне солдаты, находясь под выстрелами в прикрытии, когда им делать нечего, старательно изыскивают себе занятие, для того чтобы легче переносить опасность. И Пьеру все люди представлялись такими солдатами, спасающимися от жизни: кто честолюбием, кто картами, кто писанием законов, кто женщинами, кто игрушками, кто лошадьми, кто политикой, кто охотой, кто вином, кто государственными делами. «Нет ни ничтожного, ни важного, всё равно: только бы спастись от нее как умею»! думал Пьер. – «Только бы не видать ее , эту страшную ее ».


В начале зимы, князь Николай Андреич Болконский с дочерью приехали в Москву. По своему прошедшему, по своему уму и оригинальности, в особенности по ослаблению на ту пору восторга к царствованию императора Александра, и по тому анти французскому и патриотическому направлению, которое царствовало в то время в Москве, князь Николай Андреич сделался тотчас же предметом особенной почтительности москвичей и центром московской оппозиции правительству.
Князь очень постарел в этот год. В нем появились резкие признаки старости: неожиданные засыпанья, забывчивость ближайших по времени событий и памятливость к давнишним, и детское тщеславие, с которым он принимал роль главы московской оппозиции. Несмотря на то, когда старик, особенно по вечерам, выходил к чаю в своей шубке и пудренном парике, и начинал, затронутый кем нибудь, свои отрывистые рассказы о прошедшем, или еще более отрывистые и резкие суждения о настоящем, он возбуждал во всех своих гостях одинаковое чувство почтительного уважения. Для посетителей весь этот старинный дом с огромными трюмо, дореволюционной мебелью, этими лакеями в пудре, и сам прошлого века крутой и умный старик с его кроткою дочерью и хорошенькой француженкой, которые благоговели перед ним, – представлял величественно приятное зрелище. Но посетители не думали о том, что кроме этих двух трех часов, во время которых они видели хозяев, было еще 22 часа в сутки, во время которых шла тайная внутренняя жизнь дома.
В последнее время в Москве эта внутренняя жизнь сделалась очень тяжела для княжны Марьи. Она была лишена в Москве тех своих лучших радостей – бесед с божьими людьми и уединения, – которые освежали ее в Лысых Горах, и не имела никаких выгод и радостей столичной жизни. В свет она не ездила; все знали, что отец не пускает ее без себя, а сам он по нездоровью не мог ездить, и ее уже не приглашали на обеды и вечера. Надежду на замужество княжна Марья совсем оставила. Она видела ту холодность и озлобление, с которыми князь Николай Андреич принимал и спроваживал от себя молодых людей, могущих быть женихами, иногда являвшихся в их дом. Друзей у княжны Марьи не было: в этот приезд в Москву она разочаровалась в своих двух самых близких людях. М lle Bourienne, с которой она и прежде не могла быть вполне откровенна, теперь стала ей неприятна и она по некоторым причинам стала отдаляться от нее. Жюли, которая была в Москве и к которой княжна Марья писала пять лет сряду, оказалась совершенно чужою ей, когда княжна Марья вновь сошлась с нею лично. Жюли в это время, по случаю смерти братьев сделавшись одной из самых богатых невест в Москве, находилась во всем разгаре светских удовольствий. Она была окружена молодыми людьми, которые, как она думала, вдруг оценили ее достоинства. Жюли находилась в том периоде стареющейся светской барышни, которая чувствует, что наступил последний шанс замужества, и теперь или никогда должна решиться ее участь. Княжна Марья с грустной улыбкой вспоминала по четвергам, что ей теперь писать не к кому, так как Жюли, Жюли, от присутствия которой ей не было никакой радости, была здесь и виделась с нею каждую неделю. Она, как старый эмигрант, отказавшийся жениться на даме, у которой он проводил несколько лет свои вечера, жалела о том, что Жюли была здесь и ей некому писать. Княжне Марье в Москве не с кем было поговорить, некому поверить своего горя, а горя много прибавилось нового за это время. Срок возвращения князя Андрея и его женитьбы приближался, а его поручение приготовить к тому отца не только не было исполнено, но дело напротив казалось совсем испорчено, и напоминание о графине Ростовой выводило из себя старого князя, и так уже большую часть времени бывшего не в духе. Новое горе, прибавившееся в последнее время для княжны Марьи, были уроки, которые она давала шестилетнему племяннику. В своих отношениях с Николушкой она с ужасом узнавала в себе свойство раздражительности своего отца. Сколько раз она ни говорила себе, что не надо позволять себе горячиться уча племянника, почти всякий раз, как она садилась с указкой за французскую азбуку, ей так хотелось поскорее, полегче перелить из себя свое знание в ребенка, уже боявшегося, что вот вот тетя рассердится, что она при малейшем невнимании со стороны мальчика вздрагивала, торопилась, горячилась, возвышала голос, иногда дергала его за руку и ставила в угол. Поставив его в угол, она сама начинала плакать над своей злой, дурной натурой, и Николушка, подражая ей рыданьями, без позволенья выходил из угла, подходил к ней и отдергивал от лица ее мокрые руки, и утешал ее. Но более, более всего горя доставляла княжне раздражительность ее отца, всегда направленная против дочери и дошедшая в последнее время до жестокости. Ежели бы он заставлял ее все ночи класть поклоны, ежели бы он бил ее, заставлял таскать дрова и воду, – ей бы и в голову не пришло, что ее положение трудно; но этот любящий мучитель, самый жестокий от того, что он любил и за то мучил себя и ее, – умышленно умел не только оскорбить, унизить ее, но и доказать ей, что она всегда и во всем была виновата. В последнее время в нем появилась новая черта, более всего мучившая княжну Марью – это было его большее сближение с m lle Bourienne. Пришедшая ему, в первую минуту по получении известия о намерении своего сына, мысль шутка о том, что ежели Андрей женится, то и он сам женится на Bourienne, – видимо понравилась ему, и он с упорством последнее время (как казалось княжне Марье) только для того, чтобы ее оскорбить, выказывал особенную ласку к m lle Bоurienne и выказывал свое недовольство к дочери выказываньем любви к Bourienne.
Однажды в Москве, в присутствии княжны Марьи (ей казалось, что отец нарочно при ней это сделал), старый князь поцеловал у m lle Bourienne руку и, притянув ее к себе, обнял лаская. Княжна Марья вспыхнула и выбежала из комнаты. Через несколько минут m lle Bourienne вошла к княжне Марье, улыбаясь и что то весело рассказывая своим приятным голосом. Княжна Марья поспешно отерла слезы, решительными шагами подошла к Bourienne и, видимо сама того не зная, с гневной поспешностью и взрывами голоса, начала кричать на француженку: «Это гадко, низко, бесчеловечно пользоваться слабостью…» Она не договорила. «Уйдите вон из моей комнаты», прокричала она и зарыдала.
На другой день князь ни слова не сказал своей дочери; но она заметила, что за обедом он приказал подавать кушанье, начиная с m lle Bourienne. В конце обеда, когда буфетчик, по прежней привычке, опять подал кофе, начиная с княжны, князь вдруг пришел в бешенство, бросил костылем в Филиппа и тотчас же сделал распоряжение об отдаче его в солдаты. «Не слышат… два раза сказал!… не слышат!»
«Она – первый человек в этом доме; она – мой лучший друг, – кричал князь. – И ежели ты позволишь себе, – закричал он в гневе, в первый раз обращаясь к княжне Марье, – еще раз, как вчера ты осмелилась… забыться перед ней, то я тебе покажу, кто хозяин в доме. Вон! чтоб я не видал тебя; проси у ней прощенья!»