Todo mundo coleciona senhas como Pokémons, tem uma pra cada site.
O problema é que elas são na maioria das vezes inseguras e podem ser roubadas facilmente. Aqui fica um guia completo de como cuidar de suas senhas, desde de como elas são roubadas até como gerenciar várias senhas.
Como Senhas São Armazenadas
Nos sites (pelo menos nos decentes) que permitem cadastro de usuários, as senhas não são armazenadas da forma que são digitadas pelo usuário. Caso fossem, um hacker com más intenções poderia invadir o site e conseguir as senhas de todos os usuários – boa parte (provavelmente você também) usa a mesma senha em vários sites diferentes, e então o hacker poderia roubar contas de vários serviços com uma só invasão.
Em vez disso, os sites guardam o hash da senha digitada pelo usuário. Mas o que é isso de hash?
Hash
O hash de uma sequência de bits (que pode ser um texto, uma imagem, uma música) é, a bem grosso modo, uma sequência de caráteres gerada através de um algoritmo (no caso, uma série de cálculos matemáticos), de forma que essa sequência de caráteres tenha um tamanho pequeno e fixo.
Os algoritmos que geram hashes são feitos de forma que uma alteração mínima na entrada (o texto, imagem, música etc) gera um resultado totalmente diferente.
Outra característica desses algoritmos é que é impossível fazer o processo inverso: pegar o valor do hash e calcular a entrada que o gerou. Justamente nesse ponto, o hashing difere da criptografia. Na criptografia, a intenção é esconder os dados, de forma que quem esteja autorizado a vê-los (ou seja, quem tem a senha de decodificação) possa ter a informação original de volta.
Para os exemplos desse artigo, vamos usar o algoritmo MD5.
Texto | Hash MD5 do texto |
teste | 698dc19d489c4e4db73e28a713eab07b |
testE | 0e7c670dba0c532a664757db32ed2099 |
Eu sou um texto longuííííssimo, e mesmo assim gero um hash com o mesmo tamanho! Isso não é incrível? Eu acho! Sério, acho mesmo. | 6a7d4d41f06b069a472b08e8f3b8ed4be |
Hashes possuem dois usos principais:
- Verificar a integridade de arquivos. Quando um arquivo vai ser transportado de um computador para outro, o lado de origem calcula o hash do arquivo. Em seguida, o arquivo é transportado, e o hash é novamente calculado (obviamente, utilizando o mesmo algoritmo). Se o arquivo estiver corrompido (partes dele foram perdidas ou bits foram trocados), por menor que seja a alteração, o hash terá um valor completamente diferente do original.
- Armazenar senhas em bancos de dados de forma segura. E é nisso que estamos interessados!
Como Acontece A Mágica
Quando você se cadastra em um site, ele calcula o hash relativo à sua senha, e guarda ele junto com o nome de usuário. A senha que você digitou, ele joga fora.
Quando você faz login, nome de usuário e senha são enviados pela Internet até o servidor.
Lá, calcula-se o hash da senha enviada, e é conferido se a entrada do banco de dados de usuários com o mesmo nome de usuário que foi apresentado tem o campo “senha” igual ao hash calculado. Se ambos os campos baterem, o servidor autentica você, envia uma nova página pro seu computador mostrando que você autenticou, o menu de usuário etc. Caso não, ele dá o erro de “usuário ou senha não encontrados”.
Agora, o motivo pelo qual hashes são usados para armazenar as senhas: Suponha que o servidor foi invadido. O invasor tem acesso ao banco de dados dos usuários. Em vez da senha do usuário, o que ele vê é o hash. E como dissemos, é impossível obter a senha original a partir disso. É claro, ele pode fazer o servidor e o site de gato e sapato, pode falsificar ações do usuário (como fazer compras por ele, se for um site de compras). Mas o estrago só será feito naquele site: Mesmo que o usuário use a mesma senha em todos os sites que se cadastra, o invasor não sabe que senha é essa.
Veja o próximo da série: Como Cuidar de suas Senhas – Parte 2