Notice icon attention yellow.png Τα περιεχόμενα του ιστότοπου δεν ανανεώνονται από το καλοκαίρι του 2015. Τα άρθρα πιθανόν να έχουν ελλείψεις ή ανακρίβειες. Συμβουλευτείτε και μια δεύτερη πηγή γνώσης πριν εφαρμόσετε πρακτικές οδηγίες.

Κρυπτογραφημένο container με cryptsetup

Από Skytales
Μετάβαση σε: πλοήγηση, αναζήτηση
Notice icon rfc purple.png Ζητούνται σχόλια και παρατηρήσεις.

Το άρθρο αυτό έχει προσφάτως πάρει μία ολοκληρωμένη μορφή.

Ζητούνται σχόλια και παρατηρήσεις σχετικά με την ορθότητα και πληρότητα των περιεχομένων, την ορθογραφία, τη σύνταξη, τον τρόπο γραφής και την ευκολία κατανόησης του άρθρου.

Αφήστε τα σχόλια σας στη σελίδα συζήτησης αυτού του άρθρου.

Κρυπτογραφημένο container με cryptsetup

Encrypted container.png

Εφαρμογή

cryptsetup

Στόχος

Κρυπτογραφημένο container αρχείων

Πλατφόρμες

Linux

Επίπεδο δυσκολίας

μέτριο

Χρόνος ολοκλήρωσης

10-20 λεπτά

Πολλές φορές χρειάζεται να τοποθετήσουμε ευαίσθητα δεδομένα σε δίσκο που δεν είναι κρυπτογραφημένος, έχει ήδη δεδομένα (για παράδειγμα το λειτουργικό σύστημα του υπολογιστή) και ταυτόχρονα δεν μπορούμε να δημιουργήσουμε νέο κρυπτογραφημένο partition (διαμέρισμα).

Στις περιπτώσεις αυτές, μπορούμε να δημιουργήσουμε ένα κρυπτογραφημένο container με cryptsetup (αντίστοιχο με τα κρυπτογραφημένα container του Truecrypt). Το cryptsetup είναι ένα εργαλείο που μας βοηθά να χρησιμοποιήσουμε το dm-crypt, το module κρυπτογράφησης του πυρήνα του Linux.

Λογική των κρυπτογραφημένων 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.

Κρυπτογράφηση[επεξεργασία]

Notice icon attention red.png Είναι πολύ σημαντικό να μην χρησιμοποιηθεί ο 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
Notice icon attention red.png ΠΡΟΣΟΧΗ : Το κρυπτογραφημένο container προστατεύει τα αρχεία μόνο όσο είναι κλειστό! Δηλαδή όταν δεν είναι προσαρτημένο ως φάκελος στο σύστημά μας.

Πιθανά προβλήματα[επεξεργασία]

Αδυναμία δημιουργίας / εγγραφής αρχείων στο container[επεξεργασία]

Σε περίπτωση που δεν είναι δυνατό να δημιουργήσουμε νέα αρχεία στο container μας ή γενικά να γράψουμε σε αυτό, τότε δεν έχουν ρυθμιστεί σωστά δικαιώματα(file permissions) για τον αντίστοιχο φάκελο. Για να το διορθώσουμε κάνουμε το εξής:

 sudo su
 chown -R user /mnt/mycontainer

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

Διαβάστε ακόμα στο wiki[επεξεργασία]