In questo articolo parliamo di un concetto crittografico interessante: la escrow key.
Scenario tipico di utilizzo: computer aziendale con hard disk cifrato, il dipendente imposta la propria chiave per decifrare il disco e montarlo. Puó succedere che il dipendente per diecimila ragioni sia impossibilitato a sbloccare l’hard disk ma servono dei dati importati contenuti li dentro.
In questo caso ci viene in aiuto la tecnica di Key Escrow: una seconda password “aziendale” che funziona esattamente come la prima, l’unica differenza é che a saperla é solo il responsabile della sicurezza che avrá cura di conservarla in un luogo assolutamente protetto.
Aspetti tecnici
Quando cifriamo un hard disk, un file, il nostro smartphone solitamente ci viene chiesta una password. Erroneamente si pensa che quella password sia la chiave con cui viene cifrato tutto il disco. Pensiamoci bene, sarebbe una follia! Nel momento in cui volessimo cambiare la password dovremmo dacifrare e ricifrare tutto con tempi di elaborazione spaventosi.
In realtá quando inizializiamo un disco cifrato viene generata una chiave randomica ($$ k_1 $$) e il disco viene cifrato con quella. Poi cifriamo a sua volta la chiave $$k_1$$ con la nostra passphrase ($$p_1$$) generando $$ k_c_1 $$ e salviamo la chiave $$k_c_1$$ all’inizio dell’hard disk. Quando inseriamo $$ p_1 $$ per “sbloccare” l’hard disk viene letto $$k_c_1$$, decifrata e caricata in memoria $$k_1$$ pronta per essere utilizzata per cifrare/decifrare i dati sull’hard disk.
In pratica:
$$k_c_1 = E(k_1, p_1)$$
$$k_1 = D(k_c_1, p_1)$$
Con $$E( )$$ e $$D( )$$ due algoritmi rispettivamente di cifratura e decifratura.
Aggiungere la seconda chiave é quindi molto semplice, basta salvare nell’hard disk la chiave cifrata $k_c_e$ generata in questo modo:
$$k_c_e = E(k_1, p_e)$$
In cui $p_e$ é la chave aziendale.
Nel momento in cui andiamo inserire una o l’altra password il sistema tenterá di decifrare le due chiavi $$k_c_1$$ e $$k_c_e$$ con la password inserita dall’utente.
Mano alla tastiera!
Okkey, dopo la parte “seriosa” grabbate una chiavetta usb e iniziamo a giocare un po’ con luks!
Assumo che giá abbiate un’infarinatura di come funziona LUKS, nel caso provvederemo a fare un altro articolo di base 😉 .
# dd if=/dev/zero of=/dev/sdb bs=4M ^C 4314+0 records in 4314+0 records out 18094227456 bytes (18 GB) copied, 1326.32 s, 13.6 MB/s
Ok, dopo un po’ ho barato e ho interrotto il dd. 😉
pwgen é un comando carino che genera password casuali. Ne genero una per l’utente.
# pwgen 10 1 Hohl6eevei
E ora creo il disco cifrato e lo apro con la password utente
# cryptsetup luksFormat /dev/sdb WARNING! ======== This will overwrite data on /dev/sdb irrevocably. Are you sure? (Type uppercase yes): YES Enter passphrase: Hohl6eevei Verify passphrase: Hohl6eevei # cryptsetup luksOpen /dev/sdb luks-escrow Enter passphrase for /dev/sdb: # mkfs -t ext4 /dev/mapper/luks-escrow mke2fs 1.42.8 (20-Jun-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 1957888 inodes, 7831040 blocks 391552 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=4294967296 239 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done # mkdir luks-escrow # mount /dev/mapper/luks-escrow luks-escrow/ # date > luks-escrow/important-data.txt # umount luks-escrow/ # cryptsetup luksClose luks-escrow
In questo stato abbiamo un disco cifrato con una password utente e un file al suo interno.
Sono cambiate le policy aziendali ed ogni disco cifrato deve avere una escrow key generata randomicamente dal responsabile della sicurezza IT. Iniziamo a generare le password
# cat utenti.txt | while read user; do echo $user `pwgen 10 1 ` ; done user1 phaibuxaif user2 ieghoongah user3 emahshiele user4 uoyeineeng
L’output generato andrebbe stampato e messo al sicuro, ma prima andiamo sulla prima macchina ad aggiungere la password.
# cryptsetup luksAddKey /dev/sdb Enter any existing passphrase: Hohl6eevei Enter new passphrase for key slot: phaibuxaif Verify passphrase: phaibuxaif
Che cosa ha fatto luks? Ha richiesto una password valida, decifrato e caricato in memoria la chiave di cifratura, ri-cifrato la chiave con la nuova password, salvata su disco e cancellato tutto dalla memoria.
Verifichiamo di poter leggere il file segreto e importante all’interno del disco con la nostra key escrow:
# cryptsetup luksOpen /dev/sdb luks-escrow Enter passphrase for /dev/sdb: phaibuxaif # mount /dev/mapper/luks-escrow luks-escrow/ # ls -l luks-escrow/ total 20 -rw-r--r-- 1 root root 29 Nov 21 15:15 important-data.txt drwx------ 2 root root 16384 Nov 21 15:12 lost+found # cat luks-escrow/important-data.txt Fri Nov 21 15:15:33 CET 2014
Non solo key escrow
Possiamo sfruttare le password multiple non solo come key escrow aziendale ma anche per utilizzare una risorsa cifrata tra piú persone senza necessariamente condividere la stessa password, unica limitazione sono gli 8 slot per le chiavi cifrate.
Buona cifratura! 🙂
Lascia un commento