Como sites com login não guardam sua senha (e por que não devem) - parte 1

Já reparou que quando você clica no botão de "esqueci a senha", a maioria dos sites não te manda a sua senha de volta por e-mail, mas sim um link pra que você possa a redefinir? Isso é porque pra um site que siga boas práticas de segurança, é impossível te mandar a sua senha esquecida.

O Facebook, por exemplo, como qualquer outro site grande, tem um banco de dados enorme com informações sobre seus usuários. Funcionários têm acesso a esse banco de dados, e pode acontecer de um hacker conseguir acesso também.

Se o Facebook guardasse a senha de seus usuários, qualquer funcionário ou hacker com acesso conseguiria entrar na conta de qualquer usuário! Pior, muita gente usa a mesma senha em vários lugares, então um vazamento de um único site pode significar a perda de contas de e-mail, banco, ou qualquer outra coisa. Por sorte e um pouco de engenharia, existem mecanismos para que os sites não guardem a senha original de nenhum usuário.

Mas oras, como isso pode acontecer se eles têm que verificar se minha senha está certa toda vez que faço login?

O padrão de indústria é usar uma função hash. Uma função hash nada mais é do que uma operação pelo qual um dado (como a sua senha) passa, pra que fique irreconhecível.

Por exemplo, a senha passarinho4231, quando passada pelo algoritmo de hash bcrypt, resulta na seguinte saída:

$2y$12$/StUqF1.tm3uUjVLliB3hejROq6vxXGanNqXhAlR6Mysmw7g51pyu

O importante é que ela não tem significado e nem lembra do dado original.

Os três pontos fundamentais de uma função hash são que

  • A mesma entrada gera sempre a mesma saída
  • Uma pequena modificação na entrada gera uma saída totalmente diferente
  • A operação é irreversível; é impossível obter a entrada se conhecendo só a saída

Para demonstrar o segundo ponto, veja como fica a saída do mesmo algoritmo quando a entrada é passarinho4232, uma pequena modificação ao que vimos antes:

$2y$12$GzDhHIrJ.uY1Lu3WLZvrHuDaF6RV3qJZi9OXws8IxY0g8moma1evS

Viu só? Fora o começo, que indica a versão do algoritmo, todo o resto está completamente diferente.

O Facebook então não guarda a minha senha, mas sim o resultado do hash dela. Quando faço login fornecendo uma senha, ele aplica essa mesma função de hash e compara o resultado com o que tem guardado no banco de dados. Como a saída é sempre igual pra uma mesma entrada, se baterem é porque a senha confere. Assim, o Facebook consegue validar que eu sou eu, e se alguém conseguir acesso ao banco de dados, nunca vai conseguir descobrir a senha que usei, só o hash que não pode ser revertido.

Quando um site te envia a senha cadastrada por e-mail, ou de alguma outra forma a mostra totalmente ou parcialmente, é porque ele não segue essas práticas, e sua senha está sujeita a ser vazada.

Isso acontece principalmente com sites menores, pela minha experiência. Certa vez, antes de comprar uma passagem rodoviária pelo site de uma empresa de transporte pequena local, fiz o teste de "esqueci a senha", e recebi a senha original no e-mail. Se eles não cuidam bem da minha senha, não tenho motivo pra acreditar que vão fazer melhor com os dados do meu cartão de crédito! É mais penoso, mas fui à rodoviária e paguei com dinheiro. Se tivesse outra opção, iria pra uma concorrente.

Isso ressalta também a importância de usar senhas diferentes pra cada site. Nesse ponto, o que pode ajudar bastante é um gerenciador de senhas. Eu uso e recomendo o BitWarden, é gratuito e muito conveniente e fácil de usar.

Isso é o básico, e o mínimo de segurança na questão de senhas que um site precisa usar. No próximo post, vamos um pouco além, explorando as fraquezas desse método e o que é feito pra complementá-lo e deixá-lo 100% seguro.  

Até lá!

Show Comments

Get the latest posts delivered right to your inbox.