Ferramenta de senhas Voltar ao gerador

Guia de segurança

Geração de senhas no lado do cliente com Web Crypto e amostragem por rejeição

Um whitepaper técnico explicando o modelo de geração de senhas no lado do navegador do PwdGen, limites de entropia, amostragem por rejeição e limites de privacidade.

Resumo

O PwdGen usa um método de geração de referência no lado do cliente: o navegador ou runtime Web Crypto fornece bytes aleatórios, a amostragem por rejeição mapeia esses bytes para índices limitados e não tendenciosos, e uma embaralhamento Fisher-Yates distribui as classes de caracteres exigidas pela senha final. O método é intencionalmente pequeno, auditável e reproduzível no aplicativo web, adaptador de API, CLI e no pacote preparado pwdgen-core.

Este documento descreve o modelo de engenharia. Não é uma alegação de uma nova primitiva criptográfica, um padrão formal ou uma auditoria independente de terceiros.

Fonte de aleatoriedade

O gerador solicita valores aleatórios criptograficamente fortes através de crypto.getRandomValues(). Espera-se que as implementações do Web Crypto usem um gerador de números pseudoaleatórios criptograficamente seguro (CSPRNG) alimentado com entropia de alta qualidade fornecida pelo ambiente host. Na prática, os navegadores delegam essa responsabilidade aos recursos do sistema operacional e provedores criptográficos da plataforma.

O PwdGen não afirma que toda chamada de geração de senha amostra diretamente uma fonte de ruído de hardware. A afirmação mais segura e precisa é que o navegador fornece saída CSPRNG através da API Web Crypto, e que o PwdGen evita interfaces pseudoaleatórias não criptográficas.

Por que não Math.random()

Math.random() não é especificado para uso sensível à segurança. É adequado para simulações, efeitos visuais e comportamento comum de UI aleatório, mas não fornece as garantias esperadas para senhas, códigos de redefinição, chaves de assinatura ou outras credenciais.

O PwdGen trata fallbacks pseudoaleatórios inseguros como um estado de falha. Se o Web Crypto não estiver disponível, o gerador deve mostrar um erro de compatibilidade em vez de produzir silenciosamente credenciais fracas.

Amostragem por rejeição

Bytes e inteiros aleatórios geralmente são extraídos de um intervalo de potência de dois. Os alfabetos de senha raramente têm um tamanho que divide esse intervalo exatamente. Uma operação de módulo direta pode tornar alguns caracteres ligeiramente mais prováveis que outros.

O PwdGen usa amostragem por rejeição:

  1. Extraia um inteiro de 32 bits sem sinal.
  2. Calcule o maior múltiplo do tamanho do alfabeto que cabe dentro do intervalo de 32 bits.
  3. Rejeite valores acima desse limite.
  4. Aplique o módulo apenas ao intervalo completo restante.

Isso mantém a seleção uniforme de caracteres limitados sem introduzir viés de módulo mensurável.

Cobertura de caracteres e entropia

Para políticas de senha configuradas, o gerador primeiro seleciona um caractere de cada classe habilitada, preenche o restante com o alfabeto combinado e então embaralha o resultado. Isso ajuda a satisfazer as regras de senha de destino sem colocar uma classe previsível em uma posição previsível.

A estimativa teórica de entropia é:

bits = length × log2(uniqueAlphabetSize)

Esse valor é um limite superior para escolhas uniformemente aleatórias do alfabeto configurado. Não leva em conta reutilização de senhas, saída editada pelo usuário, dispositivos comprometidos, senhas vazadas ou armazenamento fraco pelo serviço de destino.

Limite de privacidade

Nas ferramentas do navegador, os valores gerados permanecem na memória da página e nos campos de resultado visíveis até que o usuário os copie ou exporte. Os geradores locais não enviam senhas geradas para os servidores do PwdGen, não as colocam em URLs nem as escrevem em eventos de análise.

Esse limite não protege contra extensões maliciosas do navegador, gerenciadores de área de transferência, comprometimento do sistema operacional, captura de tela, páginas de phishing ou um usuário colando uma senha gerada em um destino inseguro.

Implementação reproduzível

O pacote público pwdgen-cli e o pacote preparado pwdgen-core existem para manter o modelo de geração inspecionável fora da página web. Testes unitários cobrem inclusão de classes de caracteres, caracteres excluídos, configurações inválidas, fórmulas de entropia e a ausência de caminhos de código de fallback pseudoaleatório inseguros.

O objetivo não é tornar o PwdGen um padrão privado. O objetivo é tornar a implementação pequena o suficiente para que desenvolvedores possam ler, testar e substituí-la quando seu ambiente exigir um limite de confiança diferente.

Fontes