Posts tagged Security

Re: Password Strength by XKCD

2

Essa semana me deparei com várias pessoas compartilhando o seguinte post do XKCD, quadrinho on-line que acompanho e gosto muito, bem nerd e de alta qualidade, e recomendo fortemente. Porém, ao ler esta eu tive a impressão de ter algo errado.

 

EDIT: Jopa (o cara do 1o comentário deste post, amigo meu e analista de segurança com bastante experiência) mostrou um erro que cometi: troquei a base com o expoente e por isso estou mudando o post para ter uma informação útil e não um post apenas com informações erradas.

 

XKCD: Password Strength

XKCD: Password Strength http://xkcd.com/936/

No pouco que estudei estatística no colégio e universidade imaginei que as contas estivessem bem erradas. De onde veio cada bit de entropia que eles usaram? Dá a entender que cada critério de complexidade (maiúsculas, substituição, caracteres especiais, números, etc) simplesmente adicionam alguns bits de entropia e o critério usado para a quantidade de bits adicionada eu realmente não sei de onde tiraram.

 

Dei uma lida aqui e as coisas ficaram mais claras de como essas medidas foram feitas.

 

Mas de cara, tive um sentimento de que estava errado, e resolvi fazer as contas como eu aprendi para me certificar.

Explicando meu raciocínio e mostrando como fiz as contas:

O universo de caracteres utilizados na frase-senha do exemplo dele foi de 27 caracteres (as 26 letras minúsculas e o espaço). Com uma senha de tamanho N, existem 27^N (27 elevado a N) possibilidades (um arranjo com repetição). Pois em cada posição podem ser usados qualquer um dos 27 caracteres. Observem que este número pode ser reduzido se eu excluir frases-senha com espaços consecutivos, começando e terminando com espaços ou mesmo sem espaços, já que não se enquadrariam no exemplo, mas foram deixados para simplificar as contas.

No universo de caracteres utilizados na ‘s3Nh@!’, vou considerar todas as letras (a-z: 26), mais todas as letras maiúsculas (A-Z: 26), todos os números (0-9: 10) e mais alguns caracteres comuns visíveis no teclado (!@#$%&*()-_=+{[}]/?\|:;,.<>: 27), totalizando 89 caracteres. Observem este número pode crescer muito, já que não acrescentei o caractere espaço, nem outros como §^~ºª¹²³£¢¬, que são menos comuns mas que também poderiam ser usados, na realidade esse número poderia chegar a 96 considerando todos os caracteres imprimíveis. Usando este universo de caracteres, uma senha de tamanho N, tem 89^N possibilidades.

É óbvio (e o quadrinho não questiona isso) que para senhas de mesmo tamanho, as senhas mais complexas são mais difíceis de ‘adivinhar’, mas vejamos quando a diferença do tamanho das senhas é grande.

Como Jopa mostrou no comentário (e evidenciando meu erro em trocar a base e o expoente):

1) Uma senha de ‘tamanho 8’ com espaço de busca de 89 caracteres tem 89 X 89 X … 89 (8 vezes), o que dá 89^8 (e não 8^89, como você escreveu no seu texto).

89^8 é equivalente a ~4×10^15

e

2) Uma frase-senha de ‘tamanho 32’ com espaço de busca de 27 caracteres, por sua vez, tem 27 X 27 X … 27 (32 vezes), o que dá 27^32 (e não 32^27, como você escreveu no seu texto).

27^32 = ~6×10^45

Fica fácil visualizar que quando você aumenta o tamanho da senha, você aumenta o expoente da operação potencial. Enquanto aumentando o universo de caracteres utilizados, você aumenta a base da mesma operação. Podemos verificar que aumentando a potência é bem mais eficiente.

É também importante frisar que todo o cálculo foi feito considerando apenas um ataque de bruta-forca, onde se testa exaustivamente todas as possibilidades.

Outra forma de perceber que o uso de senhas assim é mais eficiente é imaginar o seguinte, tentando explicar de outra forma o que Jopa também esclareceu no comentário quando falou do diceware.

Uma senha com 4 caracteres é muito fraca, como sabemos, pois considerando o melhor caso (todos os caracteres imprimíveis) temos apenas 96 possibilidades em para cada um dos 4 caracteres, que resulta em 96^4, que é igual a 84.934.656.

De forma equivalente, imagine uma senha com apenas 4 palavras, mesmo considerando um ataque de dicionário que tenha TODAS as palavras em um idioma (ou em vários, pois você pode misturar) e certamente são bem mais que 96. Mas vamos reduzir o problema: façamos com uma lista de 1000 palavras. Teríamos que testar 1000^4 vezes, 1.000.000.000.000.

Bem mais, né? E quase tão fácil de memorizar quanto as 4 letras, talvez até mais.

O ponto que fiquei em discussão via Gtalk com Jopa foi a partir de que ponto atacar uma senha baseada em diceware é mais eficiente usando dicionário de palavras ou o conjunto de caracteres? Só conseguimos afirmar uma coisa: se soubermos qual dicionário foi usado é certamente mais eficiente fazer palavra a palavra, mas caso contrário não sei dizer.

De qualquer forma, mesmo baseada em dicionário conhecido uma frase-senha é mais forte que uma senha com caracteres especiais.

Em suma, estamos, sim, há 20 anos ensinando errado os usuários a criar senhas fortes.

Make OS X Load Your Desktop Before You Log In [Mac Tip]

0

Achei isso aqui.

 

If you want to step away from your computer while your desktop loads (without enabling the unsafe auto-login feature), this script will begin loading OS X before you log in. More »

Go to Top