SM4-salaus / -purku

Salaa tai pura SM4:llä — GB/T 32907-2016, Kiinan kansallinen standardi 128-bittiselle lohkosalaimelle — ECB- ja CBC-tiloissa PKCS#7-täytteellä. Tuloste on tavu tavulta yhteensopiva komentojen openssl enc -sm4-ecb / -sm4-cbc kanssa. Kaikki toimii selaimessa; mitään ei lähetetä.
PKCS#7-täyte lisätään aina, täsmälleen kuten OpenSSL enc.
Lue syöte muodossa:
Kirjoita tuloste muodossa:
OpenSSL-ristitarkistus — salaa tässä, aja sitten openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt (tai -sm4-ecb ilman -iv): tavut täsmäävät täsmälleen, koska tämä sivu käyttää samaa PKCS#7-täytettä kuin OpenSSL.
Itsetesti
Ajaa uudelleen GB/T 32907-2016 liitteen A.1 tunnetun vastauksen vektorin, kuusi determinististä ECB/CBC-ristivektoria, jotka riippumaton Python-viitetoteutus tuotti, kaikki neljä näytealtaa sekä negatiiviset polut (väärä avaimen koko, lohkon monikerrasta poikkeava salateksti, muokattu täyte on hylättävä).
Mikä SM4 on?
Yhdellä lauseella: SM4 on kiinalainen kansallinen standardilohkosalain — 128-bittinen lohko, 128-bittinen avain, 32-kierroksinen salain epätasapainoisella Feistel-rakenteella, julkaistu nimellä GB/T 32907-2016 (aiemmin GM/T 0002-2012), ja se toimii kiinalaisessa "SM"-sarjassa samaa roolia kuin AES NIST-maailmassa.
SM4 vs AES yhdellä silmäyksellä
NäkökulmaSM4AES
Lohkon koko128 bittiä128 bittiä
Avainkootvain 128 bittiä128 / 192 / 256 bittiä
Kierrokset3210 / 12 / 14
Rakenneepätasapainoinen Feistel (yksi 32-bittinen sana päivittyy kierroksella)substituutio–permutaatioverkko (koko tila joka kierroksella)
S-laatikkoyksi 8×8-laatikko, käytetty 4× kierroksellayksi 8×8-laatikko, 16× kierroksella + MixColumns
StandardimooditECB, CBC (tämä sivu); GCM/CTR TLS-sarjoissa (RFC 8998)ECB, CBC, CTR, GCM, ...
Julkaistu2012 (GM/T 0002-2012; GB/T 32907-2016); ISO/IEC 18033-3:2010:ssä2001 (FIPS 197)

Sama tehtävä, eri suunnittelu: molemmat ovat 128-bittisiä lohkosalaimia julkisella 8×8-S-laatikolla, mutta SM4 iteroi 32 kevyttä Feistel-kierrosta, kun taas AES soveltaa 10–14 raskaampaa koko-tila-kierrosta. Ohjelmistossa AES on yleensä nopeampi laitteistokäskyjen (AES-NI) ansiosta; SM4 saavutti vertailukelpoisen aseman kiinalaisilla alustoilla omilla CPU-laajennuksillaan. Kummallekaan ei tunneta käytännön hyökkäystä; 128-bittinen avain on 128-bittinen avain.

Miksi SM4:ää käytettäisiin AES:n sijaan?

Yhteensopivuus ja vaatimustenmukaisuus, ei vahvuus: kiinalaiset kaupallisen kryptografian säännöt (商用密码) vaativat SM-sarjan sertifioiduilla aloilla, ja protokollat kuten TLCP ja TLS 1.3 RFC 8998 -sarjoilla neuvottelevat SM4:stä. Jos vastapuoli, sääntelijä tai laitteisto puhuu vain SM4:ää, käytetään SM4:ää. Jos valinta on vapaa, AES-256 tämän sivuston AES-sivulla on edelleen maailmanlaajuinen oletus.

Yleisiä virheitä
  • ECB rakenteellisella datalla. Samat selkotekstilohkot tuottavat samat salatekstilohkot — klassinen pingviini. Käytä CBC:tä (tämän sivun oletus) tuoreella IV:llä aina, kun data on pidempi kuin yksi lohko.
  • Avain on tasan 16 tavua. Toisin kuin AES:ssä, SM4:llä ei ole 192- tai 256-bittisiä muunnelmia. Salasana kuten "password" ei ole avain — johda siitä ensin avain KDF:llä (katso Salasanatiivistegeneraattori).
  • Oletus, että täyte on valinnainen. Tämä sivu — kuten OpenSSL enc — käyttää aina PKCS#7:ää, joten 16 tavun selkoteksti salautuu 32 tavuksi. Täyttämätöntä raakaa SM4:ää ei tarkoituksella tarjota.
  • IV:n uudelleenkäyttö CBC:ssä. Toistuva avain+IV-pari CBC:ssä paljastaa viestien etuosien yhtäsuuruuden. Luo jokaiselle viestille satunnainen IV ja toimita se salatekstin mukana.
UKK

Onko tämä yhteensopiva OpenSSL:n kanssa? Kyllä — tavu tavulta. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) tuottaa täsmälleen tämän sivun tulostaman salatekstin samalle avaimelle, IV:lle ja syötteelle; GmSSL on sama.

Miksi tässä ei ole SM4-GCM:ää? Standardeihin läheinen kirjastoekosysteemi tarjoaa SM4-GCM:n pääasiassa TLS-pinoissa; tämän sivun noudattama tiedostopohjainen komentoriviperinne (enc) kattaa ECB/CBC:n. Todennettu SM4 kuuluu protokollakerrokseen.

Onko SM4 WebCryptossa? Ei — mikään selain ei toteuta sitä. Siksi tämä sivu ajaa alusta asti kirjoitetun JavaScript-toteutuksen, ja standardin omat testivektorit on kytketty yllä olevaan itsetestiin.

Voiko muualla salatun purkaa? Kyllä, jos tunnetaan tila, avain, IV ja se, että PKCS#7:ää käytettiin — liitä salateksti hex- tai Base64-muodossa, vaihda Pura-tilaan ja suorita.