SM4 κρυπτογράφηση / αποκρυπτογράφηση

Κρυπτογράφηση ή αποκρυπτογράφηση με SM4 — GB/T 32907-2016, το κινεζικό εθνικό πρότυπο κρυπτογράφου μπλοκ 128 bit — στις λειτουργίες ECB και CBC με γέμισμα PKCS#7. Η έξοδος είναι συμβατή byte προς byte με openssl enc -sm4-ecb / -sm4-cbc. Όλα εκτελούνται στο πρόγραμμα περιήγησης· τίποτα δεν μεταφορτώνεται.
Το γέμισμα PKCS#7 εφαρμόζεται πάντα, ακριβώς όπως στο OpenSSL enc.
Ανάγνωση εισόδου ως:
Εγγραφή εξόδου ως:
Διασταύρωση με OpenSSL — κρυπτογράφηση εδώ, και έπειτα openssl enc -d -sm4-cbc -K <hexkey> -iv <hexiv> -in file.sm4 -out file.txt (ή -sm4-ecb χωρίς -iv): τα bytes ταιριάζουν ακριβώς, επειδή η σελίδα εφαρμόζει το ίδιο γέμισμα PKCS#7 με το OpenSSL.
Αυτοέλεγχος
Επανεκτελεί το διάνυσμα γνωστής απάντησης του παραρτήματος Α.1 του GB/T 32907-2016, έξι ντετερμινιστικά διανύσματα διασταύρωσης ECB/CBC που παρήγαγε ανεξάρτητη υλοποίηση αναφοράς σε Python, και τα τέσσερα δειγματοληπτικά σύνολα, καθώς και τις αρνητικές διαδρομές (λάθος μέγεθος κλειδιού, κρυπτογράφημα που δεν είναι πολλαπλάσιο του μπλοκ, παραποιημένο γέμισμα πρέπει να απορρίπτονται).
Τι είναι το SM4;
Σε μία πρόταση: το SM4 είναι το κινεζικό εθνικό πρότυπο κρυπτογράφου μπλοκ — μπλοκ 128 bit, κλειδί 128 bit, κρυπτογράφος 32 γύρων με μη ισορροπημένη δομή Feistel, δημοσιευμένος ως GB/T 32907-2016 (προηγουμένως GM/T 0002-2012), και παίζει στην κινεζική σουίτα «SM» τον ρόλο που παίζει το AES στον κόσμο NIST.
SM4 έναντι AES με μια ματιά
ΠλευράSM4AES
Μέγεθος μπλοκ128 bit128 bit
Μεγέθη κλειδιώνμόνο 128 bit128 / 192 / 256 bit
Γύροι3210 / 12 / 14
Δομήμη ισορροπημένο Feistel (μία λέξη 32 bit ενημερώνεται ανά γύρο)δίκτυο αντικατάστασης–μετάθεσης (ολόκληρη η κατάσταση σε κάθε γύρο)
S-boxένα κουτί 8×8, χρησιμοποιείται 4× ανά γύροένα κουτί 8×8, 16× ανά γύρο + MixColumns
Τυπικές λειτουργίεςECB, CBC (αυτή η σελίδα)· GCM/CTR σε σουίτες TLS (RFC 8998)ECB, CBC, CTR, GCM, ...
Δημοσιεύτηκε2012 (GM/T 0002-2012· GB/T 32907-2016)· στο ISO/IEC 18033-3:20102001 (FIPS 197)

Ίδια δουλειά, διαφορετικός σχεδιασμός: και τα δύο είναι κρυπτογράφοι μπλοκ 128 bit με δημόσιο S-box 8×8, αλλά το SM4 επαναλαμβάνει 32 ελαφρείς γύρους Feistel ενώ το AES εφαρμόζει 10–14 βαρύτερους γύρους σε ολόκληρη την κατάσταση. Σε λογισμικό το AES είναι συνήθως ταχύτερο λόγω εντολών υλικού (AES-NI)· το SM4 έφτασε συγκρίσιμη θέση με αφιερωμένες επεκτάσεις CPU σε κινεζικές πλατφόρμες. Κανένα από τα δύο δεν έχει πρακτική επίθεση· το κλειδί 128 bit είναι το κλειδί 128 bit.

