Προγραμματισμός

Ο μαγικός κόσμος της κρυπτογράφησης (3) – Η μέθοδος Vigenère

Στο τρίτο άρθρο για την κρυπτογράφηση δεδομένων, θα γνωρίσουμε τον κώδικα του Vigenère (Βιζενέρ). Ο Μπλαιζ ντε Βιζενέρ ήταν Γάλλος διπλωμάτης και κρυπτογράφος του 16ου αιώνα. Αν δεν έχετε ήδη διαβάσει τα πρώτα δύο άρθρα, καλό θα ήταν να τα ρίξετε μια ματιά (Μέρος Ι, Μέρος ΙΙ). Στα δύο πρώτα μέρη λοιπόν γνωρίσαμε μεθόδους μονοαλφαβητικής κρυπτογράφησης, δηλαδή κάθε ένα γράμμα του πρωτότυπου αντικαθίσταται με μόνο έναν άλλο χαρακτήρα. Η μέθοδος του Vigenère χρησιμοποιεί μια απλή μορφή της πολυαλφαβητικής αντικατάστασης. Δηλαδή το γράμμα Α θα μπορεί να αντικατασταθεί κατά την κρυπτογράφηση, από περισσότερα από ένα γράμματα. Για να γίνει αυτό χρησιμοποιείται πολλές φορές ο Κώδικας του Καίσαρα, σε συνδυασμό με μια λέξη-φράση κλειδί.

Ας το δούμε λίγο πιο αναλυτικά. Για την κρυπτογράφηση, ένας πίνακας του αλφάβητου μπορεί να χρησιμοποιηθεί, ως πίνακας αντικατάστασης (Vigenère table). Αποτελείται από το αλφάβητο, που αναγράφεται σε διαφορετικές γραμμές (ή στήλες) τόσες φορές όσες και τα γράμματα του αλφαβήτου και κάθε αλφάβητο μετατοπίζεται κυκλικά σε σχέση με το προηγούμενο αλφάβητο, ώστε να υπάρχουν όλοι οι πιθανοί αλγόριθμοι κρυπτογράφησης του Καίσαρα. Κατά τη διαδικασία κρυπτογράφησης, χρησιμοποιείται διαφορετικό αλφάβητο σε κάθε ένα από τα γράμματα. Το αλφάβητο που χρησιμοποιείται σε κάθε γράμμα εξαρτάται από μια επαναλαμβανόμενη λέξη-κλειδί ή μια φράση.

Δείτε τον παρακάτω πίνακα. Στην πρώτη γραμμή φαίνεται το αλφάβητο που θα χρησιμοποιήσουμε (τα 26 του αγγλικού και το κενό). Το γράφουμε τόσες φορές, ώστε να δημιουργηθούν κυκλικά όλοι οι κώδικες του Καίσαρα, με διαφορετική μετατόπιση κάθε φορά:

Έστω ότι θέλουμε να κρυπτογραφήσουμε το κείμενο: GOOD_MORNING_HOW_ARE_YOU_TODAY (έβαλα την κάτω παύλα για το κενό).

Έστω λοιπόν ότι θα χρησιμοποιήσουμε για κλειδί, τη λέξη HELLO. Κάθε στήλη περιέχει τον αλγόριθμο αντικατάστασης του Καίσαρα για ένα γράμμα της λέξης κλειδί. Θα γράψουμε το κείμενό μας και από κάτω ακριβώς το κλειδί επαναλαμβανόμενο, ώστε να δημιουργήσουμε μια λέξη με ίδιο αριθμό χαρακτήρων με το αρχικό κείμενο:

Παρά το γεγονός ότι υπάρχουν εικοσιεπτά στήλες θα χρησιμοποιήσουμε μόνο τις στήλες που έχουν σαν κεφαλίδα τα γράμματα της λέξης κλειδί. Επομένως θα χρησιμοποιήσουμε μόνο 4 στήλες αφού το κλειδί περιέχει δύο φορές το γράμμα L. Για το πρώτο γράμμα του μηνύματος θα χρησιμοποιήσουμε τη στήλη του “H.” Οπότε το GOOD, θα γίνει ΝSZO. Δείτε τις διασταυρώσεις γραμμάτων και θα δείτε ότι το G (πρώτο γράμμα του κειμένου), διασταυρούμενο με το Η (πρώτο γράμμα της λέξης κλειδί) μας δίνει το Ν. Μόλις ολοκληρωθεί η διαδικασία αυτή θα έχουμε ένα κρυπτογραφημένο μήνυμα.

Αντίστοιχα για την αποκρυπτογράφηση, θα πάμε να δούμε πως από το κρυπτογραφημένο NSZO, προκύπτει το GOOD. Για το πρώτο γράμμα πηγαίνουμε και εντοπίζουμε το πρώτο γράμμα του κλειδιού στην πρώτη γραμμή (το Η). Στην ίδια στήλη εντοπίζουμε το Ν και βλέπουμε ότι η διασταύρωσή τους αντιστοιχεί στο G. Με την ίδια διαδικασία αποκρυπτογραφείται το μήνυμα.

Στο παράδειγμά μας βλέπουμε ότι χρησιμοποιήθηκαν μόνο 4 είδη αλφαβητικής μετατόπισης (διότι το HELLO, έχει 4 διαφορετικά γράμματα). Μεγαλύτερα κλειδιά μπορεί να χρησιμοποιήσουν όλα τα πιθανά είδη αλφαβητικής μετατόπισης. Βλέπουμε επίσης ότι το γράμμα Ο που υπάρχει δύο φορές στο GOOD, την πρώτη φορά κρυπτογραφήθηκε σαν “S” και τη δεύτερη σαν “Z”. Αυτό βοηθάει εν μέρει στην αποτροπή επίθεσης με βάση τη μέθοδο ανάλυσης συχνοτήτων των γραμμάτων. Αν κάποιος ήθελε να σπάσει τον κώδικα, σε πρώτη φάση, θα έπρεπε να βρει το μήκος του κλειδιού.  Αυτό θα μπορούσε να γίνει σε ένα πολύ μεγάλο κείμενο με ένα σχετικά μικρό κλειδί, ώστε να επαναλαμβάνεται τουλάχιστον μία φορά.

Για περαιτέρω εξάσκηση αξίζει να δείτε την εφαρμογή Vigenere Cipher Widget, στη σελίδα της Ώρας του κώδικα (Code.org). Γράψτε το κείμενό σας(μέχρι 140 χαρακτήρες), δώστε το κλειδί, και δείτε διαδραστικά την κρυπτογράφηση και αποκρυπτογράφησή του:

Δοκιμάστε το!

Share
Share
Μετάβαση στο περιεχόμενο