{% extends "base.html" %} {% block content %}

Encryptie & Certificaten

Deze week gaan we aan de slag met het versleutelen en ontsleutelen van gegevens. De tool die we daarvoor gaan gebruiken is OpenSSL. Dit is een veelgebruikt programma waar je vele cryptografische dingen mee kunt doen.

Op Linux en Mac OS X is deze tool al geïnstalleerd, Windows gebruikers moeten deze nog installeren. Als je zoekt op het internet vindt je verschillende mogelijkheden om dat te doen. Bijvoorbeeld de v.1.0.1g Light versie op deze website. Let op dat je dan op de Windows command line het hele pad moet gebruiken in plaats van alleen 'openssl'. Bijvoorbeeld: C:\OpenSSL-Win32\bin\openssl.exe

Bestandjes ontsleutelen

Eerst gaan we eens kijken hoe we OpenSSL kunnen gebruiken om data op een veilige manier op te slaan en weer terug te halen. Onderstaand commando kan een versleuteld berichtje weer terug 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 heel sterk wachtwoord gekozen: Ab12345. Gebruik OpenSSL om dit bestandje te ontsleutelen.

Wat is de geheime code die in dit versleutelde bestandje staat?
10 punten
Versleutel de tekst "Avans Hogeschool" met het aes-256-cbc algoritme in base64 mode. Plak de versleutelde tekst in het tekstveld, gebruik Ab12345 als wachtwoord.
10 punten

Je kan dit commando gebruiken: openssl enc -aes-256-cbc -base64 -in avans.txt -out avansgeheim.aes256.txt

Certificaten

Wie ben jij? En waarom zou ik jou vertrouwen dat je bent wie je zegt dat je bent?

Dat zijn vragen die webbrowsers elke dag moeten beantwoorden. Een site kan wel vinden dat het www.rabobank.nl is, maar daarmee weet een browser nog niet zeker dat het ook daadwerkelijk de webserver van de Rabobank is. Misschien zit je eigenlijk te communiceren met een server ergens in Rusland van een persoon die maar al te graag je inlogcodes wil weten.

Om dit probleem op te lossen zijn er certificaten bedacht en vastgelegd in de X.509 standaard. Certificaten zijn kleine bestandjes waarin een identiteit staat beschreven. Dit is bijvoorbeeld een certificaat van Paul Wagener:

Nu wil jij natuurlijk meteen een eigen certificaat voor jezelf hebben, en dat kan! Met dit alles-in-1 commando maak je een certificaat dat helemaal van jou is:

openssl req -x509 -newkey rsa:2048 -nodes -keyout sleutel.pem -out certificaat.pem -days XXX

Dit commando doet een paar dingen tegelijk waar we later op terugkomen. Nadat je de gevraagde informatie hebt ingevuld staat er in het bestand certificaat.pem jouw certificaat. Met dit commando kan je je nieuwe certificaat bewonderen:

openssl x509 -text -in certificaat.pem
Kopieer/plak de inhoud van certificaat.pem (begint met -----BEGIN CERTIFICATE-----)
10 punten

Een certificaat heeft ook altijd een verstrekker (issuer). Dit is de persoon of bedrijf die het certificaat heeft gemaakt en daarmee garant staat dat de identiteit die op het certificaat staat ook klopt. In jouw certificaat staat dat je over jezelf hebt gezegd dat je bent wie je zegt dat je bent. Niet echt betrouwbare informatie dus... Iedereen zou precies datzelfde certificaat kunnen maken.

Het wordt pas interessant en betrouwbaar als andere partijen het certificaat verstrekken en zo kunnen zeggen dat ze de gegevens van het certificaat gecontroleerd hebben. Als jij die verstrekker vertrouwt dat hij zijn werk goed doet met identiteiten van certificaten controleren. Dan vertrouw je ook indirect de gegevens op het certificaat. Zo hoef je maar een handjevol verstrekkers te vertrouwen om bijna alle websites op het internet te kunnen vertrouwen.

Bekijk het certificaat van Facebook, welk bedrijf heeft dit certificaat verstrekt?
5 punten

Hint: Het certificaat kan je in alle browsers bekijken door op het slot-ikoontje te klikken


Onderstaande is wat technische achtergrondinfo. Als je alleen de vragen wilt maken kan je overslaan tot hier

Om te voorkomen dat het het wilde westen wordt en iedereen invult in zo'n certificaat wat hij of zij maar wilt, gebruiken we Public-key cryptografie. Weet je het nog? Dat zijn die twee sleutels, waarvan als de een iets versleuteld, je het resultaat alleen nog maar kan ontsleutelen met de andere sleutel. Een van de sleutels gooi je de wijde wereld in en vertel je tegen iedereen. De andere behoud je op de veiligste plek die je maar kan bedenken.

Als je een certificaat wilt verstrekken heb je ook altijd een public en een private key nodig. De public key geef je aan al je vrienden zodat ze weten dat jij het bent als ze die public key tegenkomen. Deze staat ook op het certificaat zelf. De bijbehorende private key gebruik je om (de hash van) het certificaat zelf te versleutelen. Dit voeg je dan toe aan het certificaat als handtekening (signature).

Als iemand het certificaat wilt controleren neemt hij of zij die handtekening en ontsleuteld die weer met de public key. Die vergelijk je vervolgens met het certificaat. Als dat overeenkomt kan je concluderen dat de verstrekker het certificaat zoals jij het ziet heeft ondertekend. Want hij is de enige die in het bezit is van de private key waarmee de handtekening in de eerste plaats gemaakt kon worden.


Mag ik uw handtekening?

Zo'n certificaat wat je aan jezelf hebt verstrekt vertrouwd natuurlijk niemand. We moeten eerst iemand vinden die jouw certificaat wil ondertekenen.

Er is een speciaal bestandsformaat om aan een verstrekker te vragen of hij jouw certificaat wil ondertekenen: .csr. Dat staat voor Certificate Signing Request. Een soort van bedelbrief die je rond kan sturen met je certificaat waar nog een verstrekker bij moet.

Je kan onderstaand commando gebruiken om je eigen gemaakte certificaat als basis te gebruiken voor zo'n Certificate Signing Request:

openssl x509 -x509toreq -in certificaat.pem -signkey sleutel.pem -out certificaat_verzoek.csr

Zo'n verzoekje kan je vervolgens bij een certificaat autoriteit zoals Thawte of VeriSign inleveren. Voor een paar honderd euro zijn ze dan bereid om hun handtekening eronder te zetten

Om deze les relatief goedkoop te houden heeft deze site ook een certificaat autoriteit waar je certificaten kan laten ondertekenen: Certificaat Autoriteit. Gebruik deze site om jouw certificaat te laten ondertekenen

Bekijk het certificaat wat je hebt teruggekregen. Welke persoon heeft dit certificaat aan jou verstrekt?
5 punten
Plak jouw ondertekende certificaat in onderstaand tekstveld (begint met -----BEGIN CERTIFICATE-----)
10 punten
{% endblock %}