funções hashing são confundidas por algoritmos de criptografia por que?

e ai pessoal
estava estudando sobre segurança,
e achei bastante material bom falando sobre criptografia, assinatura digital, funções hashing, e por ai vai
ai descobri que MD 5 e SHA são funções hashing e não algoritmos de criptografia

mas então por que dizem use criptografia MD 5 para armazenar a senha dos usuários no banco de dados, assim se alguém abrir o banco de dados vai ver uma serie de letras símbolos e números sem sentido, dessa forma a senha dos usuários ficam mais seguras

em parte essa afirmação é verdade, se um projeto de script kiddle invadir a sue banco de dados vai ver essa serie e não as senhas
mas se alguém mais experiente vai notar que é uma especie de algoritmos que embaralhou a senha, e é só questão de tempo para entender. Obvio se chegar a esse ponto ambos merecem respeito.

mas a questão é por que confundem criptografia de hash?

é uma boa opção usar funções hashing para armazenar senhas por que?
ou é melhor usar criptografia, que eu acho que não faz sentido, por que?

[quote=jaissonduarte]e ai pessoal
estava estudando sobre segurança,
e achei bastante material bom falando sobre criptografia, assinatura digital, funções hashing, e por ai vai
ai descobri que MD 5 e SHA são funções hashing e não algoritmos de criptografia

mas então por que dizem use criptografia MD 5 para armazenar a senha dos usuários no banco de dados, assim se alguém abrir o banco de dados vai ver uma serie de letras símbolos e números sem sentido, dessa forma a senha dos usuários ficam mais seguras

em parte essa afirmação é verdade, se um projeto de script kiddle invadir a sue banco de dados vai ver essa serie e não as senhas
mas se alguém mais experiente vai notar que é uma especie de algoritmos que embaralhou a senha, e é só questão de tempo para entender. Obvio se chegar a esse ponto ambos merecem respeito.

mas a questão é por que confundem criptografia de hash?

é uma boa opção usar funções hashing para armazenar senhas por que?
ou é melhor usar criptografia, que eu acho que não faz sentido, por que?
[/quote]

Olha, não sei porque confundem, já que o objetivo de hashs é o de evitar “colisões”.

Imagino que para senhas é melhor usar criptografia, mas existem aplicações que verificam hashs como é o caso de alguns servidores. Talvez esse seja o caso de usar senhas de hashs. Mas essa é uma opinião pessoal minha, e não é regra.

[quote=jaissonduarte]e ai pessoal
estava estudando sobre segurança,
e achei bastante material bom falando sobre criptografia, assinatura digital, funções hashing, e por ai vai
ai descobri que MD 5 e SHA são funções hashing e não algoritmos de criptografia

mas então por que dizem use criptografia MD 5 para armazenar a senha dos usuários no banco de dados, assim se alguém abrir o banco de dados vai ver uma serie de letras símbolos e números sem sentido, dessa forma a senha dos usuários ficam mais seguras

em parte essa afirmação é verdade, se um projeto de script kiddle invadir a sue banco de dados vai ver essa serie e não as senhas
mas se alguém mais experiente vai notar que é uma especie de algoritmos que embaralhou a senha, e é só questão de tempo para entender. Obvio se chegar a esse ponto ambos merecem respeito.

mas a questão é por que confundem criptografia de hash?

é uma boa opção usar funções hashing para armazenar senhas por que?
ou é melhor usar criptografia, que eu acho que não faz sentido, por que?
[/quote]

Olha, não sei porque confundem, já que o objetivo de hashs é o de evitar “colisões”.

Imagino que para senhas é melhor usar criptografia, mas existem aplicações que verificam hashs como é o caso de alguns servidores. Talvez esse seja o caso de usar senhas de hashs. Mas essa é uma opinião pessoal minha, e não é regra.

opa juliocbq
problemas com a Internet :smiley:

Voce utiliza criptografia quando quer amarzenar algo com segurança, mas precisa recuperar a informação depois.

Com MD5 e SHA, é impossível voce descobrir com certeza qual era a palavra original.
Voce pode no maximo, tentar descobrir a palavra ou outras, que resultem no mesmo hash.

Quando armazena somente o hash da senha, voce garante que em nenhum lugar foi armazenada a senha original.
Dessa forma, nem mesmo as pessoas com acesso a base de dados, saberão a senha escolhida.

Com criptografia, basta saber a chave utilizada para criptografar e o algoritmo, e é possivel obter a senha original.

Com hashing, mesmo sabendo o algoritmo, voce não consegue essa informação.

Por isso o método de armazenar o hash das senhas é muito mais seguro do que armazenar a senha criptografada.

Entendo por funções de hash criptográfico(MD5,SHA-1…) é uma criptografia de mão unica, uma vez gerado o hash da informação não é mais possivel obter a informação inicial, e assim sendo é bastante recomendavel seu uso para senhas como dito aqui :
http://blog.caelum.com.br/guardando-senhas-criptografadas-em-java/
Uma resalva quanto ao emprego desse metodo seria creio a necessidade de se obter a senha legivel, como em uma situação em que o usuario esqueceu sua senha a qual tinha grande apego sentimental :roll: e não admite uma nova senha exigindo usar a mesma que ele tinha anteriormente(???) .

Post Scriptum: Desnecessária minha resposta após a do AbelBueno :slight_smile:

por isso que eu adoro o GUJ
vocês são bons mesmo, valeu pelas ajudas
muito esclarecedor

Só para deixar claro, é dificílimo entender qual foi a sequência de entrada que gerou um hash. O embaralhamento da senha não é simples e, conhecer em detalhes o algorítmo só te levará a conclusão de que ele é mesmo irreversível.
É bom lembrar que:

  • A sequência de entrada pode ter qualquer tamanho;
  • As chances de achar uma sequência diferente que gere o mesmo hash são ínfimas, pense que a sequencia SHA-1 varia entre 160 bits (20 bytes). No caso do SHA-1 a chance de colisão é 1 em 2^51. No SHA-2, não há colisões conhecidas.
  • Ainda que a pessoa ache, essa a sequência encontrada pode não ser a senha do usuário. Isso protege a invasão de sua conta em outros sites, caso repita esse usuário repita a senha.

Ataques comuns a bancos com senhas armazenados na forma de hash geralmente não estão em entender a senha, mas em substitui-la por um outro hash, conhecido pelo hacker.

Como o Abel falou, o hash ainda tem a vantagem de proteger o usuário de um ataque interno, como o administrador do banco de dados ou o próprio programador do sistema.

É por isso que atualmente, para se restaurar uma senha, sua senha é resetada para um valor aleatório.
O sistema pode gerar uma nova senha, calcular seu hash e sobrescrever sua senha atual, sem que ninguém fique sabendo qual era sua senha antiga.

perguntinha
nas minhas pesquisas achei as SHA 1, SHA 2, SHA 256 e SHA 512
são 2 SHA ou são 4 SHA?

SHA-2 é o nome genérico que se dá à família de hashes com diferentes tamanhos - SHA-256, SHA-384 e SHA-512 - que têm, respectivamente, 256, 384 e 512 bits, e que substituem o SHA-1 (de 160 bits).