Autenticação SASL (Postfix) com senhas pré-criptografadas MySQL e Blowfish

1

Eu tenho um aplicativo Rails com a gema de autenticação do Devise executando o registro e o login do usuário. Eu quero usar a tabela do banco de dados que o Devise preenche quando um usuário se registra como a tabela que o Postfix usa para autenticar usuários.

A tabela tem todos os campos que o Postfix pode querer para a autenticação SASL, exceto que o Devise criptografa a senha usando o Blowfish antes de colocá-la no banco de dados.

Como eu poderia fazer com que o Postfix / SASL descriptografasse essas senhas para que o usuário pudesse ser autenticado corretamente? Devise salga a senha, então não tenho certeza se isso ajuda.

Alguma sugestão? Eu provavelmente gostaria de fazer algo semelhante com Dovecot ou Courier, eu não estou ligado a um ainda.

    
por webo 23.02.2011 / 19:18

2 respostas

4

o postfix pode ser configurado para usar dovecot para autenticação SASL, então é melhor você começar do outro jeito em torno e descobrir se você pode obter Dovecot para processar esses hashes.

Tenha em mente que hashes são projetados para não serem "descriptografados". Quando alguém quer se logar, o aplicativo pega o sal original, a senha que o usuário fornece e recalcula o hash, se os hashes coincidirem, a senha está "certa".

Esses são apenas hashes brutos que o Devise armazena no banco de dados ou são armazenados no Formato Modular Crypt (começa com $x$... )? Se eles estiverem no formato de criptografia, o Dovecot deve ser capaz de suportá-los, desde que você especifique scheme=CRYPT . A única coisa é que eu não vejo um ID MCF para SHA-1, apenas $ 5 $, que é SHA-256 e $ 6 $, que é -512 (ambos são hashes da família SHA-2).

Como alternativa, se o Devise usar uma função acessível ao banco de dados para criar a senha (como a função PASSWORD () do MySQL), você poderá criar uma consulta de banco de dados personalizada para autenticação usando o conector de banco de dados do servidor de correio, que dá a você a capacidade de fazer algo como

SELECT NULL AS password, 'Y' as nopassword, userid AS user FROM users WHERE userid = '%u' AND mysql_pass = password('%w')
    
por 23.02.2011 / 21:24
1

Não tenho certeza se isso funcionaria para você ou não, mas na RSA na outra semana havia uma empresa com o Transparent Data Encryption para mySQL no Linux. Eu nunca vi uma boa maneira de fazer isso antes, mas esses caras parecem ter isso.

Eles criptografam para o disco enquanto o mySQL está gravando e decriptografando conforme os dados são solicitados. Nenhuma alteração no aplicativo ou na estrutura de dados. Empresa é Gazzang, o site é www.gazzang.com.

Espero que isso ajude.

    
por 25.02.2011 / 00:16