Kryptering af hele disken med cryptsetup/LUKS

Denne vejledning viser, hvordan du konfigurerer LUKS-krypterede diskenheder til at autentificere ved opstart med Nitrokey Pro eller Nitrokey Storage.

For at give lidt baggrundsinformation har cryptsetup-initramfs nu understøttelse for brug af OpenPGP-smartcards som Nitrokey Pro og Nitrokey Storage til at låse LUKS-krypterede volumener op. Når du er færdig med opsætningen, skal du blot indsætte din Nitrokey ved opstart og indtaste din bruger-PIN-kode i stedet for at indtaste din almindelige disk-krypterings-passfras.

Disse instruktioner er blevet testet på Ubuntu 20.04 og Debian 10.

Advarsel

Følgende vejledning kan potentielt låse dig ude af din computer. Du bør være opmærksom på disse risici, og vi anbefaler, at du bruger nedenstående script på en sekundær computer eller efter en fuld sikkerhedskopi, da du kan miste dine data.

Krav

  • En Ubuntu- eller Debian-computer med mindst én LUKS-krypteret volumen.

Se afsnittet nedenfor for at finde ud af, hvilken metode der er kompatibel med denne vejledning.

  • En Nitrokey Pro 2 eller Nitrokey Storage 2 initialiseret med nøgler.

Kendte problemer

Indtil videre fungerer scriptet kun med manuelt partitionerede diskenheder, der består af en ukrypteret /boot-partition og en krypteret rodpartition /-partition.

Du må ikke vælge den automatiske kryptering af hele disken, som leveres af det operativsystem, du bruger i denne vejledning. Du vil opleve tilbagevendende fejl, når partitioneringen foretages automatisk ved hjælp af installationsgrænsefladen på Ubuntu og Debian.

Vejledning

  1. Installer afhængigheder

    $ sudo apt install scdaemon opensc gnupg2
    
  2. Opret mappe med smartcard-luks

    $ mkdir smartcard-luks && cd smartcard-luks
    
  3. Download smartcard-luks-scriptet

    $ wget https://raw.githubusercontent.com/daringer/smartcard-key-luks/main/smartcard-key-luks
    $ sudo chmod +x smartcard-key-luks
    
  4. Eksporter den offentlige nøgle

    Sådan eksporterer du din offentlige nøgle fra GnuPG’s nøglering:

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

    Hvis du allerede har uploadet en offentlig nøgle til en nøgleserver (eller har den gemt et andet sted), skal du hente den på den måde, du er mest fortrolig med, og gå videre til trin 5.

  5. Bestem og bekræft det korrekte LUKS-enhedsnavn for din rodpartition:

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

    Fif

    Normalt skal det være noget i stil med nvme0n1p3_crypt (for NitroPC) eller sda3_crypt (for NitroPads). Du kan og bør krydstjekke, at det UUID, der henvises til i /etc/crypttab, er den udpegede partition, ved at kontrollere det symbolske link i /dev/disks/by-uuid/.

  6. Udfør scriptet med luks-enhedens navn (f.eks. nvme0n1p3_crypt) og pubkey.asc som argumenter.

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

Når du kører scriptet med den offentlige OpenPGP-nøgle som argument, opretter det automatisk en ny LUKS-hemmelighed, krypterer den mod den offentlige nøgle og opretter crypttab, LUKS, initramfs og GRUB.

Først vil du blive bedt om at indtaste User PIN

img1

Når du har låst Nitrokey op, bliver du bedt om at indtaste din OLD passphrase. Det er den adgangsfrase, du indtastede for at kryptere din volumen ved installationen.

img2

Bemærk

Dette er et alternativ, hvis du mister din Nitrokey, eller hvis den ikke er tilgængelig. Indtil videre er det ikke blevet testet, og brugerne skal være opmærksomme på risikoen for at blive låst ude af deres computer, hvis nødløsningen ikke virker.

Når du har indtastet passphrasen, afslutter scriptet opsætningen på ca. et minut. Du må ikke afbryde scriptet, da du ellers kan blive låst ude af computeren efter genstart.

img3

Færdig!

Nu skal du genstarte, og du bør kunne bruge din Nitrokey til at låse dit krypterede drev op.

Anvendelse

Efter genstart skal du blive bedt om at indtaste din bruger-PIN-kode

img5

Indtast din bruger-PIN-kode for at låse drevet op

img6

Yderligere tips

Ændre adgangsfrase

Når denne opsætning er udført, bør du ikke længere bruge værktøjet disks (gnome) til at ændre passphrase (fallback). Den korrekte måde at gøre dette på er at kalde cryptsetup direkte på denne måde:

$ sudo cryptsetup luksChangeKey /dev/nvme0n1p3

Med nvme0n1p3 som den partition, du har oprettet nøglerne til.

Brug flere taster

Det er nemt at bruge flere (hardware)sikkerhedsnøgler, så hver af dem kan låse LUKS-drevet op uafhængigt af hinanden. Du skal blot eksportere flere offentlige nøgler og også pass flere nøgler til opsætningsskriptet på denne måde:

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

Indstil kortholders navn

Under PIN-indtastningen ved opstart til dekryptering af LUKS-rodpartitionen præsenteres en kortholder for brugeren, for at indstille dette skal du bruge $ gpg --edit-card og inde i prompten skrive admin<x> og name for at indstille kortholderen for OpenPGP-kortet (Nitrokey Storage 2 eller Nitrokey Pro 2).

Udskiftning/sletning af nøgler

Det er ikke muligt at tilføje/fjernelse nøgler direkte. Derfor skal du slette/fjern den gamle installation og køre installationen igen med de(n) udpegede nøgle(r):

Fjern nøglefilen (stien, hvis du har brugt ovenstående script) fra luks-device (nvme0n1p3):

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

Fjern selve nøglefilen:

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

Genoptag ovenstående opsætning.

Oplåsning af LUKS2 med X509-certifikat

SystemD understøtter oplåsning af en LUKS2-partition ved hjælp af et X509-certifikat, find et godt blogindlæg om, hvordan du kan realisere dette på Personlig blog af Vladimir Timofeenko