11 Stimmen

Passwörter verschlüsseln

Ich habe eine Reihe von Fragen gelesen, in denen vorgeschlagen wird, Passwörter zu verschlüsseln und in der Datenbank zu speichern.

Wenn sich jemand anmeldet, verschlüsseln Sie das angegebene Passwort mit dem, was Sie gespeichert haben.

Was ich nicht verstehe, ist, wie das funktionieren kann? Zwei Zeichenketten können den gleichen Wert haben - nicht wahrscheinlich, aber definitiv möglich

Kann mir bitte jemand helfen?

EDIT: Kann jemand eine Statistik über die Kollisionswahrscheinlichkeit angeben?

0 Stimmen

Ich habe in meiner Antwort über den Geburtstagsangriff gesprochen: de.wikipedia.org/wiki/Geburtstag_Anschlag Sie gibt die Wahrscheinlichkeit einer Kollision angesichts der Anzahl der Versuche und der Anzahl der möglichen Hashes (basierend auf den Bits) an. Dies gilt für einen Brute-Force-Angriff. Die Wahrscheinlichkeit ist höher, wenn der Hash "geknackt" werden kann.

0 Stimmen

0 Stimmen

Vielleicht finden Sie meine Artikelserie zu diesem Thema interessant. blogs.msdn.com/ericlippert/archive/tags/Salt/default.aspx

24voto

Sam Meldrum Punkte 13529

Sie sollten das Passwort nicht unverschlüsselt speichern, da Ihre Datenbankadministratoren keinen Zugriff auf die Kundenpasswörter haben sollten.

Das Hashing der Passwörter verhindert, dass Datenbankadministratoren das Passwort sehen können.

Die sehr geringe Wahrscheinlichkeit einer Kollision ist kein Problem, da dies die Wahrscheinlichkeit, dass jemand, der versucht, das Passwort eines Kunden mit roher Gewalt zu erzwingen, einen Treffer erzielt, bevor Sie die Konten sperren, nicht wesentlich erhöht.

PS es ist auch eine gute Praxis, wenn Salz die Kennwörter vor dem Hashing, um die Brute-Force-Methode zu erschweren, falls ein Hacker Zugang zur Kennworttabelle erhalten hat. Macht es schwieriger, Regenbogentabellen usw. zu verwenden.

6 Stimmen

Um das Risiko eines Brute-Force-Angriffs auf mehrere Passwörter zu minimieren, sollten Sie diese auch salzen.

7 Stimmen

Passwörter haben nicht viel Geschmack; salzen Sie sie immer.

2 Stimmen

Ein Hauch von Pfeffer verleiht auch etwas Biss, finde ich.

10voto

Michael Borgwardt Punkte 334642

Zwei Zeichenketten können denselben Hash-Wert ergeben - Nicht wahrscheinlich, aber DEFINITIV möglich

Ja, aber wenn der Hash groß genug und von guter Qualität ist, ist er unwahrscheinlich genug, um sich keine Sorgen zu machen. Umgangssprachlich ausgedrückt: Es ist nicht wahrscheinlich, dass jeder einzelne Nutzer der App gleichzeitig vom Blitz getroffen wird, aber definitiv möglich. Machen Sie sich darüber Gedanken?

10 Stimmen

Na toll, jetzt gibt es noch einen Grund zur Sorge. DANKE.

0 Stimmen

Muss man das Risiko mit den Konsequenzen multiplizieren. Wenn ein Systemadministrator (oder ein Hacker) dasselbe Passwort wie ein Benutzer hat, wird er sehen, dass die Hashes und damit die Passwörter gleich sind, und kann sich als dieser Benutzer anmelden. Wenn Sie eine Bank-Website erstellen, wird dies zu einem Problem.

0 Stimmen

@Rob: Deshalb fügt man ein zufälliges Salz hinzu. Die Hashes von zwei identischen Passwörtern sind nicht nur unterschiedlich, sondern auch schwerer zu knacken.

