Frage

Ich habe gesehen, ein paar questions und Antworten auf SO darauf hindeutet, dass MD5 weniger sicher ist als so etwas wie SHA.

Meine Frage ist, dieses wert ist sich Gedanken über in meiner Situation?

Hier ist ein Beispiel dafür, wie ich es bin mit:

  1. Auf der Client-Seite, ich bin die Bereitstellung einer „sicheren“ Prüfsumme für eine Nachricht, die von der aktuellen Uhrzeit angehängt und ein Passwort und dann Hashing es MD5. Also:. MD5(message+time+password)
  2. Auf der Serverseite, ich bin dieses Hash gegen die Nachricht überprüft, dass mein Wissen über die Zeit gesendet wird unter Verwendung wurde gesendet und das Passwort des Kunden.

In diesem Beispiel bin ich wirklich besser mit SHA statt MD5?

Unter welchen Umständen würde die Wahl Funktion Hashing wirklich Materie in einem praktischen Sinne?

Edit:

Nur um zu klären - in meinem Beispiel , gibt es keinen Vorteil zu einem SHA-Algorithmus bewegt

?

Mit anderen Worten ist es möglich, in diesem Beispiel für jemanden eine Nachricht zu senden und eine korrekte Hash ohne das gemeinsame Passwort zu kennen

Mehr Edits:

Sie entschuldigen sich für wiederholte Bearbeitung -. Ich war nicht klar zu sein mit dem, was ich frage

War es hilfreich?

Lösung

Ja, es ist die Mühe wert in der Praxis. MD5 ist so schlecht gebrochen, dass Forscher gefälschte Zertifikate fälschen konnten, die abgestimmt ein echtes Zertifikat von einer Zertifizierungsstelle signiert. Dies bedeutete, dass sie in der Lage waren, ihre eigene gefälschte Zertifizierungsstelle zu erstellen, und damit jede Bank oder Unternehmen ausgeben könnten sie fühlte sich wie mit Browsern vollständig vertrauen.

Nun nahm das sie viel Zeit und Mühe, einen Cluster von PlayStation 3s verwenden und mehrere Wochen eine entsprechende Kollision zu finden. Aber einmal gebrochen, ein Hash-Algorithmus wird nur schlimmer, nie besser. Wenn man sich alles um Sicherheit kümmern, wäre es besser, einen ungebrochenen Hash-Algorithmus zu wählen, wie einer der -2 Familie (SHA-1 wird auch geschwächt, wenn auch nicht so schlecht gebrochen als MD5 ist).

Bearbeiten : Die Technik, die in der Verbindung verwendet, die ich zur Verfügung gestellt Sie in der Lage beteiligte zwei beliebige Nachricht Präfixe zu wählen und eine gemeinsame Suffix, aus dem es für jeden Präfix einen Blockes von Daten erzeugen könnte das könnte zwischen dem Präfix und dem Suffix gemeinsam eingefügt werden, eine Nachricht mit der gleichen MD5 Summe als die Nachricht aus dem anderen Präfix konstruiert herzustellen. Ich kann nicht denken Sie an eine Art und Weise, in der diese besonderen Anfälligkeit in der Situation ausgenutzt werden könnten Sie beschreiben, und in der Regel mit einem sicheren hat Nachrichtenauthentifizierung ist beständiger als Angriff für digitale Signaturen verwenden, aber ich kann Sie ein paar Schwachstellen denken müssen achten, die meist unabhängig von den Hash sind Sie wählen.

  1. Wie beschrieben, Ihr Algorithmus beinhaltet auf dem Server das Passwort im Klartext zu speichern. Dies bedeutet, dass Sie auf alle Informationen Offenlegung anfällig für Angriffe sind in der Lage sein können Passwörter auf dem Server zu entdecken. Sie können denken, dass, wenn ein Angreifer auf Ihre Datenbank zugreifen kann dann das Spiel ist aus, aber Ihre Benutzer würden es wahrscheinlich vorziehen, wenn auch, wenn Ihr Server gefährdet ist, dass ihre Passwörter nicht sein. Wegen der Verbreitung von Passwörtern online, nutzen viele Anwender die gleichen oder ähnliche Passwörter für verschiedene Dienste. Ferner wird in Fällen mögliche Angriffe der Offenlegung von Informationen auch, wenn die Ausführung von Code oder Privilege-Escalation-Angriffe sind es nicht.

    Sie können diesen Angriff mildern, indem das Passwort auf dem Server zu speichern mit einem zufälligen Salz gehasht; Sie speichern das Paar <salt,hash(password+salt)> auf dem Server, und das Salz an den Client senden, so dass es hash(password+salt) verwenden anstelle des Passworts in dem Protokoll, das Sie erwähnen berechnen kann. Dies gilt nicht schützt Sie vor der nächsten Attacke aber nicht.

  2. Wenn ein Angreifer eine Nachricht von dem Client gesendet schnuppern kann, kann er einen Offline-Wörterbuchangriff gegen die Client-Passwort tun. Die meisten Benutzer haben Passwörter mit ziemlich niedriger Entropie und ein gutes Wörterbuch von ein paar hunderttausend bestehende Passwörter plus einige Zeit zufällig permutiert ihnen könnte ein Passwort Suche die Informationen ein Angreifer aus Sniffing eine Nachricht hat recht einfach.

  3. Die Technik, die Sie schlägt nicht den Server authentifizieren. Ich weiß nicht, ob dies eine Web-Anwendung, die Sie sprechen, aber wenn ja, dann jemand, der kann einen DNS-Hijack-Angriff durchführen oder DHCP-Hijacking auf ein unsicheres drahtloses Netzwerk oder etwas dergleichen, kann nur tun, ein Mann-in-the-Middle-Angriff, bei dem sie Passwörter im Klartext von Ihren Kunden zu sammeln.

  4. Während der aktuelle Angriff auf MD5 nicht gegen das Protokoll arbeiten können Sie beschreiben, MD5 stark beeinträchtigt wurde, und ein Hash wird immer nur schwächer, nie stärker. Wollen Sie wetten möchten, dass Sie über neue Angriffe herausfinden werden, die gegen Sie verwendet werden könnten, und die Zeit wird Hash-Algorithmen zu aktualisieren, bevor Sie Ihre Angreifer eine habenChance, es zu nutzen? Es wäre wahrscheinlich einfacher sein, mit etwas zu beginnen, die derzeit stärker als MD5 ist, um Ihre Chancen zu reduzieren von mit MD5 beschäftigen weiter gebrochen.

