Seu argumento tem algumas premissas:
Dado: Boas senhas são completamente aleatórias
Dado: As senhas geradas por uma máquina determinista não são aleatórias
SE determinista ENTÃO não aleatório
Se não aleatório, então não é bom
Portanto: senhas geradas não são boas. QED.
Sua premissa de que boas senhas são completamente aleatórias está incorreta. A experiência mostrou que boas senhas têm várias características. Boas senhas têm que resistir a certos tipos de ataques, dos quais apenas um é a adivinhação de senhas. Mais de 50 anos de experiência com senhas demonstraram que boas senhas têm vários traços:
- Tempo suficiente para que adivinhações aleatórias demorem demais.
- Tenha entropia suficiente para tornar cada personagem significativamente não dependente de outros caracteres na senha.
- Podem ser memorizados.
A morte (bem-vinda) do limite de 8 caracteres nas senhas abriu um novo universo de boas possibilidades de senha. Ele também dividiu o que conta como uma boa senha.
Uma boa senha no Solaris: 1ŤŁ $ $ R =
Uma boa senha no Windows: 0123456789abcefBubba2pAantz
O primeiro tem entropia muito alta com oito caracteres. O segundo tem entropia risível para 16 caracteres, mas entropia aceitável depois disso. O segundo seria uma senha insana para o Solaris, uma vez que seria truncado após o 8º caractere, onde o primeiro seria lamentável no Windows se aquele hash de senha já tivesse sido descoberto (farejado em vôo, sugado de um controlador de domínio, esse tipo de coisa ) graças ao Rainbow Tables. (Eu tive uma postagem no blog sobre isso há algum tempo que entra em mais detalhes sobre esse problema no contexto das políticas de senha entre plataformas. Link )
Portanto, uma boa senha tem alta entropia AND length. Quando você não pode usar o comprimento (aquele limite de 8 caracteres novamente) você está preso com alta entropia. Quando você tem um comprimento muito grande (512 caracteres!), A senha pode incluir significativamente menos entropia para a mesma resistência de ataque.
Em resumo, boas senhas podem ser completamente aleatórias. Não deve ser .
Quanto ao seu segundo ponto, sobre a incapacidade de uma máquina determinista de produzir saída aleatória. Uma máquina determinística usando uma entrada aleatória pode produzir saída contendo zero para a quantidade de entropia que ela obteve como entrada, mas não introduz qualquer nova entropia. Desta forma, um gerador de senhas usando 2 bytes de entropia de / dev / random (não / dev / urandom) pode produzir uma senha de 40 caracteres de alta aleatoriedade aparente. É claro que, se esses dois bytes e o algoritmo usado para gerar senhas forem conhecidos pelo invasor, a senha real poderá ser derivada.
O algoritmo é mais fácil de descobrir do que os bytes aleatórios reais usados para semear o algoritmo. Eles são bem publicados, já que a pseudo-aleatoriedade de alta qualidade é uma coisa valiosa para todos. Isso significa que os invasores precisam tentar (neste caso) todas as combinações possíveis de 2 bytes para cada comprimento permitido. (Veja também: Rainbow Tables )
Até, Senhas geradas por uma máquina determinista podem ter alta aleatoriedade.
E, finalmente, o que torna as senhas geradas por máquinas ruins é não a sua capacidade de serem derivadas pós-facto, é o terceiro ponto que fiz sobre o que faz uma boa senha: ser memorizado . Senhas geradas por computador, especialmente as longas, podem ser MUITO difíceis de memorizar, o que, por sua vez, leva a que sejam escritas em algum lugar inseguro. Ou mudado rapidamente para outra coisa com menor comprimento / força de entropia.