Como criar e armazenar senhas seguras
Entenda o que torna uma senha forte, por que gerenciadores de senhas são essenciais, e como fazer o hashing correto de senhas no backend com bcrypt e argon2.
Senhas são o elo mais fraco na maioria dos sistemas de segurança. Entender o que torna uma senha realmente forte — e como armazená-la corretamente no backend — é fundamental para qualquer desenvolvedor que trabalhe com autenticação.
O que torna uma senha forte: entropia
A força de uma senha é medida em bits de entropia: quanto mais bits, mais tempo leva para quebrá-la por força bruta. Entropia = log₂(tamanho_do_alfabeto ^ comprimento). Uma senha de 12 caracteres usando letras (maiúsculas+minúsculas), dígitos e símbolos (~95 caracteres) tem log₂(95¹²) ≈ 79 bits de entropia — o que levaria milhões de anos para quebrar com hardware atual.
- Comprimento é o fator mais importante (cada caractere adiciona ~6-7 bits)
- 12+ caracteres com mistura de tipos é o mínimo recomendado
- Padrões previsíveis ("P@ssw0rd") reduzem drasticamente a entropia real
- Palavras do dicionário + substituições (a→@, o→0) são facilmente quebradas por dicionários modernos
Como NÃO armazenar senhas no backend
- Nunca em texto plano
- Nunca com MD5 ou SHA simples (mesmo com salt, são muito rápidos para ataques de GPU)
- Nunca com criptografia reversível (se o servidor é comprometido, todas as senhas vazam)
Como armazenar senhas corretamente: bcrypt, scrypt, argon2
Funções de hash para senhas são propositalmente lentas e têm salt embutido. bcrypt é o mais estabelecido (1999), amplamente suportado. argon2 ganhou o Password Hashing Competition em 2015 e é a recomendação moderna — com variantes argon2i (side-channel resistant), argon2d (GPU resistant) e argon2id (recomendado, combina os dois).
// bcrypt (Node.js)
const bcrypt = require('bcrypt');
const hash = await bcrypt.hash(password, 12); // custo 12
const valid = await bcrypt.compare(password, hash);
// argon2 (Node.js)
const argon2 = require('argon2');
const hash = await argon2.hash(password); // argon2id por padrão
const valid = await argon2.verify(hash, password);Use o Gerador de Senha do UtilDev para criar senhas criptograficamente seguras com comprimento e conjunto de caracteres configuráveis. Todas as senhas são geradas localmente no seu navegador.