Κρυπτογράφηση & αποκρυπτογράφηση DES / 3DES / RC4 / Blowfish

Κρυπτογράφηση ή αποκρυπτογράφηση με τους τέσσερις κλασικούς κρυπτογράφους που εξακολουθούν να υπάρχουν σε παλιά αρχεία, αντίγραφα ασφαλείας και πρωτόκολλα — DES και 3DES σε ECB ή CBC, RC4 (ARCFOUR) ως ροή, και Blowfish με κλειδιά έως 56 byte. Επαληθεύτηκαν με βάση τα FIPS 46-3, τα δημοσιευμένα διανύσματα του Schneier για Blowfish και το RFC 6229. Όλη η επεξεργασία γίνεται τοπικά στο πρόγραμμα περιήγησης — τίποτα δεν μεταφορτώνεται. Για σύγχρονη εργασία χρησιμοποιείται το AES-GCM.
Αυτοί οι κρυπτογράφοι προορίζονται για συμβατότητα, όχι για νέα εργασία. DES αποσύρθηκε το 2005, το 3DES το 2023, το RC4 απαγορεύεται στο TLS από το 2015 (RFC 7465), και το μπλοκ 64 bit του Blowfish φτάνει το όριο συγκρούσεων (birthday bound) μετά από περίπου 32 GiB δεδομένων υπό ένα κλειδί. Για κάθε νέα εργασία προτείνεται το AES-GCM.
Κατεύθυνση: Κρυπτογράφος: Λειτουργία: Έξοδος:
DES = το Πρότυπο Κρυπτογράφησης Δεδομένων του 1977: μπλοκ 64 bit, πραγματικό κλειδί 56 bit. Αποσυρμένο, αλλά εξακολουθεί να βρίσκεται σε παλιά αντίγραφα ασφαλείας, μπλοκ PIN (τραπεζικά) και στο Kerberos v4. Το κλειδί πρέπει να έχει ακριβώς 8 byte.
Το hex δέχεται κενά, άνω και κάτω τελείες και πρόθεμα 0x. Το DES αγνοεί το bit ισοτιμίας κάθε byte κλειδιού.
Οι κρυπτογράφοι μπλοκ συμπληρώνουν με PKCS#7· το RC4 δεν συμπληρώνει ποτέ.
Μήκη κλειδιών που δέχεται αυτή η σελίδα
ΚρυπτογράφοςΚλειδίΜπλοκΚατάσταση
DESακριβώς 8 byte (56 πραγματικά bit)64 bitαποσύρθηκε το 2005 (NIST SP 800-131A)
3DES-EDE3ακριβώς 24 byte (112 πραγματικά bit)64 bitαπαγορεύεται μετά το 2023 (SP 800-131A r2)
3DES-EDE2ακριβώς 16 byte (112 πραγματικά bit)64 bitόπως το EDE3, ασθενέστερη παλαιά επιλογή
RC4 / ARCFOUR1..256 byteροήςαπαγορεύεται στο TLS από το 2015 (RFC 7465)
Blowfish4..56 byte64 bitαδιάσπαστος, αλλά με μπλοκ 64 bit· προτιμάται το Twofish/AES
Το πραγματικό μέγεθος κλειδιού είναι μικρότερο από το ονομαστικό, επειδή το DES χρησιμοποιεί ένα bit από κάθε byte ως ισοτιμία: ένα ακατέργαστο κλειδί 64 bit μεταφέρει μόνο 56 bit κλειδιού, και το 3DES με τρία ανεξάρτητα κλειδιά μεταφέρει 112 (meet-in-the-middle).
Διαλειτουργικότητα με OpenSSL — το OpenSSL 3 μετέφερε αυτούς τους κρυπτογράφους στον παλαιό πάροχο· προσθήκη του -provider legacy αν η εγκατάσταση το αρνείται. Ισοδύναμες εντολές γραμμής εντολών αυτής της σελίδας:
openssl enc -des-ecb -K 133457799BBCDFF1 -in msg.bin -out msg.enc
openssl enc -des3 -K <48 hex> -iv <16 hex> -in msg.bin -out msg.enc (3DES-CBC)
openssl enc -rc4 -K 4b6579 -in msg.bin -out msg.enc  /  -bf-cbc για Blowfish-CBC.
Αποκρυπτογράφηση με -d. Το -K δέχεται ακατέργαστο δεκαεξαδικό κλειδί, το -k κωδικό πρόσβασης (να αποφεύγεται — η KDF διαφέρει από οτιδήποτε εδώ).
Αυτοέλεγχος
Εκτελεί ξανά τη μηχανή της σελίδας έναντι δημοσιευμένων και ανεξάρτητα παραγόμενων διανυσμάτων: το εργασμένο παράδειγμα DES του FIPS 46-3, κρυπτογραφημένα κείμενα 3DES EDE2/EDE3 που παράχθηκαν από το OpenSSL, τα διανύσματα του Schneier για Blowfish, τα διανύσματα RC4 του RFC 6229 και το κλασικό παράδειγμα "Key/Plaintext", κύκλοι σε κάθε λειτουργία και αρνητικά τεστ (λάθος μέγεθος κλειδιού, κρυπτογραφημένο κείμενο που δεν είναι πολλαπλάσιο του μπλοκ πρέπει να αποτύχει). Τίποτα δεν αποστέλλεται πουθενά.
Οι DES, 3DES, RC4 και Blowfish εξηγημένοι από το μηδέν
Με μία πρόταση: αυτοί οι τέσσερις κρυπτογράφοι ήταν τα άλογα εργασίας της δεκαετίας του 1990 — το DES και η τριπλή εφαρμογή του, 3DES, ο κρυπτογράφος ροής RC4 και το Blowfish — και ο καθένας τους είναι πλέον αποσυρμένος ή ξεπερασμένος, διατηρούμενος ζωντανός μόνο από παλιά αρχεία, παλιό υλικό και παλιά πρωτόκολλα που πρέπει ακόμη να διαβάζονται.
DES: το πρότυπο του 1977 που τα ξεκίνησε όλα

