Muito se discute hoje sobre a segurança da informação. Nós, meros mortais, usuários de um número cada vez maior de serviços online, temos boa parte de nossa segurança à mercê de uma grande variedade de empresas de tecnologia esparramadas mundo afora.
Um problema crescente desde o advento da Internet envolve o gerenciamento de senhas de autenticação para acesso a esses serviços. Do ponto de vista técnico, políticas de segurança devem ser tomadas, tais como impor um tamanho mínimo, exigir caracteres especiais, dígitos numéricos e variação de capitalização (mistura de maiúsculas e minúsculas). Pode-se ainda incluir uma autenticação adicional como um token (chaveiro, cartão, aplicativo para celular) ou dispositivo biométrico. Cada iniciativa para dificultar ações maliciosas tem o potencial de diminuir o número de ocorrências de segurança, mas os riscos nunca serão definitivamente eliminados.
Por outro lado, um peso considerável sobre a segurança recai sobre nós. Mas, como podemos nos proteger? Como criamos senhas seguras? Primeiro, precisamos entender alguns conceitos sobre senhas.
As pessoas usam senhas fáceis e repetidas
Quando a Sony foi invadida em 2011, contas de 77 milhões de usuários foram roubadas, incluindo seus números de cartão de crédito, e-mails, logins e senhas. Pouco tempo depois, mais um milhão de usuários tiveram seus dados capturados e expostos a qualquer interessado através de um arquivo torrent.
Um especialista em segurança analisou os dados disponibilizados e descobriu alguns fatos interessantes:
- Mais de 50% dos usuários usam senhas com 7 caracteres ou menos
- 50% das senhas consistem apenas de letras minúsculas e 45% apenas de letras maiúsculas
- Apenas 4% das senhas continham alguma diversidade (números, maiúsculas e minúsculas, caracteres especiais)
- 1% das senhas continham caracteres especiais
- 36% das senhas estavam presentes em dicionários de senhas usados por hackers
Na mesma análise, comparando as senhas obtidas em dois serviços diferentes da Sony, verificou-se que 92% dos usuários usavam a mesma senha em ambos. Comparando com senhas obtidas de outro serviço fora da Sony, o reuso foi de 67%.
Definindo uma senha segura
Qualquer especialista em segurança lhe dirá que não existe nada 100% seguro. Para efeito de estudo, vamos considerar que uma senha segura é aquela onde o esforço para obtê-la é mais custoso do que o benefício advindo de tal ato.
Na área de segurança é comum usarmos o conceito de entropia para explicar a dificuldade de descobrir-se uma senha. Este termo é emprestado da física, mais especificamente da Segunda Lei da Termodinâmica, e define o grau de irreversibilidade ou desordem de um sistema. Quanto maior a entropia de uma senha, mais aleatória e complexa ela é, assim como será maior o esforço de alguém para obtê-la.
Fatores que aumentam a entropia de uma senha
A Universidade de Cambridge realizou um estudo empírico sobre segurança de senhas onde 288 estudantes foram divididos em 3 grupos: o primeiro poderia escolher uma senha qualquer, o segundo usaria um método para gerar uma senha aleatória e o terceiro usaria uma senha cujas letras eram as iniciais de uma frase qualquer.
O ataque mais efetivo foi o uso de um dicionário de palavras comuns, que conseguiu descobrir 30% das senhas escolhidas pelos alunos (primeiro grupo), 8% das senhas aleatórias e 6% das senhas com iniciais de uma frase. Em seguida, um ataque de força bruta foi realizado. Neste tipo de ataque, senhas sequenciais são geradas com base num conjunto de caracteres. Quanto menor a senha, mais suscetível ela é a um ataque de força bruta. Todas as senhas com menos de 6 caracteres foram quebradas.
A conclusão que podemos chegar até aqui é que uma senha segura contém 8 ou mais caracteres e deve ter variações de tipos de caracteres (maiúsculas, minúsculas, números e caracteres especiais). Mas senhas precisam ser fáceis de memorizar, e agora?
A questão da memorização
O quadrinho abaixo, em inglês, exemplifica uma ideia criativa para criar senhas seguras e fáceis de memorizar:
A ideia do autor, também defendida por uma parte da comunidade de segurança, é não usar uma senha complexa cheia variações especiais, pois ela seria de dificílima memorização para humanos, mas fácil de quebrar para computadores. Por outro lado, uma sequência de palavras de fácil memorização para humanos seria mais segura do ponto de vista computacional.
A princípio alguém poderia argumentar que selecionar quatro palavras não é tão diferente de uma senha de 4 dígitos, certo? Errado!
Análise combinatória da entropia das senhas: qual tipo de senha é mais segura?
Uma senha consiste numa combinação de elementos cuja ordem importa e onde existe repetição. Este é o conceito de arranjo com repetição, cuja fórmula é:
T = nr, sendo:
T = total de combinações (quanto maior, mais difícil de adivinhar)
n = quantidade de elementos (tamanho da senha)
r = número de elementos selecionados (número de possibilidades de cada caractere da senha)
Vamos aplicar esta fórmula a alguns tipos de senhas e obter o número de combinações possíveis:
- Senha de 4 caracteres composta apenas de letras maiúsculas ou minúsculas (26 elementos selecionados)
T = 426
- Senha de 8 caracteres composta apenas de letras maiúsculas ou minúsculas (26 elementos selecionados)
T = 826
- Senha de 8 caracteres composta de letras, números e caracteres especiais “!”, “@”, “#”, “$”, “%”, “&”, “*”, “_”, “.” e “-” (72 elementos selecionados)
T = 872
- Senha de 4 palavras, considerando as 3 mil palavras mais comuns de uma língua
T = 43.000
- Senha de 4 palavras, selecionadas de um mini dicionário (um “mini Aurélio” possui 30 mil verbetes)
T = 430.000
Os itens acima estão ordenados, de forma que o primeiro oferece a menor entropia e o último a maior. Portanto, senhas com palavras, ainda que contidas num dicionário, são muito mais seguras do que senhas complicadas que misturam números, letras maiúsculas e minúsculas e alguns caracteres especiais. Além disso, uma sequência de palavras é muito mais fácil de memorizar.
Senhas diferentes para sites diferentes
Você usa a mesma senha de outros sites quando faz um novo cadastro em um site qualquer? Já pensou que, se apenas uma das contas que você possui for comprometida, o hacker terá acesso a todas as suas outras contas? Voltamos ao problema da memorização: se devemos usar senhas diferentes para cada site, como poderemos lembrar-nos de cada uma delas?
Os simplistas dizem: simplesmente anote suas senhas num papel e guarde na carteira. Bem, se você já perdeu a carteira ou foi roubado, isso soa um tanto absurdo, não é mesmo?
A primeira solução apontada pelos especialistas é usar um aplicativo gerenciador de senhas. Você memoriza uma senha mestra e a usa para acessar as demais senhas. Porém, é ruim ficar dependente de um aplicativo. Se for um aplicativo para desktop você nem sempre vai estar com sua máquina ao seu lado, se for mobile alguém pode roubar seu celular e se for na nuvem (web) existem outras questões de segurança a serem consideradas.
Outra sugestão apontada em fóruns de segurança é criar um “algoritmo pessoal” baseado no site. Suponha que sua senha do Facebook seja “Eu amo o Facebook!”, então sua senha do Gmail é “Eu amo o Gmail!”. Bem, o problema com essa abordagem é óbvio: qualquer um poderia adivinhar sua senha em outro site. Soluções paliativas consistem em criar um algoritmo mais difícil do que simplesmente usar o nome do site, mas isso sempre irá cair na categoria de segurança por obscuridade, o que não é nada bom do ponto de vista da Segurança da Informação.
Uma abordagem usada por muitos, às vezes inconscientemente, é adotar três senhas principais. A primeira é uma senha com baixa entropia, usada em cadastros diversos na internet que não trazem grande risco. A segunda é de média entropia usada em serviços mais importantes e pessoais, como a conta do Facebook, blog pessoal, e-commerce, etc. A última é uma senha de alta entropia usada em serviços críticos e essenciais, como o e-mail pessoal, bancos, etc. Porém esta solução ainda não é a ideal, pois um vazamento de informação levaria a uma brecha de segurança em serviços do mesmo nível.
Além das senhas
Se você conseguiu acompanhar as informações até aqui, deve ter percebido o tamanho da dificuldade por parte dos provedores de serviços e dos usuários em gerenciar senhas. Mas, existe alguma alternativa? Felizmente, sim! Inclusive alguns acreditam que o uso de senhas é algo que deva ser abandonado.
Uma das opções que temos é o uso de certificados digitais. Por exemplo, em alguns acessos SSH e VPN configura-se o servidor para aceitar um determinado certificado e o usuário que possui esse certificado em seu sistema poderá acessar o serviço. Porém, o uso de certificados por usuários hoje é um tanto restrito a administradores de serviços e redes ou a serviços importantes como a emissão de notas fiscais online. Isso ocorre, em parte, pelo esforço que seria necessário para gerenciar os certificados por parte dos administradores de rede e, em parte, pelo custo junto às autoridades certificadoras. Além disso, certificados só funcionam bem se o computador ou dispositivo for usado somente por uma pessoa, já que eles ficam armazenados no disco.
Dispositivos biométricos são outra alternativa. Eu, que sou cliente do banco Itaú, já utilizo a autenticação por impressão digital há alguns meses no caixa eletrônico, entretanto ainda estamos um pouco longe de ter tal tecnologia disponível em todos os serviços do dia-a-dia.
Outra solução mais recente é a autenticação colaborativa, cujos exemplos mais conhecidos são OpenID e OAuth. Nesse sistema, você usa uma conta única em diferentes serviços. É o caso do “Login com Facebook” ou “Login com Google”. Ao se cadastrar em um site com suporte a essas tecnologias, você não precisa criar um novo cadastro e fornecer a senha para aquele site, apenas autoriza o Facebook, Google ou outro serviço onde você possui uma conta a compartilhar algumas de suas informações. Este mecanismo é muito interessante, pois você precisa gerenciar apenas uma senha “forte” e os demais serviços nunca chegam a processar sua senha. Num caso de invasão a um deles, um hacker não terá a menor chance de invadir outros serviços. O risco verdadeiro está em sua conta principal, mas pelo menos você sabe em quem está confiando. Porém, existe uma dificuldade em usar o OpenID de forma abrangente, pois as intranets não irão querer depender de um serviço externo para autenticarem seus usuários.
Conclusões
A criação de senhas seguras, usando diversidade de caracteres e um comprimento razoável, é importante para a segurança de nossas contas. Uma senha composta de quatro ou mais palavras é mais segura que uma senha complexa e aleatória de oito dígitos.
Mas o problema está mais embaixo. Deveríamos criar senhas diferentes para cada serviço, o que, por sua vez, dificulta a memorização. Uma solução é usarmos grupos de senhas, isto é, uma senha simples para serviços de pouca importância, outra mais segura para serviços essenciais e uma senha complexa para serviços críticos.
Existem alternativas melhores ao uso de senhas, como certificados, dispositivos biométricos e os padrões OpenID e OAuth. Infelizmente o uso desses mecanismos de autenticação é limitado por diversos fatores no mundo atual.
Enfim, não há uma solução fácil disponível hoje. Aliás, se você tiver uma, me conte e vamos ficar bilionários! 😉