CriptoGoma    Guias sobre segurança    Blog    Arquivos

Proteja sua identidade virtual com boas senhas e autenticação em duas etapas

A julgar pelas senhas mais comuns utilizadas, a maior parte das pessoas não se preocupa muito com a segurança de suas senhas. Num mundo cheio de complicações, é natural que as pessoas queiram reduzí-las ao máximo. Por que então gastar tempo e energia com uma senha complicada para proteger uma conta na internet?

mas-praticas

Todo mundo toma precauções de segurança: usamos trancas em nossas portas e guardamos nossos documentos junto a nós ou em lugares protegidos, por exemplo, pois sabemos que há pessoas dispostas a roubar nossos bens ou usar nossos documentos para fazer todo tipo de coisas se passando por nós. Estes são bem físicos e familiares, e é intuitivo que é necessário protegê-los. Contas na internet por outro lado são virtuais e “invisíveis”, e acaba sendo mais fácil ignorar as ameaças. Entretanto estas contas, e as senhas que as protegem, compõem a nossa identidade na internet. E, ainda que em nosso mundo a fusão de nossas identidades físicas e virtuais não seja tão avançada quanto em Hyper-Reality, nossas identidades virtuais possuem efeitos diretos no mundo físico, pois controlam o acesso a nossas informações pessoais, conversas, fotos comprometedoras, dinheiro e até mesmo nossos caminhos por aí.

Senhas são o principal mecanismo que impede que qualquer um acesse estas informações ou finja ser você na internet, apesar de poderem ser frustrantes como todas que já tiveram que fazer senhas para o sistema chato que exige maiúsculas, números, caracteres especiais e alfabetos alienígenas sabem. Além dessa frustração toda, senhas podem ser um pouco contraintuitivas: talvez a sua senha nerd de 10 caracteres contendo a sequência de Fibonacci, referências a Star Trek e leet não seja tão mais segura que nome do cachorro + data de nascimento.

Nosso objetivo aqui é ajudar você a manter um nível razoável de segurança sem grandes complicações.

identidade

Quais são as ameaças?

É impossível possuir segurança completa, e perseguí-la pode ser contraproducente: enfrentar a sensação de que é impossível proteger tudo pode fazer você desistir e não proteger nada. É melhor avaliar exatamente o que você precisa proteger, e de quem.

No caso das senhas, provavelmente a ameaça mais comum é causada pela reutilização de senhas e por vazamentos de bancos de dados de usuárias. A maior parte das pessoas usa algumas poucas senhas para proteger todas as suas contas na internet, às vezes com variações menores, como troca de uma maiúscula por uma minúscula ou coisa parecida. Esta é uma prática bastante perigosa, pois cada vez que você cria uma conta num site, este site vai guardar de alguma forma a sua senha para verificá-la no futuro, o que a torna vulnerável a um ataque onde alguém rouba o banco de dados de senhas e usuárias deste site e acaba recuperando sua senha (isto nem falando na possibilidade do site vender suas senhas para alguém).

É claro que existem formas adequadas de um site proteger sua senha. Um site seguro sequer vai guardá-la diretamente, mas vai antes realizar sobre ela uma operação, chamada hash, e ao invés disso vai guardar este resultado. Por exemplo, se sua senha for feijãocomarroz, o site guardará 4186e7ee5f4f0c8e0fd9f73993c5ee0a7c9c7ac4. Quando você for tentar logar, o site vai pegar sua senha, fazer a mesma conta, e verificar se o resultado é igual. Mesmo se sua senha mudar só um pouco, para feijaocomarroz por exemplo, o hash muda bastante, para 311de34ab23fcbc971f04376c6425004aeafc305, e é virtualmente impossível “desfazer” a conta feita e a partir do hash obter de volta a senha original. Além disso, esta operação deve ser feita de forma que senhas iguais de usuárias diferentes sejam guardadas de formas diferentes. Se a implementação deste sistema for segura, mesmo que uma atacante consiga a lista de usuárias e hashs de senhas vai ser mais difícil descobrir sua senha, pois ela precisará testar muitas possibilidades de senhas para todas as usuárias até acertar as senhas corretas.

Mas nem todo site tem um sistema seguro, e muitos guardam sua senha mesmo, sem nenhuma forma de ofuscação. Estes sites frequentemente tem vulnerabilidades e as senhas acabam vazando. Este é o risco de usar a mesma senha em todos os lugares: sua senha é tão segura quanto o site mais fraco. E isto provavelmente significa que sua senha JÁ vazou, e talvez alguém que saiba usar mecanismos de busca de forma esperta consiga encontrá-la rapidamente. Inúmeros sites, incluindo empresas grandes e supostamente respeitáveis, já vazaram senhas, muitas vezes com proteções muito rudimentares (ou sem proteção nenhuma). Você pode checar se sua senha já vazou no haveibeenpwned.