Τι είναι. Το Πρότυπο Κρυπτογράφησης Δεδομένων (FIPS 46, 1977) είναι κρυπτογράφος Feistel 16 γύρων σε μπλοκ 64 bit με κλειδί 56 bit (αποθηκευμένο σε 8 byte, επειδή ένα bit από κάθε byte είναι bit ισοτιμίας). Σχεδιάστηκε από την IBM με συμβολή της NSA, έγινε το αμερικανικό πρότυπο για δύο δεκαετίες, και «σπάστηκε» εν τοις πράγμασι το 1998, όταν η μηχανή Deep Crack του EFF εξαντλητικά βρήκε κλειδί σε 56 ώρες με υλικό αξίας 250 000 δολαρίων. Το NIST το απέσυρε για κρυπτογράφηση το 2005.

Γιατί το bit ισοτιμίας μπερδεύει τα μήκη κλειδιών. Κάθε όγδοο bit ενός κλειδιού DES υπολογίζεται από τα υπόλοιπα επτά, οπότε ένα κλειδί 8 byte έχει μόνο 56 ανεξάρτητα bit — γι' αυτό εμφανίζεται ως «κλειδί 64 bit» και ως «κλειδί 56 bit» για τον ίδιο κρυπτογράφο. Το 3DES το κληρονομεί: 24 ακατέργαστα byte = 168 bit ακατέργαστα = 112 πραγματικά (το meet-in-the-middle αφαιρεί τα υπόλοιπα).

Πού εξακολουθεί να συναντάται. Μπλοκ PIN τραπεζών (ISO 9564), ορισμένα realms του Kerberos v4, παλιά αντίγραφα ασφαλείας και έξυπνες κάρτες. Αν ένα σύστημα απαιτεί σήμερα DES, είτε διαλειτουργεί με υλικό της δεκαετίας του 1990 είτε είναι απλώς ανασφαλές.

3DES: κρυπτογράφηση, αποκρυπτογράφηση, κρυπτογράφηση

Το τέχνασμα. Το τριπλό DES εκτελεί το DES τρεις φορές σε κάθε μπλοκ: το EDE3 χρησιμοποιεί τρία διαφορετικά κλειδιά (C = Ek3(Dk2(Ek1(P))))· το βήμα αποκρυπτογράφησης στη μέση υπάρχει ώστε μια υλοποίηση 3DES να μπορεί να μιμηθεί το μονό DES θέτοντας k1=k2. Το EDE2 χρησιμοποιεί μόνο δύο κλειδιά (k1=k3), δίνοντας 112 πραγματικά bit. Η κατασκευή ήταν γρήγορη διόρθωση που τριπλασίασε την ασφάλεια ενός ήδη επιτιθέμενου κρυπτογράφου, χωρίς να εφεύρει νέο.

Γιατί τελικά έπαψε να χρησιμοποιείται. Δύο προβλήματα: είναι αργός (τρία πλήρη περάσματα DES ανά μπλοκ, περίπου το 1/20 της ταχύτητας του AES) και διατήρησε το μπλοκ 64 bit. Με 32 GiB δεδομένων υπό ένα κλειδί (το όριο γενεθλίων των 232 μπλοκ), οι συγκρούσεις μπλοκ γίνονται αρκετά πιθανές ώστε να διαρρέουν δομή απλού κειμένου — η επίθεση Sweet32 (2016) το έδειξε σε συνεδρίες TLS 3DES. Το NIST απαγόρευσε την κρυπτογράφηση 3DES μετά το 2023 (SP 800-131A r2)· το PCI DSS απαιτεί την απόσυρσή του σε συστήματα πληρωμών.

