commit 517e8092e8e29c22f2fb07d266872af7c86c88cb Author: Paul Wagener Date: Thu Feb 1 10:01:05 2018 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file diff --git a/500.html b/500.html new file mode 100644 index 0000000..2b452eb --- /dev/null +++ b/500.html @@ -0,0 +1 @@ +Internal Server Error diff --git a/encryptie.html b/encryptie.html new file mode 100644 index 0000000..3b6d3ac --- /dev/null +++ b/encryptie.html @@ -0,0 +1,312 @@ +{% extends "base.html" %} {% block content %} + +

Encryptie & Signen

+ +

Deze week gaan we nog een laagje dieper en kijken naar (a)symmetrische encryptie, sleutels, signen en PGP.

+ +

Symmetrische encryptie

+ +

Dat encryptie betekent dat je bestandjes of tekst versleuteld wist je waarschijnlijk al, maar wist je ook dat er twee soorten + encryptie zijn? Symmetrische en assymetrische encryptie zijn verschillende technieken die je beide in tandem kan gebruiken + om je bestanden, berichten en verbindingen te beveiligen.

+ +

Stel, Alice wil een geheim bericht versturen naar Bob. Alice kan het bericht geheim maken door het door een encryptiealgoritme + te halen. Dit neemt het bericht van Alice en een geheime sleutel als input. De sleutel is in dit geval een random string + die alleen Alice weet. Het algoritme encrypt het bericht naar een gecodeerde versie. Zonder de sleutel te hebben is het + onmogelijk om terug te rekenen wat het originele bericht was. Alice stuurt met een gerust hart dit gecodeerde bericht via + internet delen, zonder bang te zijn dat iemand het kan lezen.

+ + + +

Alice wil het bericht aan Bob sturen, om ervoor te zorgen dat Bob het bericht kan ontcijferen heeft Alice hem de geheime + sleutel van tevoren gegeven. Bob kan het gecodeerde bericht samen met + dezelfde geheime sleutel die Alice heeft gebruikt door het bijbehorende decryptie algoritme halen om de originele data + weer terug te krijgen.

+ +

Bob kan op dezelfde manier ook berichten naar Alice sturen die Alice weer kan ontcijferen. Zolang de sleutel geheim blijft + kunnen Alice en Bob veilig met elkaar communiceren.

+ + + +

We kunnen met OpenSSL (zie vorige week als je dat nog niet hebt geinstalleerd) ook encrypten en decrypten met verschillende + soorten encryptie algoritmes. Met onderstaande commando kunnen we bijvoorbeeld een bestand ontsleutelen.

+ +openssl enc -aes-256-cbc -base64 -d -in geheim.aes256 -out nietmeergeheim.txt + +

Een hele mond vol, laten we eens kijken wat alle argumenten betekenen:

+ + + + + +

Een systeembeheerder heeft een geheim staan in dit + bestandje wat hij met aes-256-cbc heeft versleuteld. Helaas voor hem heeft hij een niet zo hele sterke sleutel gekozen: + Ab12345. Gebruik OpenSSL om dit bestandje te ontsleutelen.

+ +
+ Wat is de geheime code die in dit versleutelde bestandje staat? + {% include "points.html" with points=answers.answer_encryption_decrypt.points max="10" %} + +
+ +

Hint: Als je een bad decrypt error krijgt heb je waarschijnlijk een OpenSSL versie die lager is dan 1.1.0. In dat geval moet + je de optie `-md sha256` toevoegen. +

+ +
+ Versleutel de tekst " + Security Workshop" met het aes-256-cbc algoritme in base64 mode. Plak de versleutelde tekst in het tekstveld, gebruik + Ab12345 als wachtwoord. + {% include "points.html" with points=answers.answer_encryption_encrypt.points max="10" %} + +
+ +

Hint: Je kan dit commando gebruiken: + openssl enc -aes-256-cbc -base64 -in plain.txt -out geheim.aes256.txt +

+ +

Asymmetrische encryptie

+ +

Bij symmetrische encryptie gebruiken Alice en Bob allebei dezelfde sleutel om het bestand te versleutelen en te ontsleutelen. + Maar hun communicatie is alleen veilig als ze de sleutel in het geheim afspreken en zolang ze de sleutel geheim houden. + Dit probleem is opgelost bij asymmetrische encryptie algoritmes, waarbij je twee sleutels gebruikt. Eén publieke en één + privé sleutel.

+ +

Bij een asymmetrisch encryptiealgoritme kan je niet zelf een random sleutel kiezen, deze moet je genereren met een speciaal + key-generation algoritme. Deze geeft random twee sleutels terug die een opmerkelijke relatie met elkaar hebben. Om ze uit + elkaar te halen noemen we ze hier de groene en de rode sleutel, maar het maakt in de praktijk niet uit welke sleutel welke + is. +

