Unterschied zwischen HMACSHA256 und HMACSHA512

9

Wir verwenden den folgenden Code, um einen HMac-Hash gegen einen sensitiven Wert in C # zu erzeugen.

%Vor%

Der übergebene Schlüssel ist eine 256-Bit-Basis-64-codierte Zeichenfolge. Es wurde eine Frage gestellt, ob wir HMACSHA256, HMACSHA384 oder HMACSHA512 verwenden sollten, um den Wert zu hashen.

  • Was sind die Vorteile der Verwendung von HMACSHA512 gegenüber HMACSHA256?
  • Ist es wesentlich sicherer?
  • Gibt es bei Verwendung eines längeren Schlüssels dramatische Auswirkungen auf die Leistung?

Als eine Randnotiz; Muss der decodedKey -Wert, den ich in den Konstruktor übergebe, ein 512-Bit-Schlüssel sein, wenn ich HMACSHA512 verwende?

    
Luke Merrett 06.08.2013, 12:40
quelle

3 Antworten

16

TL; DR: Verwenden Sie HMAC-SHA512 für optimale Geschwindigkeit, Sicherheit und OK-Kompatibilität. SHA-256 ist auch sehr sicher und könnte bei CPUs mit 32-Bit-Operationen nützlich sein.

Um die Stärke der Hash-Methoden selbst zu sehen, werfen Sie bitte einen Blick auf die keylength.com Website . Sie werden sehen, dass sogar SHA-256 eine recht große Sicherheitsmarge hat.

Außerdem ignoriert der HMAC-Algorithmus Attacken auf den zugrunde liegenden Hash-Algorithmus. HMAC ist unempfindlich gegen das Geburtstagsproblem, das die Schlüsselstärke auf die Hälfte der Hash-Ausgabe halbiert. Es trifft nicht einfach zu, weil der Gegner den geheimen Schlüssel nicht hält und daher nicht versuchen kann, Kollisionen zu erzeugen. Deshalb ist HMAC-SHA1 auch ziemlich sicher.

Die Geschwindigkeit des Hash hängt jetzt von der Ausführungsumgebung ab. Aber im Allgemeinen können Sie die folgenden Annahmen treffen:

  1. SHA-1 ist im Allgemeinen schneller als jede SHA-2-Implementierung auf derselben Plattform;
  2. SHA-512 ist schneller als SHA-256 auf 64-Bit-Maschinen (da sie intern 64-Bit-Arithmetik verwenden);
  3. SHA-256 ist schneller als SHA-512 auf 8-, 16- und 32-Bit-Maschinen.

Verwenden Sie SHA-1, wenn Sie Kompatibilitätsprobleme erwarten. Andernfalls können Sie auch SHA-512 verwenden (und das Ergebnis auf eine vernünftige Anzahl von Bits reduzieren). Der interne Zustand und höhere Sicherheit von SHA-512 kann ein leichter Vorteil sein. Ich bin auf Probleme mit Kunden gestoßen, die keine Form von SHA-1 wegen allgemeiner Probleme mit dem Algorithmus annehmen; mit anderen Worten, die Tatsache, dass es allgemein nicht sicher ist, kann die Akzeptanz behindern.

Beachten Sie, dass SHA-384 und die weniger bekannten Hash-Methoden SHA-512/256 und SHA-512/224 eine spezielle Form von SHA-512 sind, die auf 384, 256 und 224 Bit abgeschnitten sind. Die Geschwindigkeit dieser Algorithmen ist also identisch. Der einzige Unterschied zur Ausgabegröße besteht darin, dass diese Sonderformen intern unterschiedliche Initialwerte verwenden. Ansonsten ist SHA-512 auf 384 Bit geschnitten so sicher und so schnell wie SHA-512/384. Sie sollten SHA-384 jedoch verwenden, um kompatibel zu bleiben - wenn Sie diese bestimmte Ausgabegröße benötigen.

Die Größe des Eingabeschlüssels hängt nicht von der zugrunde liegenden Hash-Funktion ab. Der Schlüssel wird zuerst XOR-maskiert und dann von der zugrundeliegenden Hash-Funktion gehasht; Hash-Algorithmen können praktisch unbegrenzte Datenmengen als Eingabe annehmen.

Es empfiehlt sich, eine Schlüsselgröße zu verwenden, die mindestens der Größe der verwendeten Hash-Methode entspricht. Andernfalls können Sie die Sicherheitsmarge der HMAC-Methode verringern. Es kann eine geringfügige Leistungseinbuße geben, wenn die Schlüsselgröße den Hashalgorithmus zum Hashing mehrerer Blöcke zwingt.

Sie könnten auch den (kommenden) SHA-3-Standard in dem Sinne verwenden, dass er sicher ist. HMAC-SHA-3 macht derzeit allerdings nicht viel Sinn. HMAC ist eigentlich Overkill für SHA-3 (Keccak); SHA-3 sollte auch ohne das HMAC-Konstrukt sicher sein. [Bearbeiten] Inzwischen wurde KMAC als MAC-Konstrukt für SHA-3 standardisiert.

Außerdem haben die SHA-2-Konstrukte - etwas überraschend - während des SHA-3-Wettbewerbs eine ziemlich gute Resistenz gegen Kryptanalyse gezeigt. Es besteht also keine dringende Notwendigkeit, auf SHA-3 zu aktualisieren.

    
Maarten Bodewes 06.08.2013, 14:55
quelle
4

Ich glaube nicht, dass Sie sich um Sicherheitsvorteile sorgen müssen, HmacSha1 wird immer noch als sicher angesehen Sicherheit sollte als relativ zur Schlüssellänge gedacht werden. Sha256 vs Sha512 Leistung hängt von der Implementierung, Plattform usw. ab, Sie müssen sich selbst testen. Und die Schlüssellängen, die Sie HMAC zur Verfügung stellen, sind unabhängig vom Hash-Algorithmus, siehe pseudocode .

    
jbtule 06.08.2013 13:17
quelle
0

HMAC ruft den Hash-Algorithmus zwei Mal auf, während SHA3 keine HMAC-Konstruktion für getastetes Hashing benötigt, so dass ein doppelter Aufruf leicht vermieden werden kann. Als Ergebnis schlägt SHA3 HMAC-SHA2 in der Leistung und HMAC-SHA1 in der Sicherheit (das Beste aus beiden Welten).

    
Vishal 30.04.2016 04:28
quelle

Tags und Links