RC4 / ARCFOUR: ο κρυπτογράφος ροής του πρώιμου ιστού

Πώς λειτουργεί. Το RC4 (Ron's Code 4, σχεδιάστηκε το 1987, διέρρευσε το 1994) είναι κρυπτογράφος ροής: το κλειδί ορίζει μια μετάθεση 256 byte (KSA), και στη συνέχεια η μετάθεση εκπέμπει μια ψευδοτυχαία ροή byte (PRGA) που γίνεται XOR με το μήνυμα. Χωρίς συμπλήρωση, χωρίς μέγεθος μπλοκ, οποιοδήποτε μήκος μηνύματος, εξαιρετικά γρήγορο σε λογισμικό — γι' αυτό κυριάρχησε στο SSL/TLS και στο WEP τη δεκαετία του 1990. Το «ARCFOUR» είναι το όνομα χωρίς εμπορικό σήμα που χρησιμοποιούν τα περισσότερα έργα ανοιχτού κώδικα.

Πώς έσπασε. Οι Fluhrer-Mantin-Shamir (2001) έδειξαν ότι τα πρώτα byte της ροής κλειδιού έχουν προκατάληψη — θανατηφόρο στο WEP, όπου η κατασκευή κλειδιού ανά πακέτο τροφοδοτούσε αυτά τα byte στους επιτιθέμενους. Μεταγενέστερες επιθέσεις προκατάληψης (2013, AlFardan κ.ά.) ανέκτησαν απλό κείμενο από συνεδρίες TLS με RC4 σε εκατομμύρια συνδέσεις. Το RFC 7465 (2015) απαγορεύει το RC4 στο TLS εντελώς.

Το κλασικό διάνυσμα. Κλειδί "Key" (3 byte), μήνυμα "Plaintext" δίνει κρυπτογραφημένο κείμενο bbf316e8d940af0ad3 — δοκιμή του Δείγματος RC4 και σύγκριση. Ο αυτοέλεγχος αυτής της σελίδας ελέγχει επίσης τη ροή κλειδιού του RFC 6229 για το κλειδί 40 bit 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.

Blowfish: αδιάσπαστος, αλλά με περιορισμένο μπλοκ

Τι είναι. Ο κρυπτογράφος Feistel του Bruce Schneier (1993): μπλοκ 64 bit, κλειδιά από 32 έως 448 bit (4..56 byte), 16 γύροι, και ένας περίφημος αλγόριθμος δημιουργίας κλειδιών που εκτελεί το ίδιο το Blowfish 521 φορές για να κατασκευάσει τα υποκλειδιά του — κάτι που καθιστά τη ρύθμιση κλειδιού αργή, αλλά και τις προσπάθειες brute-force δαπανηρές. Καμία πρακτική κρυπτανάλυση δεν σπάει το πλήρες Blowfish.

Γιατί είναι και εδώ. Το πρόβλημα είναι το μπλοκ 64 bit, όχι ο αλγόριθμος: πέραν των ~32 GiB υπό ένα κλειδί, οι συγκρούσεις γενεθλίων διαρρέουν δεδομένα (το ίδιο όριο με το 3DES, κατά το μοτίβο Sweet32). Ο ίδιος ο Schneier προτείνει τον διάδοχό του Twofish (τελικό υποψήφιο του AES) ή το AES για οτιδήποτε νέο. Το Blowfish ζει μέσα στο bcrypt — ο πίνακας κλειδιού του κατακερματισμού κωδικού πρόσβασης είναι Blowfish — κάτι που είναι εντάξει, επειδή ο κατακερματισμός χρησιμοποιεί μικρές εισόδους, όχι γιγαμπάιτ.

Τα κλασικά διανύσματα. Κλειδί και απλό κείμενο μηδενικά κρυπτογραφούνται σε 4ef997456198dd78 (πρώτο μπλοκ της δειγματικής εξόδου)· το κλειδί "abcdefghijklmnopqrstuvwxyz" στο "BLOWFISH" δίνει 324ed0fef413a203. Και τα δύο προέρχονται από το δημοσιευμένο αρχείο διανυσμάτων του Schneier και ελέγχονται από τον αυτοέλεγχο.

Συνηθισμένα λάθη
  • Χρήση αυτών για νέα δεδομένα. Όλοι οι κρυπτογράφοι εδώ είναι αποσυρμένοι, εκτός από το Blowfish (που περιορίζεται από το μέγεθος μπλοκ). Η σωστή σύγχρονη επιλογή είναι το AES-GCM — βλ. Κρυπτογράφηση / αποκρυπτογράφηση AES.
  • Κλειδί DES από κωδικό πρόσβασης. Ένας κωδικός 8 χαρακτήρων δεν είναι 56 τυχαία bit· είναι λίγα bit εντροπίας ανά χαρακτήρα. Τα παλιά συστήματα το έκαναν ακριβώς αυτό, και είναι ο συνηθέστερος λόγος για τον οποίο αρχεία «κρυπτογραφημένα με DES» πέφτουν σε επιθέσεις λεξικού μέσα σε λεπτά.
  • Επαναχρησιμοποίηση IV στο CBC. Τότε το πρώτο μπλοκ αποκαλύπτει την ισότητα του απλού κειμένου μεταξύ μηνυμάτων με το ίδιο κλειδί. Το κουμπί Τυχαίο IV υπάρχει για αυτόν τον λόγο.
  • Επαναχρησιμοποίηση ροής κλειδιού RC4. Το RC4 κάνει XOR με την ίδια ροή για το ίδιο κλειδί: η κρυπτογράφηση δύο μηνυμάτων με ένα κλειδί είναι two-time pad — το XOR των κρυπτογραφημένων κειμένων αποκαλύπτει και τα δύο απλά κείμενα. Η θανατηφόρα αδυναμία του WEP ήταν ακριβώς μια κατασκευή επαναχρησιμοποίησης ροής κλειδιού.
  • Η υπόθεση ότι «αποκρυπτογραφείται, άρα είναι σωστό». Τα ECB/CBC εδώ ελέγχουν μόνο τη συμπλήρωση κατά την αποκρυπτογράφηση — ένα λάθος κλειδί συνήθως δίνει σκουπίδια που μπορεί να περάσουν τον έλεγχο συμπλήρωσης. Δεν υπάρχει έλεγχος ακεραιότητας σε καμία παλαιά λειτουργία· αν χρειάζεται, απαιτείται AES-GCM, όχι αυτοί.
  • Η καταμέτρηση του 3DES ως «168-bit». Το ακατέργαστο κλειδί είναι 168 bit, αλλά η πραγματική δύναμη είναι 112 — το meet-in-the-middle μειώνει την τριπλή κρυπτογράφηση σε διπλή συν κάτι, όπως ακριβώς και στις προγενέστερες κατασκευές του 3DES.
Συχνές ερωτήσεις

Γιατί διατηρείται ένα εργαλείο για σπασμένους κρυπτογράφους; Συμβατότητα. Κρυπτογραφημένα αντίγραφα ασφαλείας, εξαγόμενα αρχεία παλαιάς μορφής, καταγεγραμμένες κίνησεις πρωτοκόλλων, προκλήσεις CTF και υλικό που δεν μπορεί να αναβαθμιστεί εξακολουθούν όλα να μιλούν αυτούς τους κρυπτογράφους. Η ανάγνωση παλαιών δεδομένων είναι θεμιτή· η εγγραφή νέων δεδομένων με αυτούς δεν είναι.

Κλειδί DES με περιττή ισοτιμία / μη ASCII bytes; Το DES αγνοεί το bit ισοτιμίας κάθε byte κλειδιού, οπότε το πραγματικό κλειδί είναι τα υπόλοιπα 56 bit ούτως ή άλλως. Αυτή η σελίδα δέχεται οποιαδήποτε 8 byte και δεν επιβάλλει ζυγή ισοτιμία.

Γιατί το αποκρυπτογραφημένο κείμενο μοιάζει μερικές φορές με σκουπίδια; Λάθος κλειδί, λάθος λειτουργία, λάθος IV, ή τα δεδομένα δεν κρυπτογραφήθηκαν όπως υποτίθεται. Χωρίς ετικέτα πιστοποίησης δεν υπάρχει καθαρό μήνυμα «λάθος κλειδί» — ο έλεγχος συμπλήρωσης είναι η μόνη ένδειξη, και μπορεί να περάσει τυχαία (το 1 στα 256 των περιπτώσεων).

Είναι το Blowfish ασφαλές για αρχεία; Για μικρά αρχεία, κρυπτογραφικά ναι (καμία πρακτική διάσπαση). Για οτιδήποτε κλίμακας γιγαμπάιτ υπό ένα κλειδί, όχι — το όριο γενεθλίων του μπλοκ 64 bit αφορά τον όγκο δεδομένων, όχι τη δύναμη του κλειδιού. Το Twofish ή το AES αποφεύγουν το πρόβλημα.

Τι γίνεται με τα κλειδιά Blowfish 72 byte που έχουν εμφανιστεί κάπου; Ορισμένες υλοποιήσεις δέχονται έως 72 byte, αλλά η αναφορά του Schneier χρησιμοποιεί 56 και τα επιπλέον byte δεν προσθέτουν διάχυση στον τυπικό πίνακα κλειδιού. Αυτή η σελίδα ακολουθεί την αναφορά: 4..56 byte.