Κρυπτογράφηση αρχείων
Κρυπτογράφηση είναι η διαδικασία της μετατροπής δεδομένων χρησιμοποιώντας έναν κρυπτογραφικό αλγόριθμο για να καταστήσουμε αδύνατη την ανάγνωση των δεδομένων αυτών από οποιονδήποτε δεν κατέχει κάποια συγκεκριμένη πληροφορία, το κλειδί. Η αρχική πληροφορία ονομάζεται plaintext, ο αλγόριθμος κρυπτογράφησης ονομάζεται cipher και το αποτέλεσμα της κρυπτογράφησης (κρυπτογραφημένη πληροφορία) ονομάζεται ciphertext. Η διαδικασία κρυπτογράφησης ορίζεται από μαθηματικούς αλγορίθμους που ποικίλλουν σε πολυπλοκότητα.
Στο πλαίσιο αυτού του άρθρου, θα δώσουμε περισσότερο βάση στους τρόπους με τους οποίους μπορούμε να κρυπτογραφούμε αποθηκευμένα δεδομένα μας (στον σκληρό μας δίσκο, το usb flash drive μας κτλ), θα εξηγήσουμε περιληπτικά βασικές έννοιες που αφορούν στην κρυπτογράφηση αρχείων και θα δούμε συγκεκριμένες υλοποιήσεις διαφόρων μεθόδων κρυπτογράφησης.
Περιεχόμενα
Εισαγωγή[επεξεργασία]
Τι προσφέρει η κρυπτογράφηση των αρχείων μας;[επεξεργασία]
Αν τα αρχεία μας είναι κρυπτογραφημένα, για να μπορέσει κάποιος να τα διαβάσει, να αποκτήσει πρόσβαση στα δεδομένα μας, χρειάζεται το κλειδί με το οποίο τα κρυπτογραφήσαμε. Σε περίπτωση που δε γνωρίζει το κλειδί, η ανάγνωσή τους θα είναι από πολύ δύσκολη και χρονοβόρα, έως πρακτικά αδύνατη.
Η πρακτική της κρυπτογράφησης των αρχείων μας μπορεί να φανεί χρήσιμη σε πολλές περιπτώσεις. Μπορεί να χάσουμε το usb stick μας, να μας κλέψουν το laptop, να μας κατασχέσουν τον υπολογιστή. Τα αρχεία μας μπορεί να πέσουν στα χέρια ενός περίεργου συγκάτοικου, του αφεντικού μας στη δουλειά, ενός κλέφτη ή ενός ιού που ψάχνει για στοιχεία όπως αριθμοί καρτών τραπεζών ή πολύ χειρότερα κρατικών υπηρεσιών.
Αν χρησιμοποιούμε σοβαρές μεθόδους κρυπτογράφησης, επιλέγουμε με σωστά κριτήρια τους κωδικούς μας και λαμβάνουμε κάποια στοιχειώδη μέτρα, μπορούμε να επιτύχουμε σημαντικό επίπεδο ασφάλειας απέναντι σε τέτοιες περιπτώσεις.
Μπορώ πραγματικά να είμαι ασφαλής αν χρησιμοποιώ κρυπτογράφηση;[επεξεργασία]
Κατ'αρχάς πρέπει να ξεκαθαριστεί ένα πράγμα. Δεν υπάρχει απόλυτη ασφάλεια. Απλά δεν υπάρχει. Όποιος ισχυρίζεται το αντίθετο, αυταπατάται. Και αυτό ισχύει τόσο για θέματα φυσικής ασφάλειας, όσο και ηλεκτρονικής. Ας περάσουμε για λίγο στο επίπεδο της φυσικής ασφάλειας. Ακόμα και αν έχουμε το καλύτερο χρηματοκιβώτιο στη γη για να βάλουμε μέσα τα έγγραφά μας, με μεταλλικά τοιχώματα πάχους πολλών μέτρων και ένα σχεδόν απαραβίαστο σύστημα ασφάλειας, κάποιος με αρκετά χρήματα και χρόνο στη διάθεσή του, θα καταφέρει τελικώς να το παραβιάσει. Εάν όμως η δυσκολία του να παραβιάσει το χρηματοκιβώτιό μας είναι πολύ μεγάλη, ο χρόνος και οι πόροι που απαιτούνται εξωφρενικά υψηλοί, απλά δεν αξίζει τον κόπο να προσπαθήσει.
Η ίδια λογική ισχύει και στα θέματα της ηλεκτρονικής ασφάλειας. Κάθε κρυπτογράφηση μπορεί να "σπάσει". Στη χειρότερη (για τον επιτιθέμενο) περίπτωση, όπου δε γνωρίζει απολύτως τίποτα για το κλειδί, όπου ο αλγόριθμος κρυπτογράφησης δεν έχει αδυναμίες κτλ, μπορεί απλά να δοκιμάσει όλους τους πιθανούς κωδικούς. Αυτό όμως, αν ο κωδικός είναι αρκετά μεγάλος και τυχαίος (δε μπορεί να τον μαντέψει), θα απαιτούσε τεράστια υπολογιστική ισχύ (χρήμα, πόρους) και χρόνο. Μπορούμε λοιπόν να εφαρμόζουμε μεθόδους τέτοιες που κάθε απόπειρα σπασίματός τους να είναι ασύμφορη. Μπορούμε να εφαρμόζουμε τόσο ισχυρές μεθόδους που το σπάσιμό τους να χρειάζεται δεκαετίες, αιώνες, χιλιετίες ή και περισσότερο και, ως εκ τούτου, να είναι, για κάθε πρακτική περίπτωση, άσπαστες. Και σε αντίθεση με την περίπτωση του χρηματοκιβωτίου, ο καθένας μας μπορεί να εφαρμόζει τέτοιες μεθόδους.
Το ότι στις χολιγουντιανές κατασκοπικές ταινίες εμφανίζονται μυστικοί πράκτορες που σπάνε κάθε σύστημα μέσα σε λίγα λεπτά, δε σημαίνει πως αυτή είναι όντως και η πραγματικότητα. Αντιθέτως, έχουν καταγραφεί πολλά περιστατικά όπου οι αρχές δεν κατάφεραν να σπάσουν κρυπτογραφημένους δίσκους που είχαν κατασχέσει.
Βασικές έννοιες[επεξεργασία]
Κρυπτογραφημένο αρχείο[επεξεργασία]
Ένα αρχείο, ένα οποιοδήποτε αρχείο, είτε πρόκειται για κείμενο, μουσική, ταινία ή οτιδήποτε άλλο, είναι δεδομένα, ένα σύνολο από πληροφορίες, δομημένες με συγκεκριμένο τρόπο για να γίνονται κατανοητές από τα προγράμματα με τα οποία διαβάζουμε τα αρχεία αυτά. Αυτές οι πληροφορίες κωδικοποιούνται με βάση ένα συγκεκριμένο τρόπο, μετατρέπονται σε αριθμούς και αποθηκεύονται στο δίσκο μας (ή όποιο μέσο αποθήκευσης χρησιμοποιούμε) ως μία σειρά από μηδενικά και άσσους. Το να διαβάσει κανείς ένα αρχείο, σημαίνει να διαβάσει από το δίσκο αυτά τα μηδενικά και άσσους, να τα αποκωδικοποιήσει και να τα ερμηνεύσει καταλλήλως (κείμενο, μουσική, εικόνα). Η κωδικοποίηση αυτή δεν αναφέρεται στην κρυπτογράφηση, απλά στη μετατροπή της πληροφορίας σε αριθμούς.
Μέσω της κρυπτογράφησης, πριν αυτά τα 0 και 1 που αναφέραμε γραφτούν στο δίσκο, δίνονται ως είσοδος σε ένα κρυπτογραφικό αλγόριθμο μαζί με ένα κλειδί. Ο αλγόριθμος τα αλλάζει και τα αποθηκεύει αλλαγμένα στο δίσκο. Η απευθείας ανάγνωσή τους είναι πλέον αδύνατη. Φαίνονται σαν τελείως τυχαία δεδομένα. Χρειάζεται να εφαρμοστεί η αντίστροφη μέθοδος, αυτή της αποκρυπτογράφησης, για να μπορούν να ξαναδιαβαστούν.
Κρυπτογραφημένο αρχείο container[επεξεργασία]
Σε αυτή την περίπτωση έχουμε στο κατά τα άλλα μη κρυπτογραφημένο σύστημά μας, ένα αρχείο. Αυτό το αρχείο λειτουργεί σαν κρυπτογραφημένο δοχείο (container) μέσα στο οποίο αποθηκεύουμε τα ευαίσθητα αρχεία μας. Όταν τρέξουμε το πρόγραμμα της αποκρυπτογράφησης, το πρόγραμμα αυτό διαβάζει το αρχείο-container και μας εμφανίζει τα περιεχόμενά του. Συνήθως εμφανίζει το container αυτό στο λειτουργικό μας ως έναν καινούριο εικονικό δίσκο τον οποίον χειριζόμαστε όπως θα κάναμε και με έναν οποιοδήποτε δίσκο ή φλασάκι.
On the fly encryption[επεξεργασία]
Ο όρος On-the-fly encryption (επί τόπου κρυπτογράφηση-OTF) αναφέρεται σε μία κρυπτογράφηση που γίνεται επί τόπου, αυτόματα, σε ένα διαφανές επίπεδο ανάμεσα στη φυσική εγγραφή/ανάγνωση του δίσκου και την εγγραφή/ανάγνωση αρχείων που κάνουμε εμείς από το λειτουργικό μας σύστημα. Στην περίπτωση για παράδειγμα του κρυπτογραφημένου container που μόλις εξηγήσαμε, άπαξ και το ξεκλειδώσουμε, αυτό εμφανίζεται σαν δίσκος και μπορούμε κανονικά να ανοίγουμε και να γράφουμε αρχεία μέσα από το λειτουργικό μας σύστημα. Η διαδικασία της (απο)κρυπτογράφησης γίνεται αυτόματα και διαφανώς. Τα μη κρυπτογραφημένα δεδομένα δε γράφονται ποτέ στο δίσκο.
Κρυπτογραφημένο διαμέρισμα δίσκου (encrypted partition)[επεξεργασία]
Ένας δίσκος μπορεί να χωριστεί σε πολλά διαμερίσματα. Τα φυσικά διαμερίσματα αυτά πρακτικά εμφανίζονται στο χρήστη ως ξεχωριστοί δίσκοι. Αντί να έχουμε ένα κρυπτογραφημένο file container, μπορούμε να έχουμε ένα κρυπτογραφημένο partition.
Full system encryption[επεξεργασία]
Όταν έχουμε full system encryption (κρυπτογράφηση ολόκληρου συστήματος) τα πάντα στον υπολογιστή μας είναι κρυπτογραφημένα, όχι μονάχα επιλεγμένα αρχεία. Όλα μας τα αρχεία, οι ρυθμίσεις, τα προγράμματα, το λειτουργικό μας είναι κρυπτογραφημένα. Τα πάντα εκτός από ένα πολύ μικρό partition το οποίο περιέχει τα απαραίτητα για να αποκρυπτογραφήσει τους δίσκους (on-the-fly) άμα του δώσουμε τον κωδικό. Αλλιώς δε φορτώνει καν το λειτουργικό μας σύστημα. Σε πολλές διανομές Linux (Debian, Ubuntu, Mint) ο χρήστης έχει τη δυνατότητα να κάνει full system encryption κατά την εγκατάσταση του λειτουργικού συστήματος.
Keyfile[επεξεργασία]
Ένα keyfile (αρχείο-κλειδί) είναι ένα αρχείο το οποίο περιέχει κλειδιά κρυπτογράφησης. Όπως εξηγήσαμε παραπάνω, αλλά και στο άρθρο για την κρυπτογράφηση, χρησιμοποιούμε ένα κλειδί το οποίο δίνεται ως είσοδος στη συνάρτηση (απο)κρυπτογράφησης. Στην απλή περίπτωση, το κλειδί αυτό μπορεί να είναι ένας κωδικός, δηλαδή μία σειρά από αλφαριθμητικούς χαρακτήρες. Αντί για κωδικό, ή μαζί με τον κωδικό μπορούμε να χρησιμοποιούμε ως κλειδί ένα αρχείο. Τα bytes του αρχείου είναι το κλειδί. Ως keyfile μπορεί να χρησιμοποιηθεί ένα οποιοδήποτε αρχείο, αλλά συνίσταται να χρησιμοποιείται κάποιο συμπιεσμένο αρχείο (jpg, avi, zip, gzip κοκ) λόγω της μεγαλύτερης τυχαιότητας των τιμών των bytes του. Αν χρησιμοποιούμε και password και keyfile προσθέτουμε μεγαλύτερη ασφάλεια στην κρυπτογράφησή μας διότι σε αυτή την περίπτωση, για να αποκτήσει κάποιος πρόσβαση στα αρχεία μας, χρειάζεται κάτι που ξέρουμε (κωδικό) και κάτι που έχουμε (keyfile).
Υλοποιήσεις[επεξεργασία]
Παρακάτω αναφέρονται διάφορες υλοποιήσεις (προγράμματα) κρυπτογράφησης. Όλα τα προγράμματα αυτά είναι ελεύθερου ή/και ανοιχτού κώδικα λογισμικό. Οι αλγόριθμοι που χρησιμοποιούν θεωρούνται παγκοσμίως επαρκώς ασφαλείς και χρησιμοποιούνται ευρέως τόσο από απλούς χρήστες, όσο και από επιχειρήσεις και κυβερνήσεις.
Truecrypt (cross-platform)[επεξεργασία]
Το truecrypt ήταν ένα δημοφιλές λογισμικό ανοιχτού κώδικα, που προσέφερε δυνατότητες κρυπτογράφησης για αρχεία, διαμερίσματα δίσκων (partitions) ή και ολόκληρους δίσκους. Ένα από τα πλεονεκτήματα του truecrypt ήταν ο cross-platform χαρακτήρας του. Αυτό σημαίνει ότι υπήρχαν εκδόσεις για Windows, Linux και MacOS. Παρ' όλ' αυτά, μόνο σε Windows επέτρεπε σε χρήστες να κρυπτογραφήσουν ολόκληρο τον δισκό, μαζί με το λειτουργικό σύστημα (full system encryption).
Αν και το Truecrypt ήταν αρκετά διαδεδομένο, ιδιαίτερα στα συστήματα Windows, κατά καιρούς είχαν εκφραστεί αμφιβολίες για την αξιοπιστία του Truecrypt. Είτε όσον αφορά το ίδιο το λογισμικό, είτε την ταυτότητα αυτών που το αναπτύσσουν. Ακόμα το truecrypt δεν παρεχόταν επίσημα από δημοφιλείς Linux διανομές όπως Ubuntu, Debian, Fedora[1] λόγω της άδειας με την οποία διανέμονταν αλλά και τον κλειστό τρόπο ανάπτυξής του.
Το Φεβρουάριο του 2014 μια ανεξάρτητη ομάδα ερευνητών εξέδωσε αναφορά για το Truecrypt, στην οποία επισημαίνεται ότι δεν ανακάλυψαν κάποιο backdoor ή ιδιαίτερα σοβαρή ευπάθεια στο λογισμικό.
Στις 28 Μάη 2014, το επίσημο site του Truecrypt ανακατευθύνει στη σελίδα SourceForge και ανακοινώνει τη διακοπή της ανάπτυξης του Truecrypt. Οι χρήστες του Truecrypt πρέπει να σταματήσουν να χρησιμοποιούν το συγκεκριμένο λογισμικό. Παραμένουν ακόμα ασαφείς οι λόγοι και οι συνθήκες που οδήγησαν τους προγραμματιστές του Truecrypt στην απόφαση αυτή.
Cryptsetup (Linux)[επεξεργασία]
Το λογισμικό cryptsetup, προσφέρει πληθώρα επιλογών για κρυπτογράφηση δίσκων, διαμερισμάτων δίσκων, αρχείων, software RAID volumes και LVM. Το cryptsetup χρησιμοποιεί ένα υποσύστημα κρυπτογράφησης του πυρήνα του Linux.
- Oδηγός κρυπτογράφησης δίσκου με cryptsetup
- Οδηγός δημιουργίας κρυπτογραφημένου container με cryptsetup
FreeOTFE (windows)[επεξεργασία]
To FreeOTFE (Free On The Fly Encryption) είναι ένα πρόγραμμα ελεύθερο και ανοιχτού κώδικα που προσφέρει on-the-fly κρυπτογράφηση σε υπολογιστές που τρέχουν Windows και PDA's που τρέχουν Windows Mobile.
Tomb (linux)[επεξεργασία]
Το Tomb [2] είναι ένα 100% ελεύθερο και ανοικτού κώδικα σύστημα για την κρυπτογράφηση αρχείων. Το Tomb δημιουργεί κρυπτογραφημένα container αρχείων, τα οποία ανοίγουν και κλείνουν με τα αντίστοιχα αρχεία-κλειδιά (keyfiles) τους, τα οποία αρχεία-κλειδιά επίσης προστατεύονται από κωδικό. Στην ορολογία του Tomb τα container αυτά ονομάζονται 'tomb', δηλαδή τάφοι. Τα tomb μπορούν να νοηθούν ως κλειδωμένοι φάκελοι αρχείων οι οποίοι μπορούν με ασφάλεια να μεταφερθούν ή να παραμείνουν σε ένα σύστημα αρχείων. Τα κλειδιά των 'tomb' μπορούν να παραμένουν σε ξεχωριστό μέρος από τα 'tomb' που ξεκλειδώνουν, για παράδειγμα ο χρήστης έχει το 'tomb' στον σκληρό δίσκο και το αρχείο-κλειδί σε ένα usb stick.
To tomb είναι ουσιαστικά ένα zsh script και χρησιμοποιείται μέσω γραμμής εντολών. Μια ενδιαφέρουσα λειτουργία του Tomb είναι ότι ο χρήστης μπορεί προαιρετικά να χρησιμοποιήσει στεγανογραφία για τα αρχεία-κλειδιά των 'tomb'. Αυτό σημαίνει ότι ο χρήστης μπορεί να "θάψει" ένα αρχείο-κλειδί (keyfile) μέσα σε μια εικόνα jpeg για παράδειγμα, και να το εξάγει όταν χρειάζεται να το χρησιμοποιήσει για την αποκρυρπτογράφηση του 'tomb' κρυπτογραφημένου container.