[glux] Chiave USB criptata
Andrea
aerdan@inventati.org
Mer 15 Feb 2006 01:01:01 CET
CHIAVI USB CRIPTATE
-------------------------------------------------------------------------------
Mi documento su come creare una chiave USB criptata e trovo:
http://www.fizban.net/static/articolios/html/secureFS.html
che fa decisamente al caso mio anche se in reatà creo un file all'interno del
filesystem e non un filesystem criptato.
Mi assicuro che non sia montata e formatto la chiavetta con:
# fdisk /dev/sda
Cancello la partizione esistente e ne creo una nuova, ora formatto la partizione
in ext2 con:
# mke2fs /dev/sda1
mke2fs 1.37 (21-Mar-2005)
Etichetta del filesystem=
Tipo SO: Linux
Dimensione blocco=4096 (log=2)
Dimensione frammento=4096 (log=2)
125952 inode, 251644 blocchi
12582 blocchi (5.00%) riservati per l'utente root
Primo blocco dati=0
8 gruppi di blocchi
32768 blocchi per gruppo, 32768 frammenti per gruppo
15744 inode per gruppo
Backup del superblocco salvati nei blocchi:
32768, 98304, 163840, 229376
Scrittura delle tavole degli inode: fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del
filesystem:
fatto
Questo filesystem verrà automaticamente controllato ogni 21 mount, o
180 giorni, a seconda di quale venga prima. Usare tune2fs -c o -i per cambiare.
Ricompilo il kernel con il supporto per:
-Loopback device support - CONFIG_BLK_DEV_LOOP - loop
-Cryptoloop Support - CONFIG_BLK_DEV_CRYPTOLOOP - cryptoloop
-Device mapper support - CONFIG_BLK_DEV_DM - dm-mod
-Crypt target support - CONFIG_DM_CRYPT - dm-crypt
Utilizzo l'algoritmo Rijndael perchè offre maggior livello di sicurezza e
prestazioni. Questo algoritmo permette di criptare con chiavi di 128, 192, 256
bits.
-AES cipher algorithms (i586) - CONFIG_CRYPTO_AES_586 - aes-i586
Questi altri algoritmi sono comunque validi e per evenienza li inserisco anche
loro, non si sa mai ;)
-Blowfish cipher algorithm - CONFIG_CRYPTO_BLOWFISH - blowfish
-Twofish cipher algorithm - CONFIG_CRYPTO_TWOFISH - twofish
-DES and Triple DES EDE cipher algorithms - CONFIG_CRYPTO_DES - des
Controllo la versione di losetup che servirà per montare il dispositivo
criptato. La man page non è utile in quanto non riporta se la versione permette
l'utilizzo di algoritmi arbitrari provo con:
# losetup --help
usage:
losetup loop_device # give info
losetup -d loop_device # delete
losetup -f # find unused
losetup [ options ] {-f|loop_device} file # setup
where options include
--offset <num>, -o <num>
start at offset <num> into file.
--pass-fd <num>, -p <num>
read passphrase from file descriptor <num>
instead of the terminal.
--encryption <cipher>, -e <cipher>
encrypt with <cipher>.
Check /proc/crypto or /proc/crypto/cipher for available ciphers.
--nohashpass, -N
Don't hash the password given. (previous versions hash, non-debian
doesn't.
--keybits <num>, -k <num>
specify number of bits in the hashed key given
to the cipher. Some ciphers support several key
sizes and might be more efficient with a smaller
key size. Key sizes < 128 are generally not
recommended
Pare che l'opzione --encryption permetta di scegliere tra diversi algoritmi
gestiti dal kernel. Inoltre:
$ dpkg -l linux-util
ii util-linux 2.12p-4sarge1 Miscellaneous system utilities
percui sembra essere già patchato.
Installo il kernel e riavvio la macchina.
Carico i moduli:
Module Size Used by
dm_crypt 10632 0
dm_mod 55932 1 dm_crypt
cryptoloop 3840 0
loop 15880 1 cryptoloop
aes_i586 39028 0
Ora il cat di /proc/crypto include aes-i586
# cat /proc/crypto
name : aes
module : aes_i586
type : cipher
blocksize : 16
min keysize : 16
max keysize : 32
Creo un file che verrà criptato nella mia home dir di dimensioni a seconda
della chiavetta, la mia è da 918,3MB quindi creo un file da 900MB con:
$ dd if=/dev/urandom of=~/crypto bs=1024k count=900
Verifico l'esistenza del file di dispositivo loop0:
$ ls -l /dev/loop0
brw-rw---- 1 root disk 7, 0 2006-02-13 13:12 /dev/loop0
ora associo il file crypto al crypto loop device ed eseguo l'operazione da root
in quanto la mia utenza non ha permessi sufficienti per losetup:
# losetup --keybits 256 -e aes-i586-256 /dev/loop0 ./crypto
Password:
ioctl: LOOP_SET_STATUS: Invalid argument
Ricevo lo stesso errore provando con blowfish-128 mentre con solo blowfish tutto
funziona quindi:
# losetup --keybits 128 -e blowfish /dev/loop0 ./crypto
Adesso posso creare un file system vero e proprio e montarlo in una directory:
# mke2fs /dev/loop0
mke2fs 1.37 (21-Mar-2005)
Etichetta del filesystem=
Tipo SO: Linux
Dimensione blocco=4096 (log=2)
Dimensione frammento=4096 (log=2)
115200 inode, 230400 blocchi
11520 blocchi (5.00%) riservati per l'utente root
Primo blocco dati=0
8 gruppi di blocchi
32768 blocchi per gruppo, 32768 frammenti per gruppo
14400 inode per gruppo
Backup del superblocco salvati nei blocchi:
32768, 98304, 163840, 229376
Scrittura delle tavole degli inode: fatto
Scrittura delle informazioni dei superblocchi e dell'accounting del
filesystem: fatto
Questo filesystem verrà automaticamente controllato ogni 33 mount, o
180 giorni, a seconda di quale venga prima. Usare tune2fs -c o -i
per
cambiare.
# mkdir /mnt/crypto
# mount -t ext2 /dev/loop0 /mnt/crypto
# mount
[...]
/dev/loop0 on /mnt/crypto type ext2 (rw)
Affinché il mio utente possa utilizzare il filesystem devo
impostare i permessi:
# chown andrea:andrea /mnt/crypto/
Ora smonto il file system e rilascio il dispositivo di loop:
# umount /mnt/crypto
# losetup -d /dev/loop0
Copio il file crypto sulla chiave USB che viene montata da udev in
/media/usbdisk
$ cp crypto /media/usbdisk
Dunque, la creazione del disco è terminata, per poterlo utilizzare occorre:
montare associare montare il
la chiave --> il file-system --> loop device --> lavoro -->
USB su una criptato a un su una
directory loop device directory
smontare il rilasciare smontare
--> loop device --> il loop --> chiave USB
dalla device dalla
directory directory
quindi:
# mount -t ext2 /dev/sda /media/usbdisk
# losetup --keybits 128 -e blowfish /dev/loop0 /media/usbdisk/crypto
# mount -t ext2 /dev/loop0 /mnt/crypto/
# mount
[...]
/dev/sda1 on /media/usbdisk type ext2 (rw)
/dev/loop0 on /mnt/crypto type ext2 (rw)
Per smontare tutto:
# umount /mnt/crypto/
# losetup -d /dev/loop0
# umount /media/usbdisk/
# mount -t ext2 /dev/loop0 /mnt/crypto/
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
# tail /var/log/syslog
[...]
Feb 14 22:38:02 localhost kernel: VFS: Can't find ext2 filesystem on dev
loop0.
Non viene riconosciuto il filesystem quindi è possibile riprovare con losetup e
la password giusta.
Conclusioni... funziona ma è un po' laborioso
--
ð Gli uomini sono fratelli fra loro. Cessano di esserlo quando
¶ la terra viene divisa da steccati e confini.
ñ
² Heinmot-Tayala-Ket, Nez Percé
€
¯ KeyID: 5AF81406 2005-01-03 [scadenza: 2015-01-01]
3 KeyFpr: A4E2 7C7C CFC7 1B1E E405 6443 9E07 AF95 5AF8 1406
Maggiori informazioni sulla lista
glux