Português (Brasil)

Ferramentas para desenvolvedores · SHA calculadora de hash

Por que você não deve armazenar senhas como hashes SHA-256 simples

· Por que é importante

senhas segurança criptografia

Um cronômetro mostrando adivinhação instantânea versus uma função hash de senha adicionando atrasos intencionais
Ilustração vetorial original ToolAcre

SHA-256 foi projetado para ser rápido, que é exatamente o que você não deseja para senhas. Esta postagem explica por que a velocidade é o problema e o que as funções de hash de senha fazem de diferente.

SHA-256 não é armazenamento de senha; é um hash rápido. O SHA-256 simples oferece aos invasores a mesma velocidade de adivinhação, tornando-o inadequado, apesar de ser um algoritmo criptograficamente forte.

Um desenvolvedor implementa um sistema de login e armazena senhas como hashes SHA-256. O algoritmo é criptograficamente forte e o aplicativo não aplica sal, mantendo o código simples. Quando um usuário faz login, o aplicativo faz o hash do envio e o compara com o valor armazenado. Este design é elegante em sua simplicidade e é totalmente inadequado para armazenamento de senhas. Esta não é uma preocupação teórica; é o erro grave mais comum em sistemas de autenticação. O design parece defensável até que você considere o que um invasor pode fazer com os dados roubados.

A falha não é que SHA-256 seja fraco. SHA-256 é um algoritmo criptográfico robusto, confiável pela comunidade de segurança e usado em todo o setor para verificações de integridade e endereçamento de conteúdo. A falha é que SHA-256 é rápido, e rápido é exatamente o oposto do que as senhas precisam. Um hash de senha não é apenas uma primitiva criptográfica; é um tipo específico de ferramenta projetada para um problema específico: defesa contra adivinhações. A velocidade é um recurso nas somas de verificação; em senhas, é uma catástrofe.

Rápido é o objetivo de SHA-256 – as verificações de integridade precisam de velocidade e um invasor obtém a mesma velocidade para adivinhar

Quando um banco de dados de hashes de senha SHA-256 é comprometido, um invasor não precisa reverter os hashes. O invasor cria um dicionário: senhas comuns como “senha”, “123456”, “olá” e milhões mais. Cada candidato é hash com SHA-256 – uma operação computacionalmente trivial – e verificado no banco de dados roubado. Um invasor pode calcular valores SHA-256 candidatos com a mesma primitiva rápida usada pelo serviço de login e, em seguida, comparar cada resultado offline sem limites de taxa. A taxa exata depende do hardware e da implementação, portanto, este artigo não faz deliberadamente estimativas por segundo ou tempo de violação.

A velocidade é todo o problema. SHA-256 foi feito para ser rápido. Essa é a intenção do design. Ele permite verificar somas de verificação de download, calcular endereços de conteúdo e construir árvores Merkle sem esperar. Nessas aplicações, a velocidade é um recurso. Para senhas, a velocidade é uma catástrofe. Quando um banco de dados de senhas é roubado e hash com SHA-256, o invasor tem a mesma velocidade para adivinhar que o servidor legítimo tem para verificação. Essa simetria é o que quebra a segurança da senha. O servidor legítimo e o invasor recebem o benefício de um resumo rápido de uso geral; somente o invasor pode repeti-lo offline, sem os controles de login do aplicativo.

Dicionários e tabelas arco-íris — pré-computação contra hashes sem sal e o que o sal muda

É aqui que um dicionário pré-computado se torna prático. Um invasor pode passar um dia computando hashes SHA-256 para as mil senhas mais comuns, para padrões comuns como Name1990 ou para dicionários inteiros em vários idiomas. A tabela resultante é chamada de tabela arco-íris. Procurar um hash SHA-256 roubado em uma tabela pré-computada é instantâneo. Mesmo sem uma tabela pré-computada, calcular um bilhão de suposições é trivial com hashing acelerado por GPU. O custo computacional para o invasor é tão baixo que até mesmo senhas fracas caem em questão de minutos.

A calculadora hash ToolAcre SHA demonstra essa velocidade diretamente. Cole um texto curto, clique no botão SHA-256 e o resultado é instantâneo. Esse resultado instantâneo – a propriedade que você admira em uma calculadora de hash – é a propriedade exata que torna SHA-256 simples indefensável para senhas. Um invasor obtém o mesmo resultado instantâneo para cada tentativa. Para somas de verificação e verificações de integridade, essa velocidade é perfeita. Para senhas, é fatal para a segurança.

O que as funções de hash de senha adicionam – fatores de trabalho, dureza de memória e sais por usuário em bcrypt, scrypt, Argon2 e PBKDF2

