Intereting Posts
Введите дату и время в Mysql Карты Google – поиск всех маркеров внутри заданного радиуса Javascript / Php RewriteRule – html broken – Как отсутствует css Хранение записей базы данных в массиве Обновите два одинаковых значения в html с одним ответом ajax Проблемы с Amazon ec2 linux Imagemagick PHP Soap ssl как доверять самозаверяющему сертификату Сбой php-сессии в приложении Android PHP / GD – обрезка и изменение размеров изображений Перенаправление пользователя с страницы входа на домашнюю страницу, если она проверена в Laravel Найти, где переменная определена в PHP (И / или SMARTY)? Как я могу переписать мой PHP и MySQL для группировки моего списка HTML равными значениями столбцов? Каков принцип автозагрузки в PHP? Вызовите 1 вид в Codeigniter, но поделитесь заголовком / нижним колонтитулом между всеми представлениями? Как я могу получить текущий месяц и предыдущие три месяца, используя PHP

Как хэш-и солевые пароли

Я понимаю, что эта тема иногда воспитывалась, но пока я не совсем уверен в этой теме.

Что мне интересно, как вы сольете хэш и работаете с соленым хешем? Если пароль зашифрован с помощью случайной сгенерированной соли, как мы можем проверить его, когда пользователь пытается аутентифицироваться? Нужно ли нам хранить сгенерированный хеш в нашей базе данных?

Существует ли какой-либо конкретный способ получения соли предпочтительно? Какой метод шифрования рекомендуется использовать? Из того, что я слышу, sha256 вполне в порядке.

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

Спасибо!

Ответ заключается не в том, чтобы сделать это самостоятельно. Однострочный, который будет делать все, что вам нужно на PHP, – использовать bcrypt.

Прочтите это, легко понять и объяснить все, что вы просили: http://codahale.com/how-to-safely-store-a-password/

bcrypt учитывает хеширование сам по себе и может быть настроен как «сложный» по мере необходимости для обеспечения целостности паролей ваших пользователей в случае взлома.

О, и мы не «шифруем» пароли, мы их хэш.

Вам нужно сохранить как хэш, так и соль, которая использовалась для вычисления хэша.

Если вы хотите проверить, соответствует ли входное значение исходному входному значению, вы можете пересчитать хэш с той же солью и сравнить сохраненный хэш с новым расчетным. Если они равны, то оба входных значения идентичны (до некоторой определенной вероятности).

Важным также является выбор алгоритма хэширования. Потому что есть быстрые алгоритмы хеширования и довольно медленные алгоритмы хэширования. И, как вы хотите сделать, трудно найти столкновение (по крайней мере в грубой силе), используйте более медленный алгоритм хэширования.

Что мне интересно, как вы сольете хэш и работаете с соленым хешем? Если пароль зашифрован с помощью случайной сгенерированной соли, как мы можем проверить его, когда пользователь пытается аутентифицироваться? Нужно ли нам хранить сгенерированный хеш в нашей базе данных?

Да. Сначала вы создаете соль, затем генерируете хэш из пароля плюс соль и сохраняете как хэш, так и соль вместе.

Существует ли какой-либо конкретный способ получения соли предпочтительно?

Я сомневаюсь, что есть консенсус относительно того, что предпочтительнее. Я использую / dev / random. например

$salt = '$2a$12$' . strtr(substr(base64_encode(shell_exec( 'dd if=/dev/random bs=16 count=1 2>/dev/null' )), 0, 22), '+', '.') . '$'; $hash = crypt($input, $salt); 

Какой метод шифрования рекомендуется использовать? Из того, что я слышу, sha256 вполне в порядке.

См. Ответ Компьютерного Гуру, т.е. используйте bcrypt, как в приведенном выше примере. См. Справочную страницу PHP в crypt() . Если bcrypt не входит в вашу систему, одним из способов получить его является патч Suhosin .

Будет ли идея, чтобы хэш «пересолился», когда пользователь аутентифицируется?

Соль просто делает словарные атаки медленнее. Если у вас есть приличная случайная соль, чтобы начать, я бы не подумал, что ее изменение часто помогает. Вам, вероятно, будет лучше инвестировать ваши усилия, чтобы пользователи могли выбирать хорошие пароли, часто меняя их и сохраняя свой параметр стоимости Blowfish с разумной стоимостью.

И, наконец, это какой-то важный стимул для безопасности, чтобы перефразировать его кучу раз?

Этот вопрос принадлежит миру криптографического дизайна. Я рекомендую вам оставить это экспертам. Другими словами: забудьте об этом – используйте самые распространенные практики.

Что вы обычно делаете, это что-то вроде:

 salted = HASH(password . key); // DON'T DO IT LIKE THIS 

Где ключ «соль» – секретный ключ, хранящийся в файлах конфигурации. Поэтому, чтобы взломать пароль, вам понадобятся секретный ключ и БД, поэтому их удобно хранить в разных местах.

Поскольку схема, которую я показал, недостаточно сильная, лучше использовать HMAC для этой цели, а затем вручную записать соление. Такая операция такая же простая, как хэш, и PHP это поддерживает.

 salted = hash_hmac('sha1',password,key); // <-- this is ok 

Смотрите это: http://php.net/manual/en/function.sha1.php

Три простых правила. Хорошо, пять:

  1. Самое главное, если вы хотите, чтобы ваше хранилище паролей было безопасным: допускайте надежные пароли только, например, не менее 8 символов с разными буквами и цифрами букв и даже пунктуационными знаками
  2. Разрешить пользователям использовать только надежные пароли. Сделайте процедуру проверки длины и диапазона символов и откажитесь от слабых паролей. Даже получите себе John the ripper database и проверьте его.
  3. Пытливые пользователи злобно бьют их, пока они не выбирают хорошие длинные и случайные пароли. Пароли! Не соль, из которой каждый рад говорить часами, но сам пароль должен быть случайным!
  4. Солируйте свои пароли и храните эту соль вместе с информацией о пользователе. вы можете использовать электронную почту пользователя и имя пользователя как идеальную соль, не нужно изобретать что-то необычное случайное.
  5. Определенный алгоритм не так важен, вы можете использовать MD5. В реальном мире очень мало людей, которые будут беспокоиться о взломе базы данных пользователей ваших знаменитых форумов по форуму для любителей рыбалки и баскетбола.