1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-23 23:32:16 +01:00
Files
archived-doc-ru/faq/passwords.xml

185 lines
11 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f012b2761819e0ab25ff8cf4bac6655cfbc6fcff Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="faq.passwords" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Безопасное и надежное хеширование паролей</title>
<titleabbrev>Хеширование паролей</titleabbrev>
<simpara>
Раздел объясняет, почему пароли защищают функциями хеширования,
и как захешировать пароль так, чтобы его было трудно раскрыть.
</simpara>
<qandaset>
<qandaentry xml:id="faq.passwords.hashing">
<question>
<simpara>
Почему требуется хешировать пароли пользователей?
</simpara>
</question>
<answer>
<simpara>
Хеширование паролей — приоритетный фактор безопасности,
который учитывают при разработке приложения или службы, которые принимают
пароли пользователей. Без хеширования пароли, которые хранятся,
украдут, если хранилище данных скомпрометируют,
а затем немедленно применят для компрометации
и приложения или службы, и учётных записей пользователей в других службах,
если пользователи других служб не установили уникальные пароли.
</simpara>
<simpara>
Алгоритм, который применяют для хеширования паролей пользователей перед сохранением,
серьёзно затрудняет раскрытие исходного
пароля злоумышленником, при этом доступ к сравнению хеша с исходным паролем
в будущем сохраняется.
</simpara>
<simpara>
Важно: хеширование защищает пароли только
от компрометации в хранилище данных, но не защищает пароли от перехвата
вредоносным кодом, который внедрили в само приложение или службу.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.fasthash">
<question>
<simpara>
Почему стандартные функции хеширования наподобие <function>md5</function>
и <function>sha1</function> нельзя использовать для защиты паролей?
</simpara>
</question>
<answer>
<simpara>
Алгоритмы хеширования наподобие MD5, SHA1 и SHA256 спроектировали
быстрыми и эффективными, а данные, которые эти алгоритмы давали на выходе, затрудняли раскрытие паролей.
Но текущие техники и компьютерное оборудование сделали тривиальным перебор вывода этих алгоритмов
методом <quote>brute force</quote> (англ. букв. «грубой силы») для определения исходных входных данных.
</simpara>
<simpara>
Из-за скорости, с которой компьютеры научились <quote>обращать</quote>
эти алгоритмы хеширования, аналитики в области компьютерной безопасности
рекомендуют не использовать эти алгоритмы для хеширования паролей.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.bestpractice">
<question>
<simpara>
Как хешировать пароли, если нельзя использовать стандартные функции?
</simpara>
</question>
<answer>
<simpara>
В хешировании паролей выделяются два самых важных фактора: цена вычисления и соль.
Повышение вычислительной сложности алгоритма хеширования
увеличивает время, которое потребуется для перебора вывода алгоритма методом «грубой силы».
</simpara>
<simpara>
PHP поддерживает <link linkend="book.password">встроенный API-интерфейс хеширования паролей</link>,
который безопасно обрабатывает как <link linkend="function.password-hash">хеширование</link>,
так и <link linkend="function.password-verify">проверку паролей</link>.
</simpara>
<simpara>
Пароли рекомендуют хешировать алгоритмом Blowfish, который
также применяют по умолчанию в API-интерфейсе хеширования паролей,
поскольку этот алгоритм намного затратнее с точки зрения вычислительной сложности,
чем алгоритм MD5 или SHA1, но при этом по-прежнему масштабируем.
</simpara>
<simpara>
Функция <function>crypt</function> также доступна для хеширования
паролей, но её рекомендуют только для взаимодействия с другими системами.
Вместо этой функции рекомендуют хешировать пароли через
<link linkend="book.password">встроенный API-интерфейс хеширования паролей</link>,
когда возможно.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.salt">
<question>
<simpara>
Что такое соль?
</simpara>
</question>
<answer>
<simpara>
Криптографическая соль — данные, которые участвуют в хешировании
и которые исключают поиск вывода, который сгенерировало хеширование,
в списке предварительно вычисленных пар хешей и их входных данных,
который знают как «радужную» таблицу.
</simpara>
<simpara>
В упрощённой терминологии, соль — фрагмент дополнительных данных, которые
серьёзно затрудняют взлом хешей. Интернет наполняют службы,
которые содержат открытые списки исходных паролей и хешей, которые заранее вычислили
для этих паролей. Соли делает маловероятным или невозможным поиск
хеша в таких списках.
</simpara>
<simpara>
Функция <function>password_hash</function> создаст случайную соль, если её не передали,
и часто это доступная и одновременно безопасная защита паролей.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.password.storing-salts">
<question>
<simpara>
Как хранится соль?
</simpara>
</question>
<answer>
<simpara>
При хешировании паролей функцией <function>password_hash</function> или других строк
функцией <function>crypt</function> значение, которые возвращают функции, уже содержит соль
как часть хеша, который сгенерировали функции. Значение возврата сохраняют как есть,
поскольку хеш включает информацию о функции хеширования,
а затем без посредников передают в функцию <function>password_verify</function>
при проверке пароля.
</simpara>
<warning>
<simpara>
Вместо перехеширования и сравнения результата с хешем в хранилище,
вызывают функцию <function>password_verify</function>,
чтобы избежать атак по времени.
</simpara>
</warning>
<simpara>
Следующая диаграмма показывает формат значения, которое возвращают функции
<function>crypt</function> и <function>password_hash</function>.
На диаграмме видно, что значения содержат внутри себя информацию об алгоритме
и соли, которая требуется для будущей проверки пароля.
</simpara>
<para>
<mediaobject>
<alt>
Компоненты значения, которое возвращают функции password_hash и crypt, идут в следующем порядке:
алгоритм хеширования, опции алгоритма, соль и хеш пароля.
</alt>
<imageobject>
<imagedata fileref="en/faq/figures/crypt-text-rendered.svg" width="690" depth="192" format="SVG"/>
</imageobject>
</mediaobject>
</para>
</answer>
</qandaentry>
</qandaset>
</chapter><!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->