2009-03-03 6 views
2

Wenn Sie eine durchschnittliche neue App im Jahr 2009 schreiben, was ist die sinnvollste Digest-Funktion in Bezug auf Sicherheit und Leistung? (Und wie kann ich dies in der Zukunft bestimmen, da die Bedingungen ändern?)Beste allgemeine Digest-Funktion?

Wenn similarquestionswereasked zuvor haben Antworten enthalten SHA1, SHA2, SHA-256, SHA-512, MD5, bcrypt und Blowfish.

Mir ist klar, dass jeder von ihnen funktionieren könnte, wenn er intelligent genutzt wird, aber ich würde lieber keinen Würfel werfen und einen zufällig auswählen. Vielen Dank.

Antwort

7

Ich würde folgen NIST/FIPS guidelines:

15. März 2006: Die SHA-2-Familie von Hash-Funktionen (dh, SHA-224, SHA- 256, SHA-384 und SHA-512) kann von Bundesbehörden für alle Anwendungen mit sicheren Hash Algorithmen verwendet werden. Bundesbehörden sollten mit SHA-1 für digitale Signaturen, digitale Zeit stoppen Stanzen und andere Anwendungen, die Kollision Widerstand sobald praktische erfordern, und muss die SHA-2 Familie von Hash-Funktionen für diese Anwendungen nach 2010 verwenden Nach 2010, Bundesbehörden dürfen SHA-1 nur für die folgenden Anwendungen verwenden: Hash-basierte Nachrichtenauthentifizierung Codes (HMACs); Schlüsselableitung Funktionen (KDFs); und Zufallszahl Generatoren (RNGs). Unabhängig von der Verwendung, NIST ermutigt Anwendung und Protokoll-Designer, die SHA-2 Familie von Hash-Funktionen für alle neuen Anwendungen und Protokolle zu verwenden.

3

Sie sagen "Digest-Funktion"; Vermutlich wollen Sie damit Digests von "langen" Nachrichten berechnen (nicht nur "kurze" Nachrichten wie Passwörter). Das bedeutet, dass bCrypt und ähnliche Optionen aus sind; Sie sind so konzipiert, dass sie langsam sind, um Brute-Force-Angriffe auf Passwortdatenbanken zu verhindern. MD5 ist vollständig zerstört, und SHA-0 und SHA-1 sind zu schwach, um eine gute Wahl zu sein. Blowfish ist eine Stream-Chiffre (obwohl Sie es in einem Modus ausführen können, der Digests erzeugt), also ist es auch keine so gute Wahl.

Das lässt mehrere Familien von Hash-Funktionen, einschließlich SHA-2, HAVAL, RIPEMD, WHIRLPOOL und andere. Von diesen ist die SHA-2-Familie am gründlichsten kryptoanalytisch getestet, und daher wäre es meine Empfehlung für den allgemeinen Gebrauch. Ich würde entweder SHA2-256 oder SHA2-512 für typische Anwendungen empfehlen, da diese beiden Größen am häufigsten und wahrscheinlich in der Zukunft von SHA-3 unterstützt werden.

+0

Yup, das meinte ich (hätte klarer sein sollen). Vielen Dank. – Anirvan

2

Es hängt wirklich davon ab, wofür Sie es brauchen.

Wenn Sie tatsächliche Sicherheit brauchen, wo die Fähigkeit, eine Kollision leicht zu finden, Ihr System kompromittieren würde, würde ich etwas wie SHA-256 oder SHA-512 verwenden, da sie stark von verschiedenen Agenturen empfohlen werden.

Wenn Sie etwas benötigen, das schnell ist und verwendet werden kann, um etwas eindeutig zu identifizieren, gibt es jedoch keine tatsächlichen Sicherheitsanforderungen (dh ein Angreifer könnte nichts Böses tun, wenn er eine Kollision feststellt) Dann würde ich etwas wie MD5 benutzen.

MD4, MD5 und SHA-1 haben sich im Vergleich zur erwarteten Angriffsart im Sinne einer Kollision mit einer Birthday-Attack-Methode als leichter zerbrechlich erwiesen. RIPEMD-160 ist gut angesehen, aber mit nur 160 Bits braucht ein Geburtstagsangriff nur 2^80 Operationen, also wird es nicht ewig dauern. Whirlpool hat ausgezeichnete Eigenschaften und scheint der Stärkste zu sein, obwohl er nicht die gleiche Unterstützung wie SHA-256 oder SHA-512 hat - in dem Sinne, dass, wenn es ein Problem mit SHA-256 oder SHA-512 gab Es ist wahrscheinlicher, dass Sie über geeignete Kanäle davon erfahren.

+1

Verwenden Sie MD5 nicht für Remote Cryptographic. Es ist jetzt eine Anti-Korruptions-Checksumme, * nichts * mehr. Es ist sehr gründlich gebrochen. Vergiss es einfach; Es gibt nichts, was eine andere Hash-Funktion nicht besser macht. – kquinn

+0

Bestätigt. Wenn Sicherheit ein Faktor ist, verwenden Sie nicht MD5 oder SHA-1. – thomasrutter

+0

SHA1 ist immer noch anständig. Aber MD5 ist *** komplett *** kaputt. Es gibt keine Entschuldigung für seinen fortgesetzten Gebrauch. Keiner. Verwenden Sie nicht MD5! Wenn Sie vor zufälligen Übertragungsproblemen schützen möchten, verwenden Sie einfach CRC32; es ist schneller und ungefähr so ​​kryptografisch sicher. So ist gebrochenes MD5! Vermeide es! – kquinn