#format wiki
#LANGUAGE it
<
>
<>
<>
<>
= Introduzione =
Questa guida spiega come utilizzare [[Sicurezza/GnuPg|GnuPG]] su più dispositivi (es. computer portatile, di casa o del lavoro, ecc.) salvando le chiavi private su una memoria USB criptata.
La memorizzazione delle chiavi di crittografia su un computer può risultare problematica: in caso di furto del dispositivo, anche la [[Sicurezza/GnuPg|chiave GPG]] risulterà compromessa se il disco rigido non è stato preventivamente criptato. Sebbene sia sempre possibile revocare la chiave prima che qualcuno sia in grado di decodificarla, la procedura comporta inevitabili disagi.
Per questo scopo, è possibile creare un filesystem criptato all'interno di un normale file residente su una memoria USB, all'interno del quale archiviare dati sensibili come la chiave privata GPG.
{{{#!wiki important
Per sicurezza prima di procedere, si raccomanda di eseguire una [[AmministrazioneSistema/BackupDelSistema|copia di backup]] della cartella `~/.gnupg` locale.
}}}
= Prerequisiti =
[[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://cryptsetup|cryptsetup]].
{{{#!wiki note
'''Ubuntu''' gestisce lo standard '''[[https://it.wikipedia.org/wiki/Linux_Unified_Key_Setup|LUKS]]'''.
}}}
== Creazione del file contenitore ==
{{{#!wiki note
In questa guida si presuppone che la memoria sia montata in /media/usbdisk.
}}}
Prima di creare il filesystem, è necessario che il supporto USB viene collegato:
0. [[Hardware/DispositiviPartizioni/MontarePartizioni|Individuare]] il percorso della memoria USB.
0. Generare il file che lo conterrà, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
dd if=/dev/urandom of=/media/usbdisk/disk.img bs=1M count=16
}}} Il risultato del comando sarà simile al seguente:{{{
16+0 record dentro
16+0 record fuori
16777216 byte (17 MB) copiati, 0,25612 s, 65,5 MB/s
}}} {{{#!wiki note
È preferibile utilizzare dati casuali (`/dev/urandom`) per aumentare la sicurezza crittografica, avendo cura di impostare il percorso corretto verso la memoria USB e modificando il valore count per ottenere la dimensione desiderata in ''Megabyte'' (nell'esempio, 16 MB).
}}}
== Inizializzazione del volume criptato (LUKS) ==
Nelle versioni moderne di Ubuntu, `cryptsetup` gestisce automaticamente i dispositivi di loop.
0. Formattare il file come contenitore LUKS, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
sudo cryptsetup luksFormat /media/usbdisk/disk.img
}}} verrà richiesta la conferma, digitando "YES" in maiuscolo e l'inserimento di una password sicura.
0. Aprire il contenitore criptato mappandolo nel sistema con il nome `usbkey`, digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
sudo cryptsetup open /media/usbdisk/disk.img usbkey
}}} Il contenitore è ora accessibile tramite il dispositivo `/dev/mapper/usbkey`.
Il dispositivo mappato appare al sistema come una normale partizione. È ora necessario formattarlo.
= Creazione del filesystem =
0. Creare un [[Hardware/DispositiviPartizioni/MontarePartizioni/Ext4|filesystem Ext4]] sul volume crittografato:{{{
sudo mkfs.ext4 /dev/mapper/usbkey
}}}
0. Creare il punto di montaggio e montare il filesystem:{{{
sudo mkdir -p /media/encrypted
sudo mount /dev/mapper/usbkey /media/encrypted
}}}
0. [[AmministrazioneSistema/PermessiFile|Assegnare i permessi corretti]] all'utente corrente:{{{
sudo chown -R $USER:$USER /media/encrypted
}}}
= Impostazione di GnuPG nel filesystem criptato =
0. Creare una cartella `.gnupg` all'interno del filesystem crittografato e assegnarle i permessi di sicurezza necessari, digitare nel [[AmministrazioneSistema/Terminale|terminale]] i seguenti comandi:{{{
mkdir /media/encrypted/.gnupg
}}} {{{
chmod 0700 /media/encrypted/.gnupg
}}}
0. Creare un collegamento simbolico dalla propria directory '''Home''' al filesystem criptato (se esiste già una cartella `.gnupg` locale, rinominarla preventivamente):{{{
mv ~/.gnupg ~/.gnupg_locale
}}} {{{
ln -s /media/encrypted/.gnupg ~/.gnupg
}}}
A questo punto, è possibile generare una [[Sicurezza/GnuPg|chiave GnuPG]] oppure spostare i file dal backup locale (~/.gnupg_locale) nella nuova directory. Se si spostano file preesistenti, è consigliabile cancellare in modo sicuro i vecchi file originali utilizzando programmi come `shred` o `wipe`.
= Semplificare montaggio e smontaggio =
Per automatizzare il montaggio, lo smontaggio e la gestione del collegamento simbolico (utile per la verifica offline), è possibile realizzare due script da salvare nella radice della chiavetta USB (fuori dal file criptato).
Prima di scriverli, smontare e chiudere il dispositivo manualmente: {{{
sudo umount /media/encrypted
sudo cryptsetup close usbkey
}}}
=== Script di montaggio (mount.sh) ===
Creare nella cartella principale del dispositivo USB un file chiamato mount.sh e inserire il seguente codice: {{{
#!/bin/bash
DIR=(dirname "0")
Apre il volume LUKS
sudo cryptsetup open "$DIR/disk.img" usbkey
Monta il filesystem
sudo mkdir -p /media/encrypted
sudo mount /dev/mapper/usbkey /media/encrypted
Sostituisce la cartella locale con il collegamento al volume sicuro
if [ -d "
HOME/.gnupg" ]; then
mv "
𝐻
𝑂
𝑀
𝐸
/
.
𝑔
𝑛
𝑢
𝑝
𝑔
"
"
HOME/.gnupg""
HOME/.gnupg_locale"
fi
ln -sfn /media/encrypted/.gnupg "$HOME/.gnupg"
echo "Volume montato e GnuPG configurato."
}}}
=== Script di smontaggio (umount.sh) ===
Creare nella cartella principale del dispositivo USB un file chiamato umount.sh e inserire il seguente codice: {{{
#!/bin/bash
Ripristina la cartella locale per le chiavi pubbliche
if [ -L "
𝐻
𝑂
𝑀
𝐸
/
.
𝑔
𝑛
𝑢
𝑝
𝑔
"
]
;
𝑡
ℎ
𝑒
𝑛
𝑟
𝑚
"
HOME/.gnupg"];thenrm"
HOME/.gnupg"
if [ -d "
𝐻
𝑂
𝑀
𝐸
/
.
𝑔
𝑛
𝑢
𝑝
𝑔
𝑙
𝑜
𝑐
𝑎
𝑙
𝑒
"
]
;
𝑡
ℎ
𝑒
𝑛
𝑚
𝑣
"
HOME/.gnupg
l
ocale"];thenmv"
HOME/.gnupg_locale" "$HOME/.gnupg"
fi
fi
Smonta e chiude il volume LUKS
sync
sudo umount /media/encrypted
sudo cryptsetup close usbkey
echo "Volume smontato in sicurezza."
}}}
A causa delle policy di sicurezza dei moderni file manager, gli script presenti su dispositivi USB non godono dei permessi di esecuzione diretti. Per avviarli, utilizzare il terminale:{{{
bash /media/usbdisk/mount.sh
}}} Durante l'esecuzione verrà richiesta la password per sudo e successivamente la password di decrittazione del volume LUKS.
= Verifica delle firme PGP senza il filesystem criptato =
Sovente si presenta la necessità di verificare un messaggio firmato senza dover inserire la memoria USB o digitare la password del volume crittografato (utilizzando quindi solo le chiavi pubbliche).
La logica inserita negli script precedenti gestisce questa situazione in automatico:
Quando il volume USB viene montato tramite mount.sh, il sistema sposta la cartella .gnupg in .gnupg_locale e crea un collegamento al volume criptato. In questo modo si ha pieno accesso alle chiavi private.
Quando il volume USB viene smontato tramite umount.sh, il collegamento viene rimosso e viene ripristinata la cartella locale.
Per far funzionare la verifica offline è sufficiente mantenere un database di chiavi pubbliche nella cartella locale. Se si importano chiavi pubbliche mentre la chiavetta è inserita, è consigliabile esportarle e reimportarle a chiavetta disinserita, affinché siano presenti nel keyring locale.
= Ulteriori risorse =
* [[http://wiki.ubuntu-it.org/Sicurezza/GnuPg|GnuPG]]
* [[https://gitlab.com/cryptsetup/cryptsetup|Sito ufficiale di cryptsetup / LUKS]]
----
CategoryHomepage CategoryNuoviDocumenti