Volumi criptati LUKS - Creazione e uso con cryptmount: differenze tra le versioni

verificata, spostata sezione sui moduli a fine guida come approfondimento, rimosse opzioni non di default relative alla sicurezza
(esteso paragrafo relativo a cryptmount)
(verificata, spostata sezione sui moduli a fine guida come approfondimento, rimosse opzioni non di default relative alla sicurezza)
Riga 1: Riga 1:
{{Versioni compatibili|Lenny|Squeeze|Wheezy|Jessie}}
{{Versioni compatibili|Wheezy|Jessie|Stretch|Buster}}


== Introduzione ==
== Introduzione ==
Generalmente si tende a pensare che un accesso indesiderato ai nostri dati possa avvenire da un'intrusione da rete. Certamente questo è lo scenario tipico, ma non bisognerebbe scordare che il più delle volte per accedere a un dato contenuto su un certo supporto, basta avere accesso "fisico" al supporto stesso.<br/>
Generalmente si tende a pensare che un accesso indesiderato ai nostri dati possa avvenire da un'intrusione da rete. Certamente questo è lo scenario tipico, ma non bisognerebbe scordare che il più delle volte per accedere a un dato contenuto su un certo supporto, basta avere accesso "fisico" al supporto stesso.<br/>
Questo è molto più importante oggi giorno di quanto non fosse fino a pochi anni fa a causa della diffusione di sistemi di memorizzazione di massa portabili, estremamente comodi e che ci stiamo abituando ad avere sempre con noi, nello zaino, in una tasca o marsupio.<br/>
Questo è molto più importante oggi giorno di quanto non fosse fino a pochi anni fa a causa della diffusione di sistemi di memorizzazione di massa portabili, estremamente comodi e che ci stiamo abituando ad avere sempre con noi, nello zaino, in una tasca o marsupio.<br/>
Altro scenario interessante è quello nel quale i dati in questione sono contenuti in un computer acceso e connesso alla rete, ma sono dati che ci interessa avere a disposizione esclusiva del nostro utente, e quindi se un'intrusione ci deve proprio essere è utile rendere all'intruso la vita molto dura nell'ottenimento di quei dati sensibili.<br/>
Altro scenario interessante è quello nel quale i dati in questione sono contenuti in un computer acceso e connesso alla rete, ma sono dati che ci interessa avere a disposizione esclusiva del nostro utente, e quindi se un'intrusione ci deve proprio essere è utile rendere all'intruso la vita molto dura nell'ottenimento di quei dati sensibili.
In questa guida sono contenuti i passi necessari per cifrare una partizione o una periferica (rimovibile o meno) o creare un file che useremo come loop device cifrata (con il vantaggio di essere estremamente trasportabile e archiviabile). Questo sarà mostrato nello scenario più semplice, quello con accesso ai file da parte di un singolo utente. La tecnologia usata però è quella nota col nome di [http://code.google.com/p/cryptsetup/ LUKS] (Linux Unified Keys Setup) che consente l'utilizzo della crittografia in scenari molto più articolati, con una base di compatibilità che andrà sempre crescendo in tutto il mondo Linux (questo è uno degli obiettivi del progetto). È bene fare le cose fin da subito compatibili con uno standard che sarà sempre più importante oltre che ricco di potenzialità, soprattutto riflettendo sull'accresciuta rilevanza data alla riservatezza dei propri dati digitali, anche dagli utenti semplici.
 
In questa guida sono contenuti i passi necessari per cifrare una partizione o una periferica (rimovibile o meno) o creare un file che useremo come loop device cifrata (con il vantaggio di essere estremamente trasportabile e archiviabile). Questo sarà mostrato nello scenario più semplice, quello con accesso ai file da parte di un singolo utente.<br/>
La tecnologia usata è quella nota col nome di [http://code.google.com/p/cryptsetup/ LUKS] (Linux Unified Keys Setup),, che consente l'utilizzo della crittografia in scenari molto più articolati, con una base di compatibilità che andrà sempre crescendo in tutto il mondo Linux (questo è uno degli obiettivi del progetto).<br/>
È bene fare le cose fin da subito compatibili con uno standard che sarà sempre più importante oltre che ricco di potenzialità, soprattutto riflettendo sull'accresciuta rilevanza data alla riservatezza dei propri dati digitali, anche dagli utenti semplici.


== Prerequisiti e preparazione del sistema ==
== Prerequisiti e preparazione del sistema ==
=== Kernel precompilato Debian ===
=== Moduli da caricare ===
{{Box|Hardware|A livello hardware la cifratura con algoritmo AES è molto leggera quindi può essere eseguita anche su macchine molto datate, o piccoli sistemi embedded.}}
Non c'è nulla da fare, è già tutto pronto. Se si volesse saperne di più, o se si sta utilizzando un [[kernel]] personalizzato, si raccomanda la lettura della [[#Moduli del kernel|sezione "Moduli del kernel"]] di questa guida.
La prima cosa da controllare prima di cimentarsi nella criptazione è l'abilitazione del kernel a usare l'algoritmo AES.<br/>
In un terminale eseguiamo:
<pre>$ cat /proc/crypto</pre>
e dovremmo ottenere (in base anche ai moduli caricati) qualcosa tipo:
<pre>
name        : aes
driver      : aes-asm
module      : aes_i586
priority    : 200
refcnt      : 1
selftest    : passed
type        : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32


name        : aes
=== Pacchetti necessari ===
driver      : aes-generic
Per ottenere <code>cryptmount</code> e <code>cryptsetup</code> servirà installare i relativi pacchetti con [[privilegi di amministrazione]]:
module      : aes_generic
priority    : 100
refcnt      : 1
selftest    : passed
type        : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
[...]
name        : md5
driver      : md5-generic
module      : kernel
priority    : 0
refcnt      : 1
selftest    : passed
type        : shash
blocksize    : 64
digestsize  : 16</pre>
Ovviamente a noi interessano le sezioni che iniziano con <code>'''name        : aes'''</code>. Se non dovessero comparire dobbiamo controllare che i moduli responsabili dell'<code>'''aes'''</code> siano caricati e ottenere un output simile a questo:
<pre>
<pre>
$ lsmod |grep aes
# apt install cryptmount cryptsetup
aes_i586              16608  0
aes_generic            37066  1 aes_i586
</pre>
</pre>
(o aes-x86_64 in caso di architettura per kernel amd64).<br/>
AES ci serve per la cifratura, ora dobbiamo pensare all'hash. Per l'hash serve l'algoritmo <code>sha256</code> (ovviamente potremmo voler usare lo <code>sha512</code>, per cui basterebbe cambiare il 256 in 512 in ogni occorrenza). È precompilato nel kernel Debian, ma non è detto che sia caricato (nel <code>/proc/crypto</code>, soprariportato, non è infatti presente) quindi carichiamolo:
<pre># modprobe sha256_generic</pre>
Nel file <code>/proc/crypto</code> si dovrebbero essere aggiunte le seguenti righe:
<pre>
name        : sha256
driver      : sha256-generic
module      : sha256_generic
priority    : 0
refcnt      : 3
selftest    : passed
type        : shash
blocksize    : 64
digestsize  : 32
name        : sha256
driver      : sha256-generic
module      : sha256_generic
priority    : 0
refcnt      : 1
type        : digest
blocksize    : 64
digestsize  : 32</pre>
Infine l'ultimo modulo da caricare nel kernel è <code>dm-crypt</code>, la cui assenza impedisce a cryptmount di completare le operazioni richieste.<pre># modprobe dm-crypt</pre>
====Nota: bisogna caricare i moduli?====
Questi moduli richiesti sono stati indicati per esteso per capire un po' meglio cosa usiamo e perché. '''Non è necessario caricare manualmente alcun modulo''', però, perché cryptmount dà istruzioni a chi di competenza per caricare tutti quelli necessario in modo trasparente all'utente.
=== Kernel personalizzato ===
Se non usiamo un kernel precompilato Debian, dobbiamo controllare che l'algoritmo di cifratura sia stato compilato: dal menu "'''Linux Kernel Configuration'''" seguiamo la voce "'''Cryptographic options  --->'''" e abilitiamo la voce:
<pre>AES cipher algorithms</pre>
o la strettamente legata:
<pre>AES cipher algorithms (i586)</pre>
=== Pacchetti necessari ===
Per ottenere <code>cryptmount</code> e <code>cryptsetup</code> servirà installare i relativi pacchetti con il comando:
<pre># apt-get install cryptmount cryptsetup</pre>
questo installerà anche tutte le [[dipendenze]] necessarie. In particolare verranno installati i pacchetti e le librerie per implementare il sistema di mappatura dei dispositivi (device-mapper) per il [[kernel]] Linux tramite il modulo <code>dm-crypt</code>.<br/>
questo installerà anche tutte le [[dipendenze]] necessarie. In particolare verranno installati i pacchetti e le librerie per implementare il sistema di mappatura dei dispositivi (device-mapper) per il [[kernel]] Linux tramite il modulo <code>dm-crypt</code>.<br/>
Sia <code>cryptmount</code> che <code>cryptsetup</code> si propongono come frontend per l'utente finale allo scopo di consentire l'uso del Device Mapper.
Sia <code>cryptmount</code> che <code>cryptsetup</code> si propongono come frontend per l'utente finale allo scopo di consentire l'uso del Device Mapper.
Riga 96: Riga 26:


== Cryptsetup ==
== Cryptsetup ==
Per preparare un file di dimensione fissata (in base alla quantità e tipo di dati che vorremo salvare cifrati) usiamo il comando <code>dd</code>:<pre>$ dd if=/dev/zero of=/home/nomeutente/immagine_cifrata ibs=1M count=10</pre>
Per preparare un file di dimensione fissata (in base alla quantità e tipo di dati che vorremo salvare cifrati) usiamo il comando <code>dd</code>:<pre>$ dd if=/dev/zero of=/home/nomeutente/immagine_cifrata ibs=1M count=100</pre>
per creare un file da poi usare di 10MB nella home dell'utente ''nomeutente'' (queste dimensioni ridottissime sono adatte a una prova o per pochi dati che possono essere anche spediti in modo sicuro come allegato a un messaggio di posta).
per creare un file da poi usare di 100 MB nella home dell'utente ''nomeutente''.


=== File ordinario montato in loop ===
=== File ordinario montato in loop ===
Autentichiamoci come root e montiamo il file appena creato in loop. Prima di tutto impostiamo il file appena creato come una loop device (controllare la prima periferica loop libera con <code>losetup -f</code>):
Autentichiamoci come [[privilegi di amministrazione|root]] e montiamo il file appena creato in loop. Prima di tutto impostiamo il file appena creato come una [[loop device]]:
<pre># /sbin/losetup /dev/loop/0 /home/nomeutente/immagine_cifrata</pre>
<pre>
# losetup -f /home/nomeutente/immagine_cifrata
</pre>
Controllare poi quale è stata associata con (in questo caso <code>/dev/loop0</code>, la prima):
# losetup -a
'''/dev/loop0''': ... ('''/home/nomeutente/immagine_cifrata''')


=== Periferica a blocchi fisica ===
=== Periferica a blocchi fisica ===
Per chi invece di cifrare un file montato in loop, deve cifrare una block device ordinaria, basta che sappia quale nome le abbia assegnato il kernel (con precisione, perché la procedura seguente cancellerà tutti i dati nella periferica).
Per chi invece di cifrare un file montato in loop, deve cifrare una block device ordinaria, basta che sappia quale nome le abbia assegnato il kernel (con precisione, perché la procedura seguente cancellerà tutti i dati nella periferica).
{{Box|Periferiche|D'ora in poi chiameremo <code>/dev/periferica</code> la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (<code>/dev/loop/0</code>) o una periferica ordinaria}}
{{Box|Periferiche|D'ora in poi chiameremo <code>/dev/periferica</code> la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (<code>/dev/loop/0</code>) o una periferica ordinaria}}
Creiamo la partizione LUKS:
Creiamo la partizione LUKS, con parametri di default (la scelta raccomandata, salvo esigenze particolari):
<pre># cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/periferica
<pre>
# cryptsetup --verify-passphrase --verbose luksFormat /dev/periferica


WARNING!
WARNING!
Riga 113: Riga 49:
This will overwrite data on /dev/periferica irrevocably.
This will overwrite data on /dev/periferica irrevocably.


Are you sure? (Type uppercase yes): </pre>
Are you sure? (Type uppercase yes):
</pre>
Come dice il messaggio bisogna rispondere con uno <code>'''YES'''</code> interamente maiuscolo.<br/>
Come dice il messaggio bisogna rispondere con uno <code>'''YES'''</code> interamente maiuscolo.<br/>
Ci verrà di seguito chiesta una parola d'ordine e la sua conferma; mentre le digiteremo non vedremo nulla cambiare nel terminale:
Ci verrà di seguito chiesta una parola d'ordine e la sua conferma; mentre le digiteremo non vedremo nulla cambiare nel terminale:
<pre>Enter LUKS passphrase:
<pre>
Enter LUKS passphrase:
Verify passphrase:
Verify passphrase:


Command successful.</pre>
Command successful.
</pre>


=== Mappare e montare la partizione criptata ===
=== Mappare e montare la partizione criptata ===
A questo punto dobbiamo dare istruzioni al device mapper di mappare la periferica LUKS appena creata in una block device virtuale sulla quale scrivere i nostri dati in chiaro (e poi essi saranno scritti cifrati su <code>/dev/periferica</code>):
A questo punto dobbiamo dare istruzioni al device mapper di mappare la periferica LUKS appena creata in una block device virtuale sulla quale scrivere i nostri dati in chiaro (e poi essi saranno scritti cifrati su <code>/dev/periferica</code>):
<pre># cryptsetup luksOpen /dev/periferica criptata</pre>
<pre># cryptsetup open --type luks /dev/periferica criptata</pre>
Questo creerà la periferica <code>'''/dev/mapper/criptata'''</code>, sulla quale noi andremo a creare il file system che più ci interessa (su periferiche piccole come quella in esempio non conviene usare un file system con indicizzazione come reiserfs o ext3, bensì un più semplice ext2 o una FAT):
Questo creerà la periferica <code>'''/dev/mapper/criptata'''</code>, sulla quale noi andremo a creare il file system che più ci interessa (su periferiche piccole come quella in esempio non conviene usare un file system con indicizzazione come reiserfs o ext3, bensì un più semplice ext2 o una FAT):
<pre># mkfs -t ext2 /dev/mapper/criptata</pre>
<pre># mkfs -t ext2 /dev/mapper/criptata</pre>
Non ci rimane che montarla in una cartella di prova per verificare che sia tutto corretto (funzionamento, dimensioni desiderate ecc.):
Non ci rimane che montarla in una cartella di prova per verificare che sia tutto corretto (funzionamento, dimensioni desiderate ecc.):
<pre># mount -t auto /dev/mapper/criptata /mnt/prova</pre>
<pre># mount /dev/mapper/criptata /mnt/prova</pre>


=== Rimozione della periferica criptata ===
=== Rimozione della periferica criptata ===
Riga 133: Riga 72:
<pre>
<pre>
# umount /mnt/prova
# umount /mnt/prova
# /sbin/cryptsetup luksClose criptata
# cryptsetup close criptata
</pre>
</pre>


=== Rimozione di una loop device ===
=== Rimozione di una loop device ===
Nel caso in cui la nostra periferica sia un file montato in loop, è consigliabile eliminare il collegamento che il nostro file immagine ha con la periferica loop cui l'abbiamo associato; questo ci permetterà di spostare o eliminare il file senza creare malfunzionamenti nelle periferiche di loop, così come ci consentirà di aprire nuove periferiche in loop ripartendo dalla numero 0:
Nel caso in cui la nostra periferica sia un file montato in loop, è consigliabile eliminare il collegamento che il nostro file immagine ha con la periferica loop cui l'abbiamo associato; questo ci permetterà di spostare o eliminare il file senza creare malfunzionamenti nelle periferiche di loop, così come ci consentirà di aprire nuove periferiche in loop ripartendo dalla numero 0:
<pre># /sbin/losetup -d /dev/loop0</pre>
<pre>
# losetup -d /dev/loop0
</pre>


== Cryptmount ==
== Cryptmount ==
Il passo di base da compiere con <code>cryptmount</code> è modificare il file di configurazione <code>/etc/cryptmount/cmtab</code>. Per questa operazione e per usare l'opzione <code>--generate-key</code> è necessario avere i privilegi dell'utente [[root]].<br/>
Il passo di base da compiere con <code>cryptmount</code> è modificare il file di configurazione <code>/etc/cryptmount/cmtab</code>. Per questa operazione e per usare l'opzione <code>--generate-key</code> è necessario avere i [[privilegi di amministrazione]].<br/>
La struttura del file è costituita da un nome (utilizzato dal device mapper per identificare un dispositivo) seguito da un blocco racchiuso da parentesi graffe che contiene coppie chiave/valore. È possibile inserire più nomi a cui assegnare il proprio blocco specifico. Ad esempio:
La struttura del file è costituita da un nome (utilizzato dal device mapper per identificare un dispositivo) seguito da un blocco racchiuso da parentesi graffe che contiene coppie chiave/valore. È possibile inserire più nomi a cui assegnare il proprio blocco specifico. Ad esempio:
<pre>
<pre>
Riga 162: Riga 103:
;fstype: il tipo di file system (ext2, ext3, ext4, etc.) utilizzato per montare il dispositivo cifrato. Questo campo è obbligatorio.
;fstype: il tipo di file system (ext2, ext3, ext4, etc.) utilizzato per montare il dispositivo cifrato. Questo campo è obbligatorio.
;keyfile: il file che conterrà la chiave per decifrare il file system cifrato. Nel caso si scelga "luks" come valore per "keyformat", è fortemente consigliato utilizzare lo stesso valore scelto per "dev" oppure lasciare questo campo senza un valore. Questo campo è obbligatorio.
;keyfile: il file che conterrà la chiave per decifrare il file system cifrato. Nel caso si scelga "luks" come valore per "keyformat", è fortemente consigliato utilizzare lo stesso valore scelto per "dev" oppure lasciare questo campo senza un valore. Questo campo è obbligatorio.
;keyformat: il tipo di sistema utilizzato per interagire con la chiave contenuta in "keyfile". In questa guida si farà riferimento al valore "luks" mentre, se non specificato, verrà assunto il valore di default "builtin".<br/>Per visualizzare tutti i formati disponibili è possibile eseguire il comando <code>cryptmount -k</code> .<br/>Il formato <code>builtin</code> salva la chiave in un file separato (da specificare nel campo <code>keyfile</code>), con "luks" invece la chiave è conservata all'inizio del file system.
;keyformat: il tipo di sistema utilizzato per interagire con la chiave contenuta in "keyfile". In questa guida si farà riferimento al valore "luks" mentre, se non specificato, verrà assunto il valore di default "builtin".<br/>Per visualizzare tutti i formati disponibili è possibile eseguire il comando <code>cryptmount -k</code> .<br/>Il formato <code>builtin</code> salva la chiave in un file separato (da specificare nel campo <code>keyfile</code>), con "luks" invece la chiave è conservata all'inizio del file system. {{Box|Nota|Questa assunzione fatta da luks (che le chiavi, che possono essere multiple, risiedano all'inizio del file system) impedisce l'uso di luks con la possibilità di cryptmount di creare più file system criptati all'interno della stessa periferica. }}
{{Box|Nota|Questa assunzione fatta da luks (che le chiavi, che possono essere multiple, risiedano all'inizio del file system) impedisce l'uso di luks con la possibilità di cryptmount di creare più file system criptati all'interno della stessa periferica. }}
;dir:il [[mountpoint]] che specifica il percorso assoluto della directory in cui verrà montato il file system cifrato. Crearlo se non dovesse esistere oppure, se già presente, assicurarsi che non contenga alcun file/directory al suo interno e che sia stato creato dallo stesso utente con cui si vuole in seguito montare il file system cifrato. In pratica un mountpoint creato da [[root]] impedirà il mount ad un utente normale (a meno di cambiare i permessi del punto di mount).
;dir:il [[mountpoint]] che specifica il percorso assoluto della directory in cui verrà montato il file system cifrato. Crearlo se non dovesse esistere oppure, se già presente, assicurarsi che non contenga alcun file/directory al suo interno e che sia stato creato dallo stesso utente con cui si vuole in seguito montare il file system cifrato. In pratica un mountpoint creato da [[root]] impedirà il mount ad un utente normale (a meno di cambiare i permessi del punto di mount).
;cipher:l'algoritmo di cifratura utilizzato per ottenere il file system cifrato. La scelta varia in base alle proprie necessità, alla capacitò di calcolo della macchina e, ovviamente, alla disponibilità dei moduli di cifratura compilati per il proprio [[kernel]]; una lista è visibile nella directory <code>/proc/crypto</code> .
;cipher:l'algoritmo di cifratura utilizzato per ottenere il file system cifrato. La scelta varia in base alle proprie necessità, alla capacitò di calcolo della macchina e, ovviamente, alla disponibilità dei moduli di cifratura compilati per il proprio [[kernel]]; una lista è visibile nella directory <code>/proc/crypto</code> .
Riga 231: Riga 171:
         dir=/home/pippo/cryptfile
         dir=/home/pippo/cryptfile
         fstype=ext4
         fstype=ext4
         mountoptions=defaults
         mountoptions=nodev,nosuid,noexec
         cipher=aes
         cipher=aes
}
}
Riga 265: Riga 205:
Il grande vantaggio rispetto a cryptsetup è nell'uso quotidiano. Infatti, non è più richiesta l'autenticazione come super utente per montare o smontare il volume criptato (né che sia un volume fisico o un file in loop).
Il grande vantaggio rispetto a cryptsetup è nell'uso quotidiano. Infatti, non è più richiesta l'autenticazione come super utente per montare o smontare il volume criptato (né che sia un volume fisico o un file in loop).
Ogni utente può dare:
Ogni utente può dare:
<pre>cryptmount -m criptata</pre>
<pre>
$ cryptmount -m criptata
</pre>
o anche semplicemente:
o anche semplicemente:
<pre>cryptmount criptata</pre>
<pre>
inserire la parola d'ordine, e usare il file system appena montato. Tutta la sicurezza è, a parte gli ottimi algoritmi di hash e cifratura usati che scongiurano, ragionevolmente, attacchi di forza bruta, nella parola d'accesso.<br/>
$ cryptmount criptata
</pre>
inserire la parola d'ordine, e usare il file system appena montato. Tutta la sicurezza è, a parte gli ottimi algoritmi di hash e cifratura usati che scongiurano, ragionevolmente, attacchi di forza bruta, nella parola d'accesso.
 
Uno schema di funzionamento diverso, quello con la chiave conservata altrove è interessante perché separa chiave e dati, lasciando alla memoria dell'utente solo il terzo ingrediente. Questo non è però nello standard luks, quindi non relativo a questa guida.
Uno schema di funzionamento diverso, quello con la chiave conservata altrove è interessante perché separa chiave e dati, lasciando alla memoria dell'utente solo il terzo ingrediente. Questo non è però nello standard luks, quindi non relativo a questa guida.
{{Box|Disclaimer|Se LUKS prevede l'uso di chiavi esterne, un minimo di studio lo rivelerà e in caso affermativo tornerò ad aggiornare questa guida.}}
 
Per smontare la periferica criptata basta, essendo autenticati come l'utente che ha montato il volume o super user:
Per smontare la periferica criptata basta, essendo autenticati come l'utente che ha montato il volume o super user:
<pre>cryptmount -u criptata</pre>
<pre>
$ cryptmount -u criptata
</pre>


=== Gestione manuale ===
=== Gestione manuale ===
Per una gestione manuale dei volumi, bisogna usare i comandi <code>losetup</code>, <code>crytpsetup</code> e <code>mount</code>.<br/>
Per una gestione manuale dei volumi, bisogna usare i comandi <code>losetup</code>, <code>crytpsetup</code> e <code>mount</code>.<br/>
Uno script è forse il modo più indicato per avere un controllo estremamente preciso delle operazioni svolte in allocazione della risorsa criptata e seguente chiusura; due esempi in tal direzione sono presenti nella guida [[LUKS gestione manuale dei volumi: cryptsetup]].
Uno script è forse il modo più indicato per avere un controllo estremamente preciso delle operazioni svolte in allocazione della risorsa criptata e seguente chiusura; due esempi in tal direzione sono presenti nella guida [[LUKS gestione manuale dei volumi: cryptsetup]].
== Approfondimenti ==
=== Moduli del kernel ===
==== Kernel precompilato Debian ====
{{Box|Hardware|A livello hardware la cifratura con algoritmo AES è molto leggera quindi può essere eseguita anche su macchine molto datate, o piccoli sistemi embedded.}}
La prima cosa da controllare prima di cimentarsi nella criptazione è l'abilitazione del kernel a usare l'algoritmo AES.<br/>
In un terminale eseguiamo:
<pre>$ cat /proc/crypto</pre>
e dovremmo ottenere (in base anche ai moduli caricati) qualcosa tipo:
<pre>
name        : aes
driver      : aes-asm
module      : aes_i586
priority    : 200
refcnt      : 1
selftest    : passed
type        : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
name        : aes
driver      : aes-generic
module      : aes_generic
priority    : 100
refcnt      : 1
selftest    : passed
type        : cipher
blocksize    : 16
min keysize  : 16
max keysize  : 32
[...]
name        : md5
driver      : md5-generic
module      : kernel
priority    : 0
refcnt      : 1
selftest    : passed
type        : shash
blocksize    : 64
digestsize  : 16</pre>
Ovviamente a noi interessano le sezioni che iniziano con <code>'''name        : aes'''</code>. Se non dovessero comparire dobbiamo controllare che i moduli responsabili dell'<code>'''aes'''</code> siano caricati e ottenere un output simile a questo:
<pre>
$ lsmod |grep aes
aes_i586              16608  0
aes_generic            37066  1 aes_i586
</pre>
(o aes-x86_64 in caso di architettura per kernel amd64).<br/>
AES ci serve per la cifratura, ora dobbiamo pensare all'hash. Per l'hash serve l'algoritmo <code>sha256</code> (ovviamente potremmo voler usare lo <code>sha512</code>, per cui basterebbe cambiare il 256 in 512 in ogni occorrenza). È precompilato nel kernel Debian, ma non è detto che sia caricato (nel <code>/proc/crypto</code>, soprariportato, non è infatti presente) quindi carichiamolo:
<pre># modprobe sha256_generic</pre>
Nel file <code>/proc/crypto</code> si dovrebbero essere aggiunte le seguenti righe:
<pre>
name        : sha256
driver      : sha256-generic
module      : sha256_generic
priority    : 0
refcnt      : 3
selftest    : passed
type        : shash
blocksize    : 64
digestsize  : 32
name        : sha256
driver      : sha256-generic
module      : sha256_generic
priority    : 0
refcnt      : 1
type        : digest
blocksize    : 64
digestsize  : 32</pre>
Infine l'ultimo modulo da caricare nel kernel è <code>dm-crypt</code>, la cui assenza impedisce a cryptmount di completare le operazioni richieste.<pre># modprobe dm-crypt</pre>
==== Kernel personalizzato ====
Se non usiamo un kernel precompilato Debian, dobbiamo controllare che l'algoritmo di cifratura sia stato compilato: dal menu "'''Linux Kernel Configuration'''" seguiamo la voce "'''Cryptographic options  --->'''" e abilitiamo la voce:
<pre>AES cipher algorithms</pre>
o la strettamente legata:
<pre>AES cipher algorithms (i586)</pre>
=== Pagine di manuale ===
*Principali:
::<code>$ man cryptsetup</code>
::<code>$ man cryptmount</code>
*Per il file di configurazione di <code>cryptmount</code>:
::<code>$ man cmtab</code>


{{Autori
{{Autori
Riga 283: Riga 314:
: [[Utente:S3v|S3v]] 15:49, 3 mag 2016 (CEST) (cryptmount) (CEST)
: [[Utente:S3v|S3v]] 15:49, 3 mag 2016 (CEST) (cryptmount) (CEST)
|Verificata_da=
|Verificata_da=
: [[Utente:HAL 9000|HAL 9000]] 18:46, 20 giu 2014 (CEST)
: [[Utente:HAL 9000|HAL 9000]] 10:07, 29 set 2019 (CEST)
|Numero_revisori = 1
|Numero_revisori = 1
}}
}}
3 581

contributi