SM4 Şifrele / Çöz

SM4 ile şifreleme veya şifre çözme — GB/T 32907-2016, Çin ulusal standardı 128 bitlik blok şifresi — PKCS#7 dolgusuyla ECB ve CBC kiplerinde. Çıktı openssl enc -sm4-ecb / -sm4-cbc ile bayt bayt uyumludur. Her şey tarayıcınızda çalışır; hiçbir şey yüklenmez.
PKCS#7 dolgusu her zaman uygulanır, tıpkı OpenSSL enc gibi.
Girdiyi şu şekilde oku:
Çıktıyı şu şekilde yaz:
OpenSSL çapraz denetimi — burada şifreleyin, sonra openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt çalıştırın (ya da -iv olmadan -sm4-ecb): baytlar tam olarak eşleşir, çünkü bu sayfa OpenSSL'in uyguladığı aynı PKCS#7 dolgusunu uygular.
Öz test
GB/T 32907-2016 ek A.1 bilinen-cevap vektörünü, bağımsız bir Python referans uygulamasının ürettiği altı belirleyici ECB/CBC çapraz vektörünü, dört örnek havuzunun tamamını ve olumsuz yolları (yanlış anahtar boyutu, blok katı olmayan şifreli metin, kurcalanmış dolgu reddedilmelidir) yeniden oynatır.
SM4 nedir?
Tek cümleyle: SM4, Çin ulusal standardı blok şifresidir — 128 bitlik blok, 128 bitlik anahtar, dengesiz bir Feistel yapısına sahip 32 turlu bir şifre; GB/T 32907-2016 (önceki GM/T 0002-2012) olarak yayımlanmıştır ve Çin "SM" paketinde, NIST dünyasında AES'in oynadığı rolü oynar.
SM4 ile AES bir bakışta
YönSM4AES
Blok boyutu128 bit128 bit
Anahtar boyutlarıyalnızca 128 bit128 / 192 / 256 bit
Turlar3210 / 12 / 14
Yapıdengesiz Feistel (tur başına bir 32 bitlik kelime güncellenir)yerine koyma–permütasyon ağı (her turda tüm durum)
S-kutusubir 8×8 kutu, tur başına 4× kullanılırbir 8×8 kutu, tur başına 16× + MixColumns
Standart kiplerECB, CBC (bu sayfa); GCM/CTR TLS paketlerinde (RFC 8998)ECB, CBC, CTR, GCM, ...
Yayımlandı2012 (GM/T 0002-2012; GB/T 32907-2016); ISO/IEC 18033-3:2010'da2001 (FIPS 197)

Aynı iş, farklı tasarım: ikisi de genel 8×8 S-kutusu olan 128 bitlik blok şifreleridir, ancak SM4 32 hafif Feistel turu çalıştırırken AES 10–14 daha ağır tüm-durum turu uygular. Yazılımda AES donanım komutları (AES-NI) sayesinde genellikle daha hızlıdır; SM4, Çin platformlarında özel CPU uzantılarıyla benzer bir konuma ulaştı. İkisine de pratik bir saldırı yoktur; 128 bitlik anahtar, 128 bitlik anahtardır.

AES yerine neden SM4 kullanayım?

Güçten değil, uyumluluk ve birlikte çalışabilirlikten söz ediyoruz: Çin ticari kriptografi düzenlemeleri (商用密码) onaylı sektörlerde SM paketini zorunlu kılar; TLCP ve RFC 8998 paketli TLS 1.3 gibi protokoller SM4'ü müzakere eder. Karşı tarafınız, düzenleyiciniz ya da donanımınız yalnızca SM4 konuşuyorsa SM4 kullanırsınız. Özgürce seçebiliyorsanız, bu sitenin AES sayfasındaki AES-256 hâlâ küresel varsayılandır.

Yaygın hatalar
  • Yapılandırılmış veride ECB. Aynı düz metin blokları aynı şifreli metin bloklarını üretir — klasik penguen. Veri bir bloktan uzun olduğunda, yeni bir IV ile CBC (bu sayfanın varsayılanı) kullanın.
  • Bir anahtar tam olarak 16 bayttır. AES'in aksine SM4'ün 192/256 bitlik varyantları yoktur. "password" gibi bir parola anahtar değildir — önce bir KDF ile bir anahtar türetin (bkz. Parola Karma Üretici).
  • Dolgunun isteğe bağlı olduğunu varsaymak. Bu sayfa — OpenSSL enc gibi — her zaman PKCS#7 uygular, dolayısıyla 16 baytlık bir düz metin 32 bayta şifrelenir. Dolgusuz ham SM4 bilerek sunulmaz.
  • CBC'de IV'yi yeniden kullanmak. CBC'de tekrarlanan anahtar+IV çifti, ileti öneklerinin eşitliğini sızdırır. Her ileti için rastgele bir IV üretin ve şifreli metinle birlikte gönderin.
SSS

OpenSSL ile uyumlu mu? Evet — bayt bayt. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+), aynı anahtar, IV ve girdi için bu sayfanın yazdırdığı şifreli metnin tıpkısını üretir; GmSSL de aynıdır.

Burada neden SM4-GCM yok? Standartlara yakın kütüphane ekosistemi SM4-GCM'i esas olarak TLS yığınlarının içinde sunar; bu sayfanın uyduğu dosya odaklı komut satırı geleneği (enc) ECB/CBC'yi kapsar. Kimlik doğrulamalı SM4, protokol katmanına aittir.

SM4, WebCrypto'da var mı? Hayır — hiçbir tarayıcı onu uygulamaz. Bu yüzden bu sayfa JavaScript'te sıfırdan bir uygulama çalıştırır; standardın kendi test vektörleri yukarıdaki öz-teste bağlıdır.

Başka yerde şifrelenmiş bir şeyi çözebilir miyim? Evet, kipi, anahtarı, IV'yi ve PKCS#7'nin kullanıldığını biliyorsanız — şifreli metni onaltılık ya da Base64 olarak yapıştırın, Şifre çöz'e geçin ve başlayın.