Nun, wenn Sie tun gerade dies niemand um sicherzustellen, dass eine Nachricht von einem anderen Benutzer in einem Forum oder etwas schmiedet, dann sicher, es ist unwahrscheinlich, dass jemand in die Zeit und Mühe wird das Protokoll zu brechen, die Sie beschrieben . Wenn jemand wirklich jemand anderes ausgeben wollten, könnten sie wahrscheinlich erstellen gerade einen neuen Benutzernamen, ein 0 anstelle eines O oder etwas noch ähnlicher Verwendung von Unicode hat, und nicht einmal die Mühe mit dem Versuch Nachricht zu schmieden und Hash-Algorithmen zu brechen.

Wenn dies für etwas verwendet wird, wo die Sicherheit wirklich zählt, dann erfinden kein eigenes Authentifizierungssystem. Verwenden Sie einfach TLS / SSL . Eine der grundlegenden Regeln der Kryptographie ist nicht Ihre eigene zu erfinden. Und dann auch für den Fall des Forum, in dem es tut wahrscheinlich keine Rolle, dass alle viel, wird es nicht einfacher, nur um etwas zu verwenden, die das Regal bewährt off ist als die eigene rollen?

Andere Tipps

In diesem speziellen Fall, ich glaube nicht, dass das schwächste Glied der Anwendung md5 verwendet statt sha. Die Art und Weise, in der md5 „gebrochen“ ist, ist, dass da md5 (K) = V, es möglich ist, K ‚zu erzeugen, so dass md5 (K‘) = V, da der Ausgang-Raum begrenzt ist (nicht weil es welche gibt Tricks, den Suchraum zu reduzieren). 'K. ist nicht unbedingt Dies bedeutet, dass wenn Sie wissen, md5 (M + T + P) = V, Sie P erzeugen kann' jedoch K, so dass md5 (M + T + P ') = V, das einen gültigen Eintrag geben . in diesem Fall bleibt jedoch die Nachricht immer noch die gleichen, und P nicht beeinträchtigt wurde. Wenn der Angreifer versucht Nachricht M 'mit einem T' Zeitstempel zu fälschen, dann ist es sehr unwahrscheinlich, dass md5 (M '+ T' + P ') = md5 (M' + T '+ P), es sei denn P' = P. in diesem Fall müssten sie das Passwort brute Zwangs. Wenn sie das Passwort Brute-gezwungen haben, dann bedeutet das, dass es nicht, wenn Sie sha oder md5 verwendet egal, da die Überprüfung, ob md5 (M + T + P) = V äquivalent ist zu überprüfen, ob sha (M + T + P ) = V. (außer, dass sha konstante Zeit länger dauern könnte zu berechnen, die nicht die Komplexität der Brute-Force auf P nicht beeinträchtigt).

