Unterschied zwischen HMACSHA256 und HMACSHA512
Sind wir unter den unten angegebenen code zur Erzeugung eines HMac hash gegen eine sensible Wert in C#
public string GenerateHMac(string key, string message)
{
var decodedKey = Convert.FromBase64String(key);
var hasher = new HMACSHA256(decodedKey);
var messageBytes = Encoding.Default.GetBytes(message);
var hash = hasher.ComputeHash(messageBytes);
return Convert.ToBase64String(hash);
}
Den Schlüssel übergeben wird, wird ein 256-bit-base-64-codierte Zeichenfolge. Eine Frage wurde aufgeworfen, ob wir verwenden sollten, HMACSHA256, HMACSHA384 oder HMACSHA512 hash-Wert.
- Was sind die Vorteile der Verwendung von HMACSHA512 über HMACSHA256?
- Ist es deutlich sicherer?
- Gibt es dramatische Auswirkungen auf die Leistung, wenn über einen längeren Schlüssel?
Als Randnotiz; funktioniert die decodedKey
Wert leite ich in den Konstruktor werden müssen, um eine 512-bit-Schlüssel, wenn ich HMACSHA512?
- wikipedia-Seite hat einige performance-benchmarks für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR: verwenden Sie einen HMAC-SHA512-für optimale Geschwindigkeit, Sicherheit und OK-Kompatibilität. SHA-256 ist auch sehr sicher und nützlich sein könnte, auf CPU ' s mit 32 bit-Operationen.
Sehen die Stärke des hash-Methoden selbst, werfen Sie bitte einen Blick auf die keylength.com website. Sie werden sehen, dass auch SHA-256 hat eine Recht große Sicherheitsmarge.
Was mehr ist, wird der HMAC-Algorithmus ist ziemlich blind für Angriffe auf die zugrunde liegende hash-Algorithmus. HMAC ist unempfindlich gegen das Geburtstags-problem, das halbiert die Stärke auf die Hälfte der hash-Ausgang. Es gilt nicht, einfach weil der Gegner nicht im Besitz der geheimen Schlüssel und kann daher nicht versuchen, zu erstellen Kollisionen. Deshalb ist auch HMAC-SHA1 ist ziemlich sicher.
Nun die Geschwindigkeit der Hashwert hängt von der Ausführung Umgebung. Aber man kann im Allgemeinen machen die folgenden Annahmen:
Verwenden SHA-1, wenn Sie erwarten, dass Kompatibilitätsprobleme. Sonst können Sie auch gleich gehen und für SHA-512 (und geschnitten, das Ergebnis auf eine angemessene Anzahl von bits). Der interne Zustand und höhere Sicherheit von SHA-512 kann einen leichten Vorteil. Ich habe lief in Probleme mit Kunden, die nicht akzeptieren, jede form von SHA-1 aufgrund der Allgemeinen Probleme mit dem Algorithmus; in anderen Worten, die Tatsache, dass es nicht sicher ist im Allgemeinen kann behindern die Akzeptanz.
Beachten, dass SHA-384 und die weniger bekannte SHA-512/256 und SHA-512/224 hash-Methoden sind eine spezielle form von SHA-512, Schnitt 384, 256 und 224 bit Ausgabe. Also die Geschwindigkeit dieser algorithmen identisch ist. Der einzige Unterschied, abgesehen von der Ausgabe-Größe ist, dass diese besonderen Formen verwenden Sie verschiedene Anfangswerte intern. Ansonsten SHA-512 Schnitt 384 bit ist so sicher und so schnell wie SHA-512/384. Sollten Sie jedoch verwenden, SHA-384, um kompatibel bleiben -, wenn Sie fordern, dass insbesondere die Ausgabe-Größe.
SHA-384 und SHA-512/256 und SHA-512/224 verwenden Sie unterschiedliche Startwerte so, dass die Ausgabe von entweder von Ihnen unterscheidet sich von SHA-512 und jede andere; eine Funktion namens domain-Trennung. Die domain Trennung macht es unmöglich, auf Angriff oder (teilweise) Vorhersagen hash-Ergebnisse der andere, Verwandte hash-Funktionen.
Die Eingabe-Taste, Größe ist nicht abhängig von der zugrunde liegenden hash-Funktion. Der Schlüssel ist, ersten XOR-maskierte und anschließend ein Hashwert von der zugrunde liegenden hash-Funktion; hash-algorithmen können praktisch unbegrenzte Mengen an Daten als Eingabe.
Ist es ratsam, einen Schlüssel verwenden Größe, die mindestens der Größe der hash-Methode verwendet, andernfalls können Sie auf Kosten der Sicherheitsmarge zur Verfügung gestellt durch das HMAC-Verfahren. Es mag eine leichte performance-Einbußen, wenn die Schlüsselgröße, die Kräfte der hash-Algorithmus hash mehrere Blöcke.
Konnte man auch mit dem (kommenden) SHA-3-standard in dem Sinne, dass es würde sicher sein. HMAC-SHA-3 derzeit nicht viel Sinn zu machen, obwohl. HMAC ist eigentlich overkill für SHA-3 (Keccak); SHA-3 sollte sicher sein auch ohne das HMAC-Konstrukt. Jetzt KMAC standardisiert wurde als MAC-Konstrukt für SHA-3.
Die SHA-2-Konstrukte haben - etwas überraschend - gezeigt, ziemlich gute Resistenz gegen crypt-Analyse werden bei der SHA-3-Wettbewerb. So gibt es keine dringende Notwendigkeit upgrade auf KMAC /SHA-3.
Ich glaube nicht, dass Sie brauchen, um sorgen über die Sicherheit Vorteile, HmacSha1 noch gedacht werden sichern selbst und die Sicherheit sollte gedacht werden als relativ zur Schlüssellänge. Sha256 vs Sha512-Leistung wird davon abhängen, Implementierung, Plattform, etc., müssen Sie selbst testen. Und die Schlüssellängen, die Sie HMAC sind unabhängig von der hash-Algorithmus, siehe pseudocode.
HMAC aufruft, den hash-Algorithmus zweimal gegen SHA3 nicht erforderlich HMAC-Konstruktion für keyed-hashing-also dual-Aufruf ist leicht vermeidbar.
Als Ergebnis, SHA3 beats HMAC-SHA2-in der Leistung und HMAC-SHA1-in Sicherheit (am besten von beiden Welten).