Прогрессивные методы хеширования паролей. Вопросы безопасности!

Хеширование паролей с помощью API PHP 5.5

Очень большое количество разработчиков до сих пор используют в своих проектах ужасно слабые и устаревшие алгоритмы, вроде md5(), sha1(), порой даже не прибегая к "соли", или реверсии (сомнительное укрепление). Я предпочитаю BCrypt, как наилучший способ, но многие считают данный алгоритм слишком сложным. С выходом PHP 5.5 работа с данным алгоритмом значительно упрощается.

В состав API хеширования входит четыре функции:

password_hash(string $password, int $algo [, array $options(salt, cost) ]): выполняет хеширование, принимает 3 аргумента - пароль, используемый алгоритм хеширования, ассоциативный массив с опциями: salt - соль, используемая для хеширования, cost - алгоритмическая стоимость вычисления пароля. Если последний аргумент отсутствует, будет создана случайная соль и использована алгоритмическая стоимость вычисления по умолчанию. Возвращает зашифрованный пароль или FALSE в случае возникновения ошибки;

password_verify(string $password, string $hash): проверяет, соответствие пароля с заданным хэшем. Этот хэш может быть создан с помощью password_hash() или обычный crypt() хэш. Возвращает TRUE, если пароль и хэш соответствуют или в противном случае FALSE;

password_needs_rehash(string $hash, string $algo [, string $options ]): проверяет, соответствует ли предоставленный хэш заданному алгоритму и опциям. Если нет, то считается, что хэш должен быть изменён. Принимает три аргумента - проверяемый хэш, используемый алгоритм хеширования пароля, ассоциативный массив с опциями аналогичными опциям из функции password_hash(). Возвращает TRUE, если хэш должен быть изменён, чтобы соответствовать данному алгоритму и опциям, или в противном случае FALSE;

password_get_info(string $hash): Возвращает информацию о данном хэше. Возвращает ассоциативный массив с тремя элементами(ключами): алгоритм(algo), который будет соответствовать константе алгоритма пароля, название алгоритма(algoName), которое имеет человечески читаемое название алгоритма, ассоциативный массив с опциями (options), который включает в себя возможности, предоставляемые при вызове password_hash().

При создании хэша возможно использование следующих констант:

PASSWORD_BCRYPT = 1: используется для создания нового хэш пароля с использованием алгоритма CRYPT_BLOWFISH;

PASSWORD_DEFAULT = PASSWORD_BCRYPT: используется алгоритм хеширования по умолчанию, если алгоритм не задан. Он может измениться в новых версиях PHP, когда будут поддерживаться новые, более эффективные (например, Scrypt) алгоритмы хеширования.

Чем выше значение параметра cost, тем выше эффективность защиты, поэтому следует увеличивать его, в зависимости от технической оснащенности используемого оборудования. Так же одним из главных преимуществ является полная автономия параметра salt (теперь он хранится в хэше), который можно генерировать автоматически и не хранить в отдельном поле.

$options = [ 'salt' => custom_function_for_salt(), # собственный код для генерации соли 'cost' => 12 # по умолчанию используется 10 ]; $hash = password_hash($password, PASSWORD_DEFAULT, $options);
Все представленные на данном сайте статьи являются моим личным справочником, составленным на основе анализа интернет форумов и блогов, для упрощения поиска необходимой для меня информации. Содержание может корректироваться по мере поступления более свежих и простых решений. Просьба указывать ссылку на источник, при полном или частичном копировании материала!
Идет загрузка...еще чуть чуть...