GNUPG

GNU Privacy Guard

GPG is het OpenPGP1 onderdeel van de GNU Privacy Guard.

We komen dagelijks in aanraking met cryptografie, ook al beseffen we dat niet altijd, zo gebruiken de meeste chat programma's (WhatsApp, Telegram, …) encryptie om ervoor te zorgen dat buitenstaanders deze gesprekken niet kunnen "afluisteren".

Met een GPG sleutel kun je echter meer doen dan enkel berichten versleutelen, hier zijn enkele voorbeelden.
  • Bestanden of email berichten versleutelen (encryptie)
  • Bestanden of email berichten ondertekening (signing)
  • Authenticatie (inloggen)
  • git commits ondertekenen zodat mensen weten dat een aanpassing aan de broncode op een git-server (GitHub, GitLab, FSFE Git Service, ...) door jou is gedaan en niet door iemand anders.

Sleutels genereren

De eerste stap de we moeten zetten is het aanmaken van een sleutel-paar (deze bestaat uit 3 onderdelen
  1. signature key (voor handtekeningen te zetten)
  2. encryption key (om bestanden/e-mails te versleutelen)
  3. authentication key (om in te loggen).
Om zo"m sleutel aan te maken gebruiken we het commando $ gpg2 --full-generate-key
Figuur 1. $ gpg2 --full-generate-key
$ gpg2 --full-generate-key
De eerste vraag is welk type sleutel we willen aanmaken, in de meeste gevallen is het standaard antwoord goed, dus gebruiken we dit type.
Figuur 1. Lengte van de sleutel
Lengte van de sleutel
Vervolgens moeten we aangeven welke lengte van sleutel we willen hebben, meestal is 2048 voldoende, maar je kunt tot maximum 4096 bit gaan2 In dit voorbeeld gebruik ik 4096 bit.
Figuur 2. Geldigheidsduur van de sleutel
Geldigheidsduur van de sleutel
Wil je de sleutel een beperkte geldigheidsduur geven of niet? Je kun de sleutel laten vervallen binnen enkele dagen, weken, maanden, jaren of helemaal niet (geef dan 0 is) als je een sleutel niet laat vervallen kan dat beveiligingsproblemen opleveren, maar het is natuurlijk gemakkelijker want je moet niet over een jaar of zo een nieuwe sleutel aanmaken.
Figuur 3. Sleutel vervalt niet
Sleutel vervalt niet
Eerst krijgen we de vraag of we de sleutel echt niet willen laten vervallen en vervolgens moeten we wat persoonlijke informatie opgeven
  1. Naam (Je gaat deze sleutel gebruiken om jezelf te identificeren, dus geef je echte naam in en geen Alias)
  2. Email (Omdat je de sleutel gebruikt om e-mails te ondertekenen en te versleutelen moet je echte email adres aan de sleutel worden toegevoegd, heb je meerdere email accounts, dan kun je deze eventueel later toevoegen aan de sleutel).
  3. Comment (een eventuele opmerking, in mijn geval geef ik aan dat dit een sleutel is enkel ter illustratie en dat ik deze sleutel niet ga gebruiken).

Klik op O om verder te gaan, indien alle ingegeven informatie correct is (anders kun je deze nog aanpassen door op de correcte letter te drukken).

Figuur 3. Geen een "wachtzin" in
Geen een "wachtzin" in
Nu moeten we nog een wachtzin opgeven, een volledige zin is meestal minder snel te kraken dan een wachtwoord, maar je kunt in principe ingeven wat je wil, maar gebruik a.u.b. geen wachtwoorden zoals: password, wachtwoord, 1111, 12345, etc. deze zijn dom en simpel te kraken.
Figuur 3. Entropy
Entropy
Om de sleutel zo veilig mogelijk te maken wordt er tijdens het genereren van de sleutel gevraagd om andere dingen te doen terwijl GPG de sleutel aanmaakt (willekeurige toeten op het toetsenbord indrukken, met de muis bewegen, disk operaties uitvoeren zoals bestanden bewerken), dit om meer entropy (zeg maar chaos) te creëren waardoor de sleutel moeilijker te voorspellen wordt (een computer zelf heeft het namelijk zeer moeilijk om willekeurige getallen te genereren).
Figuur 4. klaar
klaar

Het genereren van de sleutel is klaar en GPG wordt afgesloten.

De sleutel staat nu op onze computer en bestaat uit een secret of private gedeelte en een public gedeelte.

De geheime sleutel moet je zo goed mogelijk beschermen, en de publieke sleutel mag je zoveel mogelijk verspreiden.

Het ID of vingerafdruk (fingerprint) van de sleutel is DBC2195FDCB27B5V820CAF439CD2815A0A5EC130, maar je kunt ook de laatste 8 tekens (0A5EC130) van deze sleutel gebruiken om aan te geven welke je bedoelt

Sleutels Exporteren

Hoe krijg je nu jouw publieke sleutel bij andere mensen? Dit doe je door deze te exporteren, hiervoor gebruiken we de optie -A om een ASCII Armour aan te maken.

Het exporteren van de publieke sleutel doe je bijvoorbeeld moet het commando:

gpg2 --export -a 0A5EC130 > patrick.kox@commandoregel.be.pub.asc
Figuur 8. gpg2 --export -a 0A5EC130 > patrick.kox@commandoregel.be.pub.asc
gpg2 --export -a 0A5EC130 > patrick.kox@commandoregel.be.pub.asc
Dit maakt een bestand aan met de naam patrick.kox@commandoregel.be.pub.asc en het bevat mijn publieke (test) sleutel. Deze kun je bekijken met (bijvoorbeeld cat) :
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
hh41cIl+/3Sv/yR2qg==
=Nq37
-----END PGP PUBLIC KEY BLOCK-----
Om een geheime sleutel te exporteren gebruiken we een gelijkaardig commando:gpg2 --export-secret-keys -a 0A5EC130 > patrick.kox@commandoregel.be.sec.asc
Figuur 8. gpg2 --export-secret-keys -a 0A5EC130 > patrick.kox@commandoregel.be.sec.asc
gpg2 --export-secret-keys -a 0A5EC130 > patrick.kox@commandoregel.be.sec.asc

Bij het exporteren van een geheime sleutel moet je ook een wachtzin ingeven, deze moet je dan later ingeven als je de privé/geheime sleutel op een andere computer wil importeren.

De geheime sleutel ziet ze hetzelfde uit als een publieke sleutel
-----BEGIN PGP PRIVATE KEY BLOCK-----

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
=H7d+
-----END PGP PRIVATE KEY BLOCK-----

De geheime sleutel bewaar je best op een veilig plaats, ende publieke sleutel kun je ofwel zelf verspreiden onder je vrienden en familie of je kunt deze uploaden naar een keyserver vanwaar iedereen deze kan downloaden.

Dit is een persoonlijke keuze, zelf staat mijn echte publieke sleutel op deze website en kun je hier vinden: https://www.commandoregel.be/patrick.kox@commandoregel.be.pub.asc

Een sleutel stuur je naar de standaard key-server met het commando gpg --send-key 0A5EC130
Figuur 10. gpg2 --send-key 0A5EC130
gpg2 --send-key 0A5EC130

Sleutels importeren

Om te controleren of een handtekening authentiek is heb je de publieke sleutel van deze persoon nodig. Je kunt deze importeren van een key-server als deze beschikbaar is, of manueel het .asc bestand importeren als men het je heeft gegeven.

Eerst via de key-server:

gpg2 --receive-key 668371ED140FCE295EECE025A2B2E77B4966525D
Figuur 11. gpg2 --receive-key 668371ED140FCE295EECE025A2B2E77B4966525D
gpg2 --receive-key 668371ED140FCE295EECE025A2B2E77B4966525D

Mijn echte sleutel (die op de key-server staat) bestaat al op mijn systeem, dus ik krijg een melding dat deze niet veranderd is.

Importeren vanaf een .asc bestand doe je met:

gpg2 --import patrick.kox@commandoregel.be.pub.asc
Figuur 11. gpg2 --import patrick.kox@commandoregel.be.pub.asc
gpg2 --import patrick.kox@commandoregel.be.pub.asc

Nu de publieke sleutel is toegevoegd kun je deze gebruiken om handtekeningen te controleren of berichten voor de eigenaar te versleutelen (hij/zij gebruikt dan zijn/haar geheime sleutel om deze te decoderen).

Sleutel eigenaar vertrouwen

Je kunt voor iedere sleutel die je krijgt aangeven dat je deze vertrouwd en tot welk niveau je dat doet, aan de hand van dit niveau geef je aan in hoeverre je een handtekening van deze persoon vertrouwd om een andere handtekening te vertrouwen.

Er zijn verschillende niveaus van vertrouwen die je kunt instellen
  1. Unknown : Je weet niet tot hoever je de sleutel kunt vertrouwen
  2. Never : Je vertrouwd deze persoon niet on andere handtekeningen te valideren.
  3. Marginal : Je vertrouwd deze persoon onvoldoende maar als minstens twee anderen die je marginaal vertrouwd dezelfde sleutel ondertekenen wil je aannemen dat de sleutel tot die eigenaar behoort
  4. Full : Je vertrouwd de persoon voldoende om andere sleutels te ondertekenen.
  5. Ultimate : Volledige vertrouwen (dit is meestal het niveau van je eigen sleutels).

Om het niveau van vertrouwen in te stellen moeten we de sleutel bewerken, In het volgende voorbeeld gebruik ik een publieke sleutel van de Debian CDs

gpg2 --edit-key F41D30342F3546695F65C66942468F4009EA8AC3
Figuur 13. gpg2 --edit-key F41D30342F3546695F65C66942468F4009EA8AC3
gpg2 --edit-key F41D30342F3546695F65C66942468F4009EA8AC3
Nu gebruik ik het commando trust om het vertrouwen in te stellen
Figuur 13. Stel niveau van vertrouwen in
Stel niveau van vertrouwen in
Omdat ik weet dat deze sleutel te vertrouwen is geef ik hier 4 aan.
Figuur 14. trust full
trust full

Nu zien we dat er bij trust: full staat en niet meer unknown.

Sluit gpg nu af met het commando quit.

Sleutels ondertekenen

Om de echtheid van een sleutel te controleren kun je kijken of deze is ondertekend door iemand die je vertrouwd (zie Sleutel eigenaar vertrouwen hierboven) of indien je de sleutel persoonlijk krijgt kun je deze zelf ondertekenen zodat anderen weten dat jij de sleutel vertrouwd.

Om een sleutel te ondertekenen moeten we deze ook bewerken, dus net zoals voor het instellen van de vertrouwen (trust) hierboven gebruik ik weer de Debian CD sleutel.

Figuur 16. sign
sign

na het drukken op y wordt er gevraagd om een wachtwoord (of in mijn geval een PIN code want ik gebruik een OpenPGP kaart met mijn privé sleutel op, wat veiliger is want mijn sleutel staat dan niet opgeslagen op mijn PC), hiervan kan ik geen scherm-afbeelding tonen.

Na het ondertekenen sluiten we weer af met quit en krijgen we de vraag om wijzigingen op te slaan. Hier antwoorden we op met y.
Figuur 16. quit
quit

Je kunt het instellen van het vertrouwen en ondertekenen na elkaar doen, zonder gpg eerst af te sluiten.

Sleutels weergeven

Als je wil zien welke sleutels er allemaal aan je sleutelbos hangen kun de deze laten weergeven met gpg2 --list-keys
atrick @ XPS8940 ➜  ~ $ gpg2 --list-keys                                        
gpg: checking the trustdb
gpg: marginals needed: 3  completes needed: 1  trust model: tofu+pgp
gpg: depth: 0  valid:   2  signed:   3  trust: 0-, 0q, 0n, 0m, 0f, 2u
gpg: depth: 1  valid:   3  signed:   0  trust: 0-, 0q, 0n, 0m, 3f, 0u
/home/patrick/.gnupg/pubring.kbx
--------------------------------
pub   rsa2048 2020-09-04 [SC]
      668371ED140FCE295EECE025A2B2E77B4966525D
uid           [ultimate] Patrick Kox (https://www.commandoregel.be) <patrick.kox@commandoregel.be>
sub   rsa2048 2020-09-04 [E]

pub   rsa4096 2009-10-03 [SC]
      10460DAD76165AD81FBC0CE9988021A964E6EA7D
uid           [  full  ] Debian CD signing key <debian-cd@lists.debian.org>

pub   rsa4096 2011-01-05 [SC]
      DF9B9C49EAA9298432589D76DA87E80D6294BE9B
uid           [  full  ] Debian CD signing key <debian-cd@lists.debian.org>
sub   rsa4096 2011-01-05 [E]

pub   rsa4096 2014-04-15 [SC]
      F41D30342F3546695F65C66942468F4009EA8AC3
uid           [  full  ] Debian Testing CDs Automatic Signing Key <debian-cd@lists.debian.org>
sub   rsa4096 2014-04-15 [E]

Hier staan alle sleutels in mijn sleutelbos, mijn eigen publieke sleutel en 3 publieke sleutels van het Debian project. Alle 3 om hun CD/DVD ISO bestanden te ondertekenen.

Encryptie en Decryptie

Nu we een sleutel hebben kunnen we beginnen met het versleutelen (encryptie) en ontcijferen (decryptie) van gegevens. Aangezien je voor emails meestal een GUI programma gebruikt (Evolution of Thunderbird met Enigmail) en niet de commandoregel (tenzij je werkt met mutt off alpine) gaan we ons beperken tot het versleutelen van bestanden.

Het commando om te versleutelen is

gpg2 --encrypt-files -r patrick.kox@commandoregel.be geheime-informatie.pdf

De -r optie geeft de ontvanger recipient) aan, indien je deze niet ingeeft krijg je een melding dat je deze niet hebt gegeven en kun je deze alsnog ingeven.
Figuur 18. gpg2 --encrypt-files -r patrick.kox@commandoregel.be geheime-informatie.pdf
gpg2 --encrypt-files -r patrick.kox@commandoregel.be geheime-informatie.pdf

GPG geeft geen melding bij het correct versleutelen, en het "geheime bestand is na het versleutelen nog aanwezig op jouw computer, wil je dit verwijderen dan moet je dan nog zelf doen. Er is nu wel een versleuteld bestand aangemaakt met de naam : geheime-informatie.pdf.gpg.

Je kunt dit bestand nu veilig versturen naar de ontvanger (mezelf in dit geval) zonder dat anderen de inhoud kunnen bekijken.

Om het bestand terug te ontsleutelen gebruiken we het commando

gpg2 --decrypt-files geheime-informatie.pdf.gpg

Figuur 18. gpg2 --decrypt-files geheime-informatie.pdf.gpg
gpg2 --decrypt-files geheime-informatie.pdf.gpg

Na het ingeven van een wachtwoord/wachtzin/PIN code wordt het bestand ontsleuteld en kun je het weer openen met een PDF lezer in dit geval.

Hantekening zetten en valideren

We kunnen een versleuteld bestand nog voorzien van een handtekening, of eender ander bestand (bijvoorbeeld een lijst met SHA512SUM hashes).

Een bestand ondertekenen doen we met gpg2 --sign geheime-informatie.pdf

Dit zal een bestand maken met de naam geheime-informatie.pdf. Hoewel dit bestand niet versleuteld is, kun je het niet zomaar openen in een PDF lezer.

Wil je enkel de handtekening valideren, dan gebruik je het commando gpg2 --verify geheime-informatie.pd.gpgf

Figuur 20. gpg2 --verify geheime-informatie.pdf.gpg
gpg2 --verify geheime-informatie.pdf.gpg
Wil je het bestand verifiëren en kunnen openen moet je het eerst "decrypten" met het commando gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg Omdat het bestand niet versleuteld is, moet je geen wachtwoord o.i.d. ingeven.
Figuur 21. gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg
gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg

Als je een bestand wil versleutelen en ondertekenen, dan kun je dit in 2 stappen doen (eerst versleutelen en dan een handtekening zetten bijvoorbeeld) maar dan krijg je een bestand met als naam bijvoorbeeld: geheime-informatie.pdf.gpg.gpg wat niet echt elegant is, je kunt dit dan beter in 1 stap doen met het commando gpg2 --sign --encrypt -r patrick.kox@commandoregel.be geheime-informatie.pdf

Het bestand dat je krijgt heet dan gewoon geheime-informatie.pdf, je kunt dan wel niet de handtekening controleren met gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg het bestand zal dan (na ingeven van het wachtwoord/PIN Code) ontsleuteld worden en de handtekening gevalideerd. Hierna kun je het bestand openen in een PDF lezer.

Figuur 22. gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg
gpg2 --output geheime-informatie.pdf --decrypt geheime-informatie.pdf.gpg

Keyserver

Het kan handig zijn om je publieke sleutels op een keyserver te zetten, zo kunnen anderen gemakkelijk jouw key downloaden om een handtekening te verifiëren.

De keyserver die ik gebruik is de standaard keyserver van Debian : keys.openpgp.org. Indien deze niet is ingesteld kun je dat doen door aan het bestand ~/.gnupg/gpg.conf de volgende regel toe te voegen: keyserver keys.openpgp.org

Uploaden van de sleutel, het uploaden van de sleutel doe je met het commando gpg2 --send-key 9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66 je vervangt het nummer van de sleutel (ook wel de fingerprint genoemd) door die van jouw eigen sleutel (of als je een sleutel van iemand anders hebt ondertekend, door de fingerprint van die sleutel).

Het downloaden van een publieke sleutel doe je met het commando: gpg2 --receive-key 9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66

Dit is de publieke sleutel van ons email adres.

Het resultaat van dat commando zou er als volgt uit moeten zien:
gpg: key BCE5B520E95CCB66: public key "Patrick Kox (https://www.commandoregel.be) <info@commandoregel.be>" imported
                                    gpg: Total number processed: 1
                                    gpg:               imported: 1
                                
en met gpg2 --list-keys ziet dat er als volgt uit:
/home/patrick/.gnupg/pubring.kbx
                                        --------------------------------
                                        pub   rsa4096 2020-10-06 [SC]
                                        9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66
                                        uid           [ unknown] Patrick Kox (https://www.commandoregel.be) <info@commandoregel.be>
                                        sub   rsa4096 2020-10-06 [E]

Je kunt ook kijken wie een sleutel allemaal ondertekend heeft met het commando: gpg2 --list-sig of gpg2 9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66

Dit commando laat alle handtekeningen voor alle sleutels zien, wil je enkel deze informatie voor een bepaalde sleutel zien, dan geeft je aan het einde van het commando de fingerprint van die sleutel:

gpg2 --list-signatures 9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66

De uitvoer kan er dan als volgt uit zien:
pub   rsa4096 2020-10-06 [SC]
      9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66
uid           [ultimate] Patrick Kox (https://www.commandoregel.be) <info@commandoregel.be>
sig 3        BCE5B520E95CCB66 2020-10-06  Patrick Kox (https://www.commandoregel.be) <info@commandoregel.be>
sig          A2B2E77B4966525D 2020-10-06  Patrick Kox (https://www.commandoregel.be) <patrick.kox@commandoregel.be>
sub   rsa4096 2020-10-06 [E]
sig          BCE5B520E95CCB66 2020-10-06  Patrick Kox (https://www.commandoregel.be) <info@commandoregel.be>

SSH Login met GPG Sleutel

Tenslotte kijken we nog naar het inloggen via SSH op een andere computer of een server (GitHub, GitLab, …) door gebruik te maken van een GPG Sleutel op een OpenPGP Smarcard of een YubiKey (off andere "Hardware Token".

Een YubiKey werkt hetzelfde als een openPGP Smarcard dus gaan we ons focussen op zo'n smartcard.

Server

Als je op een server wil laten inloggen met een SSH-Key moet je hier enkele wijzigingen doorvoeren in het configuratiebestand /etc/ssh/sshd_config

je kunt dit bijvoorbeeld doen met sudoedit /etc/ssh/sshd_config

In dit bestand moet je 1 of 2 regels aanpassen:

ChallengeResponseAuthentication yes wordt: ChallengeResponseAuthentication no

en ChallengeResponseAuthentication yes wordt: ChallengeResponseAuthentication no (als dat al niet zo is).

Verder moet je op de server bij de gebruiker onder wiens account je wil kunnen inloggen in de directory ~/.ssh het bestand authorized_keys aanmaken. Hierin plaats je de publieke sleutels van de openPGP smartcard die je wil toegang geven tot het systeem.

Deze key kun je achterhalen door op de computer waarop een smartcard reader is aangesloten met daarin een smartcard. Het commando hiervoor is

ssh-add -L

De uitvoer kan er dan als volgt uitzien3:.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDuTGxAVarYSBZmka8r+wrx9MABJfsAA4cHDeGwzMM84RZCvGmUdjQ8DtaALkW0YmWKXQRP3HFdmLKjltY2LaeWErkobxFgL2v0WfHgqwKZsPCXiMUyQY+3plNyR9nB6YzbRGPVitMfkW6QLtJj72fwEgLm4Ja+/MISf4Z6Gw+QiqyVFBBC2IewhgmoeGYP4uG6vY1UuGxuwubhQHRyn2Tl5sGHDhYiz4FQozxmtSVCGNjPAtI7R82eBfAlVP261E1pa+Yqo8AO8dULhwRkmcEWNfgeLVSM4Bz+qeslT201pKgKzSplmqagJOLqvhsf6zxhGqhTiD7/4Ma4L77KodXp cardno:000611526534

Dit plaats je in het authorized_keys bestand.

Als je nu de SSH server herstart: sudo systemctl restart sshd (voor systemen met systemD) zou je verbinding moeten kunnen maken met SSH met gebruik van jouw smartcard en de correcte PIN code.

client

Op het systeem waarop je de openPGP Smartcard wil gebruiken moet je enkele extra stappen doorlopen.

Als eerste moeten we enkele extra pakketten installeren. Bij Debian en op Debian gebaseerde distributies (Ubuntu, Linux Mint) doe je dit met het volgende commando

sudo ap install gnupg-agent pcscd libpcsclite1 opensc gpgsm scdaemon scdaemon

Nu moeten we de private key verplaatsen van jouw computer naar de smartcard. (Let op, als je hiermee verder gaat zal de private key van de computer verwijderd worden, je kunt dus best eerst deze exporteren en veilig opbergen).

Begin met het bewerken van de GPG sleutel: gpg --edit-key patrick.kox@commandoregel.be4.

Geef het commando: toggle.

Geef het commando: keytocard

Beantwoord de vraag of je de sleutel naar je kaart wil verplaatsen met Y.

Verplaats eerst key nr 3 (Authentication Key) en daarna key nr 1 (Signature Key).
Opmerking: Indien je een melding krijgt dat het een onbruikbare sleutel is, is het mogelijk dat je een te grote sleutel hebt gemaakt voor jouw type smartcard (een 4096 bit sleutel maar een smartcard die een sleutel van maximum 2048 bit opslaan).

Volg de instructies, je zal een wachtwoord en de PIN code van je smartcard moeten ingeven (de Admin PIN, niet die van de gebruiker).

Zoals je ziet kun je enkel sleutels 1 en 3 verplaatsen, niet sleutel 2. Dit komt omdat dit een andere sleutel is, en deze moeten we eerst selecteren.

Geef het commando: key 1

Je zal nu zien dat er een sterretje (*) achter ssb staat, als je nu het commando keytocard ingeeft zul je zien dat je nu enkel key 2 kunt verplaatsen.

Heb je alle sleutels verplaatst geef dan het commando quit en beantwoord de vraag om wijzigingen op te slaan met Y. De geheime sleutels zijn nu verplaatst naar de smartcard en staan niet meer op de computer zelf.

Je kunt controleren of de smartcard correct werkt met het commando gpg2 --card-status en je kunt de kaart bewerken met gpg2 --card-edit.

Als je smartcard correct werkt moet je nog enkele aanpassingen doen aan enkele configuratiebestanden om ervoor te zorgen dat je de openPGP smartcard kunt gebruiken.

Indien ze bestaan verwijder of hernoem de volgende 2 bestanden met de volgende 2 commando's

sudo mv /etc/xdg/autostart/gnome-keyring-ssh.desktop /etc/xdg/autostart/gnome-keyring-ssh.desktop.inactive

sudo mv /etc/xdg/autostart/gnome-keyring-gpg.desktop /etc/xdg/autostart/gnome-keyring-gpg.desktop.inactive

Op mijn systeem bestaat enkel het eerste bestand, en moet ik dus ook maar 1 bestand hernoemen.

Bewerk de volgende bestanden:
  1. ~/.gnupg/gpg-agent.conf en voeg de volgende regel toe:
    enable-ssh-support
  2. ~/.gnupg/gpg.conf en voeg de volgende regel toe:
    use-agent
  3. /etc/X11/Xsession.options (met sudo) en zet een hekje (#) voor de regel met :
    use-ssh-agent

Start de smartcard daemon met het commando: /usr/lib/gnupg/scdaemon --daemon

log uit en opnieuw in of herstart de computer om de wijzigingen door te voeren. Als alles goed is moet je nu in staat zijn om via SSH in te loggen met je openPGP smartcard en PIN code.

Indien je gebruik maakt van een git service zoals GitLab of GitHub (om er maar twee te noemen) kun je deze SSH sleutel ook toevoegen aan je account (voeg dan zowel de ssh-key voor de smartcard in als de publieke GPG sleutel) zo kun je veilig inloggen bij deze servers én je kunt je commits ondertekenen zodat andere gebruikers zien dat JIJ wijzigingen hebt aangebracht aan een bestand en niet iemand anders.

Dit zijn nog maar enkele dingen die je kunt doen met GPG. Zo is het ook mogelijk om sub-keys te maken, je kunt dan bijvoorbeeld een sub-key maken waarmee je e-mails ondertekend, maar als deze gecompromitteerd is maak je gewoon een nieuwe sub-key en kun je de "master" key blijven gebruiken.

Het is ook een goed idee, om als je een sleutel aanmaakt er ook een "revoke" certificaat bij maakt gpg2 --gen-revoke 9F5DDF922FAAF3EACC2EBAC3BCE5B520E95CCB66 hierbij kun je aangeven waarom je dit doet (bijvoorbeeld, sleutel is gecompromitteerd) en kun je bij verlies of diefstal de sleutel ongeldig verklaren (je maakt dit revoke certificaat best onmiddellijk aan (je hebt er toegang tot je privé sleutel voor nodig) en bewaart deze op een veilige plaats.

Meer informatie kun je altijd terugvinden in de manpages of de infopages

1 OpenPGP is een open implementatie van PGP of "Pretty Good Privacy".
2 Let op, als je deze sleutel later met bijvoorbeeld een "Hardware Token" zoals een YubiKey wil gebruiken is het mogelijk dat deze geen sleutels van 4096 bit kan gebruiken (bepaalde types van YubiKey ondersteunen enkel tot 2048 bit sleutels).
3 Merk op dat er helemaal achteraan staat: cardno:000611526534 dit geeft aan dat het om een openPGP kaart gaat met die serienummer. Als er iets ander staat (bijvoorbeeld patrick@commandoregel) dan gaat het niet om een SSH-Key op een smartcard maar een "gewone" SSH-Key die je hebt aangemaakt met ssh-keygen
4 Je kunt zowel het email adres van de sleutel als het nummer van de sleutel gebruiken. Het email adres is meestal gemakkelijker