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

Κρυπτογράφηση ή αποκρυπτογράφηση με AES-128, AES-192 ή AES-256 (FIPS 197) σε λειτουργία GCM (κρυπτογράφηση με έλεγχο ταυτότητας), CBC, CTR ή ECB. Τα κλειδιά είναι ακατέργαστα byte σε δεκαεξαδική ή Base64 μορφή, ή παράγονται από κωδικό με PBKDF2-HMAC-SHA256. Το GCM υποστηρίζει AAD και εμφανίζει ξεχωριστά την ετικέτα αυθεντικοποίησης· οι έξοδοι CBC/CTR/ECB είναι συμβατές με το enc του OpenSSL. Για hash, βλ. τη Γεννήτρια Hash· για MAC με κλειδί, τη Γεννήτρια HMAC· για παλαιούς κρυπτογράφους, τη σελίδα Παλαιοί κρυπτογράφοι της ίδιας οικογένειας.
Εκτελείται εξ ολοκλήρου τοπικά — τα κλειδιά και το απλό κείμενο δεν φεύγουν ποτέ από την καρτέλα. Αρχεία έως 200 MB.
Όλα όσα πληκτρολογούνται εδώ παραμένουν σε αυτή την καρτέλα — αυτό όμως δεν σημαίνει “ασφαλές για μυστικά παραγωγής”. Η μνήμη του προγράμματος περιήγησης, οι επεκτάσεις και όσοι κοιτούν την οθόνη βλέπουν ό,τι επικολλάται. Η σελίδα αυτή προορίζεται για μάθηση, επαλήθευση και διαλειτουργικότητα, όχι για διαχείριση πραγματικών δεδομένων πελατών.
Κατεύθυνση: Λειτουργία: Έξοδος:
Το GCM είναι AES-GCM με nonce 12 byte και ετικέτα αυθεντικοποίησης 128 bit (AEAD: εμπιστευτικότητα + ακεραιότητα). Η προεπιλογή όταν ο στόχος είναι η ασφάλεια.
Το δεκαεξαδικό δέχεται κενά, άνω τελείες και το πρόθεμα 0x.
Το nonce δεν επαναχρησιμοποιείται ποτέ με το ίδιο κλειδί στα GCM ή CTR.
Μήκος ετικέτας:
Οι γραμμές παραμέτρων καταγράφουν την ακριβή ανάγνωση κλειδιού, το IV, το μέγεθος AAD και την ετικέτα, ώστε ένα αποτέλεσμα που αντιγράφεται να μπορεί πάντα να αναπαραχθεί σε άλλο μηχάνημα.
Ποια λειτουργία να επιλεγεί;
GCM είναι η προεπιλεγμένη απάντηση: κρυπτογραφεί και αυθεντικοποιεί — η γραμμή ετικέτας καθιστά την παραποίηση ανιχνεύσιμη (η αποκρυπτογράφηση με αλλαγμένο byte ετικέτας απορρίπτεται από τη σελίδα). Το CBC κρύβει τα μοτίβα των μπλοκ αλλά δεν παρέχει ακεραιότητα· συνδυάζεται με HMAC (βλ. τη Γεννήτρια HMAC) αν είναι αναγκαία η χρήση του. Το CTR μετατρέπει το AES σε κρυπτογράφο ροής — χωρίς padding, αλλά η επαναχρησιμοποίηση nonce με το ίδιο κλειδί είναι καταστροφική τόσο στο CTR όσο και στο GCM. Το ECB υπάρχει εδώ μόνο για συμβατότητα και εκπαίδευση: ίδια μπλοκ απλού κειμένου κρυπτογραφούνται σε ίδια μπλοκ κρυπτογραφήματος (ο γνωστός πιγκουίνος ECB).
Διαλειτουργικότητα με OpenSSL — τα αποτελέσματα CBC και CTR αυτής της σελίδας (padding PKCS#7, ακατέργαστο κλειδί) κυκλοφορούν με τη γραμμή εντολών openssl enc:
openssl enc -aes-256-cbc -K <64-hex-key> -iv <32-hex-iv> -in msg.txt -out msg.enc
openssl enc -d -aes-256-cbc -K <key> -iv <iv> -in msg.enc -out msg.txt
Το ίδιο ισχύει και για -aes-128-cbc, -aes-192-cbc, -aes-256-ctr (IV 16 byte = αρχικό μπλοκ μετρητή). Σημείωση: το openssl enc δεν υποστηρίζει GCM — για κρυπτογράφηση με έλεγχο ταυτότητας χρησιμοποιείται αυτή η σελίδα ή το openssl aesgcm από το OpenSSL 3.3 και μεταγενέστερα.
Χρειάζεται το κινεζικό εθνικό σύστημα κρυπτογράφησης;
Το SM4 (GB/T 32907-2016) — ο κρυπτογράφος μπλοκ που προβλέπεται στην κινεζική εμπορική κρυπτογραφία, με το ίδιο μέγεθος μπλοκ και κλειδιού 128 bit με το AES, αλλά με δικό του χρονοδιάγραμμα κλειδιών και S-box — λειτουργεί στη δική του σελίδα σε λειτουργία ECB και CBC: SM4 Κρυπτογράφηση / Αποκρυπτογράφηση. Η υπόλοιπη σουίτα SM βρίσκεται επίσης εκεί: SM3 (hash), SM2 (δημόσιο κλειδί) και SM9 (κρυπτογραφία βάσει ταυτότητας).
Αυτοέλεγχος
Εκτελεί τις μηχανές της σελίδας έναντι ανεξάρτητων αγκυρών: διανύσματα γνωστής απάντησης και για τις τέσσερις λειτουργίες (παραγόμενα από ανεξάρτητη εγγενή υλοποίηση), διανύσματα ετικετών GCM με και χωρίς AAD, διασταυρώσεις της μηχανής WebCrypto με τη μηχανή AES σε καθαρή JavaScript, κυκλική διαδρομή GCM και αρνητικές δοκιμές (παραποιημένη ετικέτα ή λάθος κλειδί πρέπει να αποτύχουν). Τίποτα δεν αποστέλλεται οπουδήποτε.
Η κρυπτογράφηση AES από την αρχή
Σε μία πρόταση: το AES είναι ο παγκοσμίως τυποποιημένος κρυπτογράφος μπλοκ — ανακατεύει μπλοκ 16 byte με κλειδί 128, 192 ή 256 bit— και η λειτουργία με την οποία εκτελείται (GCM, CBC, CTR, ECB) καθορίζει τον τρόπο αλυσίδωσης των μπλοκ, τον ρόλο του IV και το αν η παραποίηση είναι ανιχνεύσιμη· το GCM είναι η προτεινόμενη επιλογή, εκτός αν υπάρχει ειδικός λόγος.
Τι είναι το ίδιο το AES (FIPS 197)

Ο κρυπτογράφος μπλοκ. Το AES (σχέδιο Rijndael, τυποποιημένο από το NIST το 2001 ως FIPS 197) κρυπτογραφεί ακριβώς 16 byte κάθε φορά. Το μήκος του κλειδιού — 16, 24 ή 32 byte — επιλέγει το AES-128, -192 ή -256 και τον αριθμό των εσωτερικών γύρων (10, 12, 14). Κάθε γύρος αναμιγνύει το μπλοκ με κλειδιά γύρου που προκύπτουν από το κλειδί μέσω πινάκων αντικατάστασης, μετατοπίσεων γραμμών και ανάμειξης στηλών. Καμία πρακτική επίθεση δεν σπάει τον ίδιο τον κρυπτογράφο· οι πραγματικές αποτυχίες είναι σχεδόν πάντα λάθη λειτουργίας, IV ή διαχείρισης κλειδιών, και αυτό αφορά το υπόλοιπο της σελίδας.

Γιατί χρειάζεται λειτουργία; Επειδή τα μηνύματα σπάνια έχουν 16 byte. Η λειτουργία συνδέει τις κρυπτογραφήσεις μπλοκ: το ECB κρυπτογραφεί τα μπλοκ ανεξάρτητα· το CBC κάνει XOR κάθε μπλοκ με το προηγούμενο κρυπτογράφημα· το CTR κρυπτογραφεί έναν μετρητή και κάνει XOR με τα δεδομένα όπως μια ροή· το GCM βασίζεται στο CTR και προσθέτει ετικέτα αυθεντικοποίησης. Το AES παραμένει το ίδιο — η λειτουργία αλλάζει όλες τις εγγυήσεις που λαμβάνεται.

Κλειδιά και κωδικοί πρόσβασης. Ένα κλειδί AES είναι 16, 24 ή 32 τυχαία byte. Ένας ανθρώπινος κωδικός δεν είναι τέτοιος: η επιλογή Κωδικός πρόσβασης αυτής της σελίδας παράγει σωστό κλειδί με PBKDF2-HMAC-SHA256 (600 000 επαναλήψεις από προεπιλογή, η βάση του OWASP 2023 — βλ. τη Γεννήτρια HMAC για τις λεπτομέρειες του KDF). Ποτέ μη χρησιμοποιείται κωδικός κειμένου απευθείας ως κλειδί AES: η εντροπία του είναι μικρό κλάσμα του μήκους του.

Σύγκριση των τεσσάρων λειτουργιών
ΛειτουργίαIV / nonceΑκεραιότηταΣημειώσεις
GCM12 byte, μοναδικό ανά μήνυμαΝαι — ετικέτα 96..128 bitAEAD: η προτεινόμενη προεπιλογή παντού (TLS 1.3, SSH, μορφές αρχείων). Δέχεται επίσης AAD.
CBC16 byte, απρόβλεπτοΌχιPadding PKCS#7· κλασικό, αλλά απαιτεί MAC παράλληλα. Τα σφάλματα padding-oracle είναι η κλασική παγίδα του CBC.
CTRΑρχικός μετρητής 16 byteΌχιΧωρίς padding, λειτουργεί σαν ροή, τυχαία πρόσβαση· η επαναχρησιμοποίηση nonce κάτω από ένα κλειδί διαρρέει το XOR των απλών κειμένων.
ECBκαμίαΌχιΊδια μπλοκ → ίδιο κρυπτογράφημα. Η επίδειξη του «πιγκουίνου ECB». Μόνο για συμβατότητα.

Κανόνες IV σε μία παράγραφο. Το IV δεν είναι μυστικό — αποστέλλεται μαζί με το κρυπτογράφημα — αλλά οι κανόνες μοναδικότητας διαφέρουν: το CBC απαιτεί IV απρόβλεπτο· τα GCM και CTR απαιτούν μόνο να μην επαναχρησιμοποιείται ποτέ το ίδιο nonce με το ίδιο κλειδί (η επαναχρησιμοποίηση nonce στο GCM είναι χειρότερη: διαρρέει το κλειδί αυθεντικοποίησης). Το κουμπί Τυχαίο IV αυτής της σελίδας χρησιμοποιεί το ασφαλές RNG του προγράμματος περιήγησης· το κουμπί Όλα μηδενικά υπάρχει για την αναπαραγωγή διανυσμάτων δοκιμής, όχι για πραγματικά μηνύματα.

Padding. Τα CBC και ECB χρειάζονται πλήρη μπλοκ, οπότε το PKCS#7 προσθέτει 1..16 byte, καθένα ίσο με το μήκος συμπλήρωσης. Γι' αυτό τα κρυπτογραφήματα CBC μεγαλώνουν έως 16 byte και γι' αυτό η αποκρυπτογράφηση με λάθος κλειδί συνήθως αποτυγχάνει με σφάλμα padding. Τα CTR και GCM λειτουργούν σαν ροή και δεν χρειάζονται padding — το μήκος του κρυπτογραφήματος ισούται ακριβώς με το μήκος του απλού κειμένου (παράδειγμα σε λειτουργία CTR: 43 byte εισόδου, 43 byte εξόδου).

Τα CFB και OFB (οι δύο υπόλοιπες κλασικές λειτουργίες) δεν υλοποιούνται σε αυτή τη σελίδα: λειτουργούν σαν ροή όπως το CTR, αλλά χωρίς πλεονέκτημα έναντι αυτού, και επιβιώνουν κυρίως σε παλαιά πρωτόκολλα.

Τι προσθέτει το GCM (AEAD, ετικέτες, AAD)

Κρυπτογράφηση με έλεγχο ταυτότητας. GCM = κρυπτογράφηση CTR + αυθεντικοποιητής GHASH πάνω στο κρυπτογράφημα, το IV και το AAD. Η ετικέτα εξόδου είναι αποτύπωμα όλων: η αλλαγή ενός bit στο κρυπτογράφημα, στο IV ή στο AAD κάνει την ετικέτα να μην ταιριάζει, άρα ο παραλήπτης μπορεί να αποδείξει ότι το μήνυμα είναι αναλλοίωτο και προέρχεται από κάτοχο του κλειδιού. Το CBC+HMAC επιτυγχάνει το ίδιο μόνο αν συντεθεί σωστά (encrypt-then-MAC)· το GCM το εξασφαλίζει εξαρχής με τον σχεδιασμό του.

AAD. Τα πρόσθετα δεδομένα με έλεγχο ταυτότητας μεταφέρονται σε καθαρή μορφή, αλλά καλύπτονται από την ετικέτα: κεφαλίδες πρωτοκόλλου, ονόματα αρχείων, αναγνωριστικά αλγορίθμων. Ο παραλήπτης πρέπει να παρέχει ακριβώς τα ίδια byte AAD, αλλιώς ο έλεγχος της ετικέτας αποτυγχάνει — αυτός είναι ο σκοπός.

Μήκος ετικέτας. Η προεπιλεγμένη ετικέτα 128 bit είναι η σύσταση· οι μικρότερες ετικέτες (96..120 bit) ανταλλάσσουν αντοχή σε πλαστογραφία με μέγεθος. Κάτω από 96 bit οι αποδείξεις ασφαλείας του GCM εξασθενούν γρήγορα, γι' αυτό η σελίδα σταματά εκεί.

Η καταστροφή του nonce. Η επαναχρησιμοποίηση nonce GCM 12 byte κάτω από το ίδιο κλειδί διαρρέει το XOR των απλών κειμένων των δύο μηνυμάτων και το υποκλειδί αυθεντικοποίησης — μετά από το οποίο είναι δυνατές πλαστογραφίες για όλα τα μελλοντικά μηνύματα με αυτό το κλειδί. Τα συστήματα που δεν μπορούν να εξασφαλίσουν μοναδικότητα χρησιμοποιούν παραλλαγές ανθεκτικές σε λάθος χρήση nonce (AES-GCM-SIV, RFC 8452).

Τιμές αναφοράς — αναπαραγωγή στη σελίδα

Η πρώτη γραμμή είναι το γνωστό παράδειγμα μονού μπλοκ FIPS 197· οι υπόλοιπες δημιουργήθηκαν από ανεξάρτητη εγγενή υλοποίηση (OpenSSL μέσω Node.js) και επαληθεύτηκαν ξανά με τις μηχανές αυτής της σελίδας. Για την αναπαραγωγή κάθε γραμμής, το κλειδί, το IV και η είσοδος επικολλώνται στη σελίδα.

ΠερίπτωσηΕίσοδοιΑναμενόμενη έξοδος
AES-128 μονό μπλοκ (τύπου FIPS 197)key 000102..0f, plaintext 00112233..ff69c4e0d86a7b0430d8cdb78070b4c55a
AES-128-GCMkey 000102..0f, IV 606162..6b, plaintext 0011..ef ×2ct 275f095bedfda377063fee326128892188377b410698ed03a022b9971bb4bdbe, tag 87ea7770714048977de2fd8dac645ecf
AES-256-GCM, το ίδιο αλλά με AAD deadbeefkey 000102..1fct eacab966ff15e518f48f5390be502fbc2756ccee0dcfff36a282c50bf5593ae7, tag aead900e895c88252d0388d7aefce5c8
AES-256-CBCkey 000102..1f, IV 101112..1f, plaintext 0011..ef ×20e2392dd6f690b44a5a1b4fdff3b7f83cb9ab59d9900119cc5f83e062d95fb643b1a94b514ea2f3b95f84c900b5c98a8
AES-256-CTR (ίδια είσοδος με το CBC παραπάνω)43-byte plaintext → 43-byte ciphertexte9d2cdb9f661359178ed366dfa3a4671f8e20efd723f090eb7d1d524d480fd3c
Συνηθισμένα λάθη
  • Χρήση του ECB επειδή δεν απαιτεί IV. Η ευκολία είναι η παγίδα: τα μοτίβα των μπλοκ διαρρέουν απευθείας στο κρυπτογράφημα (αν κρυπτογραφηθεί μια εικόνα bitmap, η εικόνα εξακολουθεί να διακρίνεται). Το ECB είναι αποδεκτό μόνο για μεμονωμένα μπλοκ ή για τυχαία κλειδιά ακριβώς 16 byte — στην πράξη, ποτέ από επιλογή.
  • Επαναχρησιμοποίηση nonce/IV. Με GCM ή CTR κάτω από το ίδιο κλειδί, είναι το μοναδικό λάθος που καταστρέφει τα πάντα ταυτόχρονα. Τα συστήματα με μετρητή (το κουμπί Τυχαίο IV αυτής της σελίδας) υπάρχουν για να το καθιστούν αδύνατο.
  • Αντιμετώπιση του IV ως μυστικού. Δεν είναι μυστικό. Αποθηκεύεται ή μεταδίδεται μαζί με το κρυπτογράφημα. Η απόκρυψή του δεν προσφέρει τίποτα και ενθαρρύνει την επαναχρησιμοποίηση.
  • Χρήση κωδικού πρόσβασης ως κλειδί. Το "hunter2hunter2hunter2hunter2" έχει 32 byte, αλλά όχι 256 bit εντροπίας — είναι μια λέξη λεξικού με συμπληρώματα. Παραγωγή με PBKDF2 (ενσωματωμένο σε αυτή τη σελίδα) ή δημιουργία τυχαίου κλειδιού.
  • Η υπόθεση ότι το CBC ανιχνεύει παραποίηση. Αν αλλάξει ένα bit στο κρυπτογράφημα CBC, η αποκρυπτογράφηση “επιτυγχάνει” με σιωπηλά αλλοιωμένο κείμενο. Μόνο η ετικέτα GCM (ή ένα ρητό HMAC) καθιστά την παραποίηση ορατή.
  • Σύγκριση κρυπτογραφημάτων GCM για ισότητα. Με τυχαία nonce, το ίδιο κείμενο κρυπτογραφείται διαφορετικά κάθε φορά — αυτό είναι χαρακτηριστικό και όχι πρόβλημα. Η ντετερμινιστική κρυπτογράφηση είναι διαφορετικό, ειδικό εργαλείο.
Συχνές ερωτήσεις

Είναι το AES-128 ακόμη ασφαλές ή χρειάζεται το 256; Και τα δύο είναι ασφαλή έναντι ρεαλιστικών επιτιθέμενων· οι γνωστότερες επιθέσεις μειώνουν μόνο ένα μικρό μέρος του περιθωρίου ασφαλείας. Το AES-256 έχει νόημα κυρίως για μακροπρόθεσμα μυστικά και για μελλοντική ανθεκτικότητα έναντι κβαντικών υπολογιστών (ο αλγόριθμος Grover υποδιπλασιάζει την ισχύ του κλειδιού, άρα το AES-256 παραμένει ισοδύναμο με 128 bit).

Γιατί το openssl enc δεν υποστηρίζει GCM; Η εντολή enc προηγείται του AEAD και δεν διαθέτει τρόπο μεταφοράς ετικέτας· το OpenSSL 3.3 πρόσθεσε αντί αυτού ειδική εντολή aesgcm. Η έξοδος GCM αυτής της σελίδας κρατά την ετικέτα σε ξεχωριστή γραμμή, ώστε και τα δύο να μεταφέρονται ρητά.

Τι είναι το key wrapping (AES-KW); Ειδική λειτουργία για κρυπτογράφηση άλλων κλειδιών σε σταθερά τμήματα 64 bit, με δικό της έλεγχο ακεραιότητας. Δεν προσφέρεται εδώ, επειδή οι είσοδοι και οι έξοδοί της έχουν μορφή κλειδιού και όχι μηνύματος — η κακή χρήση είναι ο κανόνας.

Γιατί το κρυπτογράφημα CTR έχει το ίδιο μήκος με το απλό κείμενο, ενώ το CBC είναι μεγαλύτερο; Τα CTR και GCM λειτουργούν σαν ροή (χωρίς padding)· τα CBC/ECB συμπληρώνουν με PKCS#7 μέχρι πλήρες μπλοκ 16 byte. Η διαφορά μήκους είναι σχεδιαστική και όχι σφάλμα.

Είναι δυνατή η αποκρυπτογράφηση δεδομένων που κρυπτογραφήθηκαν αλλού; Ναι, εφόσον είναι γνωστή η ακριβής λειτουργία, το κλειδί, το IV (και, για GCM, η ετικέτα). Οι γραμμές εξόδου αυτής της σελίδας καταγράφουν όλα αυτά με ακρίβεια, ώστε οι παράμετροι να μεταφέρονται μεταξύ εργαλείων — το πλαίσιο OpenSSL παραπάνω δείχνει τις αντίστοιχες εντολές.