5voto

Tomas Vana Punkte 17297

Selbst wenn zwei Zeichenketten den gleichen Hash-Wert haben können (und das ist definitiv der Fall, denn der Raum der möglichen Werte ist viel größer als der Raum der Hash-Werte), ist es immer noch nicht so einfach, solche Zeichenkettenpaare zu finden (vorausgesetzt, Sie verwenden eine starke Hash-Funktion).

Wenn sich also ein Angreifer als eine andere Person anmelden möchte, ohne das Passwort zu kennen, müsste er ein Passwort finden, das denselben Hash hat, was genauso schwierig sein sollte wie das Passwort zu finden (Nichtumkehrbarkeit der Hash-Funktion ist eine grundlegende Eigenschaft).

Wenn Sie Hashing in .NET verwenden möchten, versuchen Sie etwas wie

    public static string ComputeHash(string plaintext)
    {
        HashAlgorithm mhash = new SHA1CryptoServiceProvider();
        byte[] bytValue = Encoding.UTF8.GetBytes(plaintext);
        byte[] bytHash = mhash.ComputeHash(bytValue);
        mhash.Clear();
        return Convert.ToBase64String(bytHash);
    }

4voto

Tanmay Punkte 1527

Das, worauf Sie sich beziehen, heißt "Kollisionsanfälligkeit". Aber zunächst ein wenig Hintergrund.

Wenn Sie ein unverschlüsseltes Kennwort speichern, handelt es sich um eine Sicherheitslücke, wie Sie vielleicht schon vermutet haben und Sam vorschlägt. Sie können jedoch einen bewährten Algorithmus verwenden, der diese Möglichkeit verringert. Sie sollten auf keinen Fall versuchen, Ihren eigenen zu erfinden (da Sie anscheinend kein Algorithmus-Entwickler sind).

Ich verwende normalerweise MD5, das in Datenbanken wie mysql verfügbar ist. Auf diese Weise können Sie die Prüfung auch in Ihre Datenbankabfragen einbetten.

Nun, MD5 ist leider nicht kollisionssicher. Allerdings sind die Chancen für eine Kollision ziemlich gering. Vielleicht gibt es in den Foren andere Vorschläge, die Sie sich ansehen können. Ich kenne SHA-2 als eine solche Möglichkeit. Ich weiß nicht, wie einfach es in Anwendungen zu verwenden ist.

0 Stimmen

Eine Kollisionsschwachstelle ist eine Schwachstelle, bei der zwei Nachrichten, eine unschuldige und eine feindliche, entdeckt werden, die denselben Hash haben. Können Sie erklären, inwiefern die Kollisionsschwachstelle für die Frage des Benutzers nach den Passwörtern relevant ist? Denn ich kann Ihrem Gedankengang hier nicht folgen.

0 Stimmen

Für mich lautete die Frage: "Können zwei verschiedene Zeichenketten denselben Hash erzeugen". Vor kurzem habe ich herausgefunden, dass dies bei MD5 möglich ist. Ein anderer Benutzer wies darauf hin, dass Passwörter nicht eindeutig sein müssen. Aber in einigen Domänen (wie meiner derzeitigen) gibt man keine Benutzerkennung ein, so dass das Passwort eindeutig sein sollte. In diesem Fall sollte man Hash-Funktionen mit Kollisionsanfälligkeit vermeiden. Praktisch gesehen ist die Wahrscheinlichkeit einer Kollision jedoch gleich null, und MD5 funktioniert in 99,99 Prozent der Fälle. Ergibt das mehr Sinn als die ursprüngliche Antwort?

3voto

Jeffrey L Whitledge Punkte 55524

Die Tatsache, dass "MyAwesomePassword1" und "@ @#ngt0n8$!!~~~09||{2`=&-[kla2%!B q" zu demselben Wert hashen kann, ist keine Sicherheitslücke.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X