perguntas

Senhas, Hash e Salt

O objetivo do Hash é identificar unicamente um determinado conjunto de dados. Você manda esse conjunto de dados para uma função de Hash, e vai obter um número, ou melhor uma sequência de bit.

Por exemplo, quero saber se um arquivo de 4GB que está num servidor é igual a outro arquivo que está na minha máquina local. Claro que se o tamanho for diferente eu já sei que não é o mesmo conteúdo. Se eu souber o Hash do arquivo de lá, posso comparar com o arquivo de cá.

Isso é usado em banco de dados. Posso fazer um Hash do meu dado, e ele vai ser o “local”, o “endereço” onde vou armazernar o dado. É mais complexo que isso, os DBA’s que me perdoem, mas o importante é dizer que índice de banco de dados é hash.

No caso da senha, ao invés de armazenar a senha no banco de dados, armazeno o Hash. O usuário para entrar no sistema, informa a senha, calculo o Hash dessa senha informada e comparo com o Hash armazenado. Ou seja, o serviço não sabe a senha. Se o banco de dados for invadido, o que se terá é apenas um Hash.

Só que há alguns problemas com Hash.

Hash’s podem geram o mesmo número para dados diferentes. No caso de banco de dados, haveria a chamada colisão de índice.

É a falha do zip por exemplo. Um zip com senha, na verdade é um zip criptografado. É gerado um Hash da senha, e esse Hash é usado para criptografar. Como mais de uma origem pode gerar o mesmo Hash, bombardeio o arquivo zip até achar um Hash compatível. Na prática, um zip criptografado tem várias senhas possíveis.

Mas o importante é que partir de um Hash, não e possível remontar ao conjunto inicial de dados. Exceto, por força bruta.

Ou seja, dado um Hash de uma senha, não é possível obter a senha novamente.

Apenas se souber o Hash e o algoritmo usado, posso remontar com força bruta, uma senha válida. De posse dessa senha válida, posso invadir o sistema.

Isso não é muito difícil, já que senhas são pequenas. É aí que entra o Salt.

Salt

Salt é uma sequência adicionada na senha.

Digamos que a minha senha é “casa”. Senha extremamente fraca, diga-se. Um sistema forte de senhas vai adicionar um extra. Exemplo: “SEQUENCIAMEGAHIPERGIGANTEcasa”

Aumentando enormemente a complexidade da minha senha. Num modelo ideal, cada senha tem que ter um Salt diferente, e portanto precisa ser armazenado para cada usuário.

Provável, que o Evernote após a invasão tenho trocado o SALT das senhas.

Gustavo Faria

de um tempo em que a UFRJ formava não cientistas da computação, mas bacharéis em informática e acompanhe as Dicas do Coca.
Fechar