Skip to content

Commit

Permalink
Synced some files with EN, partially translated string.xml
Browse files Browse the repository at this point in the history
  • Loading branch information
mproshchuk committed Nov 19, 2024
1 parent 015ede7 commit 7d0528d
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 144 deletions.
161 changes: 78 additions & 83 deletions faq/passwords.xml
Original file line number Diff line number Diff line change
@@ -1,155 +1,150 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf Maintainer: mproshchuk Status: ready -->
<!-- EN-Revision: f012b2761819e0ab25ff8cf4bac6655cfbc6fcff Maintainer: mproshchuk Status: ready -->
<chapter xml:id="faq.passwords" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Безпечне гешування паролів</title>
<titleabbrev>Гешування паролів</titleabbrev>

<para>
<simpara>
Цей розділ пояснює причини використання геш-функцій для убезпечення паролів,
а також, як це зробити ефективно.
</para>
</simpara>

<qandaset>
<qandaentry xml:id="faq.passwords.hashing">
<question>
<para>
Навіщо мені гешувати користувацькі паролі моєї програми?
</para>
<simpara>
Навіщо гешувати користувацькі паролі?
</simpara>
</question>
<answer>
<para>
<simpara>
Гешування паролів є основним захисним заходом, що вживається під час
розробки програми, яка буде приймати паролі від користувачів. Без
гешування будь-які паролі, що містяться у вашій базі даних, можуть бути
вкрадені, якщо базу даних зламають, та негайно використані для зламу всієї
вашої програми, а також облікових записів ваших користувачів у інших
сервісах, якщо користувачі задали не унікальні паролі.
</para>
<para>
Застосовуючи алгоритм гешування користувацьких паролів перед зберіганням
їх у вашій базі даних, ви унеможливлюєте викриття зловмисником
оригінального пароля, маючи при тому змогу у майбутньому порівнювати
розробки програми або сервісу, що приймає паролі від користувачів. Без
гешування будь-які збережені паролі можуть бути вкрадені, якщо сховище
даних зламають, та негайно використані для зламу програми чи сервісу і
облікових записів користувачів у інших сервісах, де використано такі ж
паролі.
</simpara>
<simpara>
Застосування алгоритму гешування користувацьких паролів перед збереженням
унеможливлюєте викриття зловмисником оригінального пароля, маючи при тому змогу у майбутньому порівнювати
отриманий геш з наявним.
</para>
<para>
Важливо підкреслити, що гешування паролів лише захищає їх від того, щоб
бути скомпрометованими у вашому сховищі даних, але аж ніяк не захищає їх
від перехоплення зловмисним кодом, впровадженим у вашу програму.
</para>
</simpara>
<simpara>
Важливо підкреслити, що гешування паролів лише захищає їх від розкриття
у сховищі даних, але не від перехоплення зловмисним кодом, вживленим у
програму або сервіс.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.fasthash">
<question>
<para>
<simpara>
Чому такі поширені геш-функції як <function>md5</function> і
<function>sha1</function> не придатні для паролів?
</para>
</simpara>
</question>
<answer>
<para>
<simpara>
Алгоритми гешування MD5, SHA1 та SHA256 розроблені бути дуже швидкими та
ефективними. З сучасною технікою та комп'ютерним обладнанням стало
легко зламати результат цих алгоритмів, щоб визначити початковий текст.
</para>
<para>
Через те, як швидко сучасні комп'ютери можуть запустити такий алгоритм в
зворотньому напрямку, багато фахівців з безпеки наполягають не
використовувати таке гешування.
</para>
легко <quote>зламати</quote> результат цих алгоритмів, щоб визначити
початковий текст.
</simpara>
<simpara>
Через те, як швидко сучасні комп'ютери можуть запустити такий алгоритм
<quote>у зворотньому напрямку</quote>, багато фахівців з безпеки
наполягають не використовувати таке гешування.
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.bestpractice">
<question>
<para>
Як мені гешувати паролі, якщо поширені геш-функції не придатні.
</para>
<simpara>
Як гешувати паролі, якщо поширені геш-функції не придатні.
</simpara>
</question>
<answer>
<para>
<simpara>
Під час гешування паролів двома найважливішими факторами є витрати на
обчислення та т. зв. "сіль". Чим більше обчислень має виконати алгоритм,
тим довше триватиме злам результату його обчислень.
</para>
<para>
</simpara>
<simpara>
PHP має
<link linkend="book.password">вбудований API гешування паролів</link>,
який надає засоби як
<link linkend="function.password-hash">гешування</link>, так і
<link linkend="function.password-verify">перевірки паролів</link>
безпечним способом.
</para>
<!-- TODO Drop mention of crypt? -->
<para>
Інший спосіб — це функція <function>crypt</function>, яка підтримує
декілька алгоритмів гешування. Використовуючи цю функцію, ви гарантовано
оберете доступний алгоритм, адже PHP має власну реалізацію кожного
підтримуваного алгоритму, навіть якщо один або декілька не підтримуються
вашою системою.
</para>
<para>
</simpara>
<simpara>
Для гешування паролів рекомендується алгоритм Blowfish, який стандартно
використовується API гешування паролів, оскільки він є набагато дорожчим
в обчисленні, аніж MD5 або SHA1, залишаючись масштабованим.
</para>
<para>
Зауважте, якщо ви використовуєте <function>crypt</function> для перевірки
пароля, вам необхідно подбати про запобігання часових атак, використовуючи
однаковий час для порівняння рядків. Ані
<link linkend="language.operators.comparison">оператори == і ===</link>,
ані <function>strcmp</function> не виконують порівняння за однаковий
проміжок часу. Тільки <function>password_verify</function> зробить це для
вас, тож дуже просимо використовувати
<link linkend="book.password">вбудований API гешування паролів</link> за
</simpara>
<simpara>
Функція <function>crypt</function> також може гешувати паролі, але
рекомендовано використовувати її тільки для підтримки сумісності з іншими
системами. Натомість краще використовувати <link
linkend="book.password">вбудований API гешування паролів</link> за
будь-якої можливості.
</para>
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.passwords.salt">
<question>
<para>
<simpara>
Що таке "сіль"?
</para>
</simpara>
</question>
<answer>
<para>
<simpara>
Криптографічна сіль — це текст, який дописується до даних у процесі
гешування, щоб унеможливити пошук результатів у списку попередньо
обчислених пар гешів та їхніх вхідних даних, відомого як райдужна таблиця.
</para>
<para>
</simpara>
<simpara>
Простими словами, сіль — це допоміжна частинка даних, яка значно ускладнює
злам ваших гешів . Існує певна кількість онлайн сервісів з надання
розширених списків попередньо обчислених гешів, а також їхніх вхідних
даних. Використання солі робить малоймовірним або неможливим знаходження
отриманого гешу в одному з цих списків.
</para>
<para>
</simpara>
<simpara>
<function>password_hash</function> створить випадкову сіль, коли та не
вказана, і це, як правило, найпростіший і найбезпечніший підхід.
</para>
</simpara>
</answer>
</qandaentry>
<qandaentry xml:id="faq.password.storing-salts">
<question>
<para>
Як мені зберігати цю сіль?
</para>
<simpara>
Де сіль зберігається?
</simpara>
</question>
<answer>
<para>
<simpara>
У <function>password_hash</function> або <function>crypt</function>
значення, що повертається, містить сіль як частину утвореного гешу. Це
значення має бути точно збережене у вашій базі даних, оскільки воно
містить інформацію про геш-функцію, яка використовувалася, і потім може
бути надано безпосередньо до <function>password_verify</function> або
<function>crypt</function> під час перевірки паролів.
</para>
<para>
На наступній діаграмі показано формат значення, що повертається функціями
<function>crypt</function> або <function>password_hash</function>. Як
можна побачити, значення є самодостатнім, з усією інформацією про
алгоритм і сіль, необхідну для майбутньої перевірки пароля.
</para>
значення потрібно точно зберігати у базі даних, оскільки воно містить
інформацію про геш-функцію, яка використовувалася, і потім може бути
передано безпосередньо до функції <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>
Expand Down
Loading

0 comments on commit 7d0528d

Please sign in to comment.