Gere senhas aleatorias criptográficamente seguras. Personalize comprimento, conjuntos de caracteres e quantidade. Usa a Web Crypto API.
Uma senha forte gerada por maquina tem duas propriedades: alta entropia (imprevisibilidade) e sem padrões (sem palavras de dicionario, sem percursos de teclado, sem substituições).
A entropia e medida em bits. Cada bit duplica o número de senhas possívelis que um atacante precisa testar. Uma senha escolhida uniformemente ao acaso de um conjunto de N caracteres possívelis tem log2(N) bits de entropia por caractere.
| Conjunto de caracteres | Caracteres disponíveis | Entropia por caractere |
|---|---|---|
| Apenas minúsculas | 26 | 4,7 bits |
| Minúsculas + dígitos | 36 | 5,2 bits |
| Maiúsculas + minúsculas + dígitos | 62 | 5,9 bits |
| ASCII imprimivel completo | 95 | 6,6 bits |
Uma senha de 20 caracteres do conjunto ASCII imprimivel completo tem cerca de 130 bits de entropia. Uma senha de 20 caracteres limitada a apenas minúsculas tem 94 bits. O conjunto de caracteres importa, mas o comprimento importa ainda mais: adicionar um caractere de um conjunto de 95 caracteres adiciona 6,6 bits de entropia. Dobrar o conjunto de caracteres de 26 para 95 adiciona apenas cerca de 1,9 bits por caractere.
As diretrizes do NIST (atualizadas em 2024) merecem ser conhecidas porque contradizem a sabedoria convencional herdada sobre políticas de senhas:
Para senhas geradas por maquina armazenadas em um gerenciador, nenhuma dessas restrições de política importa. Use entropia máxima e comprimento máximo.
Uma senha aleatória de 20 caracteres é uma passphrase são ferramentas diferentes para situações diferentes.
Uma passphrase Diceware de 4 palavras (selecionadas aleatoriamente de 7776 palavras):
correct horse battery staple
Entropia: log2(7776^4) ≈ 51,7 bits por palavra × 4 = cerca de 207 bits. Mais entropia que uma senha aleatória de 20 caracteres.
Uma passphrase Diceware de 6 palavras tem cerca de 310 bits. Isso e inquebravei. Também e digitaivei e memorizavei, sendo a escolha certa para:
Use senhas de caracteres aleatórios para tudo armazenado no seu gerenciador. Use passphrases para as poucas credenciais que você precisa lembrar ou digitar regularmente.
A diferença de implementação não e sutil:
// ERRADO: Math.random() não e criptográficamente seguro
function insecurePassword(length) {
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
return Array.from({ length }, () => chars[Math.floor(Math.random() * chars.length)]).join("");
}
// CORRETO: crypto.getRandomValues() é um CSPRNG
function securePassword(length) {
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
const array = new Uint32Array(length);
crypto.getRandomValues(array);
return Array.from(array, (n) => chars[n % chars.length]).join("");
}
A operação % chars.length introduz um pequeno vies de modulo quando o tamanho do conjunto de caracteres não divide uniformemente 2^32. Para um conjunto de 95 caracteres é um valor aleatório de 32 bits, o vies e insignificante na prática (os caracteres mais comuns aparecem cerca de 0,002% mais vezes que os menos comuns). Para uma implementação crítica de seguranca, use amostragem por rejeição para eliminar até mesmo esse pequeno vies.
O gerador executa inteiramente no seu navegador. Nenhuma senha e enviada a qualquer servidor. A fonte de aleatoriedade e crypto.getRandomValues() da Web Crypto API, que todos os navegadores modernos expoem é que obtem dados do CSPRNG do sistema operacional.
Apos a geração, copie a senha diretamente para seu gerenciador de senhas. Evite colar em locais intermediarios (rascunhos de email, aplicativos de notas, janelas de chat) onde o valor possa ser registrado ou sincronizado.
Nothing you paste leaves this tab. Every tool runs entirely in your browser — no upload, no server, no account.