Progetto

Generale

Profilo

EncryptedFilesystemUsingLUKS » Cronologia » Versione 11

Simone Piccardi, 16-12-2011 14:48

1 8 Amministratore Truelite
h1. Come creare un filesystem cifrato usando LUKS
2 1 Amministratore Truelite
3 8 Amministratore Truelite
"LUKS":http://luks.endorphin.org/ è un acronimo di "Linux Unified Key Setup" e si propone come lo standard per la crittografia dei dischi in sistemi linux (e non solo), offrendo un formato standard "on-disc", la possibilità di avere più di una coppia chiave-passphrase per l'accesso ed una gestione sicura di tutte le chiavi.
4 1 Amministratore Truelite
5 10 Simone Piccardi
Un disco criptato con LUKS, nel caso lo si sia formattato con una filesystem compatibile (es. vfat) è accessibile anche dai sistemi Windows, usando "FreeOTFE":http://www.freeotfe.org/. Per utilizzarlo è necessarua una versione del programma @cryptsetup@, che si usa anche per la cifratura diretta con ''dm-crypt'', che lo supporti, che si trova praticamente su tutte le distribuzioni correnti, se ne può comunque verificare la presenza con il comando @cryptsetup --help@ controllando in coda la presenza delle opzioni relative a LUKS. Nel caso in cui il comando non fosse presente, è sufficente installarlo con:
6 9 Simone Piccardi
7 1 Amministratore Truelite
<pre>
8 10 Simone Piccardi
apt-get install cryptsetup
9 9 Simone Piccardi
</pre>
10 8 Amministratore Truelite
11 10 Simone Piccardi
A questo punto è possibile iniziare il lavoro di preparazione del dispositivo, nel nostro esempio prenderemo il caso una chiavetta USB rilevata dal sistema come @/dev/sda@.
12 8 Amministratore Truelite
13 10 Simone Piccardi
La prima cosa da fare è verificare l'affidabilità del dispositivo ed, al tempo stesso, riempire tutto lo spazio disponibile con dei dati casuali rendendo di fatto molto più difficoltosi eventuali tentativi di attacco e compromissione del filesystem cifrato che verrà creato in seguito.
14 1 Amministratore Truelite
Prima di iniziare, va tenuto presente il fatto che a seconda della dimensione del disco, questo processo può richiedere molte ore, quindi se dovete lanciarlo su di un disco molto grande, vi conviene farlo prima di andare a dormire.
15
16
<pre>
17 8 Amministratore Truelite
badblocks -c 10240 -s -w -t random -v /dev/sda
18 2 Amministratore Truelite
</pre>
19 8 Amministratore Truelite
20 10 Simone Piccardi
Se siete particolarmente paranoici potete utilizzare @/dev/urandom@ come sorgente di dati casuali e riempirci il disco. La casualità dei dati sarà migliore rispetto a quella del metodo precedente, ma l'operazione farà un uso intensivo della CPU e richiederà ancora più tempo. Il comando da eseguire è: 
21 9 Simone Piccardi
22
Il comando da eseguire è:
23 1 Amministratore Truelite
<pre>
24 8 Amministratore Truelite
dd if=/dev/urandom of=/dev/sda
25 9 Simone Piccardi
</pre>
26 8 Amministratore Truelite
27 10 Simone Piccardi
Successivamente va partizionato il disco. In questo caso l'obiettivo è di creare un'unica partizione che occupi tutto lo spazio disponibile e per farlo ci sono diverse alternative, sia da linea di comando come @fdisk@ o @cfdisk@ che grafiche come @gparted@ e @qtparted@. Si supponga comunque di aver creata una sola partizione, riconosciuta dal sistema come @/dev/sda1@. 
28 1 Amministratore Truelite
29 10 Simone Piccardi
A questo punto è possibile cifrare la partizione con LUKS e poi "agganciarla" al _device-mapper_, in modo che ''dm-crypt'' possa presentarla in maniera "trasparente" al sistema. E' molto importante la scelta di una passphrase abbastanza lunga e complessa poiché l'utilizzo di una frase corta e/o facilmente indovinabile vanificherebbe l'utilizzo della crittografia.
30 9 Simone Piccardi
31 1 Amministratore Truelite
I comandi da eseguire sono quindi:
32 9 Simone Piccardi
33 8 Amministratore Truelite
<pre>
34 1 Amministratore Truelite
cryptsetup --verbose --verify-passphrase luksFormat /dev/sda1
35 4 Amministratore Truelite
cryptsetup luksOpen /dev/sda1 sda1
36 1 Amministratore Truelite
</pre>
37
38 9 Simone Piccardi
Se tutto è andato a buon fine, l'esecuzione del comando @ls -l /dev/mapper/@ dovrebbe restituire il seguente output, confermando l'avvenuto "aggancio" della partizione criptata al device mapper: 
39
40 1 Amministratore Truelite
<pre>
41
total 0
42 4 Amministratore Truelite
crw------- 1 root root 10, 63 Jul 16 01:34 control
43
brw-r----- 1 root root 253, 0 Jul 16 01:52 sda1
44
</pre>
45 1 Amministratore Truelite
46
Va quindi creato un filesystem sulla partizione criptata:
47 9 Simone Piccardi
48 5 Amministratore Truelite
<pre>
49 8 Amministratore Truelite
mkfs.ext3 -j -m 1 /dev/mapper/sda1
50 5 Amministratore Truelite
</pre>
51 1 Amministratore Truelite
52 9 Simone Piccardi
e sarà possibile montarlo con:
53
54 5 Amministratore Truelite
<pre>
55 8 Amministratore Truelite
mount /dev/mapper/sda1 /mnt
56 1 Amministratore Truelite
</pre>
57
58
mentre i comandi per smontare filesystem e partizione criptata sono:
59
60
<pre>
61
umount /mnt
62
cryptsetup luksClose /dev/mapper/sda1
63
</pre>
64
65
Le distribuzioni sufficentemente moderne usano ??hal??, ??d-bus?? e ??gnome-volume-manager?? (o l'equivalente per KDE) per la gestione dei volumi disponibili nel sistema: quando viene collegata al sistema la chiavetta USB contenente la partizione crittografata con LUKS, questa viene riconosciuta e compare una finestra che chiede di inserire la passphrase.
66
Se la passphrase inserita è corretta, la partizione viene montata e sarà possibile utilizzarla normalmente da tutte le applicazioni.
67 10 Simone Piccardi
68
Una delle funzionalità più interessanti di LUKS, che lo rende preferibile rispetto all'uso diretto di ''dm-crypt'' come illustrato in UsbKeyInstallation è che il sistema consente l'uso di più password (fino ad un massimo di 8) che possono essere aggiunte o rimosse (posto che almeno una resti presente per poter accedere al dispositivo). Il caso più comune è quello in cui si vuole aggiungere una nuova password o cambiare quella esistente, che si realizza  comunque per con una aggiunta seguita da una rimozione.
69
70
Il comando che consente di aggiungere una passphrase è il seguente:
71
72
<pre>
73
cryptsetup luksAddKey /dev/sda1
74
</pre>
75
76
verrà chiesta una delle passphrase presenti (all'inizio ce ne è una sola, quella impostata in fase di creazione, cui viene sempre assegnato l'indice 0) per sbloccare l'accesso e poi l'immissione due volte della nuova passwphrase. La passphrase sarà inserita nel primo degli slot disponibili (nel caso dell'esempio, se aggiunta dopo la creazione, questo sarà quello con indice 1) e potrà essere utilizzata in maniera equivalente a tutte quelle presenti. Se lo scopo non era quello di aggiungere una passhprase, ma quello di cambiare la precedente, si potrà a questo punto passare alla rimozione di quella non voluta, cancellando il relativo slot.
77
78
Per individuare lo slot si può usare il comando @cryptsetup luksDump@, ottenendo un risultato del tipo:
79
<pre>
80
cryptsetup luksDump /dev/sda1
81
LUKS header information for /dev/sda1
82
83
...
84
85
Key Slot 0: ENABLED
86
        Iterations:             182965
87
        Salt:                   50 6d 67 70 63 33 19 c6 41 e7 c1 55 b6 02 49 89 
88
                                54 79 7b 56 4e b6 78 92 c8 f8 66 e8 bb e6 a8 f1 
89
        Key material offset:    8
90
        AF stripes:             4000
91
Key Slot 1: ENABLED
92
        Iterations:             144406
93
        Salt:                   56 35 b1 33 8d c9 0e b8 ba 10 a0 1c 4f 16 2b 8c 
94
                                d3 ec fe c8 5f 7f 23 74 79 ab 5d 96 ec 4c 4c 4a 
95
        Key material offset:    264
96
        AF stripes:             4000
97
Key Slot 2: DISABLED
98
Key Slot 3: DISABLED
99
Key Slot 4: DISABLED
100
Key Slot 5: DISABLED
101
Key Slot 6: DISABLED
102
Key Slot 7: DISABLED
103
</pre>
104
105 11 Simone Piccardi
e a questo punto la rimozione della passhprase indesiderata (nello specifico quella dello slot 0) sarà effettuata con:
106 10 Simone Piccardi
<pre>
107
cryptsetup luksKillSlot /dev/sda1 0
108
</pre>