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

Η κρυπτογράφηση συστημάτων αρχείων διακρίνεται από την κρυπτογράφηση σε επίπεδο δίσκου, στην οποία κάθε bit δεδομένων, συμπεριλαμβανομένων όλων των προγραμμάτων, που αποθηκεύεται σε έναν δίσκο κρυπτογραφείται.

Γενικές αρχές κρυπτογράφησης συστημάτων αρχείων
-----------------------------------------------

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

Κρυπτογράφηση σε συστήματα αρχείων γενικής χρήσης
-------------------------------------------------

* Στα λειτουργικά συστήματα GNU/Linux

Η κρυπτογράφηση υποστηρίζεται με διάφορους τρόπους, είτε απευθείας από τον πυρήνα:

* + Loopback device driver (loop-AES), παλιότερη λύση
	+ Device mapper system (dm-crypt), από τον πυρήνα 2.6 και αργότερα
	+ eCryptfs: κρυπτογραφικό σύστημα αρχείων που λειτουργεί ως στρώμα πάνω από ένα χαμηλότερο σύστημα αρχείων (π.χ. ext, jfs, xfs)

είτε μέσω του συστήματος FUSE, με ειδικά κρυπτογραφικά συστήματα αρχείων όπως τα CryptoFS, EncFS. 

* Στα λειτουργικά συστήματα Unix
	+ Mac OS Το σύστημα FileVault, που περιλαμβάνεται στο λειτουργικό σύστημα στις εκδόσεις από Mac OS X v10.3 ("Panther") και νεώτερες, είναι ένας απλός στη χρήση μηχανισμός ασφάλειας που, αν ενεργοποιηθεί από έναν χρήστη, κρυπτογραφεί τα δεδομένα στον κατάλογό του (home directory). Χρησιμοποιεί κρυπτογραφημένα συστήματα αρχείων που προσαρτώνται και αποπροσαρτώνται όταν ο χρήστης εισέρχεται ή εξέρχεται από το σύστημα. Το Filevault δεν μπορεί να κρυπτογραφήσει ολόκληρο δίσκο ή μόνο ένα τμήμα του καταλόγου ενός χρήστη. Οι κατάλογοι κρυπτογραφούνται με τον αλγόριθμο Advanced Encryption Standard (AES) με ένα κλειδί 128-bit που προκύπτει από τον κωδικό πρόσβασης κάθε χρήστη.
	+ ZFS Crypto: Έργο που προσθέτει λειτουργικότητα κρυπτογράφησης για το ZFS. Eίναι αξιοσημείωτο ότι κρυπτογραφούνται και τα μεταδεδομένα του συστήματος αρχείων (ονόματα αρχείων, ιδιοκτήτες αρχείων, ιδιότητες αρχείων, λίστες πρόσβασης).

* Στα λειτουργικά συστήματα Microsoft Windows

Με τη χρήση του Encrypting File System (EFS), τα Windows περιλαμβάνουν τη δυνατότητα κρυπτογράφησης δεδομένων απευθείας σε τόμους που χρησιμοποιούν το σύστημα αρχείων NTFS, αλλά αυτή η δυνατότητα δεν υπάρχει για συστήματα αρχείων FAT ή FAT 32. Το EFS είναι διαθέσιμο στα Windows XP Professional, Windows 2000 Server, Windows 2000 Professional και στα νεότερα λειτουργικά συστήματα της Microsoft.

Οι χρήστες μπορούν να κρυπτογραφήσουν αρχεία και φακέλους, εάν ορίσουν ένα χαρακτηριστικό στο παράθυρο διαλόγου Ιδιότητες (Properties) του αντικειμένου. Η τεχνολογία κρυπτογράφησης που χρησιμοποιείται είναι δημόσιου κλειδιού και τρέχει σαν μια υπηρεσία του συστήματος διάφανη για το χρήστη. Ένα ζεύγος κλειδιών, ιδιωτικό και δημόσιο κλειδί, δημιουργείται τυχαία, όταν ο χρήστης κρυπτογραφεί το πρώτο του αρχείο. Αυτό το ζεύγος κλειδιών χρησιμοποιείται για την κρυπτογράφηση και την αποκρυπτογράφηση των κρυπτογραφημένων αρχείων. Αν ένας χρήστης που προσπαθεί να προσπελάσει ένα κρυπτογραφημένο αρχείο NTFS διαθέτει το ιδιωτικό κλειδί που σχετίζεται με αυτό το αρχείο, τότε ο χρήστης μπορεί να ανοίξει το αρχείο και να εργαστεί με αυτό με διάφανο τρόπο. Ένας χρήστης χωρίς το ιδιωτικό κλειδί για το αρχείο συναντά άρνηση πρόσβασης.

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

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

