🧰 UtlKit

HMAC-Generator So Benutzen: SHA-256, SHA-384 und SHA-512-Unterschriften aus Text- oder Hex-Schlüsseln, im Browser

Eine Nachricht und ein Geheimnis, gelesen als UTF-8-Text oder rohes Hex, signiert mit SHA-256, SHA-384 oder SHA-512 zu einer Hex- oder Base64-Zusammenfassung, alles im Browser über WebCrypto.

Der HMAC-Generator signiert eine Nachricht mit einem geheimen Schlüssel und druckt die Schlüssel-Zusammenfassung. Die gesamte Berechnung ist ein WebCrypto-Aufruf im Browser: Die Nachricht und der Schlüssel bleiben auf der Seite, nichts wird an einen Server gesendet, und das Ergebnis ist eine deterministische Zeichenfolge, die sich in einen Request-Header, einen Abfrageparameter oder einen Testvektor kopieren lässt. Starten Sie beim HMAC-Generator, geben Sie The quick brown fox jumps over the lazy dog als Nachricht ein, geben Sie key als Geheimnis ein, belassen Sie SHA-256 und Hex und drücken Sie Generieren: Die Zusammenfassung druckt f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8.

Die vier Steuerelemente

Vier Eingaben steuern die Zusammenfassung: das Nachrichtenfeld, das Schlüsselfeld mit seiner Text/Hex-Umschaltung, die Algorithmus-Auswahl und die Ausgabeformat-Auswahl. Die Nachricht ist ein mehrzeiliges Textfeld: Zeilenumbrüche sind Teil der Nachricht und werden signiert, so dass dieselben Wörter in zwei Zeilen anders signieren als dieselben Wörter, durch ein Leerzeichen verbunden, und die UTF-8-Bytes von 你好 signieren unter dem Schlüssel key als 309b75c0cbbfb27bb35b8d7b8f4adb4b9399cd54339ab5faeb8798e1b9f7f00c. Der geheime Schlüssel ist ein einzeiliges Feld, und seine Umschaltung entscheidet, wie die Zeichenfolge gelesen wird. Die Algorithmus-Auswahl bietet SHA-256, SHA-384 und SHA-512, und die Formatauswahl bietet Hex und Base64. Generieren ist eine explizite Taste: Nichts wird berechnet, bevor sie gedrückt wird, und die Zusammenfassung erscheint in einem nur lesbaren Feld mit einer Kopieren-Taste daneben.

Text-Schlüssel und Hex-Schlüssel

Im Text-Modus wird der Schlüssel als die UTF-8-Bytes gelesen, genau wie eingegeben: Jedes Zeichen ist Teil des Schlüssels, einschließlich eines Leerzeichens am Ende, so dass der Schlüssel key abc als 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab signiert, während key mit einem Leerzeichen am Ende dasselbe abc als 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68 signiert. Im Hex-Modus wird die Zeichenfolge zunächst von allen Leerraumzeichen befreit und dann als rohe Bytepaare gelesen, so dass 616263 die drei Bytes 0x61, 0x62 und 0x63 sind, nicht die sechs Zeichen des Textes 616263: Unter der Nachricht msg signiert der Hex-Schlüssel 616263 als eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2, während der Text-Schlüssel 616263 als 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41 signiert. Die Hex-Zeichenfolge muss mindestens zwei Zeichen lang sein, eine gerade Länge haben, und jedes Zeichen eine Hexziffer sein; 6162635 fällt an der Prüfung, bevor irgendeine Kryptographie läuft, ebenso wie ungerade Längen und Buchstaben außerhalb von a bis f.

Die drei Algorithmen

