Kryptering av hela skivan med cryptsetup/LUKS#

(Nitrokey HSM 2 - Linux)

Den här guiden visar hur du konfigurerar LUKS-krypterade volymer för att autentisera vid uppstart med Nitrokey Pro eller Nitrokey Storage.

För att ge lite bakgrund har cryptsetup-initramfs nu stöd för att använda OpenPGP-smartcards som Nitrokey Pro och Nitrokey Storage för att låsa upp LUKS-krypterade volymer. När du är klar med installationen behöver du bara sätta in din Nitrokey vid uppstart och ange din användar-PIN, i stället för att skriva in din vanliga lösenfras för diskkryptering.

Dessa instruktioner har testats på Ubuntu 20.04 och Debian 10.

Varning

Följande guide kan potentiellt låsa dig från din dator. Du bör vara medveten om dessa risker, eftersom det rekommenderas att först använda instruktionerna nedan på en sekundär dator eller efter en fullständig säkerhetskopiering.

Krav#

  • En Ubuntu- eller Debiandator med minst en LUKS-krypterad volym.

Se avsnittet nedan för att avgöra vilken metod som är kompatibel med denna guide.

  • En Nitrokey Pro 2 eller Nitrokey Storage 2 ` som initierats <openpgp.html>`_ med nycklar.

Kända problem#

Hittills fungerar skriptet endast med manuellt partitionerade volymer som består av en okrypterad /boot-partition och en krypterad rotpartition /-partition.

Välj inte den automatiska kryptering av hela skivan som tillhandahålls av det operativsystem du använder för den här guiden. Du kommer att stöta på återkommande fel när partitioneringen görs automatiskt med hjälp av installationsgränssnittet i Ubuntu och Debian.

Instruktioner#

  1. Installera beroenden

$ sudo apt install scdaemon opensc gnupg2
  1. Skapa katalogen smartcard-luks

$ mkdir smartcard-luks && cd smartcard-luks
  1. Ladda ner smartcard-luks-scriptet

$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
$ sudo chmod +x smartcard-key-luks
  1. Exportera den offentliga nyckeln

Exportera din offentliga nyckel från GnuPG:s nyckelring:

$ gpg2 --armor --export KeyID > pubkey.asc

Om du redan har laddat upp en offentlig nyckel till en nyckelserver (eller har den lagrad någon annanstans) ska du hämta den på det sätt som du känner dig mest bekväm med och fortsätta till steg 5.

  1. Bestäm och verifiera rätt LUKS-enhetsnamn för rotpartitionen:

$ cat /etc/crypttab
# if there is only one entry, you want the 1st column of this entry

Råd

Vanligtvis ska detta vara något som nvme0n1p3_crypt (för NitroPC) eller sda3_crypt (för NitroPads). Du kan och bör dubbelkolla att UUID:et som anges i /etc/crypttab är den avsedda partitionen genom att kontrollera den symboliska länken i /dev/disks/by-uuid/.

  1. Kör skriptet med namnet på luks-enheten (t.ex. nvme0n1p3_crypt) och pubkey.asc som argument.

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey.asc

När du kör skriptet med den offentliga OpenPGP-nyckeln som argument ställer det automatiskt in en ny LUKS-hemlighet, krypterar den mot den offentliga nyckeln och ställer in crypttab, LUKS, initramfs och GRUB.

Först kommer du att uppmanas att ange User PIN.

img1

När du har låst upp Nitrokey kommer du att uppmanas att ange din OLD passphrase. Det är den lösenfras som du angav för att kryptera volymen vid installationen.

img2

Observera

Detta är ett alternativ om du förlorar din Nitrokey eller om den inte är tillgänglig. Än så länge har det inte testats, och användarna måste vara medvetna om risken att bli utelåsta från sin dator om reservmetoden inte fungerar.

När du har angett lösenfrasen avslutar skriptet installationen på ungefär en minut. Avbryt inte skriptet, annars kan du bli utelåst från datorn efter omstart.

img3

Klart!

Vid det här laget måste du starta om och du bör kunna använda din Nitrokey för att låsa upp din krypterade enhet.

Användning#

Efter omstart bör du uppmanas att ange din användar-PIN-kod.

img5

Ange din användar-PIN för att låsa upp enheten

img6

Ytterligare tips#

Ändra lösenfras#

När du har gjort den här inställningen bör du inte längre använda verktyget disks (Gnome) för att ändra lösenfrasen (reservfrasen). Det korrekta sättet att göra detta är att anropa cryptsetup direkt på följande sätt:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Med nvme0n1p3 som den partition du ställde in nycklarna för.

Använd flera nycklar#

Det är lätt att använda flera säkerhetsnycklar (maskinvara) så att var och en av dem kan låsa upp LUKS-enheten oberoende av varandra. Det är bara att exportera flera offentliga nycklar och passa flera nycklar till installationsskriptet på följande sätt:

$ sudo ./smartcard-key-luks nvme0n1p3_crypt pubkey-1.asc pubkey-2.asc

Ange kortinnehavarens namn#

Under PIN-inmatningen vid uppstart för dekryptering av LUKS-rotpartitionen presenteras en kortinnehavare för användaren, För att ställa in detta använd $ gpg --edit-card och i prompten skriv admin och name för att ange kortinnehavaren för OpenPGP-kortet (Nitrokey Storage 2 eller Nitrokey Pro 2).

Ersätt/ta bort nycklar#

Det är inte möjligt att lägga till/ta bort nycklar direkt. Därför måste du radera/ta bort den gamla installationen och köra installationen på nytt med den eller de angivna nycklarna:

Ta bort nyckelfilen (sökvägen, om du använde skriptet ovan) från luks-enheten (nvme0n1p3):

$ sudo cryptsetup luksRemoveKey /dev/nvme0n1p3 /etc/cryptsetup-initramfs/cryptkey.gpg

Ta bort själva nyckelfilen:

$ sudo rm /etc/cryptsetup-initramfs/cryptkey.gpg

Gör om inställningen ovan.

Upplåsning av LUKS2 med X509-certifikat#

SystemD har stöd för att låsa upp en LUKS2-partition med hjälp av ett X509-certifikat, hitta ett bra blogginlägg om hur man gör detta på Personlig blogg av Vladimir Timofeenko