Мне интересно, какая система должна генерировать хэш и соль для безопасного веб-приложения.Безопасно создавать хэш и соль внутри триггера базы данных?
Есть 3 варианта в моей установке:
- (Javascript) клиент
- PHP сервер
- MySQL сервер
На данный момент я реализовал его в MySQL- сервер внутри триггера. Что он делает - это взять неподдерживаемый/нераскрытый пароль в поле под названием «PasswordHash», когда новый пользователь создан, поэтому исходный пароль находится в операторе INSERT
.
Но в INSERT Перед запуском этот пароль хэшируется (SHA1) со случайной солью (UUID), которая объединена с хешем в переменной @hashandsalt
. (Я уже выяснил, что на самом деле неплохо хранить хэш и соль в отдельных столбцах).
Затем я делаю SET NEW.PasswordHash = @hashandsalt;
, поэтому исходный пароль никогда не записывается в базу данных, а заменяется хешей + солью.
Это хорошая идея?
Я вижу проблему с протоколированием MySQL, потому что все занесено в журнал INSERT-инструкции таблицы пользователей содержат исходные пароли. В настоящий момент я не использую регистрацию MySQL по умолчанию, но на самом деле я не уверен, как MySQL хранит все входящие операторы внутри.
Что, по вашему мнению, было бы лучшим вариантом для создания хэша и соли?
Предоставляет ли ваша база данных CSPRNG или какой-либо надежный и безопасный источник случайности? Если нет, вам нужно будет генерировать соль из PHP (используя криптографически сильный источник случайности) – DavidO
Я понятия не имею, что такое CSPRING ... Я просто использую функцию UUID() как соль, которая производит что-то вроде: 5bf721f7 -8e1e-11e3-ab83-00163e54cd45 – Dylan
http://stackoverflow.com/questions/536584/non-random-salt-for-password-hashes – DavidO