Português (Brasil)

Ferramentas de texto e do dia a dia · Gerador de senhas

Explicação do viés do módulo: escolher uma palavra aleatória de uma lista sem distorção

· Como funciona

senhas aleatoriedade criptografia

Baldes numerados desiguais ao lado de um conjunto par produzido após a rejeição de uma cauda
Ilustração vetorial original ToolAcre

Mostra por que o 'comprimento da lista de módulo de número aleatório' favorece algumas palavras em detrimento de outras quando o intervalo não se divide uniformemente, quão grande é a distorção e como a amostragem de rejeição a remove.

Um dado justo e um atalho injusto — por que pegar um módulo de número aleatório 7,776 não é o mesmo que jogar dados

Uma fonte justa ainda pode alimentar uma rotina de seleção injusta. Se um programa lê um número inteiro e imediatamente pega o resto após a divisão por um comprimento de lista, alguns índices recebem mais valores de origem sempre que o intervalo de origem não é exatamente divisível por esse comprimento. A falha está na etapa de redução, não necessariamente nos bytes. ToolAcre evita esse atalho antes de escolher qualquer palavra EFF.

Os dados físicos fornecem uma comparação intuitiva apenas quando grupos de resultados completos são mapeados uniformemente. A implementação do navegador possui um intervalo bruto diferente, portanto calcula uma janela de aceitação para o limite solicitado. Este artigo discute esse mecanismo fornecido, em vez de afirmar que os bytes do navegador reproduzem literalmente cinco dados. Ambos podem selecionar índices, mas os seus procedimentos e provas de auditoria são distintos.

De onde vem o preconceito - um valor de 32 bits não se divide igualmente em intervalos de 7,776, então as primeiras palavras têm uma chance extra

Para um byte e um limite de 100, o intervalo bruto possui 256 valores possíveis. Cabem dois grupos completos de 100, deixando valores de 56. A redução de cada módulo de byte 100 fornece aos índices zero a 55 três pré-imagens cada, enquanto os índices 56 a 99 recebem apenas duas. Os bytes de entrada podem ser uniformes, mas a distribuição do intervalo selecionado não é.

O comentário de implementação também deriva o problema de intervalo finito correspondente para uma lista de entradas 7,776 quando dois bytes são reduzidos diretamente. Esses números vêm dos intervalos reais mencionados na fonte, e não de uma taxa de ataque presumida. A importante questão de revisão é se os valores restantes são usados, e não se a distorção parece pequena em um punhado de frases geradas.

Quão grande é o efeito – pequeno para um grande intervalo aleatório, mas diferente de zero, e por que o código criptográfico se recusa a aceitá-lo

Os testes determinísticos tornam observável a cauda irregular. Os limites 3, 5, 7, 100 e 7,776 são deliberadamente estranhos, enquanto um limite de potência de dois demonstra o caso de não rejeição. Outro controle estatístico usa a mesma fonte Web Crypto para a função correta e um módulo auxiliar ingênuo, de modo que o teste isola a estratégia de redução em vez de culpar a fonte de entropia.

ToolAcre não converte essas verificações de distribuição em uma previsão de tempo de crack. O preconceito reduz a uniformidade, mas traduzir essa redução no custo de um invasor específico requer um modelo de ameaça completo. O requisito de engenharia é mais limpo: cada índice elegível deve ter o mesmo número de valores brutos aceitos, e o código pode impor isso exatamente.

Os exemplos de distorção verificados nos comentários de implementação e testes determinísticos

`secureRandomInt` encontra a menor contagem de bytes inteiros capaz de representar o índice válido mais alto. Ele calcula o intervalo de bytes, subtrai o restante após a divisão pelo limite e chama o resultado `limit`. Valores abaixo desse limite pertencem a grupos completos; valores iguais ou superiores a ele são descartados antes que a operação do módulo possa ser executada.

Um novo sorteio segue cada rejeição. O loop tem um teto alto fixo para que uma fonte injetada quebrada não possa pendurar a aba para sempre; após repetidos valores fora do intervalo, ele lança em vez de retornar uma resposta tendenciosa. Esse caminho de falha faz parte da correção: recusar uma fonte suspeita preserva a promessa de que um índice retornado veio da janela de aceitação uniforme.

Alternativas - extrair bits exatamente suficientes e descartar valores fora do intervalo ou usar uma função inteira uniforme de uma biblioteca

Outros designs de números inteiros uniformes são possíveis, mas não são o comportamento deste pacote e, portanto, não são apresentados como opções ToolAcre intercambiáveis. O mecanismo expõe um caminho auditado. `secureRandomChoice` valida que sua entrada é uma matriz não vazia e delega para `secureRandomInt(items.length)`, tornando a seleção de palavras um consumidor direto do contrato inteiro limitado.

O gerador de senha aleatória usa o mesmo caminho para caracteres e, em seguida, invoca um embaralhamento Fisher-Yates conduzido por trocas limitadas seguras. Não usa `sort` com um comparador aleatório. Manter um primitivo sob vários recursos torna a revisão da fonte tratável: corrija ou teste a redução uniforme uma vez e depois siga seus chamadores.

Projetos alternativos estão fora deste módulo; o caminho enviado usa amostragem de rejeição

O teste de regressão vinculado-100 fornece cada byte final de 200 a 255 e, em seguida, um 42 final. O código correto consome todos os 56 bytes rejeitados e respostas de 42. Um segundo caso focado fornece 200 e 7; porque 200 módulo 100 seria zero, retornar 7 prova que o primeiro byte foi rejeitado em vez de reduzido silenciosamente.

Este exemplo prático é determinístico por design e não contém credenciais. Os bytes de produção permanecem privados para a chamada do navegador e não são registrados. A fonte de teste é injetável apenas para que o comportamento possa ser forçado no limite; o pacote público não oferece nenhum modo propagado de produção que possa reproduzir uma senha gerada.

Exemplo resolvido: vinculado 100 rejeita o byte 200 e aceita o seguinte 7

Redução aleatória de ponto flutuante, APIs uniformes específicas de biblioteca e algoritmos de embaralhamento não relacionados estão fora desta implementação. Avalia-los exigiria sua fonte e contratos. O código de ToolAcre é baseado em números inteiros e explicitamente limitado, portanto, adicionar uma pesquisa de alternativas confundiria a afirmação restrita que os testes realmente provam.

O artigo também não infere que uma senha gerada uniformemente seja adequada para cada política ou dispositivo. A seleção de índice uniforme aborda um mecanismo. Armazenamento, reutilização, manipulação da área de transferência, malware e restrições de destino permanecem questões separadas, mesmo quando cada elemento da lista tinha chances iguais de seleção.

Conclusão: um gerador de senha deve escolher as palavras de maneira uniforme; verifique as Notas Técnicas da ferramenta para saber como o Gerador de Senhas faz isso

Um gerador de senha não deve favorecer entradas antecipadas simplesmente porque seu intervalo bruto deixa um resto. ToolAcre pega bytes do Web Crypto, rejeita a cauda incompleta e reduz apenas valores dentro de grupos completos de tamanhos iguais. Os testes forçam os limites de rejeição e aceitação, de modo que a afirmação não se baseia na inspeção visual dos resultados.

Ao revisar código semelhante, calcule o intervalo bruto para a largura de bytes escolhida, divida-o pelo limite solicitado e procure o restante descartado. Se nenhuma cauda for rejeitada, exija outra prova de uniformidade. A lista de palavras pode ser pública e a fonte criptográfica, enquanto uma redução descuidada ainda introduz distorções evitáveis.