Σε αυτό το blog έχουν δημοσιευτεί κάμποσες μέθοδοι κρυπτογράφησης αρχείων και φακέλων με διάφορα εργαλεία διαθέσιμα σε Linux, είτε και cross-platform.
Παρακάτω θα δούμε άλλον έναν τρόπο κρυπτογράφησης, πιο ισχυρό (ίσως) από τους προηγούμενους, αφού διαθέτει δυο επίπεδα ασφαλείας.
Το GnuPG είναι ένα εργαλείο που χρησιμοποιείται κατά κόρον, είτε σε προσωπικά ή εταιρικά περιβάλλοντα. Αυτό, λόγω του ότι έχει αποδειχθεί ισχυρό σε ότι αφορά την κρυπτογραφία, φυσικά είναι ανοιχτού κώδικα διαθέσιμο για τον καθένα να το εξετάσει (και όχι μόνο).
Διαβάστε περισσότερα σχετικά με το GnuPG στην επίσημη σελίδα. Υπάρχει επίσης και άλλη δημοσίευση σχετικά με το GnuPG σε αυτό το blog.
Έχουν δημοσιευτεί παλαιότερα σε αυτό το blog διάφορες μέθοδοι κρυπτογράφησης αρχείων και φακέλων με άλλα εργαλεία διαθέσιμα για Linux, είτε και cross-platform. Οι σύνδεσμοι παρακάτω:
- https://nicktux.com/2016/11/20/veracrypt
- https://nicktux.com/2015/07/14/encrypt-usb-stick-with-cryptsetup
- https://nicktux.com/2016/09/13/cryptsetup-create-encrypted-file-container
- https://nicktux.com/2015/06/19/encfs-encrypt-cloud-storage
Σε αυτή τη δημοσίευση θα δούμε άλλον έναν τρόπο κρυπτογράφησης, αυτή τη φορά με το πανίσχυρο GnuPG.
- Για ποιο λόγο όμως να θέλει κάποιος να κρυπτογραφήσει αρχεία;
Η απάντηση διαφέρει και εξαρτάται από το περιβάλλον στο οποίο εργάζεται. Ίσως να έχει πολύτιμα προσωπικά αρχεία τα οποία δεν θέλει να πέσουν σε χέρια τρίτων. Ίσως να μιλάμε για εταιρικό περιβάλλον και ανταγωνιστές (καταλαβαίνετε το σενάριο). Σε κάθε περίπτωση ο καθένας έχει τους δικούς του λόγους για τους οποίους θέλει να κρυπτογραφήσει αρχεία και να τα διατηρήσει προσωπικά και εμπιστευτικά.
Στα περισσότερα λειτουργικά συστήματα βασισμένα στον πυρήνα Linux το GnuPG είναι προεγκατεστημένο. Αυτά τα οποία χρειαζόμαστε είναι ένα ζεύγος κλειδιών (δημόσιο και μυστικό), είτε το δημόσιο κλειδί κάποιου άλλου προσώπου εάν το αρχείο προορίζεται για εκείνον.
Το GnuPG υποστηρίζει και την κρυπτογράφηση μέσω απλού κωδικού, σε αυτή τη περίπτωση όμως δεν διαφέρει σε κάτι σε σχέση με άλλα εργαλεία κρυπτογράφησης. Δεν θα αναφερθούμε σε αυτό τον τρόπο εδώ (αν και στην ουσία μια εντολή είναι όλη κι όλη).
Γνωρίζουμε πως να δημιουργήσουμε ζεύγος κλειδιών; υπάρχει ένας εύκολος τρόπος μέσω Thunderbird και Enigmail ο οποίος περιγράφεται εδώ(Βίντεο).
Αφού έχουμε το ζεύγος κλειδιών μας έτοιμο, δεν έχουμε παρά να ακολουθήσουμε τις παρακάτω οδηγίες, αναλόγως εάν θέλουμε να κρυπτογραφήσουμε αρχείο ή ολόκληρο κατάλογο.
Κρυπτογράφηση
Υποθέτουμε ότι έχουμε ένα κατάλογο με όνομα MyPrivateFolder και μέσα σε αυτόν δυο αρχεία, myPrivateFile1 και myPrivateFile2. Θέλουμε να κρυπτογραφήσουμε το αρχείο myPrivateFile1.
Μέσω μιας εφαρμογής τερματικού,
- Τι έχουμε κάνει παραπάνω;
Η εντολή που δώσαμε είναι η εξής:
gpg2 --output myprivatefile1.gpg --encrypt --recipient KeyID MyPrivateFolder/myPrivateFile1
Βλέπουμε ότι ορίζουμε πρώτα το όνομα του αρχείου το οποίο θα εξαχθεί και θα είναι κρυπτογραφημένο. Έπειτα δίνουμε τη παράμετρο –encrypt (για την κρυπτογράφηση), έπειτα λέμε στην gpg με ποιο κλειδί θέλουμε να κρυπτογραφήσει το αρχείο, και τέλος δίνουμε τη διαδρομή (path) του αρχείου που θέλουμε να κρυπτογραφηθεί.
Το εξαγόμενο κρυπτογραφημένο αρχείο θα αποθηκευτεί στον τρέχων κατάλογο (pwd), ενώ το αρχικό αρχείο θα παραμείνει στη θέση του (δεν θα διαγραφεί).
Στη παραπάνω εντολή, όπου KeyID το αντικαθιστούμε με το δικό μας, ή με εκείνο με το οποίο θέλουμε να κρυπτογραφηθεί το αρχείο. Το KeyID μπορούμε να το βρούμε είτε μέσω του Enigmail (στον Thunderbird) από το key managament, ή μέσω τερματικού με την παρακάτω εντολή η οποία θα επιστρέψει τα ιδιωτικά/μυστικά μας κλειδιά.
gpg2 --list-secret-keys
- Ποιο είναι όμως το έξτρα επίπεδο ασφάλειας που προσφέρει αυτός ο τρόπος κρυπτογράφησης;
Πρακτικά ενώ με άλλες μεθόδους κρυπτογράφησης αυτό που πρέπει να κάνει ένας επιτιθέμενος είναι να «σπάσει» τον κωδικό (το συνθηματικό/password), πχ με brute force attack και άλλους τρόπους, εδώ δεν αρκεί μόνον αυτό. Πρέπει να έχει στη κατοχή του και το ιδιωτικό κλειδί το οποίο αντιστοιχεί στο δημόσιο με το οποίο έχει κρυπτογραφηθεί το αρχείο.
Υποθέτουμε βέβαια ότι κατά τη δημιουργία του ζεύγους των κλειδιών έχουμε εισάγει μια κωδική φράση και δεν έχουμε αφήσει κενό το πεδίο. Δηλαδή το ιδιωτικό μας κλειδί προστατεύεται και από κάποιο συνθηματικό (password).
- Αν θέλουμε να στείλουμε το αρχείο σε κάποιον άλλο;
Το μόνο που αλλάζει στη παραπάνω διαδικασία είναι το KeyID. Δηλαδή θα ορίσουμε το KeyID του δημόσιου κλειδιού (το οποίο έχουμε στη κατοχή μας) του προσώπου στο οποίο θέλουμε να στείλουμε το αρχείο. Το αρχείο θα κρυπτογραφηθεί και θα μπορεί να το αποκρυπτογραφήσει μόνον ο κάτοχος του ιδιωτικού κλειδιού το οποίο αντιστοιχεί στο δημόσιο (ζεύγος κλειδιών).
Εναλλακτικά του KeyID μπορούμε στο –recipient να ορίσουμε το Email το οποίο δηλώθηκε κατά τη δημιουργία του ζεύγους κλειδιών.
- Και εάν θέλουμε να κρυπτογραφήσουμε περισσότερα από ένα αρχεία;
Τότε θα πρέπει να «μετατρέψουμε» τα αρχεία αυτά σε ένα. Αφού τα τοποθετήσουμε σε έναν φάκελο, μπορούμε να χρησιμοποιήσουμε την gpg σε συνδυασμό με την tar για να δημιουργήσουμε ένα αρχείο συμπιεσμένο και κρυπτογραφημένο.
Στη παρακάτω εικόνα κρυπτογραφούμε τον κατάλογο MyPrivateFolder ως MyPrivateFolder.tgz.gpg
- Μπορούμε να χρησιμοποιήσουμε άλλη μέθοδο συμπίεσης αντί της tar; πχ zip
Φυσικά και μπορούμε αρκεί να αντικαταστήσουμε το πρώτο κομμάτι της εντολής.
Για παράδειγμα:
zip -r MyPrivateFolder | gpg2 -o MyPrivateFolder.zip.gpg --encrypt -r KeyID
Αποκρυπτογράφηση
Είτε για ένα αρχείο, είτε για έναν συμπιεσμένο κατάλογο (ο οποίος πάλι ένα αρχείο είναι) η διαδικασία είναι η ίδια. Το μόνο έξτρα που θα πρέπει να κάνουμε στη περίπτωση ενός καταλόγου είναι να αποσυμπιέσουμε τον κατάλογο, μετά την αποκρυπτογράφηση.
gpg2 --output FILENAME --decrypt ENCRYPTED.gpg
Έξτρα Πλεονέκτημα
Εκτός όλων των παραπάνω, μπορούμε να χρησιμοποιήσουμε το GnuPG και για την αυθεντικότητα του αρχείου που κρυπτογραφούμε. Ειδικά όταν πρόκειται να το στείλουμε σε κάποιον άλλο, καλό θα είναι να γνωρίζει ότι το αρχείο αυτό προέρχεται όντως από εμάς.
Έτσι, μπορούμε να προσθέσουμε μια υπογραφή στο συγκεκριμένο αρχείο η οποία θα πιστοποιεί ότι όντως το δημιουργήσαμε και στο στείλαμε εμείς.
Η εικόνα είναι αρκετά επεξηγηματική από μόνη της. Προσέξτε ότι παραλείψαμε τη παράμετρο recipient (ή -r) επίτηδες ώστε να δούμε πως ακόμη και αν την παραλείψουμε η gpg θα μας ζητήσει να εισάγουμε τα ID των παραληπτών.
- Γιατί χρησιμοποιούμε την εντολή gpg2 και όχι την gpg;
Η gpg2 είναι η νεότερη έκδοση της gpg και αντιστοιχεί στην έκδοση GnuPG 2.1 (αντί της 1.4). Σε πολλά λειτουργικά Linux συστήματα υπάρχουν και οι δυο εκδόσεις περισσότερο για backward compatibility. Για να υπάρχει διαχωρισμός η μια εντολή gpg αντιστοιχεί στην έκδοση 1.4, ενώ η gpg2 στην έκδοση 2.1
Καλό είναι για ότι κάνουμε να χρησιμοποιούμε τη νεότερη έκδοση, εκτός και αν υπάρχει ανάγκη να χρησιμοποιήσουμε την παλιά.
- Χρήση του GnuPG σε Windows;
Αν και αυτό το blog ασχολείται αποκλειστικά με Linux, επειδή κάποιες φορές ίσως καταστεί αναγκαίο να επικοινωνήσουμε με πρόσωπα που χρησιμοποιούν Windows, δίνουμε μόνο το Link για όσους/ες επιθυμούν να κάνουν λήψη και εγκατάσταση του GnuPG.
Δεν θα αναφέρουμε κάτι για τη χρήση του GnuPG σε Windows, το gpg4win είναι ένα πρόγραμμα γραφικού περιβάλλοντος και σχετικά εύκολο στη χρήση.
Until next time …
Thanks for reading!
Αυτό που δεν κατάλαβα ακόμα, είναι το εξής:
Για πιο λόγο το private key είναι 2048 bit ενώ το να μας χακάρουν το passphrase είναι πιο εύκολο φαινομενικά.
Δηλ. Ποιος ο λόγος ύπαρξης του private key όταν αυτό ξεκλειδώνει με ένα από password?
Το Private key είναι η ταυτότητά σου. Γι’ αυτό λέμε ότι το private key δεν το δίνουμε σε κανέναν και το φυλάμε καλά. Γι’ αυτό βάζουμε και ένα έξτρα layer ασφαλείας στο Private Key, ένα συνθηματικό δηλαδή, ώστε αν μας το κλέψουν να έχουμε το χρόνο να το κάνουμε revoke πριν χρησιμοποιηθεί.
Όταν σου στείλει κάτι κάποιος, το οποίο θα είναι υπογεγραμμένο με το δικό σου δημόσιο (public) κλειδί, τότε αυτό δεν μπορεί να το αποκρυπτογραφήσει κανείς πέραν αυτού που έχει το αντίστοιχο ιδιωτικό (private) κλειδί, δηλαδή μόνον εσύ ο ίδιος. Εκεί έγκειται η ασφάλεια των 2048 ή 4096 bits του κλειδιού.