Handson Cryptografie: Inleiding

Cryptografie is letterlijk de kunst van het verborgen schrijven. Vroeger gebeurde dat door de tekst zelf te verbergen of te vervangen door geheime symbolen, maar tegenwoordig zijn vooral wiskundige technieken populair.

In de cryptografie is het algoritme, samen met de gebruikte sleutel, het belangrijkste voor de veiligheid.

Wat is cryptografie?

Door middel van een cryptografisch algoritme en een sleutel kan een tekst (de "brontekst") worden getransformeerd tot een onleesbare brij tekens (de "codetekst"). De ontvanger moet opnieuw het algoritme en een sleutel gebruiken om de brontekst weer terug te krijgen.

Er zijn twee soorten cryptografie:

  1. Geheime-sleutel cryptografie, waarbij zender en ontvanger dezelfde sleutel gebruiken.
  2. Publieke-sleutel cryptografie, waarbij twee verschillende sleutels nodig zijn. De ene sleutel (de publieke) mag aan iedereen bekend worden gemaakt, de andere (de geheime) moet de ontvanger strikt geheim houden. Met de publieke sleutel kan de zender de brontekst omzetten in de codetekst, en met de geheime sleutel kan de ontvanger de brontekst weer terugkrijgen.

Normaliter gebruiken zender en ontvanger van een bericht dezelfde sleutel, die ze vooraf samen afspreken. Zij kunnen dan met behulp van geheime-sleutel cryptografie het bericht versleutelen en ontsleutelen. Dat is echter niet altijd praktisch, bijvoorbeeld wanneer zij elkaar alleen via Internet kennen. In zo'n geval is publieke-sleutelcryptografie handig.

De ontvanger creëert twee sleutels, een publieke en een geheime. De eerste kan hij overal publiceren (bijvoorbeeld op zijn homepage of in een openbare keyserver), zodat iedereen die hem een bericht wil sturen, deze op kan vragen. De tweede moet hij strikt geheim houden. Berichten die anderen met zijn publieke sleutel versleutelen, kan alleen hij met zijn geheime sleutel weer terugvertalen in de brontekst.

Het nut van cryptografie

Het Internet is nog onveiliger dan de telegraaf van vroeger. Wereldwijde communicatielijnen zijn met een kleine moeite af te tappen, en een e-mailtje kan maar al te gemakkelijk bij de verkeerde persoon in het adresboek terechtkomen. Vervelend in het geval van een heftige liefdesbrief, kostbaar in het geval van een offerte of een bedrijfsgeheim document dat bij een concurrent terechtkomt, en levensgevaarlijk als het gaat om communicatie met een politie-informant.

Maar cryptografie is niet alleen nuttig voor grote bedrijven en overheden. Ook voor de gewone burger is het van belang. Wie bestelt er nooit eens iets bij een online boekhandel of veilinghuis? Het is dan wel prettig dat een hacker er niet met je credit-card gegevens vandoor kan gaan. En net zoals ik een envelop gebruik bij persoonlijke brieven, versleutel ik mijn persoonlijke e-mail.

Een voorbeeld: het RSA-encryptiesysteem

Het RSA-systeem is in 1978 ontwikkeld door de cryptografen Rivest, Shamir en Adleman. Het is gebaseerd op het principe dat het vermenigvuldigen van twee priemgetallen eenvoudig en snel kan, maar het ontbinden van dat product in de twee priemgetallen bijzonder moeilijk is. RSA is een publieke-sleutelsysteem. De gebruiker genereert twee sleutels (die samen een sleutelpaar vormen), waarvan hij er eentje kan publiceren en de andere strikt geheim moet houden.

Het maken van een RSA sleutelpaar

De gebruiker maakt het sleutelpaar door eerst twee (grote) priemgetallen p en q te kiezen. Hij zoekt vervolgens een getal e waardoor p*q niet deelbaar is. Daarna berekent hij het getal d, de inverse van e. Dit wil zeggen dat d *e = 1, waarbij wordt gerekend modulo (p-1)*(q-1).

