Criptografia, hashing e HMAC usam funções criptográficas, mas resolvem problemas diferentes. A primeira pergunta é: o que precisa ser protegido ou verificado?
- use criptografia quando a informação deve permanecer secreta e depois ser recuperada;
- use hashing para criar uma impressão digital reproduzível;
- use HMAC para autenticar uma mensagem com um segredo compartilhado;
- use uma função de derivação como PBKDF2 para derivar um valor de uma senha.
A criptografia protege a confidencialidade
A criptografia transforma dados legíveis em texto cifrado usando uma chave. Com a chave e os parâmetros corretos, a operação pode ser revertida.
AES é um algoritmo de criptografia simétrica. A ferramenta AES permite explorar esse modelo.
A criptografia é adequada quando o valor original precisa ser recuperado. Um hash não substitui esse objetivo porque não foi criado para ser descriptografado.
O hashing cria uma impressão digital
Uma função hash transforma uma entrada em um resumo de tamanho fixo. A mesma entrada com o mesmo algoritmo produz o mesmo resultado.
O gerador de hash e a ferramenta de comparação atendem a esses usos.
Um hash isolado não prova que o resumo foi criado por uma parte autorizada. Quem consegue substituir os dados e o hash pode recalcular ambos.
HMAC combina hash e segredo
HMAC usa uma função hash junto com uma chave secreta. Partes que compartilham esse segredo podem calcular e verificar um código de autenticação.
O gerador e verificador HMAC demonstra a diferença.
HMAC não oculta a mensagem. Ele protege integridade e autenticidade, não confidencialidade.
PBKDF2 é mais do que um único hash de senha
Funções hash de uso geral são intencionalmente rápidas, o que facilita tentativas repetidas de senhas.
PBKDF2 aplica repetidamente uma função pseudoaleatória com salt e número de iterações. A ferramenta PBKDF2 mostra senha, salt, iterações e tamanho de saída.
O salt não é uma senha adicional e pode ser armazenado com o valor derivado.
Qual mecanismo usar?
| Necessidade |
Mecanismo |
Reversível? |
Segredo necessário? |
| Ocultar dados e recuperá-los depois |
AES |
Sim |
Sim |
| Criar uma impressão digital |
Hash |
Não |
Não |
| Autenticar mensagem com segredo compartilhado |
HMAC |
Não |
Sim |
| Derivar valor de uma senha |
PBKDF2 |
Não |
Senha |
Os mecanismos podem coexistir no mesmo sistema.
Erros comuns
Codificação não é criptografia. Base64 não oferece confidencialidade.
Hashing não é criptografia. Um hash não é texto cifrado.
HMAC não oculta a mensagem. Ele a autentica com um segredo.
Senhas normalmente não devem ser armazenadas como dados descriptografáveis.
Para um contexto mais amplo, consulte Segurança web: proteções essenciais.