czy mechanizm mieszający jest naprawdę bezpieczny?

Cóż, zawsze widziałem (i następuję) ludzi mówiących o używaniu mechanizmu mieszającego do przechowywania haseł w bazie danych. Naprawdę się martwię, czy to bezpieczne?

Pójdźmy z przykładem.

Powiedzmy, że jestem hackerem i dostałem twoją nazwę bazy danych, identyfikator i hasło. Teraz mam pełny dostęp do twojej bazy danych.

To, co ludzie mówią, hasła powinny być wymieszane, ponieważ jeśli ktoś się włamie, są one widoczne dla hakerów.

więc jeśli uruchomię zapytanie jakoselect id, password FROM userDetails Dostanę dane jak poniżej

Opcja 1: Bez mieszania
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  password01   +
+  id02    +  password02   +
++++++++++++++++++++++++++++
Opcja 2: Z hashem
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  hasValue01   +
+  id02    +  hasValue02   +
++++++++++++++++++++++++++++

Cóż, nadal mówię, mieszanie jest niepewne. Dlaczego powiem Ci poniżej z kodem 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());
        }
    }
}

W ten sposób mogę wydrukować nazwę użytkownika i hasło. (Wiem, że będę musiał wygenerować losowe hasło, dopóki nie znajdę hasła). Jednak w ten sposób mechanizm haszowania hasła również nie działa.

Uważam również, że na tym świecie jest deszyfrator, który konwertuje dane mieszania na rzeczywiste dane.

Dlatego myślę

Czy mechanizm haszowania jest bezpieczny?Edytuj 1

Nie mówię tylko o MD5. TYLKO wybieram MD5. Mówię o jakimkolwiek mechanizmie bezpiecznego hasła

questionAnswers(4)

yourAnswerToTheQuestion