vazamentos

Para entender o risco disso, talvez ajude considerar uma situação hipotética. Alice trabalha no hospital Nomedesanto, e tem acesso ao sistema de informações médicas de pacientes com seu usuário. Ela usa o mesmo nome de usuário que em todas as suas contas, alice_silva, e sua senha é paisdasMaravilhas. Malvina deseja, por motivos malignos, obter as informações da paciente Bárbara. No site do hospital Nomedesanto ela descobre que Alice trabalha lá, e rapidamente descobre que no vazamento do site vendemosTênis há uma usuária alice_silva com senha Paisdasmaravilhas. Após três tentativas no sistema mal configurado exposto à internet do Nomedesanto ela consegue logar, e em menos de meia hora tem as informações médicas de Bárbara.

A situação hipotética acima pode ser variada de inúmeras formas, e deve ter dado pra perceber o risco. De certa forma ela é o pior dos casos, mas a situação não melhora muito mesmo se Malvina conseguisse apenas um hash: ela poderia montar uma lista com muitas possibilidades de senhas e testá-las rapidamente em seu computador (em poucos segundos é possível testar milhares ou mesmo milhões de senhas). Há listas disponíveis na internet com milhões de senhas já descobertas, e Malvina facilmente poderia montar a sua própria, incluindo as variações e padrões mais comuns utilizados pelas pessoas, como trocas de letras por números, letras maiúsculas no começo ou fim da senha, e assim por diante. Outra maneira de montar uma lista destas seria investigar o perfil de Alice em várias redes sociais, e coletar informações como nome do cachorro, cidade e data de nascimento. Em qualquer um dos casos a senha de Alice seria descoberta em segundos (e o mesmo vale para as senhas da maior parte das pessoas!).

Como proteger minhas contas?

Evitando senhas únicas: gerenciadores de senhas

Todo mundo tem dezenas de contas espalhadas pela internet. Como então manter senhas únicas da forma mais descomplicada possível? Para isto existem os gerenciadores de senhas, programas que armazenam suas senhas de forma segura, normalmente protegidas por uma senha-mestra. Aqui descreveremos o Keepass2, um gerenciador livre, fácil de usar e que passou por algumas auditorias de segurança.

Instalando o Keepass2

Se você usar GNU/Linux, Keepass2 já está disponível no gerenciador de pacotes de sua distribuição. Para Windows, você pode baixá-lo neste link. O Keepass2 também possui uma versão portável, mas é importante lembrar que ele não te protege caso o sistema esteja comprometido, logo não é aconselhável utilizá-lo em computadores não confiáveis.

Instalando a tradução para o português

Talvez sua instalação do Keepass2 esteja em inglês. Para instalar a tradução para o português:

  1. Vá até a página oficial de traduções, e procure pelo link da tradução para o português da versão 2
  2. Em sistemas GNU/Linux, extraia o arquivo zip e mova-o para a pasta /usr/lib/keepass2
  3. No Windows, extraia o arquivo zip, volte para o Keepass2 e acesse o menu View -> Change Language. Aperte o botão ‘Open Folder’ e mova o arquivo extraído para a pasta que será aberta.
  4. No menu View -> Change Language, clique na entrada Portuguese (Brazil), e reinicie o Keepass2. instalação-tradução-keepass2

Criando um banco de dados de senhas

  1. Crie um novo banco de dados indo no menu Arquivo->Novo…, ou pressionando Ctrl+N criando-banco-keepass1
  2. Selecione uma pasta e nome de arquivo para seu banco de dados, e salve
  3. Digite sua senha-mestre, e repita. criando-banco-keepass2
  4. (opcional) Crie um arquivo de chaves, que será necessário conjuntamente a sua senha para abrir sua base de dados. Este arquivo deve ser salvo em um pendrive ou meio seguro (também é importante manter um backup guardado em um lugar seguro).
  5. Na página seguinte, após pressionar Ok, vá à aba Segurança, e aumente o número de iterações padrão. Isto torna um ataque de força bruta em sua base de dados mais lento, mas tenha em mente que o tempo necessário para abrir e salvar sua base de dados também aumenta. Uma boa opção é pressionar o botão “1 Segundo de pausa”, que automaticamente computa o número de iterações de forma que seu computador atrase 1 segundo. Pressione Ok e pronto, seu banco de dados está criado! criando-banco-keepass3

