PBKDF2: o que é e como funciona
Uma forma de transformar uma senha em uma chave forte, deixando cada tentativa de adivinhar a senha propositalmente lenta.
Derivação de chave
Transforma uma senha em uma chave de tamanho fixo.
Seguro
É seguro com um sal aleatório e muitas iterações.
Chave
A senha, um sal aleatório de 16 bytes e o número de iterações.
O que é
PBKDF2 (Password-Based Key Derivation Function 2) é uma função de derivação de chave. Ela faz parte do padrão PKCS #5, da RSA Laboratories, publicado pela IETF e hoje mantido como RFC 8018.
Senhas são curtas e previsíveis, e não servem diretamente como chave de criptografia. O PBKDF2 transforma a senha em uma chave do tamanho certo e, principalmente, torna cada tentativa de adivinhação cara para um atacante.
Como funciona
O PBKDF2 aplica o HMAC à senha e a um sal, e depois aplica o HMAC de novo ao resultado, milhares ou milhões de vezes. Os resultados de todas as rodadas são combinados para formar a chave.
O sal é um valor aleatório, diferente para cada senha, guardado junto com o resultado. Ele faz com que duas pessoas com a mesma senha tenham resultados diferentes e impede o uso de tabelas pré-calculadas.
O número de iterações define o custo. A OWASP recomenda 600.000 iterações com HMAC-SHA-256. Para quem digita a senha, isso leva uma fração de segundo. Para quem tenta bilhões de senhas, multiplica o trabalho por 600 mil.
Exemplo
Um exemplo conhecido usa a senha "password", o sal "salt" e uma única iteração, e gera 120fb6cffcf8b32c43e7225256c4f837a86548c92ccc35480805987cb70be17b com HMAC-SHA-256.
No playground desta página, escolha PBKDF2, digite uma senha e clique em "Derivar chave". O navegador gera um sal novo e faz 600.000 iterações. Depois, troque uma letra em "Texto para verificar" e clique em "Verificar": a chave derivada não confere. É assim que um sistema confere a senha de um usuário sem guardá-la.
Onde é usado
O Wi-Fi com WPA2 pessoal usa o PBKDF2 com 4096 iterações e o nome da rede como sal para transformar a senha do Wi-Fi em chave. O framework Django usa o PBKDF2 com SHA-256 para guardar as senhas dos usuários por padrão.
Gerenciadores de senhas, como o Bitwarden, usam o PBKDF2 para transformar a senha mestra em chave, e muitos sistemas de criptografia de arquivos fazem o mesmo. O PBKDF2 também é aceito em normas do governo americano, o que ajuda em ambientes regulados.
Pontos fortes e fracos
Pontos fortes: é simples, padronizado, existe no navegador e em todas as linguagens, e o custo pode crescer com o tempo, aumentando as iterações.
Pontos fracos: o PBKDF2 usa pouca memória. Placas de vídeo e chips especializados conseguem rodar milhares de tentativas em paralelo, o que reduz a proteção. Funções mais novas, como o Argon2, vencedor de uma competição internacional de 2015, e o scrypt exigem muita memória em cada tentativa e resistem melhor a esse tipo de ataque.
Quando usar
Para guardar senhas em um sistema novo, prefira o Argon2id. Use o PBKDF2 quando ele é o que a plataforma oferece, como no navegador, ou quando uma norma o exige.
Se usar o PBKDF2, gere um sal aleatório de pelo menos 16 bytes para cada senha, use pelo menos 600.000 iterações com HMAC-SHA-256, guarde o sal e o número de iterações junto com o resultado e compare os resultados em tempo constante.
Teste os algoritmos
Escolha um algoritmo, escreva um texto e veja como ele fica. Tudo acontece no seu navegador e nada é salvo.
Criptografia
Hash
Autenticação e assinatura
Troca e derivação de chaves
Codificação
Cifras clássicas
PBKDF2
SeguroDerivação de chave
Transforma uma senha em uma chave, repetindo o HMAC centenas de milhares de vezes com um sal. Isso torna cada tentativa de adivinhar a senha mais lenta.
Veja também
Precisa enviar um segredo?
Use uma nota segura: o texto é criptografado com AES-256-GCM e se apaga sozinho.