0Pricing
Security+ Academy · Aula

Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2

Compare algoritmos de hash de senhas quanto à resistência a ataques de GPU e ASIC e entenda como os fatores de trabalho e a dureza de memória são ajustados.

Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2 é uma aula grátis de Security+ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Security+ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Security+ Academy inclui 4 aulas no total.

Por que o hash de senhas é diferente

Armazenar senhas exige uma classe especial de função criptográfica chamada função de hash de senhas (PHF) ou função de derivação de chaves (KDF). Hashes criptográficos comuns, como SHA-256, são projetados para serem rápidos — uma GPU moderna pode calcular bilhões de hashes SHA-256 por segundo. Essa velocidade é catastrófica para o armazenamento de senhas: um invasor que roubar um banco de dados de hashes poderá testar bilhões de tentativas por segundo. As KDFs de senhas são intencionalmente lentas, ajustáveis para tornar ataques de força bruta computacionalmente inviáveis e, ao mesmo tempo, permitir um login legítimo em milissegundos.

Uso de salt: eliminando tabelas arco-íris

Antes de existirem KDFs específicas para senhas, os invasores usavam tabelas arco-íris — mapeamentos pré-computados de valores de hash para senhas em texto simples. Um salt é um valor aleatório exclusivo para cada usuário, acrescentado antes ou depois da senha antes do cálculo do hash, fazendo com que cada hash seja único mesmo para senhas idênticas. Os salts são armazenados junto com o hash no banco de dados — não são secretos, apenas aleatórios. Um salt adequado deve ter pelo menos 16 bytes, ser gerado por um gerador de números aleatórios criptograficamente seguro e ser armazenado por usuário (nunca reutilizado entre contas).

PBKDF2: o padrão para senhas

PBKDF2 (Password-Based Key Derivation Function 2) é definido na RFC 8018 e aprovado pelo NIST. Ele funciona aplicando repetidamente uma função HMAC (geralmente HMAC-SHA-256) à senha e ao salt, durante um número configurável de iterações. A quantidade de iterações é o fator de trabalho — o NIST recomenda pelo menos 600.000 iterações de PBKDF2-HMAC-SHA256 desde 2023. O PBKDF2 é amplamente usado (Django, iOS Keychain, WPA2-PSK), mas tem uma fraqueza: pode ser implementado com eficiência em GPUs, tornando-o menos resistente a GPUs que as alternativas.

# PBKDF2 example (Python pseudocode concept)
# import hashlib
# dk = hashlib.pbkdf2_hmac(
#   'sha256',         # hash algorithm
#   b'password',      # password bytes
#   b'random_salt',   # salt bytes
#   600000            # iterations
# )

bcrypt: resistência a memória e CPU

O bcrypt foi projetado por Niels Provos e David Mazieres em 1999 e continua sendo amplamente usado. Sua principal inovação é um fator de custo (parâmetro de rodadas), em que cada incremento dobra o tempo de computação. O bcrypt usa uma cifra Blowfish modificada com uma configuração de chave Eksblowfish que exige muitos recursos de CPU e memória, tornando significativamente mais difícil acelerá-lo em GPUs em comparação com o PBKDF2. O bcrypt também limita a entrada da senha a 72 bytes (senhas maiores são truncadas), o que exige aplicar SHA-256 primeiro a senhas longas em algumas implementações.

# bcrypt cost factor
# Cost 10 = ~100ms on modern hardware
# Cost 12 = ~400ms
# Cost 14 = ~1600ms
# Each +1 doubles the work
# Recommended: cost 12-14 for web apps
# Command: htpasswd -bnBC 12 username password

Argon2: o vencedor moderno

O Argon2 venceu a Password Hashing Competition em 2015 e é a recomendação atual da OWASP. Ele possui três variantes: Argon2d (mais rápido, vulnerável a canais laterais, ideal para criptomoedas), Argon2i (em tempo constante, ideal para hash de senhas) e Argon2id (híbrido, recomendado para a maioria dos usos). O Argon2id pode ser configurado em três dimensões: custo de tempo (iterações), custo de memória (RAM necessária) e paralelismo (threads). Os altos requisitos de memória tornam extremamente difícil paralelizá-lo em GPUs e completamente inviável em ASICs.

# Argon2id recommended parameters (OWASP 2023)
# Memory: 64MB (65536 KiB)
# Iterations: 3
# Parallelism: 4 threads
# Output length: 32 bytes
# argon2 -id -t 3 -m 16 -p 4 -l 32

Resistência à memória: por que ela derrota ataques de GPU

As GPUs têm milhares de núcleos, mas memória limitada por núcleo — são excelentes para paralelizar computações simples que exigem pouca memória. Funções resistentes à memória, como Argon2 e scrypt, exigem grandes quantidades de RAM para cada cálculo de hash. Se um invasor quiser executar 10.000 cálculos de Argon2id em paralelo, cada um exigindo 64 MB de memória, precisará de 640 GB de RAM de GPU — muito além do que qualquer agrupamento de GPUs tem disponível. Essa propriedade, chamada resistência à memória, força os invasores a usar computações lentas e sequenciais ou investir em custos extraordinários de hardware que tornam os ataques antieconômicos.

