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 :-(