Um salt é um valor aleatório adicionado à senha antes do hash, portanto, o salt de cada usuário é diferente. Mesmo que dois usuários tenham a mesma senha, eles usam valores diferentes. Isso quebra tabelas arco-íris pré-computadas; um invasor deve calcular a tabela de forma independente para cada salt. Com sais por usuário gerados independentemente, uma tabela pré-computada não se aplica mais inalterada a todas as contas. No entanto, um salt apenas força o invasor a calcular a tabela durante o ataque, e não antes. Se o hash ainda for rápido, o invasor simplesmente computa mais tabelas em paralelo e continua adivinhando cada conta com uma primitiva rápida. O sal é necessário, mas não suficiente. Impede a reutilização do dicionário entre as vítimas, mas não retarda a operação principal do invasor: adivinhar. A velocidade do hash ainda é a velocidade da adivinhação.

Exemplo resolvido - quão rápido o SHA-256 de uma senha comum é reconhecido em comparação com um hash de senha ajustado, descrito qualitativamente

Uma função de hash de senha adota uma abordagem diferente. Bcrypt, scrypt, Argon2id e PBKDF2 são desenvolvidos especificamente para verificação de senha. Todos eles incluem um fator de trabalho: um parâmetro que torna o hash deliberadamente caro. Argon2 é o mais moderno; ele ajusta o tempo CPU e o consumo de memória. Bcrypt usa um fator de custo ajustável que dobra o trabalho a cada incremento. Todos eles incluem geração de sal integrada. Essas ferramentas são projetadas tendo em mente o modelo do invasor. O fator trabalho é crucial.

Uma função de hash de senha torna o custo configurado parte de cada verificação. Um invasor que queira testar candidatos também deverá pagar esse custo por cada tentativa. Os tempos concretos não podem ser copiados com segurança entre implantações, e é por isso que a seção sobre parâmetros exige benchmarking na classe de produção real de hardware. Essa assimetria é o que faz o hash de senha funcionar. O fator trabalho muda de “vantagem do atacante” para “vantagem do defensor”.

Migrando uma tabela SHA-256 herdada — agrupando hashes existentes e rehashing no próximo login

A comparação trabalhada permanece qualitativa porque este repositório não contém benchmark para uma função de senha ou invasor específico. Uma senha comum produz o mesmo SHA-256 simples imediatamente todas as vezes, para que uma entrada de dicionário existente possa identificá-la por igualdade. Um registro de senha ajustado inclui seus próprios parâmetros de sal e custo e requer trabalho configurado para cada candidato.

Esse contraste estabelece o erro de projeto sem prometer suposições por segundo. Hardware, implementação e parâmetros selecionados determinam o tempo. A conclusão defensável é invariante: um resumo de uso geral não tem fator de trabalho ajustável ou custo de memória, enquanto uma função de hashing de senha é escolhida especificamente para impor esses custos.

O que isso não cobre – escolha de parâmetros para um hash de senha específico, que depende do seu hardware e modelo de ameaça

A seleção de parâmetros está deliberadamente fora desta calculadora e deste artigo. As configurações corretas dependem dos orçamentos de latência do servidor, da memória disponível, da simultaneidade e do modelo de ameaça atual; portanto, copiar um valor fixo de uma implantação não relacionada transformaria um controle de segurança em folclore. Compare a função de senha selecionada em hardware de classe de produção e revise-a conforme a capacidade muda.

ToolAcre não pode realizar esse exercício: seu painel aceita texto e um identificador SHA e retorna um resumo simples. Ele não expõe campo salt, configuração de memória, controle de iteração ou formato de registro de senha. Essa ausência é um sinal de limite útil, e não um recurso ausente para contornar, fazendo hash repetidamente de uma senha na caixa de texto.

Conclusão: o resultado instantâneo é o aviso – a calculadora de hash ToolAcre SHA mostra o quão rápido SHA-256 é, e é por isso que ela não deve conter as senhas dos seus usuários

Um sistema legado que armazena senhas como SHA-256 simples pode ser migrado sem exigir que todos os usuários sejam redefinidos imediatamente. A técnica é "embrulhar" o hash antigo: pegue o valor SHA-256 e faça o hash novamente com Argon2. No próximo login do usuário, o sistema verifica se o antigo SHA-256 corresponde; nesse caso, ele calcula Argon2 sobre esse resultado e armazena a versão empacotada. Na próxima vez que o usuário fizer login, o sistema verificará diretamente no Argon2. A migração acontece de forma transparente durante o fluxo normal de login.

Essa abordagem integrada garante que as senhas mais antigas que foram comprometidas estejam agora protegidas pelo fator trabalho. Um invasor com o banco de dados antigo de hashes SHA-256 não pode mais simplesmente quebrá-los; eles devem atacar a versão empacotada, que inclui o custo do Argon2. A migração acontece de forma transparente para os usuários durante o fluxo normal de login. Cada login cria uma oportunidade de fortalecer o hash sem atrapalhar a experiência do usuário. A escolha do fator de trabalho correto depende do seu hardware e do seu modelo de ameaça. Os padrões do Argon2 são sensatos: 19 iterações, 512 MB memória e 1 paralelismo para serviços da web.