Senhas

Acho que você, provavelmente, já topou com esse tipo de regra para criação de senhas: Mínimo de 6 caracteres, contendo letras, números e caracteres especiais. E troque a senha de tempos em tempos… A maioria das empresas que conheço usam essas regra simples. Sabe de onde elas vieram?

Tem um monte de gente que acha que isso é uma daquelas coisas de “senso comum”, mas a regra veio de uma recomendação do NIST (National Institute of Stantards and Technology), um instituto governamental norte-americano que dita normas usadas pelo governo e que acabam sendo acatadas pela indústria em geral… Pois bem, este padrão foi criado em 2009 e aposentado em 2016 (veja aqui) porque este tipo de metodologia não ajuda muita coisa, ao contrário do que pensam alguns “especialistas” em segurança! Na realidade, só atrapalham o maior interessado: o usuário!

Hoje, com GPUs mais poderosas, é possível “adivinhar” uma senha de 6 caracteres em poucos segundos, usando força bruta! Alguns algoritmos conseguem testar bilhões de senhas possíveis por segundo. Uma senha montada de acordo com a regra citada anteriormente, mesmo considerando que as letras possam ser diferenciadas entre maiúsculas e minúsculas, pode ser quebrada em menos de 1 dia num PC (alguns minutos num supercomputador ou num cluster de GPUs).

Recomendo que você dê uma olhada no site GPC’s Password Haystacks para avaliar a sua senha…

Um outro esquema usado é a transmissão e armazenamento de hashs (MD5 ainda é usado em aplicações, hoje em dia!) e, ainda por cima, com um “salzinho” para tornar a coisa mais difícil… Acontece que o argumento acima continua valendo: Embora uma senha com hash SHA256 seja mais difícil de “quebrar”, processadores e GPUs modernas são capazes de testarem, literalmente, bilhões de possibilidades por segundo… Se você usar um cluster de GPUs, através de OpenCL, literalmente trilhões de testes por segundo podem ser feitos… Eis um deles:

Computador do meio com 7 placas GTX1080 em SLi, só para cracking!</small)
Computador do meio com 7 placas GTX1080 em SLi, só para cracking!

O software usado? Está disponível gratuitamente e é FOSS. Por exemplo, o ocl-hashcat e o rainbowcrack.

Senhas de 6 caracteres e, hoje em dia, inferiores a 12 (até 2016, pelo menos!), são facilmente quebráveis… Mas, e quanto a trocar a senha frequentemente?

Existe o fator psicológico aqui… Forçar o usuário a trocar a senha frequentemente faz com que ele tenta a usar a mesma senha, com algumas pequenas modificações… Por exemplo, se a senha for “secreta” (exemplo de senha!), das próximas vezes ele mudará para “secreta2”, “secreta3”, “secreta!”, “secreta?!” etc. É claro que o usuário tende a fazer isso porque não precisará se lembrar das novas senhas, mas apenas da pequena modificação.

O que fazer?

A primeira coisa é evitar usar esquemas de autorização de acesso que peçam login/senha. Por exemplo, uma grande quantidade de sites vêm usando a estrutura de autenticação do Google e do Facebook para permitirem acesso de usuários… O Google e o Facebook tiveram um trabalhão para criarem um esquema de login que seja seguro o suficiente e, como eles fornecem isso como serviço, tendem a manter o esquema cada vez mais seguro… Se seu sistema é online, usar a autenticação do Google pode ser uma boa idéia, especialmente por causa do Android…

Mas, se sua aplicação não for online, ao invés de usar login e senha, vale a pena investir um pouco num “security token”… Esses “tokens” podem ser usados na forma de smartcards, cartões RFI ou pendrives. Em essência, você tem um certificado do usuário, assinado pelo proprietário do software, que lhe permitirá tanto verificar a autenticidade da identidade do usuário (assumindo que só ele tem o token) quanto a autorização para o acesso… NENHUMA SENHA É NECESSÁRIA!

Mas, mesmo que login/senha seja algo que você não quer abrir mão, forçar um conjunto de regras pode ser uma boa ideia desde que matematicamente eficientes (“senso comum” não vale de nada!)… Por exemplo: Forçar o mínimo de 6 caracteres com letras, números e especiais é boboca porque uma senha como “aaaa@1” é válida e, provavelmente, uma das primeiras que vai ser testada num método de força bruta… A regra mais interessante é garantir que a entropia da senha seja maior que um certo valor… Infelizmente, calcular entropia de informação é algo um tanto quanto complicado (veja aqui) e, quando se aplica a senhas, meio subjetivo…

Não tema! Um dos meios mais seguros, do ponto de vista do usuário, atualmente, é o uso de passphrases e pode ser exemplificado por essas tirinhas do xkcd:

password_strength

Como qualquer pessoa pode perceber, bolar uma frase sem sentido, engraçada e que lembre alguma coisa apenas para o usuário em questão, além de aumentar a quantidade de bits de entropia (calculado como n\lg\,c, onde c é a quantidade de caracteres que podem ser usados numa única posição e n é o tamanho da string), torna a senha muito mais fácil de lembrar e difícil de ser “adivinhada”.

Durante algum tempo usei a senha (cunhada por um conhecido) “chuta que dá, certo?”…

Anúncios