As regras de senha são uma besteira

Entre os muitos, muitos, muitos coisas ruins sobre senhas, o senhor sabe qual é a pior? As regras de senha.

Que este compromisso seja devidamente anotado no registro permanente da Internet. Não sei se existe vida após a morte, mas vou descobrir em breve, e pretendo sair muito louco.

O mundo está absolutamente inundado de regras de senha terríveis:

Mas não preciso dizer isso aos senhores. Quanto maior for a probabilidade de o senhor usar uma ferramenta de geração de senhas realmente aleatória, como nós, über-geeks, devemos fazer, maior será a probabilidade de ter sofrido muito – e diariamente – sob esse regime.

O senhor já viu o clássico XKCD sobre senhas?

Para quem entende de teoria da informação e segurança e está em uma discussão irritante com alguém que não entende (possivelmente envolvendo casos mistos), peço sinceras desculpas.

Nós certamente podemos debater se o “grampo correto da bateria do cavalo” é uma estratégia de senha viável ou não, mas o argumento aqui é principalmente que o comprimento é importante.

That's What She Said (Isso é o que ela disse)

Não, sério, é verdade. Chego ao ponto de dizer que sua senha é muito curta. Hoje em dia, dado o estado da computação em nuvem e da quebra de hash de senha por GPU, qualquer senha de 8 caracteres ou menos está perigosamente perto de nenhuma senha.

Então, talvez tenhamos uma regra, que as senhas não devem ser curtas. Uma senha longa tem muito mais chances de ser segura do que uma curta… certo?

E quanto a essa senha de quatro caracteres?

E quanto a essa senha de oito caracteres?

Ou esta senha (hipotética, mas muito real) de sete caracteres?

O senhor também pode se surpreender, se colar os quatro emojis Unicode acima em sua caixa de diálogo de login favorita (vá em frente – tente), ao descobrir que ela … não é na verdade, quatro caracteres.

Oh, meu Deus.

"💩".length === 2

Nosso velho amigo Unicode ataca novamente.

Como se vê, mesmo a regra simples de que “sua senha deve ter um tamanho razoável”… não é necessariamente assim. Principalmente se pararmos de pensar como Americanos feios em ASCII.

E quanto àquelas senhas longas e bonitas? Elas são sempre seguro?

aaaaaaaaaaaaaaaaaaa
0123456789012345689
passwordpassword
usernamepassword

É claro que não, porque o o senhor conheceu algum usuário recentemente?

Mudei todas as minhas senhas para "incorreta"

Eles arruínam consistentemente todos os softwares que já escrevi. Sim, sim, eu sei que o senhor ou a senhora, über-geek, sabe tudo sobre o conceito de entropia. Mas expressar seu amor pela entropia como regras de senha terríveis e idiossincráticas …

  • deve conter letras maiúsculas
  • deve conter letras minúsculas
  • deve conter um número
  • deve conter um caractere especial

… é uma falha espetacular de imaginação em um mundo de Unicode e Emoji.

À medida que construímos Discurso, descobri que a caixa de diálogo de login era uma peça de software extremamente complexa, apesar de sua simplicidade superficial. A principal regra de senha que usamos também foi a mais simples: comprimento. Desde que escrevi isso, já aumentamos o tamanho mínimo padrão da senha de 8 para 10 caracteres. E se o senhor for um administrador ou moderador, decidimos que o mínimo deve ser ainda maior, 15 caracteres.

Também defendi que o a verificação das senhas em relação às 100.000 senhas mais comuns. Se o senhor observar a 10 milhões de senhas de violações de dados em 2016, o senhor descobrirá que as 25 senhas mais usadas são:

123456
123456789
qwerty
12345678
111111
1234567890
1234567
password
123123
987654321
qwertyuiop
mynoob
123321
666666
18atcskd2w
7777777
1q2w3e4r
654321
555555
3rjs1la7qe
google
1q2w3e4r5t
123qwe
zxcvbnm
1q2w3e

Até mesmo esses dados revelam algum centrismo em relação ao ASCII. Suponho que os números sejam os mesmos em qualquer cultura, mas acho difícil acreditar que o chinês médio escolherá as senhas “password”, “quertyuiop” ou “mynoob”. Portanto, esta lista tem ser personalizável, localizável.

(Uma ideia interessante é procurar correspondências comuns de senhas mais curtas dentro de senhas mais longas, mas acho que isso causaria muitos falsos positivos).

Se o senhor examinar os dados, isso também se transforma em um argumento a favor do tamanho da senha. Observe que apenas 5 das 25 principais senhas têm 10 caracteres, portanto, se exigirmos senhas de 10 caracteres, já reduzimos em 80% nossa exposição às senhas mais comuns. Eu vi isso originalmente quando reuni milhões e milhões de senhas vazadas para a pesquisa do Discoursee, em seguida, filtramos a lista apenas para as senhas que refletem nosso novo requisito mínimo de 10 caracteres ou mais.

De repente, tornou-se um minúsculo list. (Se o senhor tiver feito uma pesquisa semelhante sobre senhas comuns, compartilhe seus resultados nos comentários).

Gostaria de oferecer o seguinte conselho de bom senso aos meus colegas desenvolvedores:

1. As regras de senha são besteira

  • Elas não funcionam.
  • Eles penalizam fortemente seu público ideal, pessoas que usam geradores de senhas aleatórias reais. Ei, adivinhe só, essa senha aleatória não foi tem um número ou símbolo. Acabei de verificar novamente meu livro de matemática e, sim, é possível. Tenho quase certeza.
  • Eles frustram os usuários comuns, que se tornam não cooperativos e usam soluções “criativas” que tornam suas senhas menos seguro.
  • Eles geralmente estão errados, no sentido de que as regras escolhidas são grosseiramente incompletas e/ou insanas, de acordo com os muitos links vergonhosos que compartilhei acima.
  • Falando sério, para o amor de Deuso senhor pare com essa bobagem de regra de senha arbitrária. Se o senhor não acredita em minha palavra, leia esta recomendação de regras de senha do NIST de 2016. É isso mesmo, “sem regras de composição”. No entanto, vejo um erro: deveria ter dito “no besteira regras de composição”.

