GNUPG

GNU Privacy Guard

Online privacy en veiligheid is zeer belangrijk, om deze te verhogen kunnen we gebruik maken van privacy tools zoals gnupg. Maar wat kunnen we hier nu allemaal mee doen? gnupg kan oa. voor de volgende dingen gebruikt worden:

  1. Het ondertekenen van bestanden en E-Mail berichten
  2. Het versleutelen (encryptie) van bestanden en E-Mail berichten
  3. In combinatie met een OpenPGP compatibele smartcard kun je het ook gebruiken om bijvoorbeeld het inloggen via SSH beveiligen.

Om gnupg te kunnen gebruiken moeten we het natuurlijk eerst installeren, aangezien dit niet altijd standaard geïnstalleerd is. Gebruik hiervoor de pakketbeheerder van jouw distributie, bij een op Debian gebaseerde distributie doe je dat met sudo apt install gnupg2.

Na de installatie moeten we eerst ons sleutelpaar aanmaken. Hiervoor gebruik je het commando: gpg2 –-full-gen-key

Figuur 1: $ gpg2 --full-gen-key
$ gpg2 --full-gen-key

Hier kiezen we voor optie 1 (RSA and RSA)

De volgende vraag is welke lengte we de sleutel willen geven, hoe langer de sleutel hoe veiliger, maar dit kan (vooral op oudere hardware) wel negatieve invloed hebben op de prestaties (en duurt natuurlijk langer om aan te maken). De standaard waarde is momenteel 3072 bit, maar ik kies zelf altijd voor de maximum lengte van 4096 bit.

Wil je de sleutel op een OpenPGP smartcard gebruiken of met een hardware-dongle (zoals een YubiKey) moet je wel kijken of deze het formaat van de sleutel ondersteund. Zo kun je bij een YubiKey 4 zonder problemen een 4096 bit sleutel gebruiken, maar bij een YubiKey nano is dat maar 2048 bit.

Figuur 2: Kies lengte van de sleutel
Kies lengte van de sleutel

Na het kiezen van de lengte van de sleutel kunnen we een eventuele geldigheid instellen (bijvoorbeeld tot 1 jaar na uitgave), Dit heeft wel als nadeel dat als je een nieuwe sleutel moet aanmaken omdat deze is vervallen alle mensen die jouw oude sleutel "ondertekend" hebben, dit opnieuw moeten doen bij de nieuwe sleutel. Dit onderteken is een cruciaal deel van de manier waarom het zogenaamde "web of trust" werkt bij GPG. Als je bijvoorbeeld van mij een email krijgt die digitaal is ondertekend met mijn sleutel dan weet je nog niet of deze wel echt van mij komt omdat iedereen een sleutel kan aanmaken op naam van een ander. Maar is deze sleutel ondertekend door bijvoorbeeld Bernard en/of Jolanda en je weet dat de sleutel waarmee ze deze hebben ondertekend echt van hun is dan ben je al wat zekerder dat de sleutel echt van mij afkomstig is.

Daarom worden er binnen bepaalde groepen wel eens zogenaamde key-signing parties of "sleutel-ondertekenings" feestjes georganiseerd. Op deze feestjes ondertekenen de aanwezigen de sleutels van elkaar en zo is men zeker dat een bepaalde sleutel echt aan een bepaalde persoon toebehoord.

Figuur 3: Geef in hoe lang de sleutel geldig mag blijven
Geef in hoe lang de sleutel geldig mag blijven

In dit voorbeeld maak ik een sleutel aan die na 1 jaar vervalt, dus geef ik 1y in:

Figuur 4: bevestig dat de sleutel maar 1 jaar geldig mag zijn
bevestig dat de sleutel maar 1 jaar geldig mag zijn

De keuze wordt nog eens herhaalt met de exacte datum waarop de sleutel zal vervallen (indien je hiervoor hebt gekozen).

Vervolgens moet je enkele privé gegevens ingeven, zoals Echte naam, E-Mail adres en een opmerking:

Figuur 5: Geef privé gegevens in
Geef privé gegevens in

Het email adres wordt gebruikt om bijvoorbeeld met Enigmail (met Thunderbird) E-mails te ondertekenen/versleutelen. Enigmail kan de sleutel zelf selecteren aan de hand van het E-mail adres. Wil de deze sleutel voor meerdere E-Mail account's gebruiken, dan kun je deze later toevoegen als de sleutel eenmaal is aangemaakt.

Wil je nog iets aanpassen, dan kan dat met de N, C of E, is alles correct dan druk je op O

Na bevestiging moet je een wachtzin instellen voor de sleutel, daarna zal de sleutel gegenereerd worden, omdat hiervoor veel "entropie" nodig is zal gnupg aanbevelen om andere dingen te doen terwijl dit gebeurd (zoals schijfbewerkingen, de muis bewegen, het keyboard gebruiken, etc.). Hoe langer de sleutel hoe langer dit duurt.

