Entendendo o PBKDF2: Reforçando Senhas e Chaves com Segurança

Hugo Guilherme Gomes
TOTVS Developers
Published in
3 min readFeb 2, 2024

O PBKDF2 (Password-Based Key Derivation Function 2) é uma ferramenta valiosa para aumentar a segurança de senhas, chaves e dados confidenciais em ambientes digitais. Seguimos explorando como o PBKDF2 funciona, onde ele pode ser aplicado, sua segurança e como ele dificulta a quebra da criptografia.

O que é o PBKDF2?

O PBKDF2 é um algoritmo de derivação de chave baseado em senha. Sua função principal é transformar uma senha ou chave mestra em uma chave mais longa e complexa, adequada para uso em algoritmos de criptografia. Essa técnica é essencial para proteger informações confidenciais contra ataques de força bruta e violações de segurança.

Como o PBKDF2 é usado?

  • Armazenamento Seguro de Senhas: Em sistemas de autenticação, o PBKDF2 é usado para armazenar senhas de forma segura. Em vez de armazenar as senhas diretamente, apenas as chaves derivadas são mantidas no banco de dados. Isso dificulta a recuperação das senhas originais mesmo se o banco de dados for comprometido.
  • Proteção de Chaves de Criptografia: Chaves usadas para criptografar dados sensíveis são derivadas usando o PBKDF2. Isso protege as chaves de serem expostas em texto simples, tornando mais difícil que invasores acessem os dados protegidos.
  • Geração de Chaves Fortes: O PBKDF2 é usado para gerar chaves criptográficas fortes a partir de senhas ou chaves mestras. Essas chaves são essenciais para garantir a segurança de dados criptografados.

Onde é aconselhável utilizar o PBKDF2?

  • Sistemas de Autenticação: Em sites, aplicativos ou sistemas que requerem autenticação de usuário, o PBKDF2 é altamente recomendado para armazenar senhas de forma segura.
  • Proteção de Dados Sensíveis: Em ambientes onde dados confidenciais precisam ser protegidos, como informações pessoais, financeiras ou médicas, o uso do PBKDF2 é crucial.

Diferença entre PBKDF2 e HMAC

O HMAC (Hash-Based Message Authentication Code) e o PBKDF2 (Password-Based Key Derivation Function 2) são algoritmos criptográficos diferentes, embora ambos se baseiem em funções de hash para fornecer segurança.

  • HMAC: O HMAC é usado para autenticação de mensagens. Ele usa uma chave secreta para calcular um código de autenticação que pode ser anexado a uma mensagem para verificar a integridade e autenticidade dos dados. Frequentemente utilizado em protocolos de comunicação segura para verificar se os dados não foram alterados durante a transmissão.
  • PBKDF2: Por outro lado, o PBKDF2 é uma função de derivação de chave baseada em senha. Ele é projetado para transformar uma senha em uma chave mais longa e complexa, sendo utilizado principalmente para armazenamento seguro de senhas e geração de chaves criptográficas. O PBKDF2 usa um algoritmo HMAC iterativo para aumentar a segurança da derivação da chave.

Embora ambos os algoritmos usem o HMAC em sua implementação, eles têm propósitos distintos. Enquanto o HMAC é usado para autenticação de mensagens, o PBKDF2 é voltado para a derivação de chaves a partir de senhas. Essas diferenças de finalidade influenciam como eles são aplicados em diferentes contextos de segurança.

Segurança do PBKDF2

O PBKDF2 é considerado seguro quando configurado corretamente. A segurança depende do uso adequado de parâmetros como salt, número de iterações e algoritmo de hash. Quanto maior o número de iterações, mais difícil e demorado se torna a quebra da senha.

Dificuldade de Desfazer a Criptografia

A criptografia realizada pelo PBKDF2 é altamente resistente a ataques de força bruta. A dificuldade de desfazer a criptografia é significativamente aumentada pelo uso de salts e um grande número de iterações.

Exemplos de Códigos

Aqui está um exemplo de como usar o PBKDF2 em TLPP:

User Function encryptpbkdf2()
Local oTokenPBKDF2 := Nil

oTokenPBKDF2:= tPBKDF2():New()
//Ajusta a senha para derivar a chave
oTokenPBKDF2:setPassword("passwordparacriptografar")

//Ajusta o valor aleatório, unico para cada aplicação de PBKDF2
//que torna a derivação de chave mais segura.
oTokenPBKDF2:setSalt("ofantasticojaspion@satoco")

//Número de iterações do algoritmo PBKDF2
//quanto maior o número mais custoso será para o atacante realizar
//a força bruta na senha.
oTokenPBKDF2:setIteration(30000)

//Tamanho da chave de saída em bytes, ex: 32 bytes ou 256 bits
oTokenPBKDF2:setKeylength(32)

//Algoritmo de derivação
oTokenPBKDF2:setDigest("SHA256")
oTokenPBKDF2:encrypt()
conout("getKeyBase64 : " + cValToChar( oTokenPBKDF2:getKeyBase64() ))
FreeObj(oTokenPBKDF2)
Return

Conclusão

O PBKDF2 é uma ferramenta essencial para proteger senhas, chaves e dados confidenciais contra violações de segurança. Seus parâmetros podem ser ajustados para garantir uma segurança ainda maior. É uma solução confiável para fortalecer a segurança em ambientes digitais, proporcionando maior proteção contra ataques maliciosos.

Para maiores informações acesse https://tdn.totvs.com/display/tec/Classe+tPBKDF2

PBKDF2 seguindo a RFC2898 https://datatracker.ietf.org/doc/html/rfc2898

Abraços Hugo Guilherme Gomes.

--

--

Hugo Guilherme Gomes
TOTVS Developers

Dev na TOTVS - Departamento de Tecnologia. "Não confie, verifique..."