SM4 szyfrowanie / deszyfrowanie

Szyfruje lub deszyfruje SM4 — GB/T 32907-2016, chiński krajowy standard 128-bitowego szyfru blokowego — w trybach ECB i CBC z dopełnieniem PKCS#7. Wyjście jest zgodne bajt po bajcie z openssl enc -sm4-ecb / -sm4-cbc. Całe działanie odbywa się w przeglądarce; nic nie jest wysyłane.
Dopełnienie PKCS#7 jest zawsze stosowane, dokładnie jak w OpenSSL enc.
Wczytaj wejście jako:
Zapisz wyjście jako:
Weryfikacja krzyżowa z OpenSSL — zaszyfruj tutaj, a następnie uruchom openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt (albo -sm4-ecb bez -iv): bajty zgadzają się dokładnie, bo ta strona stosuje to samo dopełnienie PKCS#7, co OpenSSL.
Autotest
Odtwarza wektor znany z odpowiedzi z dodatku A.1 GB/T 32907-2016, sześć deterministycznych wektorów krzyżowych ECB/CBC wytworzonych przez niezależną implementację referencyjną w Pythonie, wszystkie cztery pule przykładów oraz ścieżki negatywne (zły rozmiar klucza, szyfrogram niebędący wielokrotnością bloku, zmienione dopełnienie muszą zostać odrzucone).
Czym jest SM4?
W jednym zdaniu: SM4 to chiński krajowy standard szyfru blokowego — blok 128-bitowy, klucz 128-bitowy, 32-rundowy szyfr o niezrównoważonej strukturze Feistela, opublikowany jako GB/T 32907-2016 (wcześniej GM/T 0002-2012); w chińskim pakiecie „SM” pełni rolę, jaką w świecie NIST pełni AES.
SM4 a AES w skrócie
AspektSM4AES
Rozmiar bloku128 bitów128 bitów
Rozmiary kluczytylko 128 bitów128 / 192 / 256 bitów
Rundy3210 / 12 / 14
Strukturaniezrównoważony Feistel (jedno słowo 32-bitowe aktualizowane w każdej rundzie)sieć podstawień i permutacji (cały stan w każdej rundzie)
S-boxjeden box 8×8, używany 4× na rundęjeden box 8×8, 16× na rundę + MixColumns
Standardowe trybyECB, CBC (ta strona); GCM/CTR w zestawach TLS (RFC 8998)ECB, CBC, CTR, GCM, ...
Opublikowany2012 (GM/T 0002-2012; GB/T 32907-2016); w ISO/IEC 18033-3:20102001 (FIPS 197)

Ta sama praca, inny projekt: oba to 128-bitowe szyfry blokowe z publicznym S-boxem 8×8, ale SM4 wykonuje 32 lekkie rundy Feistela, podczas gdy AES stosuje 10–14 cięższych rund na całym stanie. W oprogramowaniu AES jest zwykle szybszy dzięki instrukcjom sprzętowym (AES-NI); SM4 zyskał porównywalną pozycję dzięki dedykowanym rozszerzeniom procesorów w chińskich platformach. Żaden nie ma praktycznego ataku; 128-bitowy klucz to 128-bitowy klucz.

Po co używać SM4 zamiast AES?

Zgodność i interoperacyjność, a nie siła: chińskie przepisy dotyczące komercyjnej kryptografii (商用密码) wymagają pakietu SM w certyfikowanych sektorach, a protokoły takie jak TLCP i TLS 1.3 z zestawami z RFC 8998 negocjują SM4. Jeśli druga strona, regulator lub sprzęt obsługuje tylko SM4, używa się SM4. Gdy można wybierać swobodnie, globalnym domyślnym wyborem pozostaje AES-256 na stronie AES.

Typowe błędy
  • ECB na danych o strukturze. Identyczne bloki tekstu jawnego dają identyczne bloki szyfrogramu — klasyczny pingwin. Gdy dane są dłuższe niż jeden blok, zalecany jest CBC (domyślny tryb tej strony) ze świeżym IV.
  • Klucz ma dokładnie 16 bajtów. W przeciwieństwie do AES, SM4 nie ma wariantów 192/256-bitowych. Hasło takie jak "password" nie jest kluczem — najpierw trzeba wyprowadzić klucz przez KDF (zob. Generator skrótów haseł).
  • Zakładanie, że dopełnienie jest opcjonalne. Ta strona — podobnie jak OpenSSL enc — zawsze stosuje PKCS#7, więc 16-bajtowy tekst jawny szyfruje się do 32 bajtów. Surowy SM4 bez dopełnienia celowo nie jest oferowany.
  • Ponowne użycie IV w CBC. Powtórzona para klucz+IV w CBC ujawnia równość prefiksów wiadomości. Generuj losowy IV dla każdej wiadomości i przesyłaj go razem z szyfrogramem.
FAQ

Czy to jest zgodne z OpenSSL? Tak — bajt po bajcie. openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) daje dokładnie ten szyfrogram, który ta strona wypisuje dla tego samego klucza, IV i wejścia; GmSSL działa tak samo.

Dlaczego tu nie ma SM4-GCM? Ekosystem bibliotek bliskich standardom udostępnia SM4-GCM głównie wewnątrz stosów TLS; zorientowana na pliki konwencja wiersza poleceń, do której ta strona się stosuje (enc), obejmuje ECB/CBC. Uwierzytelnione SM4 należy do warstwy protokołu.

Czy SM4 jest w WebCrypto? Nie — żadna przeglądarka go nie implementuje. Dlatego ta strona działa na implementacji w JavaScript pisanej od zera, z wektorami testowymi samego standardu podłączonymi do samotestu powyżej.

Czy można odszyfrować coś zaszyfrowanego gdzie indziej? Tak, jeśli zna się tryb, klucz, IV i to, że użyto PKCS#7 — wklej szyfrogram jako hex lub Base64, przełącz na Deszyfruj i kliknij.