Γιατί να χρησιμοποιηθεί το SM4 αντί του AES;

Συμμόρφωση και διαλειτουργικότητα, όχι ισχύς: τα κινεζικά κανονιστικά της εμπορικής κρυπτογραφίας (商用密码) απαιτούν τη σουίτα SM σε πιστοποιημένους τομείς, και πρωτόκολλα όπως το TLCP και το TLS 1.3 με τις σουίτες του RFC 8998 διαπραγματεύονται SM4. Αν ο αντισυμβαλλόμενος, ο ρυθμιστής ή το υλικό μιλά μόνο SM4, χρησιμοποιείται SM4. Αν η επιλογή είναι ελεύθερη, το AES-256 στη σελίδα AES αυτού του ιστοτόπου παραμένει η παγκόσμια προεπιλογή.

Συνηθισμένα λάθη
  • ECB σε δομημένα δεδομένα. Τα ίδια μπλοκ απλού κειμένου δίνουν τα ίδια μπλοκ κρυπτογραφήματος — το κλασικό παράδειγμα του πιγκουίνου. Χρησιμοποιείται CBC (η προεπιλογή αυτής της σελίδας) με νέο IV όποτε τα δεδομένα είναι μακρύτερα από ένα μπλοκ.
  • Ένα κλειδί είναι 16 bytes, ακριβώς. Σε αντίθεση με το AES, το SM4 δεν έχει παραλλαγές 192/256 bit. Μια φράση όπως το "password" δεν είναι κλειδί — παράγεται πρώτα ένα με KDF (βλ. τη Γεννήτρια κατακερματισμού κωδικών).
  • Η παραδοχή ότι το γέμισμα είναι προαιρετικό. Αυτή η σελίδα — όπως το OpenSSL enc — εφαρμόζει πάντα PKCS#7, οπότε ένα απλό κείμενο 16 bytes κρυπτογραφείται σε 32 bytes. Το ωμό SM4 χωρίς γέμισμα σκόπιμα δεν προσφέρεται.
  • Επαναχρησιμοποίηση IV στο CBC. Ένα επαναλαμβανόμενο ζεύγος κλειδιού+IV στο CBC διαρρέει την ισότητα των προθεμάτων μηνυμάτων. Παράγεται τυχαίο IV για κάθε μήνυμα και αποστέλλεται μαζί με το κρυπτογράφημα.
Συχνές ερωτήσεις

Είναι συμβατό με το OpenSSL; Ναι — byte προς byte. Η εντολή openssl enc -sm4-cbc -K 0011... -iv 4455... -in in.txt -out out.sm4 (OpenSSL 1.1.1+) παράγει ακριβώς το κρυπτογράφημα που εκτυπώνει αυτή η σελίδα για το ίδιο κλειδί, IV και είσοδο· το GmSSL είναι το ίδιο.

Γιατί δεν υπάρχει εδώ SM4-GCM; Το οικοσύστημα βιβλιοθηκών που σχετίζεται με τα πρότυπα εκθέτει το SM4-GCM κυρίως μέσα σε στοίβες TLS· η σύμβαση γραμμής εντολών προσανατολισμένη σε αρχεία που ακολουθεί αυτή η σελίδα (enc) καλύπτει ECB/CBC. Το πιστοποιημένο SM4 ανήκει στο επίπεδο πρωτοκόλλου.

Υπάρχει το SM4 στο WebCrypto; Όχι — κανένα πρόγραμμα περιήγησης δεν το υλοποιεί. Γι' αυτό η σελίδα εκτελεί υλοποίηση από την αρχή σε JavaScript, με τα δικά της διανύσματα δοκιμής του προτύπου συνδεδεμένα στο αυτοτεστ παραπάνω.

Είναι δυνατή η αποκρυπτογράφηση κάτι που κρυπτογραφήθηκε αλλού; Ναι, αν είναι γνωστά η λειτουργία, το κλειδί, το IV και ότι χρησιμοποιήθηκε PKCS#7 — επικολλάται το κρυπτογράφημα ως hex ή Base64, επιλέγεται Αποκρυπτογράφηση, και εκτελείται.