Modulo-rekenen werkt net zoals gewoon rekenen, maar getallen kunnen nooit groter worden dan een bepaalde waarde, de modulo. Een bekend voorbeeld is de klok: het aantal minuten kan nooit groter worden dan 59. Als het nu 10:57 uur is, is het over vijf minuten 11:02 en niet 10:62. Er wordt nu gerekend modulo 60.

Het grote voordeel van modulo-rekenen is dat de berekeningen vaak een stuk sneller kunnen worden geïmplementeerd. Ook kunnen de getallen nooit groter worden dan de modulo, waardoor de geheugen-eisen beperkt blijven.

De publieke sleutel is nu het getal e samen met p*q. De geheime sleutel is d samen met p*q. Samen heten deze twee het sleutelpaar.

Als voorbeeld nemen we de priemgetallen p = 5 en q = 11. 55 is niet deelbaar door 7, dus we kiezen e = 7. Wat is nu een geschikte d? Er moet gelden dat: d *e = 1 mod (p-1)*(q-1).

Het getal 23 blijkt te voldoen: 23*7 = 161 = 4*40 + 1 = 1 mod (p-1)*(q-1). Het getal 23 werd in dit voorbeeld gevonden door enig experimenteren. Onder normale omstandigheden zijn de getallen p en q zo groot dat dit onmogelijk wordt (gelukkig maar, anders was RSA wel heel eenvoudig te kraken). De berekeningen die dan noodzakelijk zijn, voeren echter te ver voor behandeling in deze Handson.

Om een bericht m te versleutelen, berekenen we nu c = me mod p*q. De ontvanger berekent nu cd mod p*q. Dit is weer het oorspronkelijke bericht m.

Het versleutelen van een bericht met RSA

Als iemand zoals hierboven beschreven een RSA-sleutelpaar heeft gemaakt, publiceert hij vervolgens het getal e samen met p*q, wat overigens ook wel als n wordt aangeduid. Iemand anders, die hem een bericht wil sturen, kan deze twee getallen nu opzoeken en gebruiken om het bericht mee te versleutelen.

Stel dat de zender het getal 2 wil versleutelen. Hij berekent dan c = me mod p*q =  27 = 128 = 2*55 + 18 = 18 mod 55.

De zender verstuurt nu c = 18 naar de ontvanger. Deze neemt zijn geheime sleutel en berekent m = cd mod p*q = 1823 =  181 *182 * 184 *1816 mod 55 = 18*49*36*26 mod 55 = 825552 = 15010*55 + 2 = 2 mod 55.

Het belang van een grote sleutellengte

In de cryptografie is het algoritme, samen met de gebruikte sleutel, het belangrijkste. Algoritmen als RSA en IDEA zijn reeds jaren bekend, en ondanks intensief onderzoek door expert-cryptografen zijn er nog steeds geen gaten gevonden. Wel is het door de steeds sneller wordende computers mogelijk geworden om sleutels te raden of te kraken.

Een RSA geheime sleutel kan worden achterhaald door het product van de priemgetallen te ontbinden. De enige manier om je hiertegen te beschermen, is het product zo groot te maken dat dit ontbinden te lang gaat duren. In 1978 werd een lengte van 256 bits nog als onkraakbaar beschouwd. Momenteel worden waarden van 1024 of 2048 bits aanbevolen.

Voor geheime-sleutelsystemen is vrijwel altijd alleen het raden van de sleutel een optie. Een sleutel van 128 bits biedt dan voldoende zekerheid. Het getal 2128 is gelijk aan 340.282.366.920.938.463.463.374.607.431.768.211.456 oftewel een 3 met 38 nullen. Als er een chip bestond die een miljard sleutels per seconden kon proberen, en een computer met daarin een miljard van die chips (beiden liggen ver buiten onze mogelijkheden), dan had deze computer daarvoor zo'n 1038/109*109 = 1020 seconden nodig. Er zitten 60x60x24x365 = 3.15x107 seconden in een jaar, dus dit zou ongeveer 10 biljoen (10.000 miljard) jaar duren. De aarde zelf bestaat pas zo'n 4.5 miljard jaar.

Alle delen