Οι αλγόριθμοι κρυπτογράφησης που μπορούν να χρησιμοποιηθούν εξαρτώνται από την έκδοση του λειτουργικού συστήματος και είναι γενικά οι AES, Triple DES, DESX, ενώ στις νεότερες εκδόσεις Windows 7 και Windows Server 2008 μπορεί να χρησιμοποιηθεί και συνδυασμός των αλγορίθμων AES, SHA, και ECC.

Ειδικά κρυπτογραφικά συστήματα αρχείων
--------------------------------------

Τα κρυπτογραφικά συστήματα αρχείων είναι εξειδικευμένα συστήματα αρχείων που είναι σχεδιασμένα εξαρχής ώστε να παρέχουν δυνατότητες κρυπτογράφησης και ασφάλειας. Συνήθως κρυπτογραφούν όλα τα δεδομένα που περιέχουν, συμπεριλαμβανομένων των μεταδεδομένων. Συχνά αποτελούν ένα στρώμα πάνω από ήδη υπάρχοντα συστήματα αρχείων γενικής χρήσης και μπορούν να προσφέρουν πιο προχωρημένες λειτουργίες, όπως η *διαψεύσιμη κρυπτογράφηση*. Συνήθως δεν εξαρτώνται από το σύστημα αρχείων ή το λειτουργικό σύστημα. Τέτοια παραδείγματα είναι το σύστημα TrueCrypt  και το σύστημα BestCrypt .

Προσπάθειες ανάγνωσης των κρυπτογραφημένων αρχείων από αντιπάλους
-----------------------------------------------------------------

Ένα επιτιθέμενος αντίπαλος μπορεί να δοκιμάσει διάφορους τρόπους για να διαβάσει τα ιδιωτικά δεδομένα:

* Ανάγνωση δεδομένων την ώρα που δεν είναι κρυπτογραφημένα
	+ Με επίθεση στον υπολογιστή όσο λειτουργεί και είναι συνδεδεμένος σε δίκτυο.
	+ Με κλοπή αντιγράφων ασφαλείας αποθηκευμένων σε καθαρό κείμενο.
* Απόκτηση κρυπτογραφημένων δεδομένων και εύρεση κλειδιού
	+ Με κρυπτανάλυση (π.χ. επίθεση με γνωστό κείμενο).
	+ Με κλοπή των κλειδιών με εκβιασμό και απειλές.
	+ Με ανάλυση με σάρωση της επιφάνειας του δίσκου.

Διαψεύσιμη κρυπτογράφηση
------------------------

Ο όρος διαψεύσιμη κρυπτογράφηση εισήχθη από τον Τζούλιαν Ασάντζ κατά τη δημιουργία του προγράμματος Rubberhose  που κυκλοφόρησε για πρώτη φορά το 1997 και περιγράφεται αναλυτικά στο άρθρο. Η διαψεύσιμη κρυπτογράφηση δίνει σε κάποιον χρήστη που έχει ιδιωτικά κρυπτογραφημένα δεδομένα τη δυνατότητα είτε να αρνηθεί με πειστικό τρόπο την ύπαρξή τους είτε αλλιώς να δείξει ότι υπάρχουν περισσότερες από μια ερμηνείες των κρυπτογραφημένων δεδομένων.

Συνήθως το κρυπτοκείμενο c = E(m, k), όπου E ο αλγόριθμος κρυπτογράφησης και k το κλειδί κρυπτογράφησης, αποκρυπτογραφείται σε ένα μόνο καθαρό κείμενο m και επομένως αν αποκρυπτογραφηθεί, ο χρήστης της κρυπτογράφησης δεν μπορεί να ισχυριστεί ότι είχε κρυπτογραφήσει ένα διαφορετικό μήνυμα. Η διαψεύσιμη κρυπτογράφηση όμως επιτρέπει στους χρήστες της να αποκρυπτογραφήσουν *το ίδιο* κρυπτοκείμενο c παράγοντας ένα διαφορετικό (αθώο αλλά πιστευτό) καθαρό κείμενο m' με ένα διαφορετικό κλειδί k' και να επιμένουν ότι αυτό ήταν που είχαν κρυπτογραφήσει. Ο αντίπαλος που έχει στα χέρια του το κρυπτοκείμενο δεν έχει τα μέσα για να αντιληφθεί ότι το καθαρό κείμενο που του παρουσιάζεται είναι αναληθές ή ελλιπές και δεν μπορεί να φτάσει στο πραγματικό καθαρό κείμενο χωρίς τη συνεργασία του χρήστη.

