Volledige schijfversleuteling met cryptsetup/LUKS#

Deze handleiding toont hoe u LUKS-gecodeerde volumes kunt configureren, om bij het opstarten te authenticeren met Nitrokey Pro of Nitrokey Storage.

Om wat achtergrond te geven, cryptsetup-initramfs heeft nu ondersteuning voor het gebruik van OpenPGP smartcards zoals de Nitrokey Pro en Nitrokey Storage om met LUKS versleutelde volumes te ontgrendelen. Zodra de setup voltooid is, moet u enkel uw Nitrokey bij het booten inbrengen en uw gebruikers-PIN invoeren, in plaats van uw gewone passphrase voor schijfversleuteling in te typen.

Deze instructies zijn getest op Ubuntu 20.04 en Debian 10.

Waarschuwing

De volgende handleiding kan u mogelijk van uw computer uitsluiten. U moet zich bewust zijn van deze risico’s, en wij raden u aan het onderstaande script te gebruiken op een tweede computer, of na een volledige back-up, aangezien u uw gegevens zou kunnen verliezen.

Vereisten#

  • Een Ubuntu of Debian computer met ten minste één met LUKS versleuteld volume.

Zie het onderstaande gedeelte om te bepalen welke methode compatibel is met deze gids.

Bekende problemen#

Tot nu toe werkt het script alleen met handmatig gepartitioneerde volumes, die zijn samengesteld uit een onversleutelde /boot partitie, en een versleutelde root / partitie.

Selecteer alstublieft niet de automatische volledige-schijfversleuteling die wordt geleverd door het besturingssysteem dat u gebruikt voor deze gids. U zult te maken krijgen met terugkerende fouten wanneer de partitionering automatisch wordt uitgevoerd, met behulp van de installatie-interface op Ubuntu en Debian.

Instructies#

  1. Afhankelijkheden installeren

$ sudo apt install scdaemon opensc gnupg2
  1. Creëer smartcard-luks map

$ mkdir smartcard-luks && cd smartcard-luks
  1. Het smartcard-luks-script downloaden

$ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
$ sudo chmod +x smartcard-key-luks
  1. Exporteer de publieke sleutel

Om uw publieke sleutel uit GnuPG’s sleutelring te exporteren:

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

Als u al een publieke sleutel naar een keyserver hebt geüpload (of hem ergens anders hebt opgeslagen), moet u hem ophalen op de manier die u het gemakkelijkst vindt, en doorgaan naar stap 5.

  1. Bepaal en controleer de juiste LUKS-apparaatnaam voor uw root-partitie:

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

Hint

Meestal zou dit iets als nvme0n1p3_crypt (voor NitroPC) of sda3_crypt (voor NitroPads) moeten zijn. U kunt en moet controleren of de UUID waarnaar in /etc/crypttab wordt verwezen de aangewezen partitie is door de symbolische link in /dev/disks/by-uuid/ te controleren.

  1. Voer het script uit met de luks apparaatnaam (b.v. nvme0n1p3_crypt) en pubkey.asc als argumenten.

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

Zodra je het script uitvoert met de OpenPGP publieke sleutel als argument, stelt het automatisch een nieuw LUKS geheim in, vercijfert het tegen die publieke sleutel, en stelt crypttab, LUKS, initramfs, en GRUB in.

Eerst wordt u gevraagd om de User PIN

img1

Zodra u de Nitrokey hebt ontgrendeld, wordt u gevraagd om uw OLD passphrase. Dit is de wachtwoordzin die u bij de installatie hebt ingevoerd om uw volume te versleutelen.

img2

Notitie

Dit is een uitwijkmogelijkheid voor het geval u uw Nitrokey verliest, of als deze niet beschikbaar is. Tot nu toe is het niet getest, en gebruikers moeten zich bewust zijn van het risico om van hun computer te worden afgesloten, als de fall-back methode niet werkt.

Zodra u de passphrase hebt ingevoerd, voltooit het script de setup in ongeveer een minuut. Onderbreek het script niet, anders kunt u na het herstarten van uw computer geblokkeerd raken.

img3

Klaar!

U moet nu opnieuw opstarten, en u zou in staat moeten zijn om uw Nitrokey te gebruiken om uw versleutelde schijf te ontgrendelen.

Gebruik#

Na de herstart wordt u gevraagd om uw gebruikers-PIN

img5

Voer uw gebruikers-PIN in om het station te ontgrendelen

img6

Verdere tips#

Wijzig paswoord#

Zodra deze setup gedaan is, moet je het (gnome) disks hulpprogramma niet meer gebruiken om de (fallback) passphrase te veranderen. De juiste manier om dit te doen is door cryptsetup direct aan te roepen zoals dit:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Met nvme0n1p3 als de partitie waar je de sleutels voor hebt ingesteld.

Gebruik meerdere toetsen#

Het is eenvoudig om meerdere (hardware) beveiligingssleutels te gebruiken, zodat elk van hen in staat is om de LUKS-schijf onafhankelijk te ontgrendelen. Exporteer gewoon meerdere publieke sleutels en pas ook meerdere sleutels toe aan het setup script zoals dit:

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

Naam kaarthouder instellen#

Tijdens de PIN-invoer bij het opstarten voor het decoderen van de LUKS root-partitie wordt een kaarthouder aan de gebruiker voorgesteld, om dit in te stellen gebruikt u $ gpg --edit-card en binnen de prompt typt u admin en name om de kaarthouder voor de OpenPGP-kaart (Nitrokey Storage 2 of Nitrokey Pro 2) in te stellen.

Sleutels vervangen/verwijderen#

Het is niet mogelijk om direct sleutels toe te voegen/te verwijderen. Daarom moet u de oude setup wissen/verwijderen en de setup opnieuw uitvoeren met de aangewezen sleutel(s):

Verwijder het sleutelbestand (pad, als u het script hierboven gebruikte) van luks-device (nvme0n1p3):

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

Verwijder het sleutelbestand zelf:

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

Voer de bovenstaande setup opnieuw uit.

Ontgrendelen van LUKS2 met X509-certificaat#

SystemD ondersteunt het ontgrendelen van een LUKS2-partitie met behulp van een X509-certificaat, een goede blog entry over hoe dit te realiseren is te vinden op de Persoonlijke blog van Vladimir Timofeenko