Ajuste do fator de trabalho na prática

O fator de trabalho adequado depende do seu hardware e da latência aceitável. A meta geral é de 100 a 300 ms no hardware de produção do servidor para cada autenticação. À medida que o hardware melhora, você deve aumentar o fator de trabalho — por isso o bcrypt e o Argon2 armazenam os parâmetros junto com o hash, permitindo atualizações transparentes: no próximo login, verifique a senha e depois calcule novamente o hash com os novos parâmetros mais altos. A OWASP mantém os parâmetros mínimos recomendados atuais para PBKDF2, bcrypt e Argon2id, que devem ser revisados anualmente.

scrypt: a outra KDF resistente à memória

O scrypt, projetado por Colin Percival em 2009, foi a primeira KDF resistente à memória amplamente adotada e é usado pelo Litecoin e por muitos gerenciadores de senhas. O scrypt é parametrizado por N (custo de CPU/memória), r (tamanho do bloco) e p (fator de paralelização). Assim como o Argon2, valores altos de N exigem grandes quantidades de RAM por cálculo. O scrypt é considerado seguro, mas o Argon2id geralmente é preferido para novas aplicações porque venceu a PHC e recebeu mais análises criptográficas. Ambas são escolhas aceitáveis.

O que NÃO usar: MD5, SHA-1 e SHA sem salt

Várias abordagens de hash nunca devem ser usadas para senhas: MD5 (quebrado, bilhões de hashes por segundo em hardware comum), SHA-1 (o mesmo problema), SHA-256 sem salt (rápido, tabelas arco-íris triviais) e criptografia simples (reversível; o roubo da chave equivale ao roubo de todas as senhas). Vazamentos históricos, como o do LinkedIn (2012), usaram SHA-1 sem salt, expondo 117 milhões de senhas que foram quebradas em poucos dias. A Adobe (2013) criptografou, em vez de aplicar hash às senhas — um mal-entendido fundamental que expôs 153 milhões de contas. Esses incidentes fazem parte do conteúdo programático do exame Security+.

Derivação de chaves para chaves de criptografia

As KDFs também são usadas para derivar chaves de criptografia a partir de senhas (em vez de armazenar hashes de senhas). Quando um usuário define uma senha mestra para um cofre criptografado, o aplicativo usa uma KDF para derivar a chave de criptografia AES-256 real a partir dessa senha. É por isso que os gerenciadores de senhas podem descriptografar seu cofre localmente — eles executam a KDF com sua senha mestra para reconstruir a chave de criptografia, que nunca sai do seu dispositivo. A HKDF (função de derivação de chaves baseada em HMAC) é o padrão para derivar várias chaves a partir de um único segredo de alta entropia, usado no TLS 1.3 para derivar chaves de handshake e de aplicação.

Ataques de preenchimento de credenciais e proteção com KDF

Os ataques de preenchimento de credenciais reutilizam pares de nome de usuário e senha roubados em uma violação para tentar acessar outros serviços. KDFs fortes reduzem a janela para quebra off-line após uma violação — se o invasor precisar gastar 300 ms por tentativa em vez de microssegundos, quebrar uma senha aleatória de 10 caracteres se torna computacionalmente inviável. No entanto, KDFs não protegem contra a reutilização de senhas em diferentes sites — para isso, os usuários precisam usar senhas exclusivas. A combinação de senhas exclusivas + armazenamento com Argon2id + MFA torna os ataques baseados em credenciais praticamente ineficazes.

Verificação rápida

Teste sua compreensão dos conceitos do CompTIA Security+ (SY0-701) abordados nesta lição.

Recapitulação da lição

Nesta lição, você aprendeu que: as KDFs de senha são intencionalmente lentas, com fatores de trabalho ajustáveis para tornar os ataques de força bruta off-line computacionalmente inviáveis; funções com alta exigência de memória, como Argon2id e scrypt, impedem a paralelização em GPU ao exigir uma grande quantidade de RAM por cálculo; e MD5, SHA-1 e hashes sem salt são completamente inadequados para o armazenamento de senhas, como demonstrado por várias violações de grande repercussão. A seguir, exploraremos a criptografia pós-quântica e os algoritmos selecionados pelo NIST para substituir RSA e ECC.

Perguntas Frequentes

A aula “Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2” é grátis?

Sim — o texto completo de “Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Security+ Academy, atualize para CoddyKit PRO. O curso de Security+ Academy inclui 4 aulas no total.

O que vou aprender em “Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2”?

Compare algoritmos de hash de senhas quanto à resistência a ataques de GPU e ASIC e entenda como os fatores de trabalho e a dureza de memória são ajustados. Você pratica Security+ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Security+ Academy?

Nenhuma experiência prévia é necessária. Security+ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Security+ Academy?

Sim. Cada aula de Security+ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Handshake do TLS 1.3 e Retomada 0-RTT
  2. Criptografia Autenticada: AES-GCM e ChaCha20-Poly1305
  3. Funções de Derivação de Chaves: PBKDF2, bcrypt e Argon2
  4. Criptografia Pós-Quântica: CRYSTALS-Kyber e Dilithium
← Voltar para Security+ Academy