É possível converter hash de senha sha512 com linux salgado para o formato LDAP?

4

Temos um servidor LDAP que armazena senhas e outros dados do usuário. O servidor não é usado para autenticação de máquinas cliente, mas apenas para autenticação de aplicativos clientes. Assim, os usuários alteram suas senhas localmente em seus clientes.
Contanto que usássemos o crypt, eu poderia apenas armazenar os hashes do linux como {CRYPT} $ hash no LDAP e ele funcionaria bem.
Agora as senhas são armazenadas como hashes sha512 salgados. e o formato da senha em / etc / shadow é assim:

printf( "$6$%s$%s", $salt, $hash )  

$ salt parece ser apenas uma string ASCII
Eu acho que $ hash o resultado codificado em base64 do resumo sha512 da concatenação de $ plainPW e $ salt, mas não tenho certeza.

O LDAP armazena hashes de senha assim:

printf( "{SSHA512}%s", $_96byteString )  

em que $ _96byteString é o resultado codificado em base64 da concatenação de 512bits do $ saltedPWhash e $ salt

Eu tentei basear64_decode o $ hash, acrescentar o $ salt, base64_encode o resultado e armazená-lo como $ _96byteString no formato LDAP acima.
Alas LDAP não consegue autenticar com isso, um simples ldapbind simplesmente falha.

Alguém sabe como converter hashes linux sha512 para que o servidor LDAP o aceite como válido?

Eu descobri que o linux crypt usa uma codificação diferente de base64 do que o padrão mime.
O padrão usa [A-Za-z0-9 + /] enquanto o cripta usa [./0-9A-Za-z]. Então eu tentei converter com tr mas o resultado ainda falha :-(

    
por user333869 08.03.2016 / 13:43

1 resposta

0

A resposta curta é não, você não pode recodificar diretamente um hash de senha para outro se não souber senhas originais e não usar força bruta ou qualquer outro ataque. Mas você pode criar camadas transparentes, que convertem hashes se a senha estiver correta.

A pergunta foi feita muitas vezes, como aqui .

No meu software eu uso a biblioteca passlib que pode fazer esta operação sem a minha interceptação.

    
por 21.03.2016 / 15:33