Vandaag gaan we een bestand versleutelen met GnuPG. Dit kan je gebruiken om een bestand met wachtwoorden of persoonlijke informatie veiliger te bewaren.
GNU Privacy Guard (GnuPG of GPG) is een alternatief met een GPL licentie voor de cryptografische software PGP. GnuPG volgt dezelfde IETF standaard RFC 4880 als OpenPGP. Daardoor zijn de PGP versies (en Veridis Filecrypt) en GnuPG en OpenPGP systemen compatibel en uitwisselbaar.
Deze software wordt veel gebruikt in mail programma's waardoor je berichten kunt tekenen en versleutelen bij het verzenden en ontvangen. Wij concentreren ons op terminalopdrachten om een bestand te versleutelen.
Dit is de eenvoudigste manier en gebruikt een wachtwoord om een bestand te versleutelen, met hetzelfde wachtwoord kan je het bestand terug ontcijferen. De sleutel is een gedeeld geheim tussen twee of meer personen om persoonlijke gegevens privé te houden. In de praktijk hangt de veiligheid van dit systeem af van het gekozen wachtwoord (veilig wachtwoord mag niet te achterhalen zijn). Dit systeem wordt bijvoorbeeld gebruikt om via e-mail een versleuteld bericht te versturen en via een ander communicatiemiddel het wachtwoord mee te delen (telefoon, instant message, chat).
Om als voorbeeld te gebruiken, maak ik het bestand mijngeheimdocument.txt aan met de tekst geheim 1234:
dany@linux-att3:~>echo "geheim 1234" > mijngeheimdocument.txt
dany@linux-att3:~>cat mijngeheimdocument.txt
geheim 1234
Nu gebruiken we de gpg optie -c (of --symmetric) om te versleutelen met een wachtwoord of wachtzin. De standaard gebruikte versleutelmethode is CAST5 en kan je aanpassen met de optie --cipher-algo:
dany@linux-att3:~> gpg -c mijngeheimdocument.txt
gpg: directory `/home/dany/.gnupg' created
gpg: new configuration file `/home/dany/.gnupg/gpg.conf' created
gpg: WARNING: options in `/home/dany/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/home/dany/.gnupg/pubring.gpg' created
Tijdens dit proces moet je in een dialoogvenster tweemaal een wachtzin (wachtwoord) opgeven (tweede maal als controle op tikfouten).
Bij het eerste gebruik van gpg op een computer wordt de verborgen map .gnupg aangemaakt en worden daarin enkele bestanden aangemaakt.
De actieve map bevat nu ook een versleutelde versie van mijn bestand:
dany@linux-att3:~> ls -alrt mijngeheimdocument.txt*
-rw-r--r-- 1 dany users 12 15 mrt 14:35 mijngeheimdocument.txt
-rw-r--r-- 1 dany users 69 15 mrt 14:44 mijngeheimdocument.txt.gpg
Om de versleuteling te controleren, kan je de inhoud weergeven. Het versleutelde bestand krijgt standaard dezelfde bestandnaam als het originele bestand aangevuld met .gpg.
dany@linux-att3:~> cat mijngeheimdocument.txt.gpg
Waarbij schijnbaar willekeurige tekens verschijnen.
Nu kan je het versleutelde bestand houden en het onversleutelde verwijderen. Om de inhoud van het versleutelde bestand terug leesbaar weer te geven, gebruik je de volgende opdracht:
dany@linux-att3:~>gpg -d mijngeheimdocument.txt.gpg
gpg: keyring `/home/dany/.gnupg/secring.gpg' created
gpg: CAST5 encrypted data
gpg: encrypted with 1 passphrase
geheim 1234
gpg: WARNING: message was not integrity protected
Gpg schrijft de uitvoer standaard naar het scherm (standaard uitvoerapparaat), om het naar een bestand te schrijven, gebruik je de optie -o bestandsnaam:
dany@linux-att3:~>gpg -o mijnontcijfertdocument.txt -d mijngeheimdocument.txt.gpg
gpg: CAST5 encrypted data gpg: encrypted with 1 passphrase gpg: WARNING: message was not integrity protected dany@linux-att3:~>ls -l mijn*
-rw-r--r-- 1 dany users 12 15 mrt 14:35 mijngeheimdocument.txt -rw-r--r-- 1 dany users 69 15 mrt 14:44 mijngeheimdocument.txt.gpg -rw------- 1 dany users 12 15 mrt 15:14 mijnontcijfertdocument.txt
GPG kan ook gebruik maken van een publieke-private sleutel. Het voordeel van het systeem met een publieke-private sleutel is dat je de publieke sleutel openbaar kunt bewaren en gebruiken om bestanden te versleutelen. Met een publieke sleutel versleutelde bestanden kunnen enkel met behulp van de bijhorende private sleutel ontcijfert worden.
De private sleutel moet exclusief in de handen van de eigenaar van het certificaat blijven. De eigenaar gebruikt deze sleutel om bestanden die hij (of zij) ontvangt te ontcijferen.
De publieke sleutel mag iedereen op de wereld kennen. Deze wordt enkel gebruikt om bestanden bestemt voor de eigenaar van het certificaat te versleutelen. Enkel de bezitter van de bijhorende private sleutel kan het bestand ontcijferen.
De publieke sleutel mag dus zonder enige controle verspreid worden. Zelf als de sleutel in handen komt van personen met slechte bedoelingen vormt dit geen enkel risico. Je moet dus enkel zorgen dat de private sleutel exclusief eigendom van eigenaar blijft.
Eerst genereren we een een publiek/privaat sleutelpaar met de --gen-key optie van gpg:
dany@linux-att3:~>gpg --gen-key
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Please select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) Your selection? 1 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096 Requested keysize is 4096 bits Please specify how long the key should be valid. 0 = key does not expire= key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Key is valid for? (0) 0 Key does not expire at all Is this correct? (y/N) y GnuPG needs to construct a user ID to identify your key. Real name: Dany Pinoy Email address: dany.pinoy@pindanet.be Comment: You selected this USER-ID: "Dany Pinoy " Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o You need a Passphrase to protect your secret key. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. GHFEZGHJGFJT FZB CBCIYUI YIÉUY9+8+95694VEG7QEC9878esighgvnfybvy"ay"tbfihu,65+4+589+65+659+ ggfgdsjgfjgfyuyucgyufyugfucbbuydgdihdfuihd54564684984987494894azrfhazghfjzbafagfy"gfyubafbfihfoinkncc cé ucou hfigfigfi764f874g7g9g48g76gh747g9v84vz79h798h9z'h4h68z798z7h68r49zh h7b'7b 98z74 v7g9a7487b98"79^[OR^[OP b^[[D^[[C^[[Atz^[[Hb^[[Hgb^[[C^[[A^[[Hg^[[A^[[Hb^[[5~^[[Hb^[[5~e§/bg4e687 9'ag997tf/g^[[5~g^[[Aa^[[Htg^[[5~/(g(9 7gvg8a7f9g9a7tb9/y9/y^[[5~^[[5~§^[[6~h*//ét gt/ath/ a^[[5~g/^[[5~/gah*y&^[OQf^[[5~/ b§nyh9//&gv9av7g9gpg: /home/dany/.gnupg/trustdb.gpg: trustdb created gpg: key ED86F197 marked as ultimately trusted public and secret key created and signed. gpg: checking the trustdb gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u pub 4096R/ED86F197 2014-03-15 Key fingerprint = 2612 4750 E6CB 6CFF 9F10 CA92 77F0 B512 ED86 F197 uid Dany Pinoy sub 4096R/728DCC70 2014-03-15
Geef de gevraagde gegevens op. In het voorbeeld hebben we een RSA sleutel met 4096 bits aangemaakt voor de gebruiker met een naam en een e-mailadres zonder commentaar (beschrijving). De sleutels kan je controleren met de opties --list-keys en list-secret-keys:
dany@linux-att3:~>gpg --list-keys
/home/dany/.gnupg/pubring.gpg ----------------------------- pub 4096R/ED86F197 2014-03-15 uid Dany Pinoysub 4096R/728DCC70 2014-03-15 dany@linux-att3:~> gpg --list-secret-keys
/home/dany/.gnupg/secring.gpg ----------------------------- sec 4096R/ED86F197 2014-03-15 uid Dany Pinoyssb 4096R/728DCC70 2014-03-15
Nu kan je een bestand versleutelen met onze publieke sleutel, in reële omstandigheden verspreidt je de publieke sleutel via e-mail of op een website zodat anderen er gebruik van kunnen maken:
dany@linux-att3:~>rm mijngeheimdocument.txt.gpg
dany@linux-att3:~>gpg -e -r dany.pinoy@pindanet.be mijngeheimdocument.txt
Weer wordt een mijngeheimdocument.txt.gpg aangemaakt, maar deze keer is het bestand veel groter.
De gebruikte opties staan voor:
-e Versleutel de gegevens (Encrypt data).
-r Voor de gebruiker. Indien GnuPG niet weet welke gebruiker (sleutels) gebruikt moeten worden, wordt ernaar gevraagd.
Om een bestand te ontcijferen, gebruikt je zoals voorheen de opties -d en -o:
dany@linux-att3:~>rm mijnontcijfertdocument.txt
dany@linux-att3:~>gpg -o mijnontcijfertdocument.txt -d mijngeheimdocument.txt.gpg
You need a passphrase to unlock the secret key for user: "Dany Pinoy" 4096-bit RSA key, ID 728DCC70, created 2014-03-15 (main key ID ED86F197) gpg: encrypted with 4096-bit RSA key, ID 728DCC70, created 2014-03-15 "Dany Pinoy "
Het bestand mijnontcijfertdocument.txt bevat nu de leesbare originele tekst.
Om bestanden voor andere personen te kunnen versleutelen, moet je hun publieke sleutels aan uw sleutelbos (keyring) toevoegen:
gpg --import KEYFILE
Daarna moet je zorgen dat gpg de sleutel vertrouwd. Anders krijg je meldingen in de aard van:
It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Use this key anyway? (y/N)
Om een sleutel te vertrouwen, voer je de volgende opdracht uit:
gpg --edit-key NAME
GPG toont wat informatie, een regel zoals:
trust: undefined validity: unknown
Er verschijnt een opdracht omgeving, waar je de volgende opdracht uitvoert:
Command> trust Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 Do you really want to set this key to ultimate trust? (y/N) y
Voer daarna de opdracht quit
uit.
Nogmaals de opdracht gpg --edit-key NAME
uitvoeren, toont een regel met vertrouwen:
trust: ultimate validity: ultimate