SM4 verschlüsseln / entschlüsseln

Verschlüsseln oder entschlüsseln Sie mit SM4 — GB/T 32907-2016, dem chinesischen nationalen Standard für eine 128-Bit-Blockchiffre — in den Modi ECB und CBC mit PKCS#7-Auffüllung. Die Ausgabe ist Byte für Byte kompatibel mit openssl enc -sm4-ecb / -sm4-cbc. Alles läuft in Ihrem Browser; nichts wird hochgeladen.
PKCS#7-Auffüllung wird immer angewendet, genau wie bei OpenSSL enc.
Eingabe lesen als:
Ausgabe schreiben als:
Kreuzprüfung mit OpenSSL — verschlüsseln Sie hier und führen Sie dann openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt aus (oder -sm4-ecb ohne -iv): Die Bytes stimmen genau überein, weil diese Seite dieselbe PKCS#7-Auffüllung anwendet wie OpenSSL.
Selbsttest
Spielt den bekannten Antwortvektor aus Anhang A.1 von GB/T 32907-2016 ab, sechs deterministische ECB/CBC-Kreuzvektoren aus einer unabhängigen Python-Referenzimplementierung, alle vier Beispielpools und die Negativpfade (falsche Schlüsselgröße, Chiffretext mit nicht ganzzahligem Vielfachen der Blockgröße, manipulierte Auffüllung muss abgelehnt werden).
Was ist SM4?
In einem Satz: SM4 ist die chinesische nationale Standard-Blockchiffre — ein 128-Bit-Block, ein 128-Bit-Schlüssel, eine Chiffre mit 32 Runden und einer unausgewogenen Feistel-Struktur, veröffentlicht als GB/T 32907-2016 (zuvor GM/T 0002-2012). Sie übernimmt im chinesischen „SM“-Paket die Rolle, die AES in der NIST-Welt spielt.
SM4 gegenüber AES auf einen Blick
AspektSM4AES
Blockgröße128 Bit128 Bit
Schlüsselgrößennur 128 Bit128 / 192 / 256 Bit
Runden3210 / 12 / 14
Strukturunausgewogenes Feistel-Netzwerk (in jeder Runde ein 32-Bit-Wort aktualisiert)Substitutions-Permutations-Netzwerk (der gesamte Zustand in jeder Runde)
S-Boxeine 8×8-Box, je Runde 4× verwendeteine 8×8-Box, je Runde 16× plus MixColumns
StandardmodiECB, CBC (diese Seite); GCM/CTR in TLS-Suiten (RFC 8998)ECB, CBC, CTR, GCM, ...
Veröffentlicht2012 (GM/T 0002-2012; GB/T 32907-2016); in ISO/IEC 18033-3:20102001 (FIPS 197)

Gleiche Aufgabe, anderes Design: Beide sind 128-Bit-Blockchiffren mit einer öffentlichen 8×8-S-Box, aber SM4 durchläuft 32 schlanke Feistel-Runden, während AES 10 bis 14 schwerere Runden über den gesamten Zustand ausführt. Software-AES ist dank Hardwarebefehlen (AES-NI) meist schneller; SM4 hat auf chinesischen Plattformen mit eigenen CPU-Erweiterungen eine vergleichbare Stellung erreicht. Keine der beiden hat einen praktischen Angriff; der 128-Bit-Schlüssel bleibt der 128-Bit-Schlüssel.

Warum sollte ich SM4 statt AES verwenden?

Konformität und Interoperabilität, nicht Stärke: Chinesische Vorschriften für kommerzielle Kryptografie (商用密码) verlangen die SM-Suite in zertifizierten Bereichen, und Protokolle wie TLCP und TLS 1.3 mit den Suiten nach RFC 8998 handeln SM4 aus. Verlangt Ihre Gegenseite, Ihre Aufsichtsbehörde oder Ihre Hardware nur SM4, verwenden Sie SM4. Sind Sie in der Wahl frei, bleibt AES-256 auf der AES-Seite dieser Website der weltweite Standard.

Häufige Fehler
  • ECB bei strukturierten Daten. Identische Klartextblöcke ergeben identische Chiffretextblöcke — der klassische Pinguin. Verwenden Sie CBC (den Standard dieser Seite) mit einem frischen IV, sobald die Daten länger als ein Block sind.
  • Ein Schlüssel hat genau 16 Byte. Anders als AES kennt SM4 keine 192- oder 256-Bit-Varianten. Eine Passphrase wie "password" ist kein Schlüssel — leiten Sie zuerst mit einer KDF einen Schlüssel ab (siehe den Passwort-Hash-Generator).
  • Auffüllung für optional halten. Diese Seite — wie OpenSSL enc — wendet immer PKCS#7 an, daher wird ein 16-Byte-Klartext zu 32 Byte verschlüsselt. Rohes SM4 ohne Auffüllung wird bewusst nicht angeboten.
  • Einen IV in CBC wiederverwenden. Ein wiederholtes Paar aus Schlüssel und IV in CBC verrät die Gleichheit von Nachrichtenanfängen. Erzeugen Sie für jede Nachricht einen zufälligen IV und senden Sie ihn zusammen mit dem Chiffretext.
FAQ

Ist das mit OpenSSL kompatibel? Ja — Byte für Byte. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) erzeugt genau den Chiffretext, den diese Seite für denselben Schlüssel, IV und dieselbe Eingabe ausgibt; GmSSL verhält sich identisch.

Warum hier kein SM4-GCM? Das standardnahe Bibliotheksökosystem stellt SM4-GCM vor allem innerhalb von TLS-Stacks bereit; die dateiorientierte Kommandozeilenkonvention, der diese Seite folgt (enc), deckt ECB/CBC ab. Authentifiziertes SM4 gehört auf die Protokollschicht.

Ist SM4 in WebCrypto enthalten? Nein — kein Browser implementiert es. Deshalb läuft auf dieser Seite eine von Grund auf neu geschriebene Implementierung in JavaScript, mit den eigenen Testvektoren des Standards im oben genannten Selbsttest.

Kann ich etwas entschlüsseln, das woanders verschlüsselt wurde? Ja, wenn Sie den Modus, den Schlüssel und den IV kennen und wissen, dass PKCS#7 verwendet wurde — fügen Sie den Chiffretext als Hex oder Base64 ein, wechseln Sie zu Entschlüsseln und starten Sie.