Autenticação com Dovecot, SHA512 e sais

3

Eu tenho um banco de dados que tem um nome de usuário, senha e senha sal nele. A senha está com hash usando o SHA512.

Os dados no banco de dados de meus usuários são assim:

usuário = testuser

password_hash = 4acf9dc364843d1adfadfadf42de7d5707b791cc3ee8a2013f15efa8bdb

password_salt = QYhZ47zsQA =

Estou tentando autenticar esse banco de dados usando a autenticação sqv do dovecot e o SSHA512. Liguei o debugs de autenticação e vejo isso em 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>

Eu também tentei fazer um teste de autenticação que também falha:

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

Infelizmente, a documentação dovecot não abrange exatamente como autenticar contra hashes salgados. Eu sinto que eu preciso dizer ao pombeiro que o meu hash de senha é hexadecimal SHA512 e meu sal é 8 bytes de base64. No entanto, não tenho ideia de como dizer ao pombal para usar o sal. Como posso usar sais ao autenticar o pombal?

    
por Tom Freezers 02.02.2015 / 19:09

1 resposta

3

Para a senha de pesquisa SQL, o dovecot tem documentação adicional aqui . Para obter informações adicionais, você pode ler um tópico sobre SO: Como gerar com segurança hashes SSHA256 ou SSHA512 no PHP? . Nessa resposta, presumo que você use o MySQL para banco de dados.

Para corresponder ao esquema de autenticação dovecot e ao seu esquema de autenticação personalizado, um dos métodos é que a sua consulta deve ser retornada password field que contém

{SSHA512.HEX}HashofPasswordandSaltinHEXformatSaltinHEXformattoo

Com a manipulação de strings do SQL, podemos construir uma consulta como essa

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

Coloque a consulta acima no parâmetro password_query no arquivo de configuração dovecot-sql.

Na consulta acima, construímos a sequência de caracteres especial por meio da concat . Claro que porque você tem um formato diferente para sal e hash, então devemos convertê-lo por decodificação base-64 então codificação hexadecimal .

Parece que a discussão aqui foi feita em esta página com informações mais completas e abrangentes.

    
por 04.02.2015 / 09:01