+ + + +

Om een bestandje te versleutelen nemen we bijvoorbeeld de groene sleutel en gebruiken we die om het bestandje te versleutelen. + Maar we kunnen het bestand nu niet meer ontsleutelen met de groene sleutel. + Met alleen de bijbehorende rode sleutel kan je nu het bestand ontsleutelen. Andersom werkt ook, bestanden die je met + de rode sleutel versleuteld, zijn enkel en alleen met de groene sleutel te ontsleutelen.

+ + + +

Dit lijkt allemaal wat omslachtig en onhandig, en asymmetrische encryptie is ook nog eens honderden keren langzamer dan symmetrische + encryptie. Waarom zouden we dit gebruiken?

+ +

Asymmetrische encryptie vormt de basis van het public-private key systeem. Nadat we een sleutel-paartje hebben gegenereerd + geven we één sleutel weg aan alles en iedereen, dat is de publieke sleutel die iedereen kan gebruiken. De andere bijbehorende + sleutel bewaren we op de geheimste plek die je maar kan bedenken en geef je onder geen enkele omstandigheid aan iemand + anders. +

+ + + +

Als Alice nu een geheim bericht aan Bob wil versturen kan ze dit versleutelen door gebruik te maken van Bob's publieke sleutel. + Het versleutelde bericht is enkel en alleen te ontsleutelen met Bob's bijbehorende private sleutel. Alice weet dus zeker + dat alleen Bob het kan lezen.

+ + + +

Als Alice het bericht met haar private key zou versleutelen ontstaat er een andere interessante eigenschap: Iedereen kan + het bericht ontsleutelen, dat is te doen met de bijbehorende publieke sleutel. Maar je weet dan wel zeker dat het bericht + van Alice afkomstig is, want alleen zij heeft de private sleutel waarmee het bericht in de eerste plaats versleuteld is. + + +

+ Hoe kan Alice één bericht naar Bob versturen zodat de volgende dingen tegelijkertijd gelden: +
    +
  1. Alleen Bob kan het bericht lezen
  2. +
  3. Bob weet zeker dat het bericht van Alice is
  4. +
+ Leg uit in welke volgorde Alice en Bob encrypten, decrypten en versturen en met welke sleutels. Je mag er van uit gaan dat + ze elkaars publieke sleutel weten en dat Bob niet de enige is met Alice's publieke sleutel. +
+ {% include "points.html" with points=answers.answer_encryption_securesend.points max="10" %} + +
+ +

+ Hint: het is natuurlijk mogelijk om een versleuteld bericht nog een keer te versleutelen.

+ + + +

WhatsApp beweert dat alle berichten end-to-end versleuteld verstuurd worden. Daarmee zou niemand de berichten kunnen lezen + die via hun servers verstuurd worden, zelfs zij zelf niet. Alleen de afzender en de ontvanger kunnen de berichten lezen.

+ +

Om dat te controleren kan je bij de contactinformatie van elke chat klikken op 'Encryptie', je krijgt dan een QR code en + een lijst van cijfers. Als de cijfers allemaal hetzelfde zijn zou je zeker moeten weten dat berichtjes alleen door jou + en de andere persoon gelezen kunnen worden.

+ + + +
+ Zoek op internet welke informatie er in de QR code staat. Hoe kan WhatsApp met die informatie garanderen dat alleen jullie + twee de chat kan lezen? + {% include "points.html" with points=answers.answer_encryption_whatsapp.points max="10" %} + +
+ + +

GPG

+ +

Genoeg theorie, we gaan aan de slag met concrete encryptiealgoritmes. En wel met de + OpenPGP (Pretty Good Privacy) standaard. Een veel gebruikt open source programma die deze standaard implementeert + is + GPG (GNU Privacy Guard). Met dit programma kunnen we sleutelparen maken, bestanden encrypten/decrypten en versleutelde + berichten versturen.

+ +

Om het makkelijker te maken om publieke sleutels uit te wisselen kan GPG gebruik maken van een + keyserver. Dit is een speciale server die een lijst van publieke sleutels bijhoud. Voor onderstaande opdrachten hebben + we onze eigen keyserver ingericht op websec.paulwagener.nl. + Deze werkt niet als je de opdrachten thuis maakt. De Avans firewall blokkeert poort 11371 waarop deze server werkt.

+ +

GPG kan je + hier voor Windows downloaden, na het installeren kan je in je CMD alle commando's typen. Als je Linux of Mac OS X + gebruikt hoef je niks te doen, GPG is standaard geïnstalleerd.

+ + + + gpg --help + +

Met bovenstaande commando zie je alle dingen die je met GPG kan doen. We gaan niet meer alle commando's voorkauwen, je + bent inmiddels handig genoeg om die zelf te bedenken. Een paar handige opties om te onthouden:

+ +