Figuur 6: gpg genereert de sleutels
gpg genereert de sleutels

De sleutel is nu klaar voor gebruik:

Figuur 7: Sleutelpaar is aangemaakt
Sleutelpaar is aangemaakt

Het ID van de sleutel is in mijn voorbeeld: 414491D1A57636F7006CEED1D4CA64E1C2C549CE , maar je kunt deze ook aanspreken met enkel de laatste 8 tekens van deze tekenreeks. In mijn geval dus met C2C549CE.

Om te kijken of de sleutel is toegevoegd aan onze "sleutelbos" gebruiken we het commando gpg2 –-list-keys

Figuur 8: $ gpg2 --list-keys
$ gpg2 --list-keys

Zoals je kun zien staat mijn nieuwe sleutel helemaal onderaan de lijst.

Het eerste wat we nu moeten doen is een backup maken van de geheime en publieke sleutel. De publieke sleutel mag je vrij verspreiden (via een key-server, email, als tekstbestand, ...) maar de geheime sleutel mag niet in andermans handen vallen. Vaak zal men dus aanraden om de backup van de geheime sleutel in een kluis te bewaren. Als je gebruik maakt van en openPGP smartcard of YubiKey 4 (deze werkt voor het systeem hetzelfde als een openPGP smartcard met cardreader) zal de geheime sleutel na het koperen van de sleutel naar de smartcard dan ook van het systeem verwijderd worden. Maak dus de backups voor je de sleutel naar een smartcard kopieert want eenmaal op de openPGP smartcard kan deze niet meer van de kaart gehaald worden (om veiligheidsredenen) je kunt deze dan nog enkel overschrijven met een nieuwe sleutel).

exporteer de geheime sleutel met het commando gpg2 --export-secret-key -a "gebruikersnaam" > private.key (of) gpg2 --export-secret-key -a SLEUTEL-ID > private.key

Dit commando exporteert de geheime sleutel in "ASCII" naar het bestand private.key: in onderstaande afbeelding zie je ook een deel van de inhoud van private.key

Bij het exporteren van een geheime sleutel moet je ook altijd de wachtzin ingeven om deze te kunnen exporteren. Dit is niet te zien op mijn screenshots, omdat de beveiliging van mijn systeem dit niet toelaat.

Figuur 9: inhoud private.key
inhoud private.key

Kopieer deze sleutel naar een USB stick en bewaar deze op een veilige plaats, verwijder daarna het bestand private.key van het systeem.

De laatste stap is de publieke sleutel exporteren, dit doe je met het commando: gpg2 –-export -a "gebruikersnaam" > public.key

Figuur 10: $ gpg2 --export -a C2C549CE > public.key
$ gpg2 --export -a C2C549CE > public.key

De publieke sleutel mag je zoals eerder al gezegd delen met de hele wereld, al kiezen bepaalde mensen ervoor om deze enkel te delen met mensen die ze echt kennen. Als je de sleutel wil gebruiken om E-mails te ondertekenen kun je dit bestand bijvoorbeeld toevoegen als bijlage bij je E-mails, of je kan de sleutel uploaden naar een keyserver zodat men je sleutel daar kan downloaden. Als je een website hebt kun je het bestand ook uploaden naar deze site en een link voorzien in je E-mail handtekening.

De publieke sleutel ziet er hetzelfde uit als een geheime sleutel:

Figuur 11: inhoud public.key
inhoud public.key

Wil je nu een E-mail versleuteld versturen, dan heb je de publieke sleutel van de ontvanger(s) nodig, om deze te importeren download je de publieke sleutel van deze persoon en importeer je deze met het commando gpg2 –-import public.key

Als je meerdere identiteiten wil koppelen aan een sleutel dan kun je deze bewerken met gpg2 –-edit-key ID

Je kunt dan gebruikers toevoegen met adduid.

Alle mogelijkheden kun je terugvinden met help als je de sleutel aan het bewerken bent, en met q of quit sluit je af.

Doe deze bewerkingen wel voor je de geheime sleutel exporteert.

Aangezien dit een commandoregel artikel is gaan we het gebruik van GnuPG hier verder beperken tot het versleutelen en ontsleutelen van bestanden in de commandoregel, wil je GnuPG gebruiken voor je E-mail verkeer, dan kun je bijvoorbeeld gebruik maken van claws-email een speciale E-mail cliënt gericht op beveiliging of als je liever thunderbird gebruikt, dan is er enigmail als extensie.

Als eerste gaan we een bestand versleutelen zodat een ander met de correcte geheime sleutel het bestand weer kan ontsleutelen, hiervoor gebruiken we het commando:gpg2 -e -u afzender -r ontvanger BESTAND als we dit wat nader bekijken zien we:

  • -e : encrypt (gebruik encryptie)
  • -u : gebruik deze sleutel (verzender is gebruikers ID van de sleutel of bijvoorbeeld: C2C549CE).
  • -r : de ontvanger van het versleutelde bestand.
  • BESTAND : het bestand dat we willen versleutelen.