Criando uma nova senha

  1. Selecione o ícone de Adicionar Entrada, ou pressione Ctrl+I criando-nova-senha-keepass1
  2. Abra o Gerador de Senhas criando-nova-senha-keepass2
  3. Selecione as configurações da senha que deseja gerar, e salve-as criando-nova-senha-keepass3
  4. Selecione a configuração salva, e uma senha aleatória será gerada criando-nova-senha-keepass4
  5. Preencha as informações adicionais desta conta e salve a entrada selecionando o botão Ok.
  6. Não se esqueça de salvar as alterações no banco de dados, pressionando Ctrl+N ou clicando no ícone “Salvar”.

Utilizando a função auto-digitar para digitar automaticamente uma senha

  1. Abra a página de login da conta que deseja acessar, e clique no formulário referente ao nome do usuário autodigitar-keepass1
  2. Pressione Alt+Tab até encontrar a janela do Keepass2
  3. Selecione a entrada corresponde à conta. Você pode usar o mecanismo de busca do Keepass2 (basta pressionar Ctrl+E, ou clicar) autodigitar-keepass2
  4. Tecle Ctrl+C. Keepass2 automaticamente voltará à janela da página de login e digitará seu nome de usuário e senha. autodigitar-keepass3

Fazendo senhas aleatórias fáceis de lembrar: Dadoware

Dadoware é um método de gerar senhas compostas por palavras aleatórias usando dados. Somos razoavelmente bons em memorizar sequências curtas de palavras aleatórias, já que conseguimos criar histórias, situações fictícias ou mnemônicos para isto. Um exemplo clássico é o da tirinha do xkcd, correto-cavalo-bateria-grampo.

xkcd

O método dadoware é bastante simples, usando um livreto e um dado. Jogue o dado 5 vezes, e anote os números. O número formado pelos dois primeiros corresponde à página do livreto a consultar, e os três dados restantes fornecem o número da palavra naquela página. Fazendo este processo várias vezes você produz uma sequência de palavras aleatórias, que passam a ser sua senha. O livreto pode ser consultado aqui. Se não dispor de dados, você pode criar um perfil no Keepass2 para gerar os números necessários. Para gerar os números referentes a uma senha de 6 palavras, por exemplo, basta introduzir o padrão [123456]{5}-[123456]{5}-[123456]{5}-[123456]{5}-[123456]{5}-[123456]{5} no Gerador de Senhas.

dadoware-no-keepass2

Que tamanho mínimo deve ter minha senha?

É difícil dar uma resposta única para esta pergunta, pois isto depende bastante de quem é sua adversária e do contexto. Vamos aqui fazer algumas estimativas bastante paranóicas.

adversaria

Vamos assumir que sua adversária possui 100.000.000 de vezes mais poder computacional que você (esta é a ordem de grandeza da razão entre o poder computacional dos maiores supercomputadores e dos pcs típicos hoje), e vamos estabelecer um tempo-limite de quebra da senha de 1 ano. Vamos considerar três situações:

  • Keepass2 com banco de dados configurado de forma que a verificação da senha demore 1 segundo
  • Sistema de autenticação seguro (usando hashes bcrypt)
  • Sistema de autenticação inseguro (usando hashes MD5)

Vamos assumir que um computador comum com GPU seja capaz de cerca de 13000 tentativas/s contras hashes bcrypt, e de 25 Milhões de tentativas/s contra hashes MD5 (baseado nestes testes). Neste caso, sua adversária é capaz de tentar um total de

  • 3.1536 quatrilhões de senhas Keepass2 (espaço de chaves de 51.5 bits)
  • 4.0997 * 10^19 senhas bcrypt (65.2 bits)
  • 7.884 * 10^22 senhas MD5 (76.1 bits)

Vamos finalmente considerar três tipos de senhas: palavras-passe escolhidas usando o dadoware, caracteres aleatórios base64 (i.e., contendo letras maiúsculas, minúsculas, dígitos e os símbolos + e ) e apenas letras minúsculas e números. Neste caso, o número de possíveis valores para cada palavra/caracter é

  • dadoware: 7.776 possibilidades (12.9 bits)
  • base64: 64 possibilidades (6 bits)
  • alfanumérico: 36 possibilidades (5.2 bits)

O número mínimo de palavras/caracteres pode então ser obtido dividindo o número de bits do espaço de chaves pelo de cada palavra/caractere, e obtemos a seguinte tabela:

  dadoware base64 alfanumérico
Keepass2 4 palavras 9 caracteres 10 caracteres
sistema seguro (bcrypt) 6 palavras 11 caracteres 13 caracteres
sistema inseguro (MD5) 6 palavras 13 caracteres 15 caracteres

