SM4 šifrovanie / dešifrovanie

Šifrovanie alebo dešifrovanie cez SM4 — GB/T 32907-2016, čínska národná 128-bitová blková šifra — v režimoch ECB a CBC s výplňou PKCS#7. Výstup je bajt po bajte kompatibilný s openssl enc -sm4-ecb / -sm4-cbc. Všetko beží v prehliadači; nič sa nenahráva.
Výplň PKCS#7 sa vždy použije, presne ako v OpenSSL enc.
Čítať vstup ako:
Zapísať výstup ako:
Krížová kontrola cez OpenSSL — zašifruje sa tu, potom sa spustí openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt (alebo -sm4-ecb bez -iv): bajty sa presne zhodujú, lebo táto stránka používa tú istú výplň PKCS#7 ako OpenSSL.
Autotest
Zopakuje sa známy vektor odpovede z prílohy A.1 GB/T 32907-2016, šesť deterministických krížových vektorov ECB/CBC vytvorených nezávislou referenčnou implementáciou v Pythone, všetky štyri vzorkové zdroje a negatívne cesty (nesprávna veľkosť kľúča, šifrovaný text, ktorého dĺžka nie je násobkom bloku, pozmenená výplň musia byť odmietnuté).
Čo je SM4?
Jednou vetou: SM4 je čínska národná štandardná blková šifra — 128-bitový blok, 128-bitový kľúč, 32-kolová šifra s nevyváženou Feistelovou štruktúrou, publikovaná ako GB/T 32907-2016 (skôr GM/T 0002-2012), a v čínskej sade „SM“ zohráva rolu, akú v svete NIST zohráva AES.
SM4 vs AES na prvý pohľad
AspektSM4AES
Veľkosť bloku128 bitov128 bitov
Veľkosti kľúčoviba 128 bitov128 / 192 / 256 bitov
Kolá3210 / 12 / 14
Štruktúranevyvážená Feistelova štruktúra (v každom kole sa aktualizuje jedno 32-bitové slovo)sieť substitúcie a permutácie (celý stav v každom kole)
S-boxjedna S-box 8×8, použitá 4× v každom kolejedna S-box 8×8, 16× v každom kole + MixColumns
Štandardné režimyECB, CBC (táto stránka); GCM/CTR v sadách TLS (RFC 8998)ECB, CBC, CTR, GCM, ...
Publikované2012 (GM/T 0002-2012; GB/T 32907-2016); v ISO/IEC 18033-3:20102001 (FIPS 197)

Rovnaká úloha, iný návrh: obe sú 128-bitové blokové šifry s verejnou S-boxom 8×8, ale SM4 iteruje 32 ľahkých Feistelových kôl, kým AES aplikuje 10–14 ťažších kôl nad celým stavom. Softvérovo je AES zvyčajne rýchlejší vďaka hardvérovým inštrukciám (AES-NI); SM4 dosiahol porovnateľné postavenie vďaka vyhradeným rozšíreniam CPU v čínskych platformách. Ani jedna nemá praktický útok; 128-bitový kľúč zostáva 128-bitovým kľúčom.

Prečo použiť SM4 namiesto AES?

Ide o súlad a interoperabilitu, nie o silu: čínske regulácie komerčnej kryptografie (商用密码) vyžadujú sadu SM v certifikovaných odvetviach a protokoly ako TLCP a TLS 1.3 so sadami podľa RFC 8998 dohodnú SM4. Ak protistrana, regulátor alebo hardvér hovorí len SM4, použije sa SM4. Ak je voľba slobodná, celosvetovým štandardom zostáva AES-256 na stránke AES tohto webu.

Časté chyby
  • ECB na štruktúrovaných údajoch. Rovnaké otvorené bloky dávajú rovnaké šifrované bloky — klasický tučniak. Pri údajoch dlhších než jeden blok sa vždy použije CBC (predvolený režim tejto stránky) s novým IV.
  • Kľúč má presne 16 bajtov. Na rozdiel od AES nemá SM4 varianty 192/256 bitov. Heslo ako „password“ nie je kľúč — najprv sa z neho odvodí kľúč pomocou KDF (súvisiace: Generátor hashov hesiel).
  • Predpoklad, že výplň je voliteľná. Táto stránka — rovnako ako OpenSSL enc — vždy používa PKCS#7, takže 16-bajtový otvorený text sa zašifruje na 32 bajtov. Surový SM4 bez výplne sa úmyselne neponúka.
  • Opätovné použitie IV v CBC. Zopakovaný pár kľúč+IV v CBC prezradí rovnosť začiatkov správ. Pre každú správu sa vygeneruje náhodný IV a odošle sa spolu so šifrovaným textom.
FAQ

Je to kompatibilné s OpenSSL? Áno — bajt po bajte. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) vytvorí presne ten šifrovaný text, ktorý táto stránka vypíše pre rovnaký kľúč, IV a vstup; GmSSL je rovnaký.

Prečo tu nie je SM4-GCM? Ekosystém knižníc v okolí štandardov ho sprístupňuje hlavne v zásobníkoch TLS; konvencia príkazového riadku orientovaná na súbory, ktorej sa táto stránka prispôsobuje (enc), pokrýva ECB/CBC. Autentifikované SM4 patrí na protokolovú vrstvu.

Je SM4 vo WebCrypto? Nie — žiadny prehliadač ju neimplementuje. Preto táto stránka beží na implementácii v JavaScripte napísanej od nuly, s testovacími vektormi štandardu zapojenými do samotestu vyššie.

Dá sa dešifrovať niečo zašifrované inde? Áno, ak sa pozná režim, kľúč, IV a že sa použila výplň PKCS#7 — šifrovaný text sa vloží ako hex alebo Base64, prepne sa na Dešifrovanie a spustí sa.