Die besten Allzweck-Funktion verdauen?
Frage
Wenn im Jahr 2009 eine durchschnittliche neue App zu schreiben, was ist die vernünftigste verdauen Funktion zu nutzen, in Bezug auf Sicherheit und Leistung? (Und wie kann ich dies in der Zukunft bestimmen, da die Bedingungen ändern?)
Wenn ähnlich < a href = "https://stackoverflow.com/questions/184089/what-is-the-strongest-hashing-algorithm-commonly-available-today"> Fragen wurden gefragt zuvor Antworten werden eingeschlossen SHA1, SHA2, SHA-256, SHA-512, MD5, bcrypt und Blowfish.
Ich weiß, dass zu einem großen Teil, einer diese könnte funktionieren, wenn intelligent genutzt, aber ich mag lieber nicht würfeln und eine zufällig auswählen. Danke.
Lösung
Ich würde folgen NIST / FIPS-Richtlinien :
15. März 2006: Die SHA-2-Familie von Hash-Funktionen (das heißt, SHA-224, SHA-256, SHA-384 und SHA-512) sein können von Bundesagenturen für alle verwendeten Anwendungen mit sicheren Hash Algorithmen. Bundesbehörden sollten aufhören mit SHA-1 für digitale Signaturen, digitale Zeitstempel und andere Anwendungen, die erfordern Kollision Widerstand, sobald praktisch, und muss die SHA-2 verwenden, Familie von Hash-Funktionen für diese Anträge, die nach 2010 nach 2010 Bundesbehörden können SHA-1 verwenden nur für die folgenden Anwendungen: Hash-basierte Nachrichtenauthentifizierung Codes (HMACs); Schlüsselableitungs- Funktionen (KDFs); und Zufallszahl Generatoren (RNGs). Unabhängig davon Gebrauch, NIST fördert Anwendung und Protokoll-Designer die SHA-2 zu verwenden, Familie von Hash-Funktionen für alle neuen Anwendungen und Protokolle.
Andere Tipps
Sie sagen, „verdauen Funktion“; vermutlich bedeutet, dass Sie es verwenden möchten Verdaue von „long“ -Nachrichten zu berechnen (und nicht nur „kurz“ „Nachrichten“ wie Passwörter Hashing). Das bedeutet bcrypt und ähnliche Entscheidungen sind aus; langsam sein Brute-Force-Angriffe auf Passwort-Datenbanken hemmen sie entworfen. MD5 ist komplett gebrochen, und SHA-0 und SHA-1 sind geschwächt zu gute Wahl zu sein. Blowfish ist eine Stromchiffre (auch wenn man es in einem Modus ausführen kann, die Digests erzeugt), so ist es nicht so eine gute Wahl, entweder.
Das lässt mehrere Familien von Hash-Funktionen, einschließlich der SHA-2, HAVAL, RIPEMD, WHIRLPOOL und andere. Von diesen ist der SHA-2-Familie die am gründlichsten cryptanalyzed, und so wäre es meine Empfehlung für den allgemeinen Gebrauch sein. Ich würde entweder SHA2-256 oder SHA2-512 für typische Anwendungen, da diese beiden Größen sind die häufigsten und wahrscheinlich unterstützt wird in Zukunft von SHA-3.
empfehlenEs hängt wirklich davon ab, was Sie brauchen es für.
Wenn Sie in der Notwendigkeit tatsächlicher Sicherheit sind, wo die Fähigkeit, eine Kollision leicht zu finden wäre Ihr System kompromittieren, würde ich so etwas wie SHA-256 oder SHA-512 verwenden, wie sie von verschiedenen Agenturen stark empfohlen kommen.
Wenn Sie brauchen etwas, das schnell ist, und kann verwendet werden, um etwas eindeutig zu identifizieren, aber es gibt keine tatsächlichen Sicherheitsanforderungen (dh ein Angreifer nicht in der Lage sein, etwas böse zu tun, wenn sie eine Kollision gefunden) ich würde dann so etwas wie MD5 verwenden.
MD4, MD5 und SHA-1 wurden im Sinne der Suche nach einer Kollision über eine Geburtstag Angriffsmethode, gezeigt werden, leichter zerbrechlich, als erwartet. RIPEMD-160 ist gut angesehen, aber nur 160 Bit ein Geburtstagsangriff benötigt nur 2 ^ 80 Operationen, so dass es nicht ewig dauern wird. Whirlpool verfügt über hervorragende Eigenschaften und scheint die stärksten der Partie, wenn es nicht die gleiche Unterstützung wie SHA-256 oder SHA-512 hat funktioniert - in dem Sinne, dass, wenn es ein Problem mit SHA-256 oder SHA-512 Sie‘ d eher darüber über geeignete Kanäle erfahren.