SM4 titkosítás / visszafejtés

Titkosítás vagy visszafejtés SM4-gyel — GB/T 32907-2016, a kínai nemzeti szabvány 128 bites blokk-rejtjelezője — ECB és CBC módban, PKCS#7 kitöltéssel. A kimenet bájtról bájtra kompatibilis a openssl enc -sm4-ecb / -sm4-cbc paranccsal. Minden a böngészőben fut; semmi nincs feltöltve.
A PKCS#7 kitöltés mindig alkalmazódik, pontosan úgy, mint az OpenSSL enc esetén.
Bemenet olvasása mint:
Kimenet írása mint:
OpenSSL-ellenőrzés — az itt végzett titkosítás után a openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt parancs futtatható (vagy a -sm4-ecb a -iv nélkül): a bájtok pontosan egyeznek, mert ez az oldal ugyanazt a PKCS#7 kitöltést alkalmazza, mint az OpenSSL.
Önteszt
Lejátssza a GB/T 32907-2016 A.1 függelékének ismert-válasz vektorát, hat determinisztikus ECB/CBC keresztvektort egy független Python-referenciaimplementációból, mind a négy mintakészletet, valamint a negatív eseteket (hibás kulcsméret, blokkméret-többszörösnek nem megfelelő titkosszöveg, megváltoztatott kitöltést el kell utasítani).
Mi az SM4?
Egy mondatban: az SM4 a kínai nemzeti szabvány blokk-rejtjelezője — 128 bites blokk, 128 bites kulcs, 32 körös rejtjelező kiegyensúlyozatlan Feistel-szerkezettel, GB/T 32907-2016 (korábban GM/T 0002-2012) néven publikálva, és azt a szerepet tölti be a kínai „SM” csomagban, amelyet az AES tölt be a NIST világában.
Az SM4 és az AES egy pillantásra
SzempontSM4AES
Blokkméret128 bit128 bit
Kulcsméretekcsak 128 bit128 / 192 / 256 bit
Körök3210 / 12 / 14
Szerkezetkiegyensúlyozatlan Feistel (körönként egy 32 bites szó frissül)helyettesítő–permutációs hálózat (a teljes állapot minden körben)
S-dobozegy 8×8-as doboz, körönként 4× használvaegy 8×8-as doboz, körönként 16× + MixColumns
Szabványos módokECB, CBC (ez az oldal); GCM/CTR TLS-csomagokban (RFC 8998)ECB, CBC, CTR, GCM, ...
Közzétéve2012 (GM/T 0002-2012; GB/T 32907-2016); az ISO/IEC 18033-3:2010-ben2001 (FIPS 197)

Ugyanaz a feladat, más tervezés: mindkettő 128 bites blokk-rejtjelező nyilvános 8×8-as S-dobozzal, de az SM4 32 könnyű Feistel-kört futtat, míg az AES 10–14 nehezebb, teljes állapotra ható kört alkalmaz. Szoftverben az AES általában gyorsabb a hardverutasításoknak (AES-NI) köszönhetően; az SM4 a kínai platformokon dedikált CPU-kiterjesztésekkel hasonló helyet vívott ki. Egyiknek sincs gyakorlati támadása; a 128 bites kulcs marad 128 bites kulcs.

Miért használnék SM4-et AES helyett?

Megfelelőség és együttműködés, nem erősség: a kínai kereskedelmi kriptográfiai előírások (商用密码) a tanúsított szektorokban az SM-csomagot írják elő, a TLCP és az RFC 8998 csomagokat használó TLS 1.3 pedig SM4-et egyeztet. Ha a partner, a szabályozó vagy a hardver csak SM4-et beszél, az SM4 szükséges. Ha szabadon választható, a AES-oldalon található AES-256 marad a globális alapértelmezés.

Gyakori hibák
  • ECB strukturált adaton. Azonos nyílt szövegblokkok azonos titkosszövegblokkokat adnak — a klasszikus pingvin. Ha az adat egy blokknál hosszabb, a CBC (az oldal alapértelmezettje) friss IV-vel javasolt.
  • A kulcs pontosan 16 bájt. Az AES-sel ellentétben az SM4-nek nincs 192/256 bites változata. Egy olyan jelmondat, mint a „password”, nem kulcs — előbb KDF-fel kell származtatni (részletek: a Jelszókivonat-generátort).
  • Feltételezés, hogy a kitöltés opcionális. Ez az oldal — az OpenSSL enc-hez hasonlóan — mindig alkalmazza a PKCS#7-et, így egy 16 bájtos nyílt szöveg 32 bájtra titkosítódik. A kitöltés nélküli nyers SM4 szándékosan nem elérhető.
  • IV újrahasználata CBC-ben. Egy megismételt kulcs+IV pár CBC-ben szivárogtatja az üzenet-előtagok egyenlőségét. Üzenetenként véletlen IV generálandó, és a titkosszöveggel együtt továbbítandó.
GYIK

Kompatibilis az OpenSSL-lel? Igen — bájtról bájtra. Az openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) pontosan azt a titkosszöveget adja, amelyet ez az oldal ugyanarra a kulcsra, IV-re és bemenetre kiír; a GmSSL ugyanígy működik.

Miért nincs SM4-GCM itt? A szabványokhoz közeli könyvtári ökoszisztéma az SM4-GCM-et főként TLS-veremekben teszi elérhetővé; a fájlorientált parancssori konvenció, amelyet ez az oldal követ (enc), az ECB/CBC-t fedi le. A hitelesített SM4 a protokollrétegbe tartozik.

Benne van az SM4 a WebCrypto-ban? Nem — egyetlen böngésző sem valósítja meg. Ezért futtat ez az oldal nulláról írt JavaScript-implementációt, a szabvány teszt-vektorait pedig a fenti önellenőrzésbe kötve.

Visszafejthető-e valami, amit máshol titkosítottak? Igen, ha ismert a mód, a kulcs, az IV, és tudjuk, hogy PKCS#7 volt — a titkosszöveg hexként vagy Base64-ként illeszthető be, a Visszafejtés módra váltva pedig indítható.