Um jedoch die Wahl haben, sollten Sie wirklich nur gehen Sie voran und verwenden sha. Es macht keinen Sinn, es nicht verwenden, es sei denn, ein gravierender Nachteil ist, es zu verwenden.

Eine zweite Sache ist, dass Sie wahrscheinlich nicht das Kennwort des Benutzers in der Datenbank im Klartext gespeichert werden sollen. Was sollten Sie speichern ist ein Hash des Passworts, und dann verwenden. In Ihrem Beispiel würde der Hash sein von: md5 (Meldung + Zeit + md5 (Passwort)), und man konnte md5 (Passwort) in der Datenbank sicher speichern. Jedoch kann ein Angreifer der Datenbank (durch so etwas wie SQL-Injection) stehlen würde noch in der Lage sein, um Nachrichten zu schmieden. Ich sehe keinen Ausweg.

Brians Antwort umfasst die Punkte, aber ich denke, es ist etwas weniger verbosely

erklärt werden muss

Sie verwenden den falschen Krypto-Algorithmus hier

MD5 ist hier falsch, ist Sha1 hier falsch zu verwenden Sha2xx falsch zu bedienen ist und Knäuel ist falsch zu verwenden.

Was sollten Sie verwenden ist etwas wie RSA .

Lassen Sie mich erklären:

Ihre sichere Hash sendet effektiv das Passwort aus für die Welt zu sehen.

Sie erwähnen, dass Sie Ihre Hash ist „Zeit + Nutzlast + password“, wenn ein Dritter eine Kopie Ihrer Nutzlast bekommt und kennt die Zeit. Es kann das Passwort finden (eine Brute-Force oder Wörterbuch-Angriff verwendet wird). Also, sein fast, als ob Sie das Passwort im Klartext senden.

Statt dessen sollten Sie bei einem Public-Key-Kryptographie Ihrem Server senden haben aus öffentlichen Schlüsseln zu Ihrem Agenten und haben die Agenten verschlüsseln die Daten mit dem öffentlichen Schlüssel.

Kein Mensch in der Mitte wird in der Lage sein, was in den Nachrichten zu sagen, und niemand wird die Nachrichten schmieden kann.

Auf einer Seite beachten, MD5 ist viel stark meistens.

Es hängt davon ab, wie wertvoll der Inhalt der Nachrichten sind. Die SHA-Familie ist nachweislich sicherer als MD5 (wobei „sicherer“ bedeutet „schwerer zu fälschen“), aber wenn Ihre Nachrichten twitter Updates sind, dann sorgen Sie wahrscheinlich nicht.

Wenn diese Nachrichten die IPC Schicht eines verteilten Systems sind, die finanzielle Transaktionen abwickelt, dann vielleicht mehr Sie sich interessieren.

Update: Ich sollte hinzufügen, auch, dass die beiden Digest-Algorithmen in vielerlei Hinsicht im Wesentlichen austauschbar sind, so wie viel Mühe wäre es wirklich die sichereren zu benutzen,

Update 2: Das ist eine viel gründlichere Antwort: http: //www.schneier. com / Essay-074.html

Ja, kann jemand eine Nachricht senden, und eine korrekte Hash ohne das gemeinsame Kennwort zu kennen. Sie müssen nur eine Zeichenfolge finden, die auf den gleichen Wert Hashes.

Wie häufig ist das? Im Jahr 2007 eine Gruppe aus den Niederlanden bekannt, dass sie den Gewinner der 2008 US-Präsidentenwahl in einer Datei mit dem MD5-Hash-Wert 3D515DEAD7AA16560ABA3E9DF05CBC80 . Sie schufen dann zwölf Dateien, die alle identisch, mit Ausnahme des Namens des Kandidaten und eine beliebige Anzahl von Leerzeichen nach, die auf diesen Wert gehasht. Der MD5-Hash-Wert ist wertlos wie eine Prüfsumme, weil zu viele verschiedenen Dateien mit dem gleichen Ergebnis.

Dies ist das gleiche Szenario wie bei Ihnen, wenn ich Sie recht gerade lese. Ersetzen Sie einfach „Name des Kandidaten“ mit „geheimen Passwort“. Wenn Sie wirklich sicher sein wollen, sollten Sie wahrscheinlich eine andere Hash-Funktion verwendet werden.

Wenn Sie vorhaben, einen Hash-mac generieren nicht Ihr Schema erfinden. verwenden HMAC . gibt es Probleme mit HASH tun (Geheimschlüssel || Nachricht) und HASH (Nachricht || Geheimschlüssel). wenn Sie ein Kennwort als Schlüssel verwenden, sollten Sie auch eine Schlüsselableitungsfunktion werden. haben einen Blick auf PBKDF2 .