2. Aplicar um mínimo de Unicode tamanho da senha

Uma regra é pelo menos fácil de lembrar, entender e aplicar. Essa é a proverbial regra única para trazer todos eles e, na escuridão, prendê-los.

  • É simples. Os usuários sabem contar. A maioria deles, pelo menos.
  • Funciona. Os dados nos mostram que Funciona; basta baixar qualquer lista de senhas comuns de sua escolha e agrupar por tamanho de senha.
  • A matemática não mente. Se todas as outras coisas forem iguais, uma senha mais longa irá será mais aleatória – e, portanto, mais segura – do que uma senha curta.
  • O senhor sabe que mesmo essa regra não é inviolável. Um comprimento mínimo de senha de 6 em um site chinês poderia ser perfeitamente razoável. Uma senha de 20 caracteres pode ser ridiculamente inseguro.
  • Se o senhor não permitir (quase) todos os caracteres unicode no campo de entrada da senha, provavelmente está fazendo isso errado.
  • É um detalhe de implementação, mas certifique-se de que o senhor máximo também é razoável.

3. Verifique se há senhas comuns

Como já observei, a definição de “comum” depende do público-alvo e do idioma, mas é um péssimo serviço para os usuários quando o senhor permite que eles escolham senhas que existem na lista de 10.000, 100.000 ou milhões de senhas mais comuns conhecidas de violações de dados. Há sem dúvida que um hacker enviará essas senhas comuns em uma tentativa de invasão – e é chocante o quão longe o senhor pode chegar, mesmo com uma limitação agressiva da taxa de tentativas de senha, usando apenas as 1.000 senhas mais comuns.

  • 1,6% têm uma senha entre as 10 principais senhas
  • 4,4% têm uma senha entre as 100 principais senhas
  • 9,7% têm uma senha entre as 500 principais senhas
  • 13,2% têm uma senha entre as 1.000 principais senhas
  • 30% têm uma senha entre as 10.000 principais senhas

Sorte do senhor, pois há milhões e milhões de listas de senhas reais violadas para examinar. É divertido fazer análise forense de dados, porque essas não são regras hipotéticas de senhas sintéticas do Jack, o Estripador, que algum programador entediado inventou. reais senhas usadas pelo reais usuários.

Faça a pesquisa. Colete os dados. Proteja seus usuários de si mesmos.

4. Verificar a entropia básica

Não há necessidade de ser extravagante aqui; escolha a medida de entropia que satisfaça o senhor no fundo da verdade de seu instinto. Mas lembre-se de que o senhor precisa ser capaz de explicar aos usuários quando eles também falharem na verificação.

entropia visualizada

Fiquei um pouco triste quando percebi que estávamos perfeitamente bem com os usuários selecionando uma senha de 10 caracteres que era literalmente “aaaaaaaaaa”. Na minha opinião, a maneira mais simples de fazer isso é garantir que haja pelo menos (x) caracteres exclusivos de um total de (y) caracteres. E é isso que fazemos a partir da versão beta atual do Discourse. Mas eu também gostaria de receber suas ideias nos comentários. Quanto mais simples e claras, melhor!

5. Verifique se há senhas com letras maiúsculas e minúsculas

Tenho vergonha de admitir que, ao criar o login do Discourse, o senhor não estava usando a senha, como discuti em The God Login, deixamos passar dois casos comuns que o senhor realmente têm para bloquear:

  • senha igual ao nome de usuário
  • senha igual ao endereço de e-mail

🤦 Se o senhor estiver usando versões do Discourse anteriores à 1.4, sinto muito e faça a atualização imediatamente.

Da mesma forma, o senhor também pode querer bloquear outros casos especiais, como

  • senha igual ao URL ou domínio do site
  • senha igual ao nome do aplicativo

Em resumo, tente pensar fora da caixa de entrada de senha, como um usuário faria.

🔔 Esclarecimento

Algumas pessoas interpretaram esta postagem como “todos os outros regras de senha são besteira, exceto estas quatro que vou listar agora”. Não é isso que estou tentando dizer aqui.

A ideia é focar em uma regra compreensível, simples, prática e que funcione na vida real em todas as situações: comprimento. Os usuários podem inserir (quase) qualquer coisa, em Unicode adequado, desde que seja longo o suficiente. Esse é o uma regra que une todas elas que precisamos ensinar aos usuários: comprimento!

Os itens de nº 3 a nº 5 são mais parecidos com verificações de exceção especial do gênio, um o senhor não pode desejar desejos infinitos . Isso não precisa ser discutido antecipadamente porque o senhor deve ser realmente raros. Sim, o senhor deve impedir que os usuários tenham senhas comicamente ruins, iguais ao seu nome de usuário, ou aaaaaaaaaaa ou 0123456789mas apenas como verificações pós-entrada, não como regras que precisam ser explicadas com antecedência.

Portanto, TL;DR: uma regra. Comprimento. Digite o que o senhor quiser, mas certifique-se de que seja longo o suficiente para ser uma senha razoável.

[advertisement] Está formando sua equipe de tecnologia? Carreiras no Stack Overflow ajuda o senhor a contratar com a maior comunidade de programadores do planeta. Criamos nosso site pensando em desenvolvedores como o senhor.