Encryptie - theorie
Wat is Encryptie?
Encryption (of encryptie of versleutelen) is het versleutelen van gegevens zodat je zonder de juiste sleutel de gegevens niet kan lezen. Encryptie bestaat uit het algortime (de regels/procedure van de encryptie) en een of meer sleutels.
Decryption (of decryptie of ontsleutelen) is het weer leesbaar maken van encypted data.
Waarom Encryptie?
Encryptie is belangrijk omdat het kan helpen voorkomen dat informatie in verkeerde handen valt.
Stel je krijgt toegang tot de database van Facebook en je kunt alle logins en passwords lezen. Dat zou heel vervelend zijn, maar het is iets minder vervelend als de wachtwoorden zijn versleuteld en het zou nog minder erg zijn als alle gegevens zouden zijn versleuteld. Of stel je telefoon of laptop word gestolen. Vervelend, maar als je gegevens op de harddisk (of SSD) zijn versleuteld kan zonder de juiste sleutel niemand bij jouw gegevens en files op jouw harrdisk.
Door encryptie worden bijna alle risico's op de threats uit STRIDE model vreminderd. Dat geld voor de threats;
spoofing, tampering, repudiation, confidentielity, en authorization,
Vraag 1: hoe kan encryptie het risico op repudiation ('I did not send that email') helpen vermindeeren?
Encryptie is niet alleen iets van computers maar is al 2000 jaar oud.
Vaag 2: In welke situatie denk je dat 1000 of meer jaar geleden encryptie zou zijn toegepast? Als je niets kunt bedenken, denk eens terug aan "Game Of Thrones".
Symetrisch Encryptie
We maken onderscheid in symetrische encryptie en asymetrische encryptie.
Symetrische encryptie is eenvoudig en al heel oud. De meest eenvoudige vorm is het omzetten van elke letter in een ander letter. Je kunt letters verschuiven, maar je kunt het ook ingewikkelder maken. In de klas hebben we geoefend met Caesar encryptie.
Symetrisch encyptie is redelijk eenvoudig en daardoor ook realtief makkelijk en efficiënt op een computer te implementeren. Er is ook een groot nadeel:
Bij symetrische encryptie moet je een sleutel uitwisselen en je moet daarbij voorkomen dat de sleutel in verkeerde handen valt.
PKI, Public Key Infrastructure
Het nadeel van het lastig uitwisselen van de key bij symetrische encryptie wordt opgelost bij PKI, Public Key Infrastructure.
PKI, is een systeem met twee sleutels: de public key en de private key (de publieke sleutel en de privé sleutel).
De public key kan je verspreiden, iedereen mag hem hebben, want je kunt er alleen een bericht mee versleutelen. Je kunt er geen bericht mee ontcijferen/lezen. Alleen met de bijbehorende private key kan het versleutelde bericht worden gelezen.
In de les hebben we dit zichbaar gemaakt met een (open) hangslot en de sleutel. Het open hangslot was de public key en die kon iedereen krijgen. Je kunt dan een boodschap sturen en alleen degene met de sluetel van het hangslot kan dan het bericht ontcijferen.
Dus je geeft idereen die dat wil je public sleutel en iedereen die dat wil kan een bericht versleutelen en jij bent de enige die met de private key het bericht kan ontsleutelen.
Of stel dat jij een wachtwoord wilt instellen op www.lekkergoedkoop.nl dan kun je met de public key van deze site je wachtwoord versleutelen en je weet dan zeker dat alleen de site www.lekkergoedkop.nl jouw versleutelde wachtwoord kan lezen. Maar is dat wel zo? Wat nu als je denkt dat je op de site www.lekkergoedkoop.nl zit maar via een slinkse manier (DNS Spoofing, Host file manipulatie, Phissing) op een andere site terecht ben gekomen. Je denk dat je je wachtwoord naar www.lekkergoedkoop.nl stuurt maar het is een hele ander site. Hoe weet je nu zeker dat je de public key van de echte site hebt gekregen?
Certificaten
Een certificaat is digitaal ondertekend versleuteld document dat is uitgegeven door een Certified Authority. Je kunt het zien als een diploma dat is uitgegeven door een school. Niet iedere school mag zo maar een diploma uitreiken. Een digitaal certificaat mag ook alleen worden uitgegeven door bepaalde instanties en via bepaalde web sites.
Als ik nu een site heb en ik wil dat de gebruiker een public key krijgt zodat wij veilig kunnen communiceren, dan kan ik deze public key via een certificaat uitdelen. Dit certificaat verklaart dan dat ik ben wie ik zeg dat ik ben en het certificaat bevat mijn public key.
Bij het aanvragen van een certificaat bij een CA, Certified Authority, wordt gecontroleerd wie jij bent en of jij een betrouwbare partij bent. Een certificaat heeft altijd een bepertke houdbaarheiddatum en zal dus na verloop van tijd moeten worden vernieuwd.
Dus nu kunnen we naar een website en kunnen we al het verkeer tussen mijn computer en de web server versleutelen via de private key die ik via een certificaat heb ontvangen. Alls opgelost of niet?
SSL
SSL staat voor secure socket layer en het is standaard manier om verkeer tussen jouw browser en de webserver te versleutelen. Zodra er een SSL verbinding is opgezet tussen jouw browser en de webserver dan zie je een slotje of ander icoontje wat aangeeft dat je een veilige verbinding hebt.
Het opzetten van een veilige (=versleutelde) veriding kunnen we dat het beste doen via PKI waarbij de public key via een certificaat wordt opgevraagd. Maar PKI is complex en daardoor traag, als we al het verkeer telkens via PKI willen encrypten en decrypten dan gaat dat al snel voor vertraging zorgen. Symetrische encrypty is veel sneller maar daarbij was het probleem dat we niet eenvoudig de sleutel konden verspreiden.
De oplossing is de combinatie van beide technieken.
We gebruiken PKI om een tijdelijke symetrische sleutel uit te wisselen die we daarna gebruiken voor al het SSL verkeer. Dus we gebruiken de 'trage' PKI methode om ervoor te zorgen dat we op een veilige manier de symetrische sleutel uitwisselen. Vanaf het moment dat de browser en de web server allebij dezelfde symetrische sleutel hebben kan het verkeer via symetrische encrypty veilig en snel worden opgezet. Zodra de web sessie eindigt (via uitloggen of via een time-out) wordt de symetrische key ook weggegooid en bij de volgende sessie wordt er een nieuwe symetrische sleutel uitgewisseld via PKI. Door telkens een neiuwe symetrische sleutel te gebruiken verlaag je de kans dat deze key uitlekt en door een hacker kan worden misbruikt.
--