O que é Hashing de senhas?
O hashing de senhas é a prática de aplicar uma função criptográfica de mão única e computacionalmente custosa a uma senha — combinada com um salt único — para produzir um resumo de tamanho fixo que permite verificar a senha sem armazená-la de forma recuperável.
Também conhecido como: password hash, password digest
Armazenar senhas em texto simples é uma das práticas mais perigosas no desenvolvimento de software. Quando um banco de dados é violado, as senhas em texto simples ficam imediatamente disponíveis para o roubo de contas, não apenas no serviço violado, mas em qualquer outro serviço onde os usuários reutilizaram a mesma senha. O hashing de senhas substitui o armazenamento em texto simples por resumos irreversíveis que podem verificar uma tentativa de senha, mas não podem ser revertidos para recuperar a senha original.
Nem toda função de hash é adequada para senhas. As funções de hash de propósito geral como SHA-256 são rápidas demais: as GPUs modernas podem calcular bilhões de hashes SHA-256 por segundo, o que torna triviais os ataques de força bruta. Os algoritmos de hashing de senhas são projetados deliberadamente para serem lentos, exigindo tempo de CPU, memória ou ambos significativos a cada cálculo de hash. Essa lentidão é configurável por meio de parâmetros como o número de iterações (PBKDF2), o fator de custo (bcrypt) ou os ajustes de memória e paralelismo (Argon2).
A evolução do hashing de senhas reflete a corrida armamentista entre defensores e atacantes. O PBKDF2 (2000) adicionou um número de iterações configurável. O bcrypt (1999) introduziu um requisito de memória fixo que resiste à aceleração por GPU. O scrypt (2009) adicionou um enrijecimento de memória configurável. O Argon2 (2015), vencedor do Password Hashing Competition, oferece tempo de CPU, memória e paralelismo ajustáveis. Cada geração aborda novas capacidades de ataque, e a escolha depende do ambiente de implantação e do modelo de ameaças.
Como o Vaulted usa Hashing de senhas
O Vaulted não armazena senhas de usuário porque não tem contas de usuário. Mesmo assim, os princípios do hashing de senhas informam diretamente sua função de proteção com frase-senha. Quando um usuário define uma frase-senha em um segredo, o PBKDF2 — um algoritmo de hashing de senhas — é usado para derivar uma chave a partir da frase-senha. A lentidão deliberada de 100.000 iterações do PBKDF2 torna impraticável adivinhar a frase-senha por força bruta, protegendo a chave encapsulada mesmo que um atacante obtenha o texto cifrado e o salt.