Ja, das ist es wert darüber, welche Hash kümmern in diesem Fall zu verwenden. Lassen Sie uns zuerst bei dem Angriff Modell aussehen. Ein Angreifer könnte versuchen, nicht nur Werte md5 (M + T + P) zu erzeugen, könnte aber auch versuchen, das Kennwort P. Insbesondere zu finden, wenn die Angreifer Tupeln von Werten M Sammeln i , T i und die entsprechenden md5 (M i , T i , P) dann wird er / sie hasn Dieses Problem finden könnte versuchen, P.‘ t als die Suche nach Kollisionen wie in großem Umfang für Hash-Funktionen untersucht. Mein Ansatz für dieses Problem wäre es, die gleichen Arten von Angriffen zu versuchen, die gegen Blockchiffren verwendet werden: z.B. Differential-Attacken. Und da MD5 bereits sehr anfällig Angriffe auf Differential, kann ich sicherlich vorstellen, dass ein solcher Angriff hier erfolgreich sein könnte.

Damit ich empfehlen, dass Sie eine stärkere Hash-Funktion als MD5 hier verwenden. Ich empfehle auch, dass Sie HMAC verwenden, anstatt nur md5 (M + T + P), weil HMAC hat für die Situation entwickelt, die Sie beschreiben und entsprechend ausgewertet worden ist.

Es gibt nichts, unsicher über die Verwendung von MD5 auf diese Weise. MD5 wurde nur in dem Sinne, dass gebrochen, es gibt Algorithmen, die eine Reihe von Daten zusätzliche Daten A B gegeben, erzeugt werden, eine gewünschte Hash zu erzeugen. Was bedeutet, wenn jemand den Hash eines Passwort kennt, könnten sie einen String erzeugen, die mit diesem Hash führen. Obwohl sind diese erzeugten Zeichenketten in der Regel sehr lang, so dass, wenn Sie Passwörter auf 20 oder 30 Zeichen begrenzen sind Sie wahrscheinlich immer noch sicher.

Der Hauptgrund SHA1 über MD5 zu verwenden ist, dass MD5-Funktionen schrittweise abgeschafft werden. Zum Beispiel ist die Silverlight-Net-Bibliothek nicht die MD5-Kryptographie-Anbieter umfasst.

MD5 Kollision mehr als SHA schaffen, die jemand tatsächlich bedeuten gleiche Hash aus verschiedenem Wort bekommen kann (aber es ist selten).

SHA-Familie ist bekannt, dass für sie die Zuverlässigkeit ist, SHA1 auf den täglichen Gebrauch Standard war, während SHA256 / SHA512 ein Standard für die Regierung und Bankgeräte war.

Für Ihre persönliche Website oder Forum, ich schlage vor, Sie SHA1 zu prüfen, und wenn Sie ein ernster wie Handel schaffen, schlage ich Sie SHA256 / SHA512 (SHA2-Familie) zu verwenden,

Sie können prüfen, Wikipedia-Artikel über MD5 & SHA

Sowohl MD5 amd SHA-1 haben Verschlüsselungs Schwächen. MD4 und SHA-0 werden ebenfalls beeinträchtigt wird.

Sie können sich wahrscheinlich sicher verwenden MD6, Whirlpool, und RIPEMD-160.

Sehen Sie die folgende Powerpoint von der Princeton University, scrollen Sie nach unten zur letzten Seite.

http://gcu.googlecode.com/files/11Hashing.pdf

Ich werde nicht kommentieren die MD5 / SHA1 / etc. Problem, so vielleicht werden Sie diese Antwort strittig betrachten, sondern etwas, das ich erheitert sehr leicht ist, wenn der Einsatz von MD5 et al. für Passwörter in Datenbanken Hashing kommt.

Wenn jemand um in Ihrer Datenbank Stossen, dann könnten sie sehr gut an Ihrem Passwort-Hashes aussehen wollen, aber es ist genauso wahrscheinlich, sie werden personenbezogene Daten oder andere Daten stehlen wollen Sie in anderen herumliegen können Tabellen. Ehrlich gesagt, in dieser Situation, haben Sie größere Fische zu braten.

Ich sage nicht, das Problem zu ignorieren, und wie ich schon sagte, das ist wirklich nicht viel Einfluss darauf, ob oder nicht Sie MD5, SHA1 verwenden sollten, oder was auch immer Ihre Passwörter Hash, aber ich bekomme rosa kitzelte leicht jeder Zeit las ich jemand ein bisschen zu aufgeregt, um Klartext-Passwörter in einer Datenbank zu bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top