PBKDF2 interoparabilidade java e javascript (node-forge)
O PBKDF2 é uma função de derivação de chave com base em senha. As funções de derivação são utilizadas para reduzir as vulnerabilidades de ataques de força bruta.
No frontend eu utilizo o forge-js e no backend utilizo o java. Para trabalhar com PBKDF2 em ambos é necessário alinhar a função para que ambos utilizem os mesmos parametros.
A função PBKDF2 pode ser descrita como:
1 | DK = PBKDF2(PRF, Password, Salt, c, dkLen) |
Onde DK é a chave gerada, o Salt é uma sequência de bits no caso eu uso os bytes de uma string, o password é uma string , c é o número de iterações desejadas e PRF é uma função pseudo-randômica. O segredo é definir no java a mesma PRF do forge-js que por padrão usa o HMAC-SHA1.
Abaixo segue a configuração que utilizo.
1 | public static byte[] hashPassword( final char[] password, final byte[] salt, final int iterations, final int keyLength ) { |
Em java tem que usar uma instância PBKDF2WithHmacSHA1 .
Em java o keyLength é em bits no javascript é me bytes.
1 | let derivedKey = forge.pkcs5.pbkdf2("teste", "123", 4096, 16) |