Κρυπτογράφηση; Μα γιατί να ταλαιπωρούμαστε; Ταλαιπωρούμαστε, αγαπητοί μου, γιατί ως άνθρωποι του Internet, είμαστε εκτεθειμένοι σε ξένα μάτια. Μάτια που βλέπουν μέσα από τα καλώδια. Αν λοιπόν, έρθει μία στιγμή στην ζωή σας (πχ δουλειά) όπου θέλετε να κρατήσετε τα μάτια των άλλων μακρυά από ένα συγκεκριμένο αρχείο, τότε θα χρειαστείτε όλα αυτά για τα οποία σας μιλάω σ’αυτό το άρθρο. Καλύτερα τώρα;
Αν είστε fan του LoTR, φαντάζομαι πως θα θυμάστε την σκηνή που ο Gandalf μπαίνει μέσα στο Bag End και ρωτάει τον Frodo: «Is it secret? Is it safe?«. Στην συνέχεια, ο Frodo επιβεβαιώνει τα λεγόμενά του, δείχνοντας πως το δαχτυλίδι παραμένει σφραγισμένο μέσα στον φάκελο.
Προφανώς, για όλους εμάς, ένας φάκελος και μια σφραγίδα, δεν καλύπτουν τα σημερινά security standards. Οπότε, για όλους εμάς, το δαχτυλίδι δεν είναι ούτε secret, ούτε safe, αλλά βλέπετε, εκείνη την μυθική εποχή της Μέσης Γης, οι μάγοι και άλλα πλάσματα του Eru Ilúvatar, δεν είχαν PC ή Internet. Αντίθετα σήμερα, οι μάγοι της εποχής μας έχουν τα δικά τους εργαλεία και είναι γνωστοί ως Hackers.
Keep it secret, Keep it Safe
Το βασικό μου πρόβλημα ξεκίνησε όταν θέλησα να στείλω ένα αρχείο από τον server μου στην Ελλάδα στο macbook μου εδώ στην Γερμανία. Λοιπόν, για να πούμε τα πράγματα με το όνομά τους: Δεν ήταν ένα οποιοδήποτε αρχείο. Δεν μπορώ να σας πω «τι είναι» και «τι δεν είναι», καθώς η κρυφή του ταυτότητα θαρρώ πως δίνει ένα «μυστικό τόνο» στο άρθρο.
Αυτό δε σημαίνει ότι είναι μυστικό και σ’εμένα, μια χαρά ξέρω «περί» ποιου αρχείου πρόκειται. Κατά μία έννοια θα μπορούσε να πει κανείς ότι και εσείς ξέρετε, ακόμα κι αν δεν έχετε άμεση πρόσβαση στο μυαλό μου ή τον υπολογιστή μου, μπορείτε να κάνετε εικασίες.
Καταλαβαίνετε που το πάω; Μπορεί να (μην) ξέρετε για ποιο αρχείο σας μιλάω, αλλά για όσους με ξέρουν και «το μυαλό τους πηγαίνει κατά κει», να ξέρουν ότι δεν θα το βρουν.
Unsurprisingly, την ίδια μοίρα μ’εσάς, θα έχει και η Deutsche Telekom και η NSA που έχουν «έχει στήσει αφτί» αμφότεροι στο τέλος της γραμμής. Όχι, δεν μπορεί και δεν θα μπορέσει ποτέ κανείς να μάθει για ποιο αρχείο σας μιλάω. Μπα. Με τίποτα 1.
Αν προσπαθήσετε να δείτε τα περιεχόμενα του αρχείου:
cat file
θα δείτε κάτι τέτοιο:
Salted__???~?B?'?`c?g<?)/g&??????[?<???O?d?S??~?q???Ѫi??C?? "?Fz@????\pg????2?i|?f??L?>?d{?:*???????v??K?"?Y?̷?p?Z???(?Q???????*dme???Fgۦ? ?? c??n?[Bo?r?^?;L+!? %7?L?*?Qr?Plb?b{Y /?1[?=,?}8K?rP?Ņ??U????f"{Ǒ? ?-?&??O[????m?Qw$???҈R?(?] ??6;yQ??Wy)?FO?K?*I??URZ?l2)Xʓ????N?%??Q-??d??{??U?o ?ڎ?;U'?i?eR?/?R~???`???NM<?ԡ|0o=?P??9?̢j?/?? ?3?�v?S?o'?????۬?GM?X϶?^??OVr?"????\&L.?V8\|??b??????ՉJ?)????9;+??SC?c?㱶?]??\$?7G6??W??j??!l??$?_UO?i??H?H??? ??IHq??:?M ?G??I(4??/??S:Ӷ???Z?z??????E?9'?a?(U߃D?Ny5???hD????@Z2U<?ɽ?
Οι παραπάνω «ασυναρτησίες» οφείλονται στο γεγονός ότι το αρχείο είναι κρυπτογραφημένο (encrypted). Και ένα αρχείο, μη προσπελάσιμο, είναι τελείως άχρηστο. Για να το αποκρυπτογραφήσετε, θα πρέπει να γνωρίζετε την τέχνη του OpenSSL, καθώς και κάποια άλλα πράγματα, όπως:
- τον Cipher
- και το passphrase.
Κρυπτογράφιση με το OpenSSL
Βήμα 1: Ενεργοποιήστε την κατάσταση κωδικοποίησης αρχείου
Το openssl είναι ένα εργαλείο γραμμής εντολών για τη χρήση των διαφόρων λειτουργιών κρυπτογράφησης των βιβλιοθηκών της OpenSSL από το κέλυφος. Χρησιμοποιείται συνήθως για την κρυπτογράφηση της διασύνδεσης του επισκέπτη με μια ιστοσελίδα που διαθέτει το ssl πιστοποιητικό.
Μπορεί επίσης να χρησιμοποιηθεί για κρυπτογράφηση και αποκρυπτογράφηση αρχείων. Για να χρησιμοποιήσουμε αυτή την λειτουργία, αρκεί να δώσουμε την παράμετρο enc.
Βήμα 2: Επιλέξτε το αρχείο που θέλετε να κρυπτογραφήσετε
Στην συνέχεια θα επιλέξουμε το αρχείο που θέλουμε να κρυπτογραφήσουμε (για λόγους ευκολίας, ας ονομάσουμε το αρχείο με το πρωτότυπο όνομα που είμαι σίγουρος ότι δεν έχετε ξανά δει ποτέ μπροστά σας foo.bar
). Αυτό λοιπόν πρόκειται να παίξει τον ρόλο του input file, γεγονός που δηλώνεται με την παράμετρο -in. Με την ευκαιρία, ας δούμε μερικές από τις επιλογές που μπορείτε να συνδυάσετε παρέα με την παράμετρο enc
:
-in
input file-out
output file-pass
pass phrase source-e
encrypt (by default)-d
decrypt-k
passphrase is the next argument
Βήμα 3: Κρυπτογράφηση ή Αποκρυπτογράφηση;
Το επόμενο βήμα είναι να ορίσουμε τι θέλουμε να κάνουμε με το αρχείο:
- Encryption
-e
ή - Decryption
-d
.
Κάπου διάβασα, ότι η μεγαλύτερη παγίδα της σκέψης είναι αυτή του αυτονόητου, αλλά εδώ δεν χρίζει λόγος ανησυχίας. By default λοιπόν, χρησιμοποιείται η παράμετρος -e
, την οποία δεν θα δείτε να την χρησιμοποιούν ιδιαίτερα (όσο λιγότερα, τόσο το καλύτερο). Οπότε, η επιλογή -e
είναι optional με την προϋπόθεση ότι η πρόθεσή σας είναι να κρυπτογραφήσετε το αρχείο.
Για να ολοκληρώσετε την κρυπτογράφηση του αρχείου, το μόνο που μένει είναι να δηλώσετε άλλα δύο πράγματα:
- Cipher (δηλαδή τον αλγόριθμο)
- Passphrase
Βήμα 4: Επιλογή αλγορίθμου
Για να κρυπτογραφίσουμε ένα αρχείο, χρειαζόμαστε έναν Cipher. Χωρίς να θέλω να πρωτοτυπήσω θα χρησιμοποιήσω τον: aes-256-cbc.
Βήμα 5: Επιλογή κλειδιού
Για passphrase (symmetric key) θα χρησιμοποιήσουμε την επιλογή -k
. Χμμμ, για να σκεφτώ… ok I figured out, το passphrase μου θα είναι darthvader666
.
Αν και σας είπα ότι έχουμε μόνο δύο πράγματα (τον αλγόριθμο και το passphrase), η αλήθεια είναι ότι μένει κάτι ακόμα. Υποθέτω, ότι δεν φαντάζει λογικώς ορθό να κάνουμε edit ένα αρχείο και — at the same time — να το κάνουμε replace. Συνεπώς, χρειαζόμαστε ένα output file
το οποίο θα είναι το τελικό αποτέλεσμα (δηλ. το κρυπτογραφημένο αρχείο).
Για να το πω πιο απλά, είναι το αντίστοιχο του «save as«. Για να το κάνουμε αυτό από γραμμή εντολών, το OpenSSL διαθέτει στο ρεπερτόριο εντολών του την επιλογή -out
.
Για να δούμε λίγο ολόκληρη την εντολή:
openssl enc -in foo.bar -e -aes-256-cbc -k darthvader666 -out foo.bar.enc
Οπότε, ακόμα κι αν κάποιος υποκλέψει το αρχείο foo.bar.enc (το enc
απλά δηλώνει ότι το αρχείο είναι κρυπτογραφημένο) του είναι άχρηστο. Ο λόγος που το βάζουμε είναι για να ξέρουμε εκ των προτέρων ότι το αρχείο είναι encrypted και τίποτε άλλο). Διαφορετικά, αν προσπαθήσει να το ανοίξει κάποιος τρίτος, θα δει «ασυναρτησίες«.
Παρατηρήστε το
salted
στην αρχή της πρότασης. Σημαίνει ότι το αρχείο είναι encrypted.
Αποκρυπτογράφιση με το OpenSSL
Η λύση για να αποκαλυφθούν τα περιεχόμενα του αρχείου βρίσκεται στην αντίστροφη λειτουργία της κρυπτογράφησης ή αλλιώς: αποκρυπτογράφησης (decryption).
Για να κάνουμε decrypt λοιπόν, αρχικά θα χρησιμοποιήσουμε τα ίδια filenames αντίστροφα (είσοδος -> έξοδος) καθώς επίσης και την παράμετρο -d.
Για να δούμε ολόκληρη την εντολή:
openssl enc -in foo.bar.enc -d -aes-256-cbc -k darthvader666 -out foo.bar
Και τώρα, αν προσπαθήσετε να δείτε τα περιεχόμενα του αρχείου:
cat foo.bar
Θα δείτε επιτέλους τα περιεχόμενα και τις πληροφορίες που έκρυβε όσο ήταν κρυπτογραφημένο:
This file contains super important stuff. Use it wisely:
FBI Password: paok
CIA Password: mpaok
Συνοψίζοντας
Αν το όλο άρθρο σας κέντρισε το ενδιαφέρον με την κρυπτογράφηση, θα σας πρότεινα να μελετήσετε το concept των public & private keys. Αν όχι τότε υπομονή για μια σειρά άρθρων που θα έχουν να κάνουν με την κρυπτογραφία ιδιωτικού-δημόσιου κλειδιού.
Και για φακέλους, με χρήση openssl + tar
encrypt: tar -zcf – directory | openssl aes-256-cbc -out directory.tar.gz.aes
decrypt: openssl aes-256-cbc -d -in directory.tar.gz.aes | tar -xz -f –
Έχει το openssl κάποιο πλεονέκτημα σε σχέση με το gpg;
πολυ ωραιο αρθρο!
υ.γ. ο κωδικος για να ειναι ασφαλες πρεπει να ειναι μεγαλος…
οποτε αντι για paok μπορεις να βαζεις paokkaiasmingamiswpote