Isto assume que sua senha é completamente aleatória. Isto quer dizer, gerada usando dados ou geradores de números aleatórios criptograficamente seguros. Mesmo selecionar senhas que parecem mais bonitas ou pronunciáveis pode afetar esta aleatoriedade.

É entretanto possível gerar senhas que parecem aleatórias o suficiente. Partindo de uma frase e tomando apenas primeiras letras e fazendo modificações é possível gerar senhas como

  • “Quando acordei hoje de manhã, eu sabia quem eu era, mas acho que já mudei muitas vezes desde então” -> qAhdmeSabiaqEemaqjmmvde
  • “Não é que eu goste de complicar as coisas, elas é que gostam de ser complicadas comigo.” -> nÉqeuGostedCac33qgdscc

Estas senhas são seguras hoje, mas não é impossível imaginar um ataque de dicionário, talvez até personalizado, que as derrote. As senhas ficam um pouco mais seguras se você dificultar a inclusão delas em alguma lista: ao invés de usar frases vindas de um livro, letra de música ou citação famosa é um pouco melhor criar situações aleatórias:

  • “O rato verde acabou de comer cinco leões cor-de-rosa” -> oRVadcomer5Lcdr
  • “As pedras da Lua são excelentes para tratar infecções urinárias de quatis” -> apdLsexcelentespt1udQ

Ainda assim, se possível, é melhor ficar com uma palavra passe ou senha aleatória.

Utilizando autenticação em dois passos

Outra estratégia para aumentar sua segurança é utilizar autenticação em duas etapas. A ideia aqui é que o sistema exija, além de sua senha, algo que você têm (fisicamente, mesmo). Assim, mesmo que alguém descubra sua senha pois, por exemplo, você a utilizou em um computador público comprometido, ainda não conseguirá entrar em sua conta, a menos que roube seu dispositivo de autenticação. O dispositivo de autenticação normalmente é um token que te fornece um código de acesso. Uma alternativa próxima a isso é usar seu celular como dispositivo de autenticação, seja enviando códigos por mensagens SMS ou usando algum aplicativo que te fornece o código de acesso. Vários serviços online bastante usados já disponibilizam autenticação em duas etapas, incluindo email, redes sociais e mesmo ssh (você pode checar aqui pelos serviços que você usa). Normalmente, o dispositivo de autenticação usado é seu celular. Assim, quando você for logar no sistema, após digitar sua senha correta receberá uma mensagem de texto com um código de segurança de uso único. Note que existem implicações para sua privacidade em associar seu número de celular à sua conta.

chave-velha

Conclusão

Sim, senhas pode ser um assunto muito longo e, embora interessante, cansativo para a maior parte das pessoas. Por isso, vamos agora sumarizar as conclusões e recomendações aqui:

  • Não use, em hipótese nenhuma, a mesma senha em suas diversas contas online!
  • Para guardar suas senhas de forma segura, utilize de preferência um gerenciador de senhas, como o Keepass2. Alternativamente você também pode escrevê-las em papel e guardá-las de forma segura. Mas não as deixe soltas por aí, nem marque-as em lembretes afixados em sua mesa ou na tela de seu computador!
  • Use senhas aleatórias em todas as suas contas que possuem informações pessoais ou que precisem ser protegidas por alguma razão. Se geradas usando o método dadoware, use senhas de ao menos 4 palavras para o Keepass2 e 6 palavras para contas na internet. Alternativamente, gere senhas parecidas com senhas aleatórias usando alguma frase ou mnemônico, contendo pelo menos 10 caracteres para o Keepass2, 13 para contas na internet em sistemas seguros e 15 para contas em sistemas potencialmente inseguros.
  • Ative autenticação por duas etapas quando suportada.
  • Troque suas senhas regularmente (a cada 6 meses por exemplo).

Troque suas senhas agora! Comece com as mais importantes, como do email (lembre-se que se alguém conseguir seu email todo o resto não importa, já que basta usar a recuperação de senha para mudar as demais). Não tem problema usar um lembrete em papel carregado na sua carteira enquanto você a decora, você provavelmente não vai mais precisar dele em alguns dias. E bem, senhas não protegem o que você deixar público em primeiro lugar. A quantidade de informação obtida pelas grandes empresas de tecnologia é tão grande que uma adversária talvez consiga tudo o que precisa para suas malignicências só a partir de informações públicas, ou comprando-as de algum corretor de dados (leia mais aqui). Talvez seja bom repensar o valor da privacidade para você, e mudar alguns hábitos.