Mapear oito números para três caracteres altera as contagens

Suponha que os inteiros de 0 a 7 tenham a mesma probabilidade. Usando o resto da divisão por 3 como índice, os restos 0 e 1 aparecem três vezes cada; o resto 2 aparece duas vezes. Uma entrada uniforme não gera aqui restos uniformes: esse é o viés de módulo.

0 % 3 = 0    1 % 3 = 1    2 % 3 = 2
3 % 3 = 0    4 % 3 = 1    5 % 3 = 2
6 % 3 = 0    7 % 3 = 1
// counts: [3, 3, 2]

Se você rejeitar os dois últimos números, obterá o mesmo número de vezes

Rejeite 6 e 7 e solicite um novo número. Nos valores aceitos, de 0 a 5, cada resto aparece duas vezes. Se os números originais forem uniformes, isso elimina o viés no intervalo aceito. O número rejeitado não é reutilizado.

Contagens dos restos: 3, 3, 2 para os números de 0 a 7, comparadas com 2, 2, 2 após excluir 6 e 7.
Diagrama original calculado: à esquerda, 0 a 7; à direita, apenas 0 a 5. Não é uma distribuição medida da aleatoriedade do navegador.

randomInt do Moyoutil preenche Uint32Array(1) usando crypto.getRandomValues. Divide 2^32 pelo número de opções, arredonda para baixo e multiplica pelo mesmo número de opções para definir o limite. Valores maiores ou iguais ao limite são rejeitados, e outro número é solicitado. Para três opções, o limite é 4294967295; apenas o valor máximo é rejeitado.

Math.floor(4294967296 / 3) * 3
// 4294967295
// accept: 0 through 4294967294
// reject: 4294967295

W3C Web Cryptography: getRandomValues

A documentação do Web Cryptography especifica que getRandomValues ​​gera números aleatórios criptograficamente fortes. A verificação neste artigo é para garantir que o código do projeto lide com limites de rejeição e não seja uma auditoria da entropia do sistema operacional ou de implementações específicas de números aleatórios do navegador.

Incluir tipos de caracteres difere de escolher cada posição de forma independente

A ferramenta escolhe um caractere de cada tipo selecionado, preenche as posições restantes com o conjunto combinado e embaralha a ordem. Cada tipo selecionado aparece pelo menos uma vez. Selecionar apenas maiúsculas e selecionar os quatro tipos são condições diferentes. Isso não garante a segurança nem permite converter uma contagem de combinações em tempo real de adivinhação.

O comprimento deve ser um inteiro de 4 a 128, com pelo menos um tipo de caractere selecionado. Comprimentos fracionários, fora do intervalo ou nenhum tipo selecionado geram erros. Aceitar quatro caracteres não significa que quatro seja um mínimo seguro. NIST SP 800-63B-4 exige dos verificadores em seu âmbito senhas com pelo menos 15 caracteres para autenticação de fator único e oito como parte da autenticação multifator. Não são regras universais de entrada para todos os sites.

NIST SP 800-63B-4: Requisitos do verificador de senha

Distinguir entre salvar e limpar a tela após a criação.

  1. Verifique o comprimento permitido e as condições de caracteres para o serviço que você usará. O comprimento padrão do Moyoutil é 20 e você pode ajustar o comprimento e o tipo.
  2. Gere uma nova senha com as configurações atuais. Alterar uma configuração apaga o resultado anterior e desativa a cópia; pressione novamente o botão de gerar.
  3. Use senhas diferentes para cada site e mantenha-as em um gerenciador de senhas. Esta ferramenta não fornece um cofre de senhas ou funcionalidade de login de serviço.
  4. A limpeza dos resultados da tela deixa a tela em branco, mas não exclui o conteúdo copiado da área de transferência. Verifique o status da área de transferência e dos dispositivos compartilhados separadamente.

NIST SP 800-63B-4: Gerenciadores de senhas e senhas específicas de serviços

Atualmente os resultados gerados não são enviados ou armazenados no servidor de ferramentas. No entanto, ele não bloqueia extensões que leem entradas e a área de transferência, bem como ataques de phishing de dispositivos e contas compartilhadas. Não use a sequência de exemplo postada como senha real da sua conta.

Perguntas frequentes

É seguro selecionar todos os caracteres especiais?

Os tipos de caracteres não determinam a segurança sozinhos. Confira os requisitos do serviço, um comprimento suficiente, senhas diferentes por serviço e armazenamento seguro.

Este artigo verifica a qualidade dos números aleatórios do navegador?

Não. Enumeramos um intervalo pequeno e reproduzimos o limite de rejeição da função do projeto. Não medimos a entropia do navegador nem o tempo para adivinhar uma senha.