Die Länge der Zusammenfassung ist durch den Algorithmus festgelegt: SHA-256 druckt 32 Bytes, das sind 64 Hex-Zeichen oder 44 Base64-Zeichen mit einem = als Füllzeichen; SHA-384 druckt 48 Bytes, 96 Hex-Zeichen oder 64 Base64-Zeichen ohne Füllung; SHA-512 druckt 64 Bytes, 128 Hex-Zeichen oder 88 Base64-Zeichen mit doppelter Füllung. Alle drei sind dieselbe Schlüssel-Konstruktion über drei Hash-Funktionen, so dass die Umschaltung der Auswahl die Länge und den Wert ändert, nicht die Form der Eingabe. Das Tool reproduziert die Testvektoren der RFC 4231: Mit dem Hex-Schlüssel 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b und der Nachricht Hi There druckt SHA-256 b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 und SHA-512 druckt 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854, und mit dem Text-Schlüssel Jefe und der Nachricht what do ya want for breakfast? druckt SHA-256 47f69d8f80f0a6326746beec23a9040fd533642b5ba38a99287670639d8b862a.

Hex und Base64

Hex druckt die Zusammenfassung Byte für Byte in Kleinbuchstaben, zwei Zeichen pro Byte, und Base64 druckt dieselben Bytes mit Standard-Füllung. Die beiden Schreibweisen tragen dieselben 32 Bytes: Die fox-Nachricht unter dem Schlüssel key ist f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 in Hex und 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg= in Base64, das abschließende = ist Füllung und kein signiertes Zeichen. Die Jefe-Nachricht druckt R/adj4DwpjJnRr7sI6kED9UzZCtbo4qZKHZwY52Lhio= unter SHA-256, MxTAcsyrQOuSUFsKlh1Gv2UuDowpCJfZzsFDvCo65FGJ15G5QCeCSey3RFF3dIlG unter SHA-384, wo die 48 Bytes die Base64-Gruppen genau füllen und keine Füllung erscheint, und af7nmi5sP0zyOeCqttVBl2h4BIXw5B/8dZckor99FGR+CncEsWts5Zi2pWU1HIhhnQ3+0nKMj8+Ja0GvkB1UCA== unter SHA-512, wo die 64 Bytes ein Byte in der letzten Gruppe übrig lassen und das doppelte = es auffüllt. Die Kopieren-Taste legt die gedruckte Zeichenfolge in die Zwischenablage und liest sich für zwei Sekunden kopiert.

Determinismus und die Eingabeprüfungen

Dieselbe Nachricht, derselbe Schlüssel und derselbe Algorithmus drucken immer dieselbe Zusammenfassung: Es gibt kein Salz, keinen Zeitstempel und keine Zufallszahl, und das ist die Eigenschaft, die HMAC als Testvektor und als gemeinsame Prüfung zwischen zwei Systemen nutzbar macht. Zwei Eingaben werden abgewiesen, bevor irgendeine Kryptographie läuft: Eine leere oder nur aus Leerraumzeichen bestehende Nachricht löst den Fehler Nachricht ein, und ein leerer oder nur aus Leerraumzeichen bestehender Schlüssel löst den Fehler Schlüssel ein; ein Hex-Schlüssel, der an der Hex-Prüfung scheitert, löst den Fehler ungültiges Hex aus, und in allen drei Fällen behalten die Felder ihren Inhalt zur Korrektur. Die Schlüssel-Länge hat ansonsten keine Einschränkung: Ein ein Byte langer Schlüssel signiert abc als df55998f9fc33d78ac99d1d8ebc2b6e16aa076c4189946942a82b55d5dee8dc7, und ein 100 Byte langer Schlüssel signiert dasselbe abc als 30f0f7f4a3d31b9750666b038c048550020795dd2743759bf83bcf5e0f125b36, weil die HMAC-Konstruktion einen zu langen Schlüssel zunächst auf die Hash-Größe herunterschlägt. Ein Plattform-Eck bleibt: Die WebCrypto-Subtle-API existiert nur in sicheren Kontexten, so dass die Taste auf einer Seite, die über einfaches http ausgeliefert wird, den Fehler Ausfall löst, statt zu berechnen.

Was er nicht ist

