Я пытаюсь выяснить, что такое безопасность, которую Drupal 6/7 использует по умолчанию для хранения паролей. Это MD5, AES, SHA? Я ничего не смог найти.
Что такое метод шифрования паролей по умолчанию Drupal?
Ответ 1
Drupal 8 и Drupal 7 используют SHA512 по умолчанию с солью. Они многократно запускают хэш через PHP hash, чтобы увеличить вычислительную стоимость генерации окончательного хэша паролей (метод безопасности, называемый stretching).
С Drupal 8 реализация объектно-ориентированная. Существует PasswordInterface, который определяет хэш-метод. По умолчанию реализация этого интерфейса находится в классе PhpassHashedPassword. Этот метод класса hash вызывает crypt метод, передаваемый в SHA512 в качестве алгоритма хеширования, пароля и генерируемой соли. Метод crypt класса почти такой же, как метод Drupal 7 _ password_crypt().
С Drupal 7 реализация разделяется на пару глобальных функций: user_hash_password() и _ password_crypt().
Drupal 6 использует MD5 без соли. Соответствующая функция user_save().
Ответ 2
Вот пример хеша из Drupal 7:
-
"pass": "$ S $Dxl65W9p07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS"
-
Символы 0-2 - это тип ($ S $- Drupal 7)
- Символ 3 - это число раундов log2 (X) в зависимости от положения char в этом списке: './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' Итак, в нашем примере "D" отобразится 15
- Символы 4-11 - это СОЛЬ
- Остальное - хэш SHA512 с использованием раундов 2 ^ X.
-
Затем двоичный результат преобразуется в строку с использованием base64.
$count = 1 < $Count_log2;
$ hash = hash ($ algo, $salt. $password, TRUE),
do {$ hash = hash ($ algo, $hash. $password, TRUE);
} while (- $count);
Весь процесс можно найти в: mydrupalsite\включает\password.inc
Ответ 3
Он может быть проверен внутри www\includes\password.inc
function user_check_password($password, $account) {
if (substr($account->pass, 0, 2) == 'U$') {
// This may be an updated password from user_update_7000(). Such hashes
// have 'U' added as the first character and need an extra md5().
$stored_hash = substr($account->pass, 1);
$password = md5($password);
}
else {
$stored_hash = $account->pass;
}
$type = substr($stored_hash, 0, 3);
switch ($type) {
case '$S$':
// A normal Drupal 7 password using sha512.
$hash = _password_crypt('sha512', $password, $stored_hash);
break;
case '$H$':
// phpBB3 uses "$H$" for the same thing as "$P$".
case '$P$':
// A phpass password generated using md5. This is an
// imported password or from an earlier Drupal version.
$hash = _password_crypt('md5', $password, $stored_hash);
break;
default:
return FALSE;
}
return ($hash && $stored_hash == $hash);
}
В нем четко написано, что "//Обычный пароль Drupal 7 с помощью sha512."
Ответ 4
Для ядра Drupal 6 этот метод использует MD5, и, насколько я понимаю, соление не используется. Для Drupal 7 используется более продвинутое хеширование. Хорошая статья об этом здесь - http://joncave.co.uk/2011/01/password-storage-in-drupal-and-wordpress/
Ответ 5
drupal 8 использует Phpass (модифицированная версия)
Drupal 7 использовать SHA-512 + соль
drupal 6 и предыдущая версия использовали md5 без соли