Аутентификация с Голубятней, SHA512 и солями

У меня есть база данных, которая имеет имя пользователя, пароль и соль пароля в нем. Пароль хешируется с помощью SHA512.

Данные в моей пользовательской базе данных похожи на это:

пользователь = testuser

password_hash = 4acf9dc364843d1adfadfadf42de7d5707b791cc3ee8a2013f15efa8bdb

password_salt = QYhZ47zsQA =

Я пытаюсь пройти проверку подлинности к этой базе данных с помощью аутентификации SQL голубятни и SSHA512. Я включил отладки аутентификации, и я вижу это в mail.log:

dovecot: auth-worker(8603): Debug: sql(testuser,22.22.22.22): query: SELECT username as user, password_hash as password, password_salt as salt FROM users WHERE username='testuser';
dovecot: auth-worker(8603): sql(testuser,22.22.22.22): Password mismatch
dovecot: auth-worker(8603): Debug: sql(testuser,22.22.22.22): SSHA512(testpassword) != '4acf9dc364843d1adfadfadf42de7d5707b791cc3ee8a2013f15efa8bdb'
dovecot: auth: Debug: client passdb out: FAIL#0111#011user=testuser#011salt=QYhZ47zsQA=
dovecot: auth: Debug: client in:   AUTH#0112#011PLAIN#011service=imap#011secured#011session=rZmPoRYOagBJ3Ukh#011lip=33.33.33.33#01    1rip=22.22.22.22#011lport=993#011rport=53098#011resp=AHJpY2hlZQBjY2NwdGFtdDNtcA== (previous base64 data may contain sensitive data)
dovecot: imap-login: Disconnected (auth failed, 2 attempts in 8 secs): user=<testuser>, method=PLAIN, rip=22.22.22.22, lip=33.33.33.33, TLS, session=<rZmPoRYOagBJ3Ukh>

Я также попытался сделать подлинный тест, который перестал работать также:

$ sudo doveadm auth test testuser testpassword
passdb: richee auth failed
extra fields:
  user=testuser
  salt=QYhZ47zsQA=

К сожалению, документация голубятни не касается точно, как пройти проверку подлинности против соленых хешей. Я чувствую, что должен сказать голубятне, что мой хэш пароля является шестнадцатеричным Соленым SHA512, и моя соль составляет 8 байтов base64. Однако я понятия не имею, как сказать голубятне использовать соль. Как я могу использовать соли при аутентификации голубятни?

3
задан 2 February 2015 в 20:09
1 ответ

Для пароля поиска по SQL у dovecot есть дополнительная документация здесь . Для получения дополнительной информации вы можете прочитать ветку на SO: Как безопасно генерировать хэши SSHA256 или SSHA512 в PHP? . В этом ответе я предполагаю, что вы используете MySQL для базы данных.

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

{SSHA512.HEX} HashofPasswordandSaltinHEXformat SaltinHEXformattoo

С помощью строковых манипуляций из SQL мы можем создать такой запрос

SELECT CONCAT("{SSHA512.HEX}", `hex_password`, HEX(FROM_BASE64(`salt`))) AS password FROM mytable WHERE userid = '%u'

Поместите указанный выше запрос в параметр password_query в do -sql файл конфигурации.

В приведенном выше запросе мы создаем специальную строку с помощью SQL concat . Конечно, поскольку у вас другой формат для соли и хэша, мы должны преобразовать его с помощью декодирования base-64 , затем шестнадцатеричного кодирования .


Похоже, что обсуждение здесь было повторно опубликовано на этой странице с более полной и исчерпывающей информацией.

3
ответ дан 3 December 2019 в 06:32

Теги

Похожие вопросы