Laat ik als voorbeeld mijn geëxporteerde geheime sleutel versleutelen en deze beschikbaar te maken voor Gerald Combs (de man achter Wireshark).

het commando is dan gpg2 -e -u C2C549CE -r gerald@wireshark.org private.key (natuurlijk moet ik de publieke sleutel van Gerald wel in mijn sleutelbos hebben).

Figuur 12: $ gpg2 -e -u C2C549CE -r gerald@wireshark.org private.key
$ gpg2 -e -u C2C549CE -r gerald@wireshark.org private.key

Het bestand private.key is nu versleuteld end opgeslagen als private.key.gpg als we dit bestand nu bekijken met cat zien we het volgende:

Figuur 13: $ cat private.key.gpg
$ cat private.key.gpg

Het bestand kan nu veilig verzonden worden via bijvoorbeeld E-Mail, Tegenwoordig gebruiken veel email servers veilige verbindingen, maar niet iedere server of gebruiker gebruikt dit ook echt. Als je dit niet gebruikt dan zal het email bericht in "plain text" verzonden worden van jouw computer naar de SMTP server en/of in "plain text" van de POP3/IMAP4 server van de ontvanger. Deze E-mails kunnen onderschept (man-in-the-middle) worden en dus gewoon worden uitgelezen (ook standaard FTP werkt zo). Dus verstuur nooit zomaar een wachtwoord of andere privé gegevens via E-mail, Denk er ook aan dat bij E-mail het concept "briefgeheim" niet bestaat (hoewel men vaak disclaimers in email handtekeningen plaatst die het tegendeel beweren), dus als een 3de je email ontvangt (omdat je hem per-ongeluk naar het verkeerde E-mail adres stuurt) kun je deze niet verbieden om de inhoud openbaar te maken.

Als ik het bestand nu wil ontsleutelen met het commando gpg2 –d private.ket.gpg zal dit niet lukken, dit is omdat deze is versleuteld met de sleutel van Gerald Combs en ik niet in het bezit ben van zijn geheime sleutel.

Figuur 14: $ gpg2 -d private.key.gpg
$ gpg2 -d private.key.gpg

Wil ik het bestand nu voor mezelf versleutelen dan gebruik ik mijn eigen sleutel ID als deze van de ontvanger:

Figuur 15: $ gpg2 -e -u C2C549CE -r C2C549CE private.key
$ gpg2 -e -u C2C549CE -r C2C549CE private.key

Het originele bestand zal niet verandert of gewist worden, dus als je bestanden wil versleutelen zodat anderen deze niet kunnen uitlezen moet je na het versleutelen het bestand grondig verwijderen.

Nu kan ik het bestand wel ontsleutelen aangezien mijn geheime sleutel op dit systeem aanwezig is:

Figuur 16: $ gpg2 -d private.key.gpg
$ gpg2 -d private.key.gpg

Zoals je kunt zien zal gnupg de output dumpen op het beeldscherm en niet naar een bestand, dus wil je de inhoud naar een bestand schrijven dan geeft je dit aan bij het commando: gpg2 -d private.key.gpg > private.key.txt

Figuur 17: $ gpg2 -d public.key.gpg > public.key.txt
$ gpg2 -d public.key.gpg > public.key.txt

Het bestand is nu weer ontsleuteld en opgeslagen in het bestand private.key.txt

Tot zover het versleutelen van bestanden.

Als laatste gaan we de sleutel nog gebruiken om een bestand te ondertekenen.

Om een bestand te onderteken gebruiken we gpg2 –-sign bestand:

Figuur 18: $ gpg2 --sign -u C2C549CE public.key
$ gpg2 --sign -u C2C549CE public.key

Omdat ik zelf meerder privé sleutels heb moet ik ingeven welke ik wil gebruiken, heb je er maar 1 of wil je de standaard sleutel gebruiken dan hoef je de -u parameter niet mee te geven.

GnuPG heeft nu een bestand met naam public.key.gpg aangemaakt.

Dit is een ondertekende versie van het originele bestand, dit kun je versturen naar een ontvanger en deze kan de handtekening controleren met het verify commando:

Figuur 19: $ gpg2 --verify public.key.gpg
$ gpg2 --verify public.key.gpg

Wil je ontvanger het bestand lezen dan moet hij het exporteren met gpg2 --output public.key --decrypt public.key.gpg:

Figuur 20: $ gpg2 --output public-key --decrypt public.key.gpg
$ gpg2 --output public-key --decrypt public.key.gpg

In dit geval moet de ontvanger géén wachtwoord ingeven omdat het bestand enkel ondertekend is.

Tip:
  • Sleutelbeheer
  • Wil je een GUI gebruiken om je sleutels te beheren of om sleutels van andere personen snel te kunnen ondertekenen, controleren, ... kun je een programma zoals gpa installeren.

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