Соль (криптография): различия между версиями
[непроверенная версия] | [непроверенная версия] |
Статью "Затравка" удалили еще в начале года. |
|||
Строка 31: | Строка 31: | ||
При несанкционированном доступе к базе данных или удачной [[SQL-инъекция|SQL-инъекции]] злоумышленник получит данные о доступе одного или нескольких пользователей. Если бы пароли хранились в изначальном виде, злоумышленник мог бы попробовать использовать их для доступа к другим ресурсам (таким образом происходит защита пользователя сайта от взлома профилей в других системах — у него будет время на смену паролей, пока злоумышленник занят подбором.) |
При несанкционированном доступе к базе данных или удачной [[SQL-инъекция|SQL-инъекции]] злоумышленник получит данные о доступе одного или нескольких пользователей. Если бы пароли хранились в изначальном виде, злоумышленник мог бы попробовать использовать их для доступа к другим ресурсам (таким образом происходит защита пользователя сайта от взлома профилей в других системах — у него будет время на смену паролей, пока злоумышленник занят подбором.) |
||
Существует множество функций для создания хешей как сложных, так и простых, к тому же каждый может написать свою реализацию. Однако, всё сводится к тому, как быстро будет получен доступ к использованию такой же хеширующей функции и генерированию радужной таблицы. |
Существует [[Хеширование#.D0.92.D0.B8.D0.B4.D1.8B .C2.AB.D1.85.D0.B5.D1.88-.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9.C2.BB|множество функций]] для создания хешей как сложных, так и простых, к тому же каждый может написать свою реализацию. Однако, всё сводится к тому, как быстро будет получен доступ к использованию такой же хеширующей функции и генерированию радужной таблицы. |
||
Одной из важнейших миссий соли — сделать разными хеши паролей в том случае, если двое указали одинаковый пароль, тем самым усложнив перебор. Это же актуально при условии, что одному человеку позволено иметь несколько профилей. |
Одной из важнейших миссий соли — сделать разными хеши паролей в том случае, если двое указали одинаковый пароль, тем самым усложнив перебор. Это же актуально при условии, что одному человеку позволено иметь несколько профилей. |
Версия от 21:36, 20 февраля 2017
Соль (также модификатор) — строка данных, которая передаётся хеш-функции вместе с паролем. Используется для удлинения строки пароля, чтобы увеличить сложность взлома.
Используется для борьбы с восстановлением паролей за один проход полного перебора (брутфорс) или с помощью предварительно построенных радужных таблиц. Соль не может защитить от брутфорса каждого отдельного пароля.
Пример использования
Например, вы хешируете и храните свои пароли в MD5. Если ваша база будет украдена — злоумышленник довольно просто восстановит большинство исходных паролей, используя заранее подготовленные радужные таблицы. Если же мы «посолим» пароль, то есть соединим строчку из 10—20 случайных символов с паролем и уже от этой строчки найдем MD5, — стандартные таблицы не будут работать, так как они не рассчитаны на поиск такой длинной строки.
Пример создания хеша с солью на PHP:
$password = 'password'; // Сам пароль
$hash1 = md5($password); // Хешируем первоначальный пароль
$salt = 'sflprt49fhi2'; // Соль
$saltedHash = md5($hash1 . $salt); // Складываем старый хеш с солью и пропускаем через функцию md5()
В данном примере соль является детерминированной строкой, в реальных проектах следует применять только динамическую соль.
Пример использования функции crypt на языке PHP:
$hash = crypt('password'); // crypt генерирует соль и хеширует, используя алгоритм по умолчанию
if (crypt($password, $hash) == $hash) { // crypt извлекает соль из существующего хеша и хеширует входящий пароль с её использованием
// Пароль верен
}
Проблемы связанные с солью и надёжностью паролей
В разделе не хватает ссылок на источники (см. рекомендации по поиску). |
При несанкционированном доступе к базе данных или удачной SQL-инъекции злоумышленник получит данные о доступе одного или нескольких пользователей. Если бы пароли хранились в изначальном виде, злоумышленник мог бы попробовать использовать их для доступа к другим ресурсам (таким образом происходит защита пользователя сайта от взлома профилей в других системах — у него будет время на смену паролей, пока злоумышленник занят подбором.)
Существует множество функций для создания хешей как сложных, так и простых, к тому же каждый может написать свою реализацию. Однако, всё сводится к тому, как быстро будет получен доступ к использованию такой же хеширующей функции и генерированию радужной таблицы.
Одной из важнейших миссий соли — сделать разными хеши паролей в том случае, если двое указали одинаковый пароль, тем самым усложнив перебор. Это же актуально при условии, что одному человеку позволено иметь несколько профилей.
Соль в системах Unix
В большинстве unix-систем в качестве односторонней функции используется системная библиотека crypt(3). Изначально эта библиотека использовала хеш-функцию на базе алгоритма DES. При этом пароль был ограничен 8 символами (по 7 бит на символ, то есть 56 бит), и использовалась 12-битная соль[1].
В 1994 году Poul-Henning Kamp на базе MD5 создал новый алгоритм хеширования паролей, который позволял использовать пароли любой длины и использовал тысячу итераций MD5[2][3]. Результатом работы функции стала строка, содержащая метку алгоритма хеширования (версию), соль и собственно хеш.
По тем временам время вычисления такого хеша выглядело достаточным для эффективного противостояния нахождению пароля полным перебором. Однако по мере роста вычислительных способностей время нахождения MD5 сильно упало. Это привело к появлению в crypt вычислительно более сложных алгоритмов и управления числом итераций[4].
Сейчас библиотека поддерживает несколько хеш-функций на базе алгоритмов: md5, sha-256, sha-512, Blowfish (в некоторых дистрибутивах Linux, OpenBSD и некоторых других UNIX-подобных системах)[5]. Результатом работы функции является строка, содержащая метку алгоритма хеширования, соль, собственно хеш и, опционально, другие данные (например, число раундов хеш-функции).
В 2012 году Poul-Henning Kamp призвал полностью отказаться от созданного им алгоритма md5crypt, как не обеспечивающего в современных условиях ощутимого увеличения времени вычисления хеша, а значит, и не защищающего от полного перебора[6].
Литература
- Robert Morris, Ken Thompson. Password security: a case history (англ.) // Communications of the ACM : журнал. — ACM New York, NY, USA, 1979. — Vol. 22, no. 11. — P. 594—597.
- B. Kaliski. PKCS #5: Password-Based Cryptography Specification Version 2.0 (англ.) (сентябрь 2000). Дата обращения: 13 июня 2012. Архивировано 2 июля 2012 года.
Примечания
- ↑ Проект OpenNet: MAN crypt (3) Библиотечные вызовы (FreeBSD и Linux)
- ↑ FreeBSD CVS log for src/lib/libcrypt/crypt.c
- ↑ Niels Provos, David Mazières. A Future-Adaptable Password Scheme . Paper - 1999 USENIX Annual Technical Conference, June 6-11, 1999, Monterey, California, USA (июнь 1999). Архивировано 9 августа 2012 года.
- ↑ Unix crypt with SHA-256/512
- ↑ crypt(3) — Linux manual page
- ↑ Md5crypt Password scrambler is no longer considered safe by author
См. также
Для улучшения этой статьи по информационным технологиям желательно:
|