Рубрики

Пароли и криптографическая хеш-функция

Мы ввели и обсудили важность хешированных паролей . Чтобы создать надежные хешированные пароли, мы должны понять некоторую терминологию, связанную с этим, и тогда мы увидим, как создать надежный соленый хеш-пароль на примере в PHP.

Что такое криптографическая хеш-функция?
Криптографическая хеш-функция — это специальный класс хеш-функции, который обладает определенными свойствами, которые делают его пригодным для использования в криптографии. Это математический алгоритм, который отображает данные произвольного размера в битовую строку фиксированного размера (хеш-функцию), которая также разработана как односторонняя функция, то есть функция, которую невозможно инвертировать (Источник: Wiki ).

Если вы когда-либо просматривали коды входа в систему, скорее всего, вы видели, как разработчики использовали хеш («sha256», $ password) или даже md5 ($ password) для «защиты» паролей пользователей. Хеши паролей, сгенерированные таким образом, смехотворно легко взломать; со слабыми алгоритмами и отсутствием посола или растяжения в местах, вы почти передаете свои пароли злоумышленнику, который получает доступ.

  • Изначально MD5 был спроектирован для использования в качестве криптографической хеш-функции, и было обнаружено, что он страдает от обширных уязвимостей (Source Wiki ).
  • SHA-1 больше не считается безопасным против хорошо финансируемых противников. В 2005 году криптоаналитики обнаружили атаки на SHA-1, предполагая, что алгоритм может быть недостаточно безопасным для постоянного использования [Источник: Wiki ].
  • SHA-2 , не часто используемый в настоящее время, является преемником SHA1 и собрал 4 вида хэш-функций: SHA224, SHA256, SHA384 и SHA512. Он работает так же, как SHA1, но сильнее и генерирует более длинный хэш.
  • BlowFish — это блочный шифр с симметричным ключом, включенный в большое количество комплектов шифров и продуктов шифрования. Blowfish обеспечивает хорошую скорость шифрования в программном обеспечении, и эффективный криптоанализ этого не был найден до настоящего времени.

Что такое соление ?
Соль — это случайные данные, которые используются в качестве дополнительного входа в одностороннюю функцию, которая «хэширует» пароль или фразу-пароль. Чтобы засолить пароль, мы добавляем к нему несколько случайных символов перед хэшированием, так что один и тот же пароль будет приводить к уникальной строке каждый раз, когда она хешируется, что сводит на нет атаки радужной таблицы и делает необходимым взламывать каждый пароль в отдельности. Соли обычно хранятся рядом с хешем и должны использоваться при проверке пароля по хешам.

Password_hash () в PHP-функции солит , растягивается и по умолчанию выбирает лучшие алгоритмы хеширования для использования во время выполнения, а это означает, что нам никогда не придется беспокоиться о выборе алгоритма или даже обновлении нашего кода для более сильного алгоритма, так как время идет — если лучший алгоритм станет доступным, функция начнет использовать его для новых хэшей.

Вот пример того, как использовать эту функцию:

<?php
// PASSWORD_DEFAULT - константа, предназначенная для изменения
// со временем, как новые и более сильные алгоритмы
// добавлено в PHP.
// 'ub3rs3cur3' - пароль, который нужно использовать.
// http://php.net/manual/en/function.password-hash.php

$hash = password_hash('ub3rs3cur3', PASSWORD_DEFAULT);

  
// password_verify () проверяет, что пароль соответствует хешу
// http://php.net/manual/en/function.password-verify.php

echo password_verify('ub3rs3cur3', $hash)? 'Correct password!' 

                                        : 'Incorrect password!';

?>

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

$2y$10$Ka3/TxAu3UrGX4E8suGkKO4V43dK9CcF.BTT5P8OzOO7/PRjqFn0a
$2y$10$6kf8iQDut0i7AOx2TULi1O9I5yxdSfX/T7HRy2KbMmliaYo4fLR.i
$2y$10$fPEY1vxgP15wwpfPdA22WOhkMqvmLsZtfzn9sr3rCw2V4N1tbEyle
$2y$10$878u5R1q8tP3karLHwBbAOfax8ybPt43U3F6lG9oOV5w9yfj/k1cq

Это все, что нужно для генерации и проверки достаточно надежных паролей в PHP. На момент написания Blowfish был лучшим алгоритмом по умолчанию, и генерируется хэш из 60 символов, однако, как отмечается в справочной странице PHP (Ссылки), создание поля базы данных паролей длиной 255 символов может быть неплохой идеей для учитывают будущие алгоритмические расширения для безопасного кодирования.

Источники:
https://en.wikipedia.org/wiki/Salt_(cryptography)
http://php.net/manual/en/function.password-hash.php http://stackoverflow.com/questions/30279321/how-to-use-password-hash https://en.wikipedia.org/ вики / Cryptographic_hash_function
https://www.sitepoint.com/hashing-passwords-php-5-5-password-hashing-api/

Эта статья предоставлена Акашем Шараном . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Пароли и криптографическая хеш-функция

0.00 (0%) 0 votes