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

  • Visão geral
  • Formação histórica e académica
  • Matemática: Espaço de teclas e entropia
  • Arquitetura de um ataque brutal força moderna
  • Velocidades de cálculo por algoritmo de hash
  • Detecção de tanques em Time2Crack
  • Cálculo do tempo de fissuração: rawTime()
  • Redução de data detectada: detectDateAndReduce()
  • Proteção de monotonicidade: piso de outros ataques
  • Calibração da IC e o papel da força bruta
  • Comparação com outros ataques
  • Limitações teóricas e práticas
  • Que força bruta não diz
  • Defesas eficazes
  • Referências

  • 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:

  • Ataque modelado Representa o tempo teórico máximo que um atacante colocaria, assumindo nenhuma outra vulnerabilidade explorável.
  • Piso (guarda de monotonicidade) : serve como um terminal inferior para todos os outros ataques — nenhum ataque especializado pode legitimamente exibir um tempo menor do que aquele que tomaria força bruta na sub-cadeia alfabética da senha.
  • Na prática, força bruta é quase nunca o ataque mais rápido em uma senha humana real — PCFG, Markov ou ataque híbrido será mais eficaz. Mas para uma senha verdadeiramente aleatória e longa, representa a realidade: o atacante não tem escolha a não ser navegar o espaço exaustivamente.

    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:

    AnoEvento
    ----------------------
    1979Morris & Thompson: Primeiro artigo acadêmico sobre segurança de senha Unix, com análise de força bruta em /etc/passwd
    1988Morris Worm: primeira façanha de massa usando, entre outras coisas, um dicionário e quebra de senha de força bruta
    1993Crack 5.0 (Alec Muffett): primeira ferramenta pública de cracking por força bruta no Unix
    2004Ophcrack : tabelas de sulco + força bruta no LM / NTLM hashes Windows
    2007Craqueamento acelerado por GPU (Elcomsoft): primeira utilização pública da GPU para acelerar a força bruta
    2012Hashcat código aberto: ferramenta de referência, operação GPU máxima
    2016Sistemas 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 :

    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çãoTamanhoComprimentoEspaço de teclasClassificação
    -----------------------------------------------------------
    Números únicos108108 = 100.000.000~108
    Minúsculos sozinhos268268 milhões~2 × 1011
    Alfanumérico628628 milhões~2 × 1014
    ASCII completo958958 mil milhões~6 × 1015
    ASCII completo95129512 - 5,4 × 1023~5 × 1023
    ASCII completo95169516 - 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 :
    SenhaCodificaçãoComprimentoEntropiaEspaço de teclas
    -----------------------------------------------------------------
    "12345678"10 (dígitos)826.6 bits108
    "senha"26 (inferior)837.6 bits268
    Senha162 (alfano)953.6 bits629
    "P@ssw0rd!"95 (total ASCII)959,3 bits959
    xQz7@ mK9# 2pL95 (total ASCII)1279 bits9512

    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 por charset_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 :

    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çãoAlgoritmoJustificação
    ---------------------------------------
    RecomendadoArgon2idDifícil de memória, resistente a GPU
    Recomendadobcrypt (custo ≥ 12)Intencionalmente lento, salgado
    AceitávelscryptMemória dura mas menos padronizada
    InadequadoSHA-256 salgadoMuito rápido mesmo com sal
    PerigosoMD5, SHA-1, NTLMNã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 Unix
    Sprengers, 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ão
    Gosney, 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