Κρυπτογραφημένο container με cryptsetup
Κρυπτογραφημένο container με cryptsetup | |
---|---|
Εφαρμογή |
cryptsetup |
Στόχος |
Κρυπτογραφημένο container αρχείων |
Πλατφόρμες |
Linux |
Επίπεδο δυσκολίας |
μέτριο |
Χρόνος ολοκλήρωσης |
10-20 λεπτά |
Πολλές φορές χρειάζεται να τοποθετήσουμε ευαίσθητα δεδομένα σε δίσκο που δεν είναι κρυπτογραφημένος, έχει ήδη δεδομένα (για παράδειγμα το λειτουργικό σύστημα του υπολογιστή) και ταυτόχρονα δεν μπορούμε να δημιουργήσουμε νέο κρυπτογραφημένο partition (διαμέρισμα).
Στις περιπτώσεις αυτές, μπορούμε να δημιουργήσουμε ένα κρυπτογραφημένο container με cryptsetup (αντίστοιχο με τα κρυπτογραφημένα container του Truecrypt). Το cryptsetup είναι ένα εργαλείο που μας βοηθά να χρησιμοποιήσουμε το dm-crypt, το module κρυπτογράφησης του πυρήνα του Linux.
Περιεχόμενα
- 1 Λογική των κρυπτογραφημένων container
- 2 Εγκατάσταση του cryptsetup
- 3 Δημιουργία του αρχείου - κρυπτογραφημένου container
- 4 Προσάρτηση του αρχείου ως εικονική συσκευή στο σύστημα
- 5 Κρυπτογράφηση
- 6 Άνοιγμα του container, δημιουργία συστήματος αρχείων, mount
- 7 Κλείσιμο του container
- 8 Χρήση
- 9 Πιθανά προβλήματα
- 10 Διαβάστε ακόμα στο wiki
Λογική των κρυπτογραφημένων container[επεξεργασία]
Η λογική των κρυπτογραφημένων container είναι η εξής :
- Δημιουργούμε ένα συνηθισμένο αρχείο στον υπολογιστή μας, με μέγεθος όσο χρειαζόμαστε.
- Κρυπτογραφούμε το αρχείο αυτό με ένα passphrase
- Εισάγοντας το passphrase αποκρυπτογραφούμε το αρχείο
- Το κάνουμε mount (το προσαρτούμε) ως εικονικό δίσκο στον υπολογιστή μας
- Διαβάζουμε, γράφουμε, διαγράφουμε αρχεία στο εικονικό αυτό σύστημα αρχείων, που μοιάζει με δοχείο(container)
- Αν θέλουμε, μπορούμε να το "κλείσουμε". Στην περίπτωση αυτή, τα δεδομένα μέσα στο container είναι κρυπτογραφημένα. Προστατεύονται από το passphrase που είχαμε εισάγει αρχικά.
- Μπορούμε να μετακινήσουμε, αντιγράψουμε, διαγράψουμε το αρχικό μας αρχείο-container, όπως ένα οποιοδήποτε αρχείο.
Εγκατάσταση του cryptsetup[επεξεργασία]
Το cryptsetup βρίσκεται στα repositories των περισσότερων διανομών. Για διανομές Debian, Ubuntu ή Mint σε ένα terminal δίνουμε :
sudo apt-get update && sudo apt-get install cryptsetup
Εναλλακτικά μπορούμε να το εγκαταστήσουμε από το Package Manager ή το Synaptic.
Δημιουργία του αρχείου - κρυπτογραφημένου container[επεξεργασία]
Δημιουργούμε στον δίσκο ένα αρχείο το οποίο στη συνέχεια θα χρησιμοποιήσουμε ως κρυπτογραφημένο container. Χρησιμοποιούμε ως είσοδο την ψευδοτυχαία γεννήτρια του Linux, ώστε η κρυπτογράφηση που θα ακολουθήσει να είναι ομοιόμορφη. Στο στάδιο αυτό πρέπει να εκτιμήσουμε το μέγεθος που θα χρειαστούμε από το container αυτό, καθώς στη συνέχεια δε θα μπορούμε να το τροποποιήσουμε.
dd if=/dev/urandom of=/home/user/container bs=1M count=10
Προσέξτε τους τελεστές της εντολής dd. Το if ορίζει την πηγή των δεδομένων και το of την έξοδο. Εν προκειμένω γράφουμε ψευδοτυχαία δεδομένα σε ένα καινούριο αρχείο που ονομάσαμε container και βρίσκεται στον φάκελο /home/user. Οι τελεστές bs και count ορίζουν το block size (μέγεθος μπλοκ) και αριθμό επαναλήψεων, αντίστοιχα. Εν προκειμένω, το dd θα δημιουργήσει ένα αρχείο μεγέθους 1Mx10 = 10MB. Για να κατασκευάσουμε ένα μεγαλύτερο container, πειράζουμε αντίστοιχα τους τελεστές. Για παράδειγμα για να φτιάξουμε ένα container 10GB δίνουμε :
dd if=/dev/urandom of=/home/user/container bs=1M count=10240
Προσάρτηση του αρχείου ως εικονική συσκευή στο σύστημα[επεξεργασία]
Χρησιμοποιούμε τώρα το losetup, το οποίο είναι ένα εργαλείο που μας επιτρέπει να προσαρτούμε κανονικά αρχεία ως εικονικές συσκευές ή δίσκους στο σύστημά μας.
losetup /dev/loop0 /home/user/container
Πλέον το αρχείο μας είναι διαθέσιμο ως device (συσκευή) στο /dev/loop0. Θα χρησιμοποιήσουμε αυτή τη ψευδοσυσκευή στη συνέχεια για να κρυπτογραφήσουμε.
Αν λάβουμε κάτι τέτοιο
losetup: /dev/loop0: device is busy
σημαίνει ότι η συσκευή loop0 χρησιμοποιείται ήδη. Μπορούμε απλά να δώσουμε πάλι την εντολή χρησιμοποιώντας το επόμενο device, πχ loop1.
Κρυπτογράφηση[επεξεργασία]
Είναι πολύ σημαντικό να μην χρησιμοποιηθεί ο default αλγόριθμος του luksFormat που είναι ο aes-cbc. Ο συγκεκριμένος αλγόριθμος έχει συγκεκριμένες ευπάθειες και κάποιος μπορεί να τις εκμεταλλευτεί για να μπορέσει να αλλάξει συγκεκριμένα δεδομένα πάνω στο δίσκο! Περισσότερα μπορεί κανείς να διαβάσει στο http://www.jakoblell.com/blog/2013/12/22/practical-malleability-attack-against-cbc-encrypted-luks-partitions/. Ο προτεινόμενος αλγόριθμος αυτή τη στιγμή είναι ο aes-xts-plain64. |
Με το cryptsetup κρυπτογραφούμε το αρχείο-container, το οποίο λόγω του προηγούμενου βήματος είναι προσαρτημένο στην ψευδοσυσκευή.
cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/loop0
Άνοιγμα του container, δημιουργία συστήματος αρχείων, mount[επεξεργασία]
Ανοίγουμε αυτό που μόλις κρυπτογραφήσαμε :
cryptsetup luksOpen /dev/loop0 mycontainerfs
και δημιουργούμε ένα σύστημα αρχείων στο εικονικό αυτό device :
mkfs.ext4 /dev/mapper/mycontainerfs
Τέλος τo σύστημα αρχείων αυτό πρέπει να το κάνουμε mount σε ένα σημείο του συστήματος ώστε να το χρησιμοποιούμε κανονικά :
mkdir /mnt/mycontainer mount /dev/mapper/mycontainerfs /mnt/mycontainer
Κλείσιμο του container[επεξεργασία]
Αν θέλουμε να κλείσουμε το container για να προστατέψουμε τα περιεχόμενά του δίνουμε :
umount /mnt/mycontainer cryptsetup luksClose /dev/mapper/mycontainerfs losetup -d /dev/loop0
Χρήση[επεξεργασία]
Όταν θέλουμε να χρησιμοποιήσουμε το container με τα αρχεία ακολουθούμε παραπλήσια διαδρομή όπως παραπάνω :
losetup /dev/loop0 /home/user/container cryptsetup luksOpen /dev/loop0 mycontainerfs mount /dev/mapper/mycontainerfs /mnt/mycontainer
Πλέον μπορούμε να χρησιμοποιούμε τον φάκελο /mnt/mycontainer όπως ένα συνηθισμένο φάκελο στο σύστημά μας. Οτιδήποτε μεταφέρουμε εκεί μέσα θα είναι μέρος του κρυπτογραφημένου container.
Για ευκολία μπορούμε να δημιουργήσουμε 2 scripts τα οποία θα περιέχουν τις παραπάνω εντολές, και θα μας διευκολύνουν στο άνοιγμα και κλείσιμο του κρυπτογραφημένου container.
Για την δημιουργία του script που θα ανοίγει το container εργαζόμαστε ως εξής: Δημιουργούμε ένα text αρχειο που το ονομάζουμε πχ my_open . Ύστερα γράφουμε μέσα του:
#!/bin/bash losetup /dev/loop0 /home/user/container cryptsetup luksOpen /dev/loop0 mycontainerfs mount /dev/mapper/mycontainerfs /mnt/mycontainer echo "συσκευή έτοιμη για χρήση"
Το αποθηκεύουμε στο home και ύστερα το μόνο που έχουμε να κάνουμε, είναι να δώσουμε στο terminal ως super user, το
./my_open
Αρχικά θα μας ζητήσει να πληκτρολογήσουμε το password και μετά θα μας πετάξει το μήνυμα που επιλέξαμε, πράγμα που σημαίνει ότι όλα έχουν πάει καλά.
Αντίστοιχα για το script που κλείνει το container δημιουργούμε ένα αρχείο text με όνομα πχ. my_close που περιέχει τα ακόλουθα, και το αποθηκεύουμε στο home μαζί με το προηγούμενο script που φτιάξαμε,
#!/bin/bash umount /mnt/mycontainer cryptsetup luksClose /dev/mapper/mycontainerfs losetup -d /dev/loop0 echo "η συσκευή κλειδώθηκε"
Κατά αντίστοιχο τρόπο για να το χρησιμοποιήσουμε δίνουμε στο terminal με δικαιώματα super user το
./my_close
ΠΡΟΣΟΧΗ : Το κρυπτογραφημένο container προστατεύει τα αρχεία μόνο όσο είναι κλειστό! Δηλαδή όταν δεν είναι προσαρτημένο ως φάκελος στο σύστημά μας. |
Πιθανά προβλήματα[επεξεργασία]
Αδυναμία δημιουργίας / εγγραφής αρχείων στο container[επεξεργασία]
Σε περίπτωση που δεν είναι δυνατό να δημιουργήσουμε νέα αρχεία στο container μας ή γενικά να γράψουμε σε αυτό, τότε δεν έχουν ρυθμιστεί σωστά δικαιώματα(file permissions) για τον αντίστοιχο φάκελο. Για να το διορθώσουμε κάνουμε το εξής:
sudo su chown -R user /mnt/mycontainer
όπου user το όνομα του χρήστη σας. Η εντολή chown θέτει ως ιδιοκτήτη του συγκεκριμένου φακέλου τον χρήστη σας, ούτως ώστε να μπορείτε να γράψετε σε αυτόν.