DEEL 2 SSH Beveliging verhogen dmv een OpenPGP SmartCard of
YubiKey
Wat hebben we nu nodig om dit voor elkaar te krijgen:
Tenminste 1 openPGP v21 smartcard of YubiKey 42
(oudere versies werken niet omdat deze geen OpenPGP functie
ondersteunen) de YubiKey Neo (ondersteund NFC) kan momenteel tot max
2048 bit sleutels opslaan3, de
OpenPGP v2 kaart en de YubiKey 4 kunnen tot 4096 bit
dus let hier wel op bij het maken van de GnuPG sleutels !
Kaartlezer, niet nodig met een YubiKey of een Gemalto Shell Token4 als je voor een SIM uitvoering kiest.
In België is er een kaartlezer die veel gebruikt wordt met de eID kaart: (ACR38U)
het is mogelijk dat er voor deze kaartlezer aparte drivers geïnstalleerd moeten
worden (via de software van de eID) de afbeelding toont wel
een verouderd model, dus het is mogelijk dat mensen die recent een kaartlezer hebben
aangekocht een andere uitvoering hebben. Zo heeft bijv. de Christelijke Mutualiteit (CM)
in België een groene uitvoering gehad).
De groene ACR38U van de C.M.
Je kunt ook opteren voor een kaartlezer met ingebouwd keypad (voor nog meer
beveiliging).
Alle hardware die nodig is kun je bestellen bij FLOSS-Shop bij mijn weten de enige
webwinkel waar je deze kunt kopen 5.
Laten we nu beginnen met het aanmaken van de GnuPG sleutels. Open een Terminal venster
(zoals altijd)
Maak een sleutelpaar aan met gnupg: $ gpg --full-generate-key
Kies de standaard optie : 1
De standaard is 2048, gebruik dit als je een YubiKey NEO wilt gebruiken, anders gaan we voor 4096
Hoe lang willen we de sleutel geldig laten blijven, bij bedrijven is het misschien handig
de sleutels van personeelsleden te laten vervallen voor extra veiligheid, maar wij gaan
hier gewoon voor de standaard optie (0) nul of nooit dus.
Sleutel vervalt helemaal niet, zijn we zeker ? Ja of Nee ? (in ons geval Ja)
Geef de nodig informatie:
Als de gegevens goed zijn kiezen we voor O
Nu zal GnuPG naar een wachtwoord vragen en een bevestiging. Daarna zal de sleutel
gegenereerd worden.
De sleutels zijn nu gemaakt en geplaatst in ~/.gnupg/
Ten eerste gaan we de "secret" sleutel back-uppen: gpg --export-secret-keys -a
A2E15FE6 > secret.asc
Hier gebruik ik de laatste 8 tekens van de vingerafdruk van de sleutel om aan te geven
van welke sleutel ik de geheime sleutel wil exporteren. je kunt ook de volledige sleutel
opgeven : gpg --export-secret-keys -a 107FE3FD5B143D1CE1849058D632F80EA2E15FE6 >
secret.asc
We hebben nu een "ascii armor" export gedaan van de geheime sleutel:
$ cat secret.asc
Maak een back-up van dit bestand en bewaar het op een veilige plaats. Het is
uitermate belangrijk dat niemand toegang heeft tot dit bestand, want met dit bestand
kunnen ze jouw beveiliging breken en handtekeningen in jouw naam zetten, gecodeerde
bestanden ontsleutelen, etc.
Nu maken we ook een back-up van de publieke sleutel :
gpg --export -a 107FE3FD5B143D1CE1849058D632F80EA2E15FE6 > public.asc
De inhoud van deze sleutel is:
$ cat public.asc
De publieke sleutel mag je uploaden naar keyservers, toevoegen aan jouw email handtekening, enz.
hoe meer mensen deze sleutel hebben hoe meer mensen jouw gecodeerde berichten kunnen
sturen of jouw handtekening kunnen verifiëren. maar hiervoor moeten deze mensen eerst
jouw publieke sleutel ondertekenen en/of het niveau van vertrouwen aangeven.
Dit is echter voor gebruik met GnuPG en encryptie en handtekeningen. Omdat dit artikel
gaat over het gebruiken van deze sleutel met een OpenPGP smartcard / YubiKey gaan we
hier niet verder op in.
Steek de kaart in de kaartlezer of steek de YubiKey in een vrije USB poort. Wacht enkele
seconden en kijk of GnuPG de kaart kan vinden en uitlezen : $ gpg
--card-status
In mijn geval is het een YubiKey en is deze al volledig geconfigureerd.
Nu gaan we eerst de smartcard/yubikey bewerken (de standaard PIN codes veranderen bijv.)
$ gpg --card-edit
gpg/card> admin Admin commands are allowed geef
admin in om de administratie commando's in te schakelen. Met help krijg je een lijst met
mogelijke opties:
Nu kun je de kaart personaliseren. Met name geef je jouw naam in url
verwijst naar een locatie waar jouw publieke sleutel gedownload kan worden (is handig
dus zeker doen).
Je kiest zelf welke informatie je wilt veranderen/ingeven op de card (meestal, name, url,
lang, sex)
Met generate kun je ook een sleutel genereren vanaf de
smartcard/yubikey maar met de sleutel op een PC kun je deze naar meerdere kaarten
schrijven (is handig als je een 2de kaart als back-up wilt hebben).
Het belangrijkste hier is de menuoptie passwd
Als
je een OpenPGP smartcard hebt met je de PIN (optie 1) en Admin PIN (optie 3) zeker
veranderen, dit zijn namelijk standaard codes die bij iedere kaart hetzelfde zijn ! (De
FSFe Fellowship kaart 6 komt met een unieke PIN en Admin PIN dus deze is enkel bekend bij
jouw, maar veranderen is nog steeds een goede gewoonte).
Je met bij het instellen van de PIN codes wel 2 dingen in gedachte houden:
Minimum PIN lengte voor "gewone" PIN code is : 6 tekens
Minimum PIN lengte voor "Admin" PIN code is 8 tekens
Als je minder geeft dan wordt de PIN code niet aanvaard ! De Maximum lengte van de PIN
code is weergegeven als je "gpg --card-status" of "gpg --card-edit"
uitvoert:
Dus beide PIN codes mogen maximum 127 tekens hebben (in mijn geval) dus dat moet zeker veilig
genoeg zijn.
Nu we de smartcard/yubikey klaar hebben kunnen we beginnen met het verplaatsen van de
GnuPG Sleutels van de PC naar de Smartcard/yubikey. Let op ! na het schrijven van de
sleutel naar de smartcard/yubikey zal GnuPG (bij het afsluiten) vragen op de wijzigingen
op te slaan, als je nu JA kiest, zal de geheime sleutel van de PC gewist worden (voor de
veiligheid) dus doe dit pas nadat je een back-up van deze sleutel gemaakt hebt, of
indien je meerdere smartcards wilt na het schrijven van de laatste kaart.
Om de sleutels naar de kaart te schrijven gebruiken we de volgende methode :
$ gpg --edit-key patrick@linuxusers.nl
Hier zien we 2 sleutels de eerste is SC (Signature/Certificate) en de tweede is
E (Encrypt) nu gaan we de sleutels naar de smartcard/yubikey schrijven (in
deze volgorde !)
Nu gaan we de sleutels naar de smartcard/yubikey schrijven (in deze volgorde !)
gpg toggle
Geeft het commando : keytocard
Selecteer 3 Authentication key
Ik heb al een sleutel op mijn kaart, dus ik krijg deze foutmelding, als de kaart nog leeg
is of als je voor vervangen kiest moet je het wachtwoord van de geheime sleutel ingeven
(het wachtwoord dat we hebben aangemaakt tijdens het genereren van de sleutels) en
daarna de Admin PIN code.
Als deze bewerking slaagt, kunnen we de Signature key kopieren:
Hier weer hetzelfde verhaal.
Je zal nu wel gemerkt hebben dat optie 2 (de Encryptie sleutel) niet beschikbaar was. dat
gaan we nu aanpakken.
Als we terug naar boven gaan zien we dat de encryption key een andere sleutel is
(1EB5E1AED69298D6) daarom moeten we deze selecteren voor we deze kunnen kopiëren naar de
kaart.
key 1EB5E1AED69298D6
Aan het sterretje na ssb zien we dat nu de E key gekozen is. nu kopiëren we deze sleutel ook naar
de kaart:
Nu zijn alle sleutels gekopieerd naar de smartcard/yubikey
Met quit sluiten we nu af. Als je de vraag krijgt om de wijzigingen op
te slaan kies je ja, als de geheime sleutel gebackupped is en wanneer je klaar
bent met de bewerkingen en de geheime sleutel dus van de PC mag verwijderd
worden.
Als je nu gpg --card-status ingeeft, zal je nu moeten zien dat er 3
sleutels op de smartcard/yubikey staan.
Als laatste moeten we nu nog wat aanpassingen doen om ervoor te zorgen dat de smartcard
door SSH gebruikt kan worden.
Als de bestanden gnome-keyring-ssh.desktop en gnome-keyring-gpg.desktop in
de directory /etc/xdg/auto- start/gnome-keyring-ssh.desktop bestaan moeten deze
uitgeschakeld worden. Bijv. met:
sudo mv /etc/xdg/autostart/gnome-keyring-ssh.desktop /etc/xdg/autostart/gnome-keyring-ssh.desktop.inactive en sudo mv /etc/xdg/autostart/gnome-keyring-gpg.desktop /etc/xdg/autostart/gnome-keyring-gpg.desktop.inactive
En start pcscd indien nodig sudo systemctl start pcscd (systemD) of sudo
pcscd (sysVinit)
In bepaalde gevallen krijg je een foutmelding bij gpg2 --card-status
en ssh-add -L probeer in dat geval PCSCD uit te schakelen
(sudo killall pcscd), hoe dit komt weet ik niet, maar op mijn
Desktop geeft dit geen problemen, maar op mijn laptop heb ik PCSCD moeten
uitschakelen.
Bewerk het bestand ~/.gnupg/gpg-agent.conf en voeg de volgende regel toe (bij
mij bestaat die bestand niet, dus moet ik dit aanmaken, en het heeft dus maar 1 regel:
Bewerk het bestand ~/.gnupg/gpg.conf en voeg use-agent toe onderaan het
bestand.
Bewerk het bestand /etc/X11/Xsession.options en zet of
"comment"use-ssh-agent uit (die doe je door een "hashtag" (#)
voor het woord te zetten.
Start de SmartCard daemon (als gewone gebruiker). /usr/lib/gnupg/scdaemon
--daemon
Herstart de computer.
Nu kunnen we kijken of de kaart werkt met SSH
ten eerste controleren we of de kaart werkt met GnuPG
gpg --card-status
Als dit de informatie van de smartcard/yubikey geeft weten we dat dit al correct
werkt.
Nu kijken we of SSH de kaart ziet:
ssh-add -L
En dit willen we zien, de kaart wordt herkent en de sleutel wordt weergegeven. Als we
deze sleutel nu plaatsen in het authorized_keys van de server dan kunnen we met deze
smartcard/yubikey va- nop elke computer op het netwerk inloggen met deze
smartcard/yubikey (zolang de PC's zo zijn ingesteld dat SSH -L de sleutel van de
smartcard/yubikey weergeeft).
$ gedit ~/.ssh/authorized_keys
Als je meerdere kaarten gebruikt, moet je bij het gebruiken van een andere kaart de sleutel eerst wissen (gaat ge- makkelijk met het programma gpa) als de sleutel eenmaal gewist is moeten we de publieke sleutel weer importeren.
Als de publieke sleutel die we geëxporteerd hebben beschikbaar is via het internet en het
correcte URL staat op de kaart is dat simpel door het volgende te doen:
$ gpg --card-edit
fetch
En afsluiten met quit. gpg/card> quit
Nu geven we het commando $ gpg --card-status in en vanaf nu kunnen we
de andere kaart gebruiken, helaas moet je dit iedere keer doen als we een andere kaart
gebruiken dus is het niet aangeraden om verschillende smartcards/yubikey's te gebruiken.
Denk er ook aan dat na het importeren van de publieke sleutel je deze opnieuw moet
vertrouwen (dit kan ook simpelweg gedaan worden met gpa).
1 tijdens het maken van dit artikel was er nog geen spraken van een versie 3
van de OpenPGP smartcard. Terwijl men nu (juni 2018) al een versie 3.3
verkoopt. Deze is compatibel met GnuPG versie 2 of hoger, dus deze zou in
principe ook moeten werken. Maar ik heb geen versie 3.3 kaart om dit te
controleren.
2 Het is mogelijk dat ook andere hardware tokens die de OpenPGP smartcard
functionaliteit bieden werken, maar ook deze heb ik niet kunnen testen.
3 bij een YubiKey Neo moet je dus zorgen dat je een 2048 bit key genereerd en
geen 4096 bit sleutel, maar het kan zijn dat de huidige YubiKey Neo deze
keys wel ondersteunt. Controleer dus eerst bij de fabrikant
4 Zowel de Gemalto Shell Token als de SIM Uitvoering van de OpenPGP kaart zijn
niet meer te kopen.
5 ter verduidelijking, dit is de enige webwinkel
die ik ken waar je de OpenPGP smartcard kunt kopen. De cardreaders zijn op
meerdere plaatsen te koop en als je goed zoekt de Smartcard waarschijnlijk
ook.
6 De FSFe is ondertussen gestopt met het geven van deze
Fellowship kaarten en hun Fellowship programma is veranderd in een FSFe Supporter
programma