O mecanismo hash é realmente seguro?
Bem, eu sempre vi (e seguindo) pessoas dizendo para usar o mecanismo de hashing para armazenar senhas no banco de dados. Estou realmente preocupado se é seguro?
Vamos com o exemplo.
Vamos dizer que eu sou hacker e eu tenho o nome do banco de dados, id e senha. Agora eu tenho acesso total ao seu banco de dados.
O que as pessoas dizem que as senhas devem ser criptografadas porque, se alguém hackeia, elas ficam visíveis para os hackers.
Então, se eu executar a consulta comoselect id, password FROM userDetails
Eu vou pegar os dados abaixo
++++++++++++++++++++++++++++
+ id + password +
++++++++++++++++++++++++++++
+ id01 + password01 +
+ id02 + password02 +
++++++++++++++++++++++++++++
Opção 2: com hash++++++++++++++++++++++++++++
+ id + password +
++++++++++++++++++++++++++++
+ id01 + hasValue01 +
+ id02 + hasValue02 +
++++++++++++++++++++++++++++
Bem, ainda digo, hashing é inseguro. Por que eu vou te dizer abaixo com código Java.
PreparedStatement pst = conn.prepareStatement("SELECT id, password FROM userDetails");
ResultSet rs = pst.executeQuery();
String randomPassword = "";
StringBuffer sb;
boolean myPassCheck = true;
while (rs.next()) {
myPassCheck = true;
while (myPassCheck) {
// this will generate random password
randomPassword = generateRandomPassword();
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(randomPassword.getBytes());
sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
}
if (sb.toString().equals(rs.getString(2))) {
// this is password
myPassCheck = false;
System.out.print("id=" + rs.getString(1) + ", password=" + sb.toString());
}
}
}
Dessa forma, posso imprimir o nome de usuário e senha. (Eu sei que terei que gerar uma senha aleatória até não encontrar a senha). No entanto, desta forma, o mecanismo de senha de hashing também falha.
Também acredito que exista decodificador presente neste mundo que converterá os dados hash em dados reais.
Por isso estou pensando
O mecanismo de hash é seguro?Editar 1Não estou falando apenas do MD5. Eu escolho o MD5 com o propósito de exemplo SOMENTE. Eu estou falando sobre qualquer mecanismo para senha segura