O ataque à força bruta — operação abrangente
Documento de referência do projeto Time2Crack
Destinatários: desenvolvedores, pesquisadores de segurança, usuários avançados
Índice
Resumo
Força bruta é o ataque mais fundamental na quebra de senha: consiste em testes sistematicamente todas as combinações possíveis Nenhuma inteligência, nenhuma heurística — apenas o poder de computação bruto contra o tamanho do espaço para viajar.
No Time2Crack, força bruta desempenha um duplo papel:
2. Antecedentes históricos e acadêmicos
2.1 Origens
A força bruta precede o computador: o princípio de testar todas as combinações possíveis é usado desde as primeiras máquinas de criptografia mecânica (Enigma durante a Segunda Guerra Mundial). A bomba de Alan Turing foi, em sentido amplo, um dispositivo de força bruta forçado por uma hipótese de berços.
Com o advento dos computadores, a força de senha unix foi formalizada da década de 1970 à década de 1980:
| Ano | Evento |
| -------- | -------------- |
| 1979 | Morris & Thompson: Primeiro artigo acadêmico sobre segurança de senha Unix, com análise de força bruta em /etc/passwd |
| 1988 | Morris Worm: primeira façanha de massa usando, entre outras coisas, um dicionário e quebra de senha de força bruta |
| 1993 | Crack 5.0 (Alec Muffett): primeira ferramenta pública de cracking por força bruta no Unix |
| 2004 | Ophcrack : tabelas de sulco + força bruta no LM / NTLM hashes Windows |
| 2007 | Craqueamento acelerado por GPU (Elcomsoft): primeira utilização pública da GPU para acelerar a força bruta |
| 2012 | Hashcat código aberto: ferramenta de referência, operação GPU máxima |
| 2016 | Sistemas de Colmeia: A publicação anual de tabelas "força bruta por GPU" torna-se referência industrial |
2.2 Benchmarks
A revolução da GPU alterou a ordem de magnitude da força bruta. Na CPU, um atacante da década de 1990 testou cerca de 10.000 senhas MD5/s. 168,9 mil milhões por segundo — uma aceleração de 16 milhões de vezes em 30 anos.
Principais fontes académicas :- Gosney, J (2012) : primeira referência pública multi-GPU em LM/NTLM, mostrando 180 GH/s com 8 GPU
- Sistemas de colmeia (2025) : tabelas anuais calibradas em 12× RTX 4090, citado por Forbes, CNBC, BBC
- Sprengers, M. (2011) : tese da Universidade de Radboud sobre cracking GPU, formalização matemática
3. Bases matemáticas: keyspace e entropia
3.1 Espaço de teclas
Keyspace (keyspace) é o número total de senhas possíveis para um determinado comprimento e tanque:
keyspace = charset_size ^ length
Exemplos:
| Codificação | Tamanho | Comprimento | Espaço de teclas | Classificação |
| ----------- | --------- | ------------- | ------------- | ------------- |
| Números únicos | 10 | 8 | 108 = 100.000.000 | ~108 |
| Minúsculos sozinhos | 26 | 8 | 268 milhões | ~2 × 1011 |
| Alfanumérico | 62 | 8 | 628 milhões | ~2 × 1014 |
| ASCII completo | 95 | 8 | 958 mil milhões | ~6 × 1015 |
| ASCII completo | 95 | 12 | 9512 - 5,4 × 1023 | ~5 × 1023 |
| ASCII completo | 95 | 16 | 9516 - 4,4 × 1031 | ~4 × 1031 |
3.2 Entropia binária
Entropia (medida em bits) é a formulação logarítmica do espaço-chave:
entropie = length × log₂(charset_size)
No tempo2Crack (função entropy()) :
function entropy(pw) {
return pw.length * Math.log2(getCharset(pw).size);
}
A relação entre entropia e espaço-chave:
keyspace = 2^entropie
entropie = log₂(keyspace)
Exemplos concretos :
| Senha | Codificação | Comprimento | Entropia | Espaço de teclas |
| --------------- | ----------- | ------------- | ------------- | ------------- |
| "12345678" | 10 (dígitos) | 8 | 26.6 bits | 108 |
| "senha" | 26 (inferior) | 8 | 37.6 bits | 268 |
| Senha1 | 62 (alfano) | 9 | 53.6 bits | 629 |
| "P@ssw0rd!" | 95 (total ASCII) | 9 | 59,3 bits | 959 |
| xQz7@ mK9# 2pL | 95 (total ASCII) | 12 | 79 bits | 9512 |
3. 3 Esperança Matemática: Espaço de Chaves / 2
A força bruta nem sempre é testada keyspace Combinações inteiras — em média, ela encontra a senha no meio do caminho, já que o alvo é distribuído equiprobavelmente no espaço.expectativa matemática O número de tentativas é, portanto:
tentatives_attendues = keyspace / 2
Isto é exatamente o que modelos bruteTime() No Tempo2Crack:
// "For brute force: expected value is keyspace/2 (uniform random search)"
function bruteTime(keyspace, rate) {
const ls = Math.log(keyspace / 2) - Math.log(rate);
return Math.exp(ls); // = (keyspace / 2) / rate
}
Esta divisão por 2 é correta sob a suposição de que o atacante viaja o espaço linearmente (não repetitivo). keyspace/2 Tentativas.
14. Defesas eficazes
14.1 Lado do usuário: comprimento e aleatoriedade
A força bruta é derrotada por dois fatores combinados:
Comprimento : cada caractere adicional multiplica o espaço de chaves porcharset_sizeDe 8 a 12 caracteres (charset 95) multiplica o espaço de teclas por 954 - 81 milhões.
Verdadeiro aleatório : um gerador criptograficamente seguro (CSPRNG) produz senhas que não se beneficiam de qualquer redução probabilística. Markov, PCFG e Neural não têm vantagem sobre uma senha realmente aleatória.
Recomendação prática :
- Password Manager + Geração aleatória ≥ 16 caracteres com flutuação completa = fora do alcance de qualquer força bruta em um horizonte de vida humana
14.2 Lado do servidor: algoritmos resistentes
A escolha do algoritmo de hash multiplica ou divide o tempo de força bruto por fatores até vários milhões :
| Recomendação | Algoritmo | Justificação |
| ---------------- | -------------- | --------- |
| Recomendado | Argon2id | Difícil de memória, resistente a GPU |
| Recomendado | bcrypt (custo ≥ 12) | Intencionalmente lento, salgado |
| Aceitável | scrypt | Memória dura mas menos padronizada |
| Inadequado | SHA-256 salgado | Muito rápido mesmo com sal |
| Perigoso | MD5, SHA-1, NTLM | Não salgado, extremamente rápido |
15. Referências bibliográficas
Acadêmicos
Morris, R., & Thompson, K. (1979). Segurança da senha: Um histórico de casos. Comunicação da ACM, 22(11), 594-597. → Artigo fundador sobre segurança de senha UnixSprengers, M. (2011). Rastreamento de senha baseado em GPU (teses do mestre). Universidade de Radboud Nijmegen. → Formalização matemática do cracking GPU, benchmarks em GPU única
Wheeler, D.L. (2016). zxcvbn: Estimativa de Força de Senha de Baixo Orçamento. 25o Simpósio de Segurança USENIX. → Dados sobre espaço de chaves eficaz (Tabela 2: -30% para senhas estruturadas)
Dürmuth, M. et al. (2015). Ordenado Markov ENumerator. ESORICS 2015. → Referência comparativa para terminais probabilísticos vs força bruta
Indústria
Sistemas Colmeias. (2025). Tabela de senha de sistemas Hive 2025. https://www.hivesystems.io/password-table → benchmarks anuais em 12× RTX 4090, referência padrãoGosney, J (2012). 8x Nvidia GTX 1080 Hashcat referência. GitHub Gist. → Primeira referência pública multi-GPU, referência histórica
Hashcat. (2024). Pontos de referência oficiais do Hashcat v6.2.6. https://hashcat.net/hashcat/ → Velocidades oficiais por algoritmo, fonte de constantes Time2Crack
NIST SP 800-63B. (2017, atualizado em 2024). Diretrizes de Identidade Digital: Autenticação e Gestão do Ciclo de Vida. → Recomendações oficiais sobre comprimento de senha e complexidade
OWASP. (2024). Password Storage Cheat Sheet. https://cheatssheetseries.owasp.org/cheatssheets/Passsword Storage Cheat Sheet.html → Recomendações sobre bcrypt (custo ≥ 12), Argon2id como padrões modernos
Documento gerado para o projeto Time2Crack — última atualização : 2026-04-18 Baseado na implementação em app.js, funções RAWTime(), getCharset() e monotonicidade guard