Der HMAC-Generator ist kein reiner Hash-Generator: Für eine Zusammenfassung der Nachricht allein, ohne jeden Schlüssel, führt der Hash-Generator MD5, SHA-1 und die SHA-2-Familie über den Text. Auch ist er kein JWT-Tool: Für das Lesen, Aufteilen und Base64-Entcoden eines Tokens statt dessen Signierens macht der JWT-Dekoder das. Und er verschlüsselt nicht: Die Zusammenfassung ist eine Signatur, kein Geheimnis-Behälter, und der AES-Guide behandelt die Richtung der Verschlüsselung. Und er hält keinen Zustand jenseits der vier Eingaben: Es gibt keinen Verlauf, keinen gespeicherten Schlüssel und keine Erinnerung an eine frühere Zusammenfassung, und das Schließen der Seite verwirft die Nachricht und das Geheimnis.

Zugehörige Tools

Häufige Fragen

Schickt der HMAC-Generator die Nachricht oder den Schlüssel an einen Server?

Nein. Die Zusammenfassung wird auf der Seite von der WebCrypto-API des Browsers aus den zwei Feldern und den zwei Auswahlen berechnet. Die Bytes der Nachricht, die Bytes des Schlüssels und das Ergebnis bleiben alle in der Seite; Drücken auf Generieren stellt keine Netzwerkanfrage, und das Einzige, was die Seite verlässt, ist eine Kopie, die Sie von der gedruckten Zusammenfassung anfertigen.

Warum geben dieselben Wörter verschiedene Zusammenfassungen?

Weil der Schlüsselmodus die Zeichenfolge anders liest. Der Text-Schlüssel 616263 sind sechs UTF-8-Zeichen und signieren die Nachricht msg als 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41, während der Hex-Schlüssel 616263 drei rohe Bytes sind und dieselbe Nachricht als eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2 signieren. Leerraumzeichen gelten im Textmodus ebenso: Ein Schlüssel mit einem Leerzeichen am Ende signiert abc als 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68, anders als derselbe Schlüssel ohne das Leerzeichen.

Warum wird der Hex-Schlüssel 6162635 abgewiesen?

Die Hex-Prüfung läuft, bevor irgendeine Kryptographie läuft: Die Zeichenfolge, ohne Leerraumzeichen, muss mindestens zwei Zeichen lang sein, eine gerade Länge haben, und jedes Zeichen eine Hexziffer sein. 6162635 hat sieben Zeichen, eine ungerade Länge, so dass sie den Fehler ungültiges Hex löst; eine Zeichenfolge mit einem Buchstaben außerhalb von a bis f, oder ein einzelnes Zeichen, scheitert an derselben Prüfung. Der Fehler leert das Feld nicht.

Druckt zweimaliges Drücken von Generieren zwei verschiedene Zusammenfassungen?

Nein. HMAC ist deterministisch: Dieselbe Nachricht, derselbe Schlüssel, derselbe Algorithmus und dasselbe Format drucken immer dieselbe Zeichenfolge, weil die Konstruktion kein Salz, keinen Zeitstempel und keine Zufallszahl hat. Das ist die Eigenschaft, die es zwei Systemen mit einem geteilten Geheimnis erlaubt, einander zu prüfen, und der Grund, warum der gedruckte Wert als Testvektor eingefügt werden kann.

Welchen von SHA-256, SHA-384 und SHA-512 soll ich wählen?

Der Algorithmus ist ein Vertrag mit dem Verifizierer: Wählen Sie den, den die Gegenseite oder die Spezifikation erwartet, denn eine Signatur, die gegen den falschen Hash verifiziert wird, passt nicht. Die drei unterscheiden sich in der Ausgabelänge, 32, 48 und 64 Bytes, und in der Hash-Funktion innerhalb der Schlüssel-Konstruktion. Bei freier Wahl ist SHA-256 der häufigste Standard, und SHA-512 gibt die längste Zusammenfassung.

Verwandte Artikel