Alguém conhece uma maneira (simples) de usar PBKDF2 ou BCrypt como um hash de senha no Apache HTTPD.
O cenário geral é que tenho um recurso em /private que gostaria de restringir a um determinado grupo de usuários. Esses usuários terão senhas armazenadas em um banco de dados e verificadas usando um arquivo mod_auth_dbd
.
Eu poderiacomopara evitar o uso do SSHA.
Posso ver no Apache apr-util que existe uma função apr_password_validate
(que lida com todos os tipos de hash agora desaprovados); e em apr_crypto_openssl.c existe crypto_passphrase
uma implementação do PBKDF2.
Alguém soldou os dois juntos? (ou perdi algo óbvio em algum lugar dos documentos do Apache?)
Responder1
Então, depois de uma análise mais aprofundada, parece que tudo foi muito mais simples do que eu imaginava.
HTTPD usa a função de criptografia fornecida pelo sistema e, portanto, aproveita sua modularidade.
http://en.wikipedia.org/wiki/Crypt_(Unix)#Modular_crypt.283.29_Algorithms
Em teoria, ele suporta BCrypt diretamente (embora eu não tenha testado). Testei o SHA-512 usando o prefixo $6.
Portanto, definir uma senha conforme calculado abaixo alcança o resultado desejado:
salt = 'fGn9LR75';
puts 'quohjo5oor4ac3Deolei'.crypt('$6$' + salt);
=>
"$6$fGn9LR75$juRSrMtKBa8pdZ8tbTouUvDItoF9Fp.LVk8Kqv2ZL5T.R.q/nUQNGePve1Ge/8rDf/xqUwgpY.3F1MQ0qtauf0"
Responder2
Para futuros pesquisadores, observe que o suporte ao bcrypt foi adicionado ao Apache na versão 2.4.4, lançada em fevereiro de 2013.
$ htpasswd -nbB -C 11 nome de usuário senha nome de usuário:$2y$11$p1icdLB/EqI2z2EPt6JrQOUdy1GzHg5GdDWcwdj3MIXJLSkgrILoa