Αυτό σημαίνει ότι αν ένας αντίπαλος αποκτήσει φυσική πρόσβαση στο σύστημα αρχείων, μπορεί ίσως να υποψιαστεί ότι περιέχει κρυπτογραφημένα δεδομένα, αλλά θα είναι αδύνατο να αποδείξει την ύπαρξή τους και ακριβώς πόσα είναι αυτά, χωρίς τη συνεργασία του χρήστη. Ο χρήστης έτσι έχει τη δυνατότητα να αποκρύπτει την ύπαρξη ενός τμήματος των ιδιωτικών δεδομένων, το οποίο αυτός θεωρεί το πιο σημαντικό, θυσιάζοντας ίσως ένα μέρος τους, που πιθανό να είναι λιγότερο ευαίσθητα ή παραπλανητικά δεδομένα.

Η διαψεύσιμη κρυπτογράφηση είναι σχεδιασμένη για να παρέχει κάποια άμυνα για την περίπτωση που ο αντίπαλος όχι μόνο έχει αποκτήσει πρόσβαση στα κρυπτογραφημένα δεδομένα, αλλά έχει και τη δυνατότητα να ασκεί κάποια πίεση στον αρχικό χρήστη για να τον αναγκάσει να αποκαλύψει τα κλειδιά της κρυπτογράφησης.

Το Rubberhose, η πρώτη εφαρμογή που αποθήκευε δεδομένα με διαψεύσιμη κρυπτογράφηση, δε δέσμευε τους χρήστες του στη χρήση ενός συγκεκριμένου συστήματος αρχείων, αλλά ήταν ένα στρώμα πάνω από το σύστημα αρχείων του λειτουργικού συστήματος (π.χ. UFS, ext2, FAT ή FAT32). Για την κρυπτογράφηση των δεδομένων ο χρήστης επιλέγει κάποιον ή κάποιους από τους αλγορίθμους DES, 3DES, IDEA, RC5, RC6, Blowfish, Twofish, CAST.

Μειονεκτήματα / αδυναμίες σε σύγκριση με την πλήρη κρυπτογράφηση δίσκου
-----------------------------------------------------------------------

Στις περιπτώσεις που περιγράφηκαν παραπάνω, συνηθίζεται να είναι κρυπτογραφημένο ένα διαμέρισμα του σκληρού δίσκου (π.χ. ο κατάλογος /home στα συστήματα Unix), ενώ κάποια άλλα διαμερίσματα δεν είναι. Ένας επιτιθέμενος αντίπαλος μπορεί να αντλήσει πληροφορίες για τα περιεχόμενα του κρυπτογραφημένου καταλόγου (π.χ. μια λίστα με τα ονόματα των αρχείων) αν διαβάσει ένα άλλο, μη κρυπτογραφημένο σύστημα αρχείων στον ίδιο υπολογιστή (όπως /var, /tmp, /swap). Ή μπορεί να διαβάσει τα μεταδεδομένα κάποιων συστημάτων αρχείων, που μερικές φορές αποθηκεύονται σε μορφή καθαρού κειμένου. Μία λύση είναι να κρυπτογραφούνται και τα υπόλοιπα διαμερίσματα του δίσκου, ή ακόμα και ολόκληρος ο δίσκος.

Σημειώνεται ότι παρόμοιο πρόβλημα υπάρχει και στο EFS της Microsoft, το οποίο δεν μπορεί να κρυπτογραφήσει τους καταλόγους συστήματος.

Παραπομπές
----------

* Disk encryption
* Encrypted File Systems
* Linux Journal. Encrypt Your Root Filesystem, 1 Δεκ 2004
* Encrypt filesystems with EncFS and Loop-AES, 20 Μαρ 2006
* Mac OS X 10.4 Help. "About FileVault"
* ZFS on disk encryption support
* Βέλτιστες πρακτικές για το Σύστημα κρυπτογράφησης αρχείων (Encrypting File System)
* Microsoft TechNet. "What is Encrypting Filesystem?" αντίγραφο της 14 Ιαν 2011
* Microsoft TechNet. "Protecting Data by Using EFS to Encrypt Hard Drives" αντίγραφο της 13 Ιαν 2011
* Truecrypt: αντίγραφο της 23 Ιαν 2011
* Bestcrypt: αντίγραφο της 23 Ιαν 2011
* "What is Rubberhose?" αντίγραφο της 13 Ιαν 2011
* Ran Canetti, Cynthia Dwork, Moni Naor, Rafail Ostrovsky. "Deniable Encryption"