Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 

Hoofdstuk 17: Beveiliging en Cryptografie

  17.1. Inleiding

Als je een computer gebruikt heb je met verschillende soorten beveiligingen te maken.
Om je te beveiligen tegen virussen, hackers en/of spyware heb je een virusscanner en een firewall nodig.
Als je een draadloos netwerk gebruikt moet je er voor zorgen dat het netwerk beveiligd is, zodat niet iedereen er zomaar gebruik van kan maken.
Als je iets bestelt bij een online boekhandel dan is het wel prettig te weten dat een hacker er niet met je credit-card gegevens vandoor kan gaan. Als er geheimen in een emailtje staan is het verstandig het bericht te versleutelen zodat anderen het niet kunnen lezen.
Al eeuwen lang probeert men door geheimschrift informatie af te schermen voor nieuwsgierige ogen, maar tegenwoordig is dat nog veel belangrijker dan vroeger.
Daardoor heeft de geheimschriftkunde of cryptografie de laatste jaren een hoge vlucht genomen.

  17.2 Firewall, virusscanner

Firewall
Een firewall is software die aanvallen van hackers buiten de deur houdt.

Een firewall werpt als het ware een ondoordringbare muur rond de computer op. De firewall houdt op de achtergrond de veiligheid van de computer in de gaten en blokkeert aanvallen van buitenaf.

Een firewall kan ook een heel netwerk beveiligen. Zo'n firewall is er niet alleen als software, maar ook als een apparaat dat tussen het netwerk en het internet zit.



Windows XP en zijn opvolgers hebben een ingebouwde personal firewall.
Die kun je instellen door te klikken op Start → Configuratiescherm → Beveiligingscentrum → Windows Firewall.
Je krijgt dan onderstaand venster in beeld.



Voor oudere besturingssystemen kun je een firewall downloaden, ZoneAlarm is een bekende.

De gebruiker kan zelf regels instellen en bepaalde communicatie tussen computer en het internet toestaan en andere afwijzen. Een firewall zorgt ervoor dat verzoeken vanuit een netwerk of internet om bepaalde programma's op jouw computer te openen, geblokkeerd worden, en een firewall houdt bepaalde poorten van de computer open of juist gesloten.

Een computer bevat een groot aantal poorten, alle met een nummer. Dat zijn onzichtbare onderdelen van het systeem; iedere toepassing heeft zijn eigen poortnummer. Zo gaan bijvoorbeeld alle binnenkomende internetpagina's door poortnummer 80, als je email verstuurt gaat het door poortnummer 25 en als het binnenkomt gaat het meestal via poortnummer 110.
De firewall kan bepaalde poorten sluiten en open stellen, voor inkomend of uitgaand verkeer, of beide.

Virussen, spyware, trojaans paard
Denk er om: een firewall is geen virusscanner. Een virusscanner moet je meestal zelf installeren.
Een virus is een programmaonderdeel, dat zich aan bepaalde programma's kan hechten en er na verloop van tijd voor zorgt dat de computer niet goed meer werkt.
Een virus kan alleen worden verspreid door het uitvoeren van een geïnfecteerd programma (dat vaak als bijlage bij een emailtje wordt verstuurd), dus door menselijk handelen.
Een virus kan ook via een macro worden verspreid, of via javascript op een site, of via ActiveX.
(ActiveX-besturingselementen zijn kleine programma's, ook wel invoegtoepassingen genoemd, die worden gebruikt op internet. Ze zijn soms nodig om bepaalde dingen te kunnen laten zien, of soms worden ze gebruikt bij het installeren van bepaalde updates)

Bekende virusscanners zijn die van Norman, McAfee, of Kaspersky. Ook AVG en Avast zijn bekend, en die kun je gratis downloaden.

Virusscanners maken gebruik van verschillende technieken om te controleren op virussen:
  • De fingerprinttechniek
    Virusscanners maken gebruik van virusdefinities, waarin voor elk bekend virus de fingerprint (= vingerafdruk) wordt vastgelegd. De fingerprint van een virus is een stukje code van het virus dat altijd hetzelfde is. Aan de hand van de fingerprint kan een scanner een virus dan herkennen.
    Op deze manier kunnen alleen virussen worden ontdekt waarvan de fingerprint bekend is.
    Daarom is het belangrijk de virusscanner vaak te updaten.
  • De checksumtechniek
    Bij de checksumtechniek wordt gebruik gemaakt van de checksums van alle bestanden op de computer. Een checksum van een bestand is een controlegetal dat de lengte van het bestand bevat. Als een programma wordt besmet wordt het bestand langer en dan klopt het controlegetal niet meer. De virusscanner controleert dus steeds of de checksum van elk bestand nog hetzelfde is als de checksum die is vastgelegd in een lijst.
  • De heuristische techniek
    Een heuristische scanner controleert bestanden op eigenschappen die typisch zijn voor virussen.
Dan heb je ook nog spyware.
Bij bepaalde soorten gratis software, die je kunt downloaden, kan het voorkomen dat er een ongewenst programma meegeïnstalleerd wordt. Deze programma's verzamelen meestal informatie over je surfgedrag en/of tonen advertenties in je browserscherm. Of in het ergste geval verzamelt het programma bankgegevens, wachtwoorden en creditcardnummers van de computergebruiker.
Dat soort ongewenste programma's wordt spyware genoemd. Je hebt speciale anti-spyware programma's. Soms zit het in een virusscanner ingebakken.
Spyware installeert zich vaak via webpagina's door gebruik te maken van de fouten die zich in Internet Explorer bevinden. Een voorbeeld hiervan is de overname van je startpagina, dat wordt browser hijack genoemd.
Als je Firefox gebruikt heb je hier minder last van, en Firefox beschermt je ook meer tegen onder andere adware.
Adware laat reclame boodschappen aan de gebruiker zien.
Malware is de verzamelnaam voor ongewenste software dat zich installeert op je pc.

Een worm.
Een worm is vergelijkbaar met een virus, maar een worm kan worden verspreid van computer naar computer zonder menselijk handelen.
Het grootste gevaar van een worm is zijn vermogen om zichzelf te repliceren. Het kan bijvoorbeeld een kopie van zichzelf sturen naar iedereen in je email-adressenboek.
Een worm kan je pc ook omvormen tot een zogenaamde zombie of bot; je computer wordt dan onderdeel van een groot netwerk (het zogenaamde botnet) en het kan dan bijvoorbeeld gebeuren dat jouw computer spammail gaat versturen zonder dat je het in de gaten hebt.
Doordat wormen zich zelfstandig verspreiden gaat dit veel sneller dan bij virussen. In de animatie hieronder is te zien hoe de worm Witty zich in 2004 binnen 2 uur over de hele wereld verspreidde.

worm Witty

Een Trojaans paard.
paard van troje Een trojaans paard is een speciaal soort spyware. Het is een klein programma dat zich, vaak vermomd als een nuttig programma, op je harde schijf nestelt. Er wordt op een site gedaan alsof je een handig hulpprogramma, een leuke screensaver, of een gratis fotobewerkingsprogramma kunt downloaden. Je downloadt het bestand en besmet zo je eigen computer. En dat programma maakt je pc vervolgens stiekem toegankelijk voor andere gebruikers. Het programma kan bijvoorbeeld ook wachtwoorden stelen, bestanden verwijderen, enz.
Een trojaans paard wordt ook wel een backdoor genoemd.

Phishing.
Phishing is een vorm van oplichterij, waarbij geprobeerd wordt achter allerlei persoonlijke informatie te komen, zoals creditcardnummers, wachtwoorden, enz.
Een phisher doet zich meestal voor als een bekende organisatie, bijvoorbeeld een bank. De phisher verstuurt miljoenen emails naar willekeurige mensen, en daarin verzoekt de phisher op een link te klikken zodat de gegevens gecontroleerd kunnen worden. Je klikt door op een link, en je komt op een vervalste website. De valse website ziet er meestal net zo uit als de website van je bank en gebruikt soms delen van de echte website. Je moet dan zogenaamd inloggen met je inlognaam en wachtwoord en/of creditcard-nummer, en zo krijgt de fraudeur de beschikking over jouw gegevens.
Bij phishing wordt vaak gebruik gemaakt van URL-spoofing; dat is het nabootsen van de URL van een site (er is bijvoorbeeld één letter verschil met de echte URL), zodat je denkt de echte site te bezoeken.

Spam.
Ongevraagde berichten via e-mail wordt spam genoemd.
Hoe komen spammers nu aan deze e-mailadressen? Daarvoor worden vaak spiders gebruikt. Een spider is een programma dat het internet afzoekt naar @-symbolen. De spider slaat het woord voor en na het apenstaartje op in een bestand en zo worden er een hoop emailadressen gevonden.
Spam komt ook wel in de vorm van een hoax.
Een hoax is een nepwaarschuwing. De lezer van de email met de nepwaarschuwing wordt gevraagd het emailtje naar zoveel mogelijk mensen door te sturen.
Om spamberichten via formulieren op internet tegen te gaan wordt wel gebruik gemaakt van een captcha.
Formulieren op internet worden soms automatisch ingevuld met reclameteksten, en om te voorkomen dat dat gebeurt kan er gebruik worden gemaakt van een captcha. (Captcha is een afkorting voor "Completely Automated Public Turingtest to tell Computers and Humans Apart")
Een voorbeeld van een captcha zie je hieronder. Het is de bedoeling dat je de tekst overtypt, en alleen als de tekst goed is overgenomen op het formulier wordt het verder verwerkt. Een bot kan zo'n moeilijk te lezen tekst niet automatisch invoeren.



Vul hier de captcha-code in:            


Je hebt alles-in-één pakketten, dus virusscanner, firewall, anti-spam en anti-spyware programma bij elkaar, maar daar moet je meestal wel voor betalen.

  17.3 Wachtwoorden en biometrische identificatie

Tegenwoordig moeten je vaak een groot aantal gebruikersnamen en wachtwoorden onthouden.
Dat levert vaak nogal wat problemen op, en daarom is er een ontwikkeling gaande in de richting van biometrische identificatie.
Daarbij vindt de identificatie plaats door het bepalen van lichaamskenmerken, bijvoorbeeld de vingerafdruk of de irisscan.

Maar eerst gaan we eens bekijken hoe je een goed wachtwoord bedenkt. Daar zijn een aantal tips voor:
  1. Bedenk een wachtzin
    Bedenk een korte zin die je makkelijk kunt onthouden. Bijvoorbeeld "Piet is een schat" of "Ik dacht aan jou".
  2. Vervang woorddelen door sms-afkortingen
    Vervang enkele woorddelen door afkortingen, zoals die bijvoorbeeld bij het sms-en gebruikt worden. Je kunt bijvoorbeeld letters door cijfers vervangen (acht > 8, een > 1). Bijvoorbeeld: "Piet is 1 sch@" of "Ik d8 aan jou".
  3. Breng spelfouten aan
    Breng een paar spelfouten aan in je wachtzin, zodat de woorden niet gemakkelijk te raden zijn. Bijvoorbeeld: "Pyt iz 1 sch@" of "Ik d8 aan jau".
  4. Gebruik hoofdletters en kleine letters door elkaar
    Vervang een paar kleine letters door hoofdletters, of omgekeerd. Bijvoorbeeld: "Pyt iz 1 Sch@" of "Ik d8 aan Jau".
  5. Gebruik cijfers en bijzondere tekens.
    Je mag meestal geen spaties in je wachtwoord gebruiken. Vervang spaties door een streepje (-) of underscore (_) of hekje (#). Bijvoorbeeld: "Pyt_iz_1#sch@" of "Ik-d8-aan#Jau".
Biometrische identificatie d.m.v. vingerafdruk
De vingerafdruk van een persoon is uniek verbonden aan deze persoon en wordt gevormd door het patroon van kleine rimpels en valleien op het vingeroppervlak.
Bij de analyse van een ingelezen vingerafdruk wordt niet een plaatje van de vinger vergeleken met plaatjes van vingerafdrukken die in een bestand zijn opgeslagen. In plaats daarvan worden er bepaalde kenmerken van de vingerafdruk vergeleken. Deze kenmerken worden minutiae genoemd.

Er zijn twee hoofdcategorieën van minutiae: rimpeleindes en rimpelvertakkingen.
De systeemsoftware van de vingerafdrukscanner maakt gebruik van complexe algoritmen om deze minutiae te herkennen en te analyseren. Het idee erachter is om de relatieve posities van de minutiae te meten t.o.v. elkaar.
Om een positieve identificatie te verkrijgen is het niet nodig om alle minutiae van de vingerafdruk te vinden en te analyseren. Een vingerafdruk kan worden geïdentificeerd wanneer er minimaal twaalf punten van overeenkomst in voorkomen, zonder verschilpunten.
Een vingerafdrukscanner kan meestal tot 40 minutiae identificeren en analyseren. En alleen de gegevens die de minutiae bevatten en hun posities worden bewaard in een bestand.

  17.4 Klassieke cryptografie

Door middel van een cryptografisch algoritme en een sleutel kan een tekst (de "brontekst") worden getransformeerd tot een onleesbare brij tekens (de "codetekst").
Het omzetten naar geheimschrift heet coderen of encryptie.
Het omgekeerde proces heet decoderen of decryptie. Dit doe je door de stappen in omgekeerde volgorde uit te voeren, je hebt dan wel de juiste sleutel nodig.

De methode van de Spartanen
Rond 450 voor Christus hadden de Spartanen al een speciale manier om berichten te coderen. Ze gebruikten een stok waar ze een papiertje omheen wikkelden. Daarna schreven ze van boven naar beneden de tekst die overgebracht moest worden, zodat als je het papier van de stok zou halen, de tekst niet leesbaar zou zijn voor de vijand. De ontvanger van de boodschap wist precies hoe dik de stok was en kon daarom de boodschap lezen.



De Caesar-methode
Een eenvoudig geheimschrift dat je zelf misschien ook wel eens gebruikt hebt, is de Caesarmethode (Engels: Caesar's Cipher).
De methode heet naar Julius Caesar, die haar gebruikte om met zijn generaals te communiceren.
Caesar verving iedere letter door de letter die drie plaatsen verder in het alfabet staat.
Als je bij het eind van het alfabet komt moet je terug naar het begin:
  • A wordt D
  • B wordt E
  • Z wordt C, enz.



Dat je aan het eind doordraait naar het begin heet klokrekenen of modulorekenen.

De meeste klassieke encryptie-methoden horen tot de categorie van de substitutiemethoden.
Het basisidee bij de substitutiemethode is dat elke letter van de oorspronkelijke tekst wordt vervangen door een andere letter waardoor de tekst onleesbaar wordt.
Omdat je uit de lengte van de woorden in een tekst vaak al informatie kunt halen (een veelgebruikt woord in het Nederlands is bijvoorbeeld het woord "van") verwijdert men meestal alle spaties en leestekens uit de tekst en de letters worden daarna in bijvoorbeeld groepjes van vijf bijelkaar gezet.

Bij een cryptografische methode heb je dus een sleutel nodig om een bericht te kunnen decoderen.
Bij de Caesarmethode is de sleutel het getal 3: het aantal posities in het alfabet dat er opgeschoven wordt.
Die sleutel kan veranderd worden maar bij de Caesarmethode zijn er maar weinig mogelijke sleutels: 25 om precies te zijn.
Die kun je, zeker als je een computer hebt, allemaal proberen en dan kijken welk van de 25 uitkomsten een zinnig bericht oplevert.
De Caesarmethode is dus een zwakke cryptografie.

Je kunt ook snel te weten komen over welke afstand het alfabet moet worden verschoven door gebruik te maken van wat eenvoudige statistiek. In een Nederlandstalige tekst komt immers de letter "e" het meeste voor. Door nu de frequenties te bepalen van de letters in de gecodeerde tekst komen we te weten welke letter vermoedelijk de letter "e" is en weten we direkt ook over welke afstand verschoven is.



De techniek van Viginère
Een betere manier van coderen is de techniek van Viginère.
Daarbij maken we gebruik van verschillende verschuivingen, bepaald door een codewoord.
De eerste letter van het codewoord bepaalt de verschuiving van de eerste letter, de tweede letter van het codewoord bepaalt de verschuiving van de tweede letter enz.
We spreken in dit geval van een poly-alfabetische substitutie (de Caesar-methode is een mono-alfabetische substitutie, want elke letter van het alfabet wordt steeds vervangen door één andere letter)
De Vigenère-methode ontwikkeld in 1586 door de Fransman Blaise de Vigenère is de meest populaire poly-alfabetische substitutiemethode.
Als sleutel wordt een woord genomen dat zovaak herhaald wordt tot het aantal letters evenveel is als de lengte van de te coderen tekst. Hieronder zie je een voorbeeld.



Het coderen gaat als volgt, als je als codewoord het woord "wiskunde" neemt:
  • Als je de tekst "een interessant profielwerkstuk" wilt coderen, laat je allereerst de spaties weg.
  • Daarna neem je de eerste letter van de zin (de E) en kijk je waar de E bovenaan een kolom staat. Vervolgens kijk je waar de eerste letter van het codewoord (de W van WISKUNDE) vooraan een rij staat. Waar de E en de W samenkomen vind je de eerste letter van de gecodeerde tekst.
  • Zoals je ziet is de eerste letter van de gecodeerde tekst een A.
  • Je neemt de tweede letter van de zin (de E) en je kijkt waar de E bovenaan een kolom staat. Vervolgens kijk je waar de tweede letter van het codewoord (I) vooraan een rij staat. Waar de E en de I samenkomen vind je de tweede letter van de gecodeerde tekst.
  • Zoals je ziet is de tweede letter van de gecodeerde tekst een M.
  • Op deze manier ga je verder met coderen.
Teksteeninteressantprofielwerkstuk
Sleutelwiskundewiskundewiskundewisku
Gecodeerde tekstamfshghvaakkhgsvknaofjhvgalee

Om een tekst te decoderen moet je het volgende doen:
(Als voorbeeld gaan we de gevonden gecodeerde tekst terugvertalen, dus amfshghvaakkhgsvknaofjhvgalee
  • De eerste letter van de gecodeerde tekst is een A.
  • Kijk in het vierkant waar de letter W (de eerste letter van de sleutel) bovenaan een kolom staat. In die kolom ga je op zoek naar de letter A en je noteert de letter aan de voorkant van de bijbehorende rij. Dat is een E
  • Kijk dan in het vierkant waar de letter I (de tweede letter van de sleutel) bovenaan een kolom staat. In die kolom ga je op zoek naar de letter M en je noteert de letter aan de voorkant van de bijbehorende rij. Dat is weer een E
  • Op deze manier ga je verder met decoderen.

Je kunt het hieronder uitproberen, voer de sleutel in en de tekst en klik op Codeer.

Sleutel:  
Tekst:  
Gecodeerd:  


In 1863 bedachte de Pruissische majoor Kasiski een systematische manier om deze code te kraken.
Hij gokte de lengte van het sleutelwoord, bijvoorbeeld vier tekens.
Hij bekeek dan de frequentieverdeling van de letters om de vier tekens. Als het sleutelwoord inderdaad vier tekens is, vind je voor die letters ongeveer de frequentieverdeling die voor de taal in kwestie normaal is.
Als het sleutelwoord niet vier tekens is, wordt de frequentieverdeling van die letters gelijkmatig: alle tekens ongeveer evenveel.
En zo kun je door proberen de lengte van het sleutelwoord te weten komen en na wat puzzelen de code kraken.

  17.5 De Vernam-codering

Tijdens de eerste wereldoorlog is de cryptologie tot een belangrijke militaire discipline uitgegroeid.
In de jaren 20 werden in Duitsland, Zweden en de VS de eerste met rotoren uitgeruste codeermachines ontwikkeld.
Deze toestellen zouden de markt meer dan vijftig jaar beheersen.

In de tweede wereldoorlog besliste de wedloop tussen ontwikkelaars van steeds complexere codeermachines en professionele codekrakers over zege of nederlaag. Vooral de codekrakers die de code van de legendarische Duitse Enigma moesten ontcijferen (er moest een beroep worden gedaan op meer dan 5000 specialisten) zouden geschiedenis schrijven.

Tot midden jaren 70 werden codeermachines zo goed als uitsluitend in opdracht van diplomaten, spionnen en het leger ingezet. Pas met de komst van de computercryptologie en het gebruik van dergelijke methodes voor commerciële doeleinden raakte deze technologie wijdverspreid.

De Vernam-codering
De Vernam-codering (ook wel one-time-pad genoemd) die we hier onder bespreken is een methode die onbreekbaar genoemd wordt.

In 1917, tijdens de eerste wereldoorlog, moest de Amerikaanse natuurkundige Gilbert Vernam een encryptie methode bedenken, die de Duitsers niet konden kraken.
Er wordt een rij willekeurige tekens bij gebruikt, en die reeks moet minstens even lang zijn als het te versturen bericht. Die rij tekens wordt wel de sleutel genoemd, en de ontvanger van het bericht moet ook die sleutel hebben.
Het is verstandig de sleutel maar één keer te gebruiken om de kans op ontdekking zo klein mogelijk te maken. En ook de mogelijkheid om er statistische analyse op los te laten is dan niet mogelijk. Vandaar ook de naam: one-time-pad.

Eerst wordt de tekst gedigitaliseerd m.b.v. de ASCII-code.
Daarna nemen we de willekeurige reeks tekens, die als sleuteltekst dienst doet (en die minstens even lang is als de te coderen tekst), en ook die digitaliseren we m.b.v. de ASCII-code.
Vervolgens gaan we de XOR-functie bit voor bit toepassen op de beide binaire voorstellingen.
De bits, die het resultaat zijn van die XOR-functie, leveren de gecodeerde tekst.
Als je de tekst wilt decoderen moet je de XOR-functie bit voor bit toepassen op de gecodeerde tekst met dezelfde sleutel.

Je vraagt je misschien af waarom de Vernam codering niet overal wordt gebruikt, als hij onkraakbaar genoemd wordt.
Dat komt omdat, als je een bericht verstuurt, de persoon die het bericht ontvangt ook de sleutel moet hebben. En het probleem is het overseinen van de sleutel.

Er is wel een oplossing voor dit probleem:
Stel dat Bram een bericht wil versturen naar Kelly. Bram codeert het bericht M met sleutel B.
Bram verstuurt nu B(M), dat is het gecodeerde bericht met sleutel B, naar Kelly.
Kelly codeert B(M) nu met sleutel K. Dan verstuurt Kelly het bericht K(B(M)), dat is het bericht dat twee keer gecodeerd is (eerst met sleutel B en daarna met sleutel K) naar Bram.
Bram haalt zijn sleutel van het bericht door nogmaals met B te coderen en verstuurt K(M) naar Kelly.
Tenslotte kan Kelly haar sleutel K gebruiken om het bericht te decoderen.

Er hoeven geen sleutels te worden uitgewisseld. Het nadeel is dat het bericht toch kan worden achterhaald als alle drie berichten worden opgevangen.

  17.6 Enigma

In 1920 kwam de Amerikaan Edward Hebern met iets nieuws. Hij voorzag een typemachine van een draaiend wiel, dat er voor zorgt dat bij het intypen van een bepaalde letter een andere letter wordt afgedrukt.

In de Tweede Wereldoorlog gebruikte de Duitse marine de Enigma codeermachine die erg op de Hebern-machine leek. Ze typten een bericht op de Enigma en schreven op welke lampjes (letters) er gingen branden.
Daarna werd de versleutelde boodschap via een telegraaf doorgeseind.



De Enigma-machine was gebaseerd op een systeem van drie rotors die er voor zorgden dat de tekst werd gecodeerd.
Eerst werd via een geheim codeboek de begininstelling van de Enigma gekozen, per dag een andere.
Die begininstelling zorgde er bijvoorbeeld voor dat een ingtypte W door de eerste rotor veranderde in een P, waarna door de tweede de P in een M en door de derde de M in een A veranderde. Uiteindelijk werd de W dus een A.
Typte je dan een opnieuw een letter dan draaiden alle rotoren eerst een eindje, na elke gecodeerde letter werden de rotoren door de machine in een nieuwe stand gezet. Zo werd een letter elke keer veranderd in een andere letter.

Alle rotoren bevatten aan weerszijden een krans van 26 contacten. Alle contacten aan de linkerkant waren verbonden met één contact aan de rechterkant, maar niet in dezelfde volgorde. Het aantal mogelijke manieren om een rotor te bedraden was dus 26! = 403.291.461.126.605.635.584.000.000. En elke rotor kon in 26 standen gedraaid worden.

De Britse geheime dienst was er veel aan gelegen om de code te breken. De wiskundige Alan Turing zat in het team dat zich ermee bezig hield. Dit leidde tot de uitvinding van de computer!

  17.7 DES, IDEA en AES

Een belangrijk geheimschrift is DES, wat staat voor Data Encryption Standard.
Dit is in de jaren 1970 ontwikkeld door IBM. Het is veel gebruikt in civiele toepassingen.
Doordat de computers veel sneller zijn geworden is DES niet meer veilig, omdat de sleutel van 56 bits (+ 8 controlebits, dus totaal 64 bits) vrij kort is. Maar er zijn verbeterde versies met een langere sleutel, die wel veilig zijn.

Een hedendaagse PC zou er, door alle mogelijke combinaties te proberen, nog steeds zo'n honderd jaar over doen om de sleutel te vinden, maar eind jaren 90 is een dergelijke kraakpoging al succesvol afgerond binnen een etmaal met een kleine honderdduizend pc's.
Ook supercomputers kunnen DES theoretisch in een paar uur kraken. Maar de opvolgers van DES worden nog steeds erg veel gebruikt.

We gaan er van uit dat het bericht, dat we met DES willen coderen, digitaal is vastgelegd.
Het bestaat dan uit een rij bytes, die ieder weer uit 8 bits bestaan. We delen die bitreeks op in stukken van 64 bits.
Zo'n stuk van 64 bits wordt gecodeerd met de sleutel.
DES zet dus steeds een blok van 64 bits om in een blok van opnieuw 64 bits. We noemen zo'n geheimschrift een block cipher.

Hoe DES globaal in z'n werk gaat, zie je in onderstaand schema.
Als je het precies wilt weten dan kun je het nalezen op de DES-pagina.



Uitleg van bovenstaand schema
Het bericht 'Beste Ed' wordt geschreven als 64 bits. Deze bits worden eerst op een bepaalde manier door elkaar gehusseld en dan gaan ze zestien keer door een 'bitmolen' heen, die de bits weer door elkaar husselt en verandert. Daarna worden ze nog eens door elkaar gehusseld en het resultaat is het gecodeerde bericht.

Uit de sleutel worden ook door bit-husselen en veranderen zestien deelsleutels gemaakt.
Die deelsleutels worden in de zestien stappen gebruikt. Hierdoor zijn de zestien stappen allemaal verschillend.
Voordat het bericht de molen in gaat, wordt het in twee delen gesplitst.
De rechterhelft wordt veranderd volgens een bewerking die de bits combineert met die van de deelsleutel, ze door elkaar gooit en verandert (in het schema wordt dat met de operatie f aangegeven).
Een onderdeel van deze operatie vormen de zogenaamde S-boxen. Hier vindt de eigenlijke cryptografie van DES plaats.

De uitkomst wordt via de bit-operatie XOR gecombineerd met de andere helft van het bericht. Het resultaat wordt de rechterhelft van het volgende tussenbericht.
De rechterhelft van het bericht wordt de linkerhelft van het volgende tussenbericht.
Het steeds verwisselen van linker- en rechterhelft zorgt ervoor dat de bits in het eindresultaat door alle bits in het bericht beïnvloed worden. Dat maakt het kraken lastig.

Doordat de computers steeds sneller worden is het mogelijk alle mogelijke combinaties uit te proberen (dat noem je een brute force attack) en zo het versleutelde bericht te ontcijferen. Er zijn bij een 56-bit sleutel wel 70.000.000.000.000.000 mogelijkheden, maar dat is met een moderne computer toch vrij snel te doen.

Verbeterde versies van DES
  • IDEA is een verbeterde versie van DES die met een 128-bits sleutel werkt.
  • Triple DES (3DES) is een verbetering van DES die het DES-algoritme drie keer uitvoert en daarbij twee verschillende sleutels gebruikt.
  • AES gebruikt een andere techniek om de bits door elkaar te husselen, en de sleutel kan een lengte van 128, 192 of 256 bits hebben.
Het probleem van sleuteluitwisseling
Als je DES of een dergelijke methode wilt gebruiken om gecodeerde berichten te versturen moet je er wel voor zorgen dat de ontvangende partij die kan decoderen. Zender en ontvanger moeten dezelfde sleutel hebben, die voor de rest van de wereld geheim moet blijven.
Hoe krijgen ze dat voor elkaar? Een oplossing voor dit probleem is public key encryptie. Daar lees je over in paragraaf 9.

  17.8 Een beetje wiskunde

Bij de uitleg van moderne cryptologie-methoden komen een aantal wiskundige begrippen en technieken voor.
Die gaan we hier eerst bespreken.

Priemgetallen
Een priemgetal heeft geen echte delers, je kunt het alleen delen door 1 en het getal zelf.
Het getal 17 is een priemgetal: je kunt het niet schrijven als het produkt van twee (of meer) andere getallen.
Hoe controleer je of een getal een priemgetal is? Je moet gewoon controleren of je het kunt delen door 2 , 3, 5 , enz. Daarbij hoef je niet verder te gaan dan de wortel uit het getal, en je hoeft alleen priemgetallen als deler te proberen.
Bijv. het getal 71.
Je kunt het niet delen door 2, 3, 5, 7, 11. Verder hoef je niet te gaan, want 112 > 71, dus de wortel uit 71 is kleiner dan 11. Dus 71 is een priemgetal.

Een belangrijke eigenschap van priemgetallen is:
Elk positief geheel getal is op precies één manier als produkt van priemgetallen te schrijven.
Bijvoorbeeld: 30 = 2 x 3 x 5
24 = 23 x 3

Modulo rekenen
Bij de Caesarmethode moesten we modulo 26 rekenen.
Dat betekent dat je alleen de getallen 0 tot en met 25 gebruikt. Mocht je bij een bewerking boven de 25 of onder de 0 uitkomen, dan trek je net zo vaak 26 van het resultaat af tot het weer tussen 0 en 25 zit, of je telt er net zo vaak 26 bij op tot de uitkomst weer tussen de 0 en 25 zit. Het getal 26 noemen we dan het modulogetal.

Hieronder zie je een aantal voorbeelden.

17 + 19 (mod 26) = 10
7 - 9 (mod 26) = 24
7 x 9 (mod 26) = 11
23 (mod 7) = 1

Een aantal rekenregels voor modulo-rekenen:
3 + 4 = 3 + 4 + 5 x 11 (mod 11)
In het algemeen: als a, b, k en N gehele getallen zijn dan geldt a + b = a + b + k x N (mod N)

5 x 3 (mod 8) = 7
5 x (3 + 13 x 8) (mod 8) = 7
In het algemeen: als a, b, k en N gehele getallen zijn dan geldt a x b = a x (b + k x N) (mod N)

Je kunt het ook anders formuleren:
Als a = p (mod N) en b = q (mod N) dan geldt:
a + b = p + q (mod N)
a x b = p x q (mod N)

Daarmee kun je bepaalde berekeningen heel erg vereenvoudigen: 6 x 11 (mod 4) = 2 x 3 (mod 4) = 6 (mod 4) = 2

Machtsverheffen bij modulo rekenen
142 (mod 16) = (-2)2 (mod 16) = 4
144 (mod 16) = (-2)4 (mod 16) = 16 (mod 16) = 0
141000 (mod 16) = (144 )250 (mod 16) = 0

177 (mod 16) = 17 (mod 16) = 1
177 4(mod 16) = 1 4(mod 16) = 1
177 238(mod 16) = 1 238(mod 16) = 1

De ggd met het algoritme van Euclides
Als je de ggd van 24 en 32 moet bepalen, dan moet je het grootste getal opzoeken waar je beide getallen door kunt delen, en dat is 8
(ggd is de afkorting van grootste gelijke deler)
Bij kleine getallen zie je de ggd meestal vrij snel (als je goed kunt hoofdrekenen), maar bij grote getallen is dat lastiger.
Dan is het handig als je het op de volgende manier doet:
  • We willen de ggd van 900 en 1140 bepalen.
  • Als je 900 en 1140 allebei door een bepaald getal kunt delen, dan kun je 1140 - 900 = 240 ook door dat getal delen.
    Dan kun je dus net zo goed de ggd van 900 en 240 bepalen.
  • Als je 900 en 240 allebei door een bepaald getal kunt delen, dan kun je 900 - 3 x 240 = 180 ook door dat getal delen.
    Dan kun je dus net zo goed de ggd van 240 en 180 bepalen.
  • En zo gaan we verder:
    240 - 180 = 60, we kunnen dus net zo goed de ggd van 180 en 60 bepalen.
  • 180 - 3 x 60 = 0
    Nu is de uitkomst 0, en daarmee zijn we klaar.
  • We hebben nu gevonden dat 60 de grootste gelijke deler van 900 en 1140 is.
Deze methode noem je de algoritme van Euclides.
De berekening laat zich kort opschrijven als de rij: 1140 \ 900 \ 240 \ 180 \ 60 \ 0

Voor elk opvolgend drietal ...abc... in de rij geldt: a mod b = c

Op deze manier berekenen we ook: 752 \ 372 \ 8 \ 4 \ 0
waaruit we concluderen: de ggd van 752 en 372 is 4

Het algoritme van Euclides is dus als volgt:
  1. Noem het grootste van de beide getallen A, het andere B.
  2. Trek B net zo vaak van A af totdat er 0 over blijft of een getal kleiner dan B.
  3. Wanneer er 0 over blijft zijn we klaar, en is B de ggd.
  4. Zo niet, herhaal dan het algoritme met B en wat er van A over is.
De stelling van Euler
Er is bij ieder getal n en voor ieder getal a met 1 < a < n is er een getal x te vinden waarvoor geldt: ax (mod n) = 1

Bewijs:
Stel je voor dat je de machten van a op een rijtje zet:
a     a2     a3     .....     allemaal modulo n

Maar er zijn maar n verschillende getallen als je modulo n rekent, dus je moet een keer een getal tegenkomen dat je al gehad hebt.
Dus moeten er een x en y zijn waarvoor geldt: ax = ay
Laten we zeggen dat x de grootste van die twee is en dat y geen 0 is (dan waren we namelijk al klaar, want a0 = 1 (mod n)).
Dan kun je dit ook zo schrijven: ax-1 . a = ay-1 . a (mod n)
Als nu y gelijk aan 0 is dan zijn we klaar (zie boven) en anders pellen we er nog een a'tje af. Uiteindelijk is x-y het gezochte getal.

De kleine stelling van Fermat
Voor elke gehele waarde van a>0 en elk priemgetal p dat geen deler van a is geldt: ap-1 (mod p) = 1
Je kunt het ook zo zeggen: voor elke gehele waarde van a>0 en elk priemgetal p geldt: ap (mod p) = a (mod p)
Bewijs:
Om de kleine stelling van Fermat te bewijzen, maken we gebruik van een hulpstelling:
Als p geen deler van a is en a * m (mod p) = a * n (mod p) dan geldt dat m (mod p) = n (mod p)
Bewijs:
Stel a is geen deler van p en a * m (mod p) = a * n (mod p), dan geldt:
a * m - a * n (mod p) = 0, dus dus a * (m - n) (mod p) = 0 , dus a*(m - n) is deelbaar door p
We weten dat a geen veelvoud is van p (want a is geen deler van p), en p is priemgetal, dus p is ook geen veelvoud van a.
Dus moet gelden m - n (mod p) = 0, oftewel m - n is een veelvoud van p.
Dus m = n + k * p, dus m (mod p) = n (mod p)

Uit de hulpstelling volgt natuurlijk ook het volgende (dat is de omgekeerde stelling):
Als p geen deler van a is en m (mod p) is niet gelijk aan n (mod p) dan is a * m (mod p) niet gelijk aan a * m (mod p)

Nu het bewijs van de kleine stelling van Fermat:
Stel dat p een priemgetal is en a is een geheel getal, dan zijn er twee gevallen mogelijk:
  1. a is deelbaar door p
    In dat geval is a een veelvoud van p en ieder veelvoud van a dus ook, dus dan geldt ap (mod p) = a (mod p) = 0
  2. a is niet deelbaar door p
    • Beschouw nu alle getallen 1, 2, 3, ... , p-1
      Deze p-1 getallen zijn allemaal niet deelbaar door p.
    • Als je nu a vermenigvuldigt met één van deze getallen 1, 2, 3, ... , p-1 dan levert het product (mod p) weer een getal op dat niet deelbaar is door p. Dus moet dat product (mod p) wel één van de getallen 1, 2, 3, ... , p-1 zijn, want meer getallen (mod p) zijn er niet.
    • Verder is het zo dat als je twee verschillende getallen x en y kiest uit de rij 1, 2, 3, ... , p-1 dan is x (mod p) niet gelijk aan y (mod p).
    • Dan volgt uit de omkering van de hulpstelling dat a * x (mod p) niet gelijk is aan a * y (mod p)
    • Daaruit volgt dat de getallen a * 1, a * 2, a * 3, ... , a * (p-1) modulo p weer dezelfde getallen 1, 2, 3, ... , p-1 opleveren, maar dan waarschijnlijk in een andere volgorde.
    • Dus de vermenigvuldiging (1 * a)*(2 * a)*(3 * a)* ...*((p-1) * a) (mod p) levert dezelfde uitkomst op als de vermenigvuldiging 1 * 2 * 3 * ... * (p-1) (mod p)
    • Dus (1 * 2 * 3 * ... * (p-1)) * ap-1 (mod p) = 1 * 2 * 3 * ... * (p-1) (mod p)
    • Dus ap-1 (mod p) = 1
    • En als je beide kanten dan vermenigvuldigt met a krijg je: ap (mod p) = a (mod p)
Toepassing:
Als je de volgende vergelijking op moet lossen: 3x (mod 7) = 1
dan kun je handig de kleine stelling van Fermat gebruiken.

De oplossing is x = 6, want ap-1 (mod p) = 1, dus 37-1 (mod 7) = 1
Controleer maar: 36 (mod 7) = (32)3 (mod 7) = 9 3 (mod 7) = 2 3 (mod 7) = 8 (mod 7) = 1

De Eulerfunctie
De functie Φ(n) van Euler geeft het aantal positieve gehele getallen die kleiner dan n zijn, en die geen factor met n gemeenschappelijk hebben (dat betekent dus dat er geen getal groter dan 1 is waar je ze allebei door kunt delen).
Er geldt bijvoorbeeld Φ(10)=4, want 1, 3, 7, 9 en 10 zijn kleiner dan 10 en hebben geen factor gemeenschappelijk met 10 (2, 4, 5, 6 en 8 wel).
Verder geldt Φ(7)=6 want 1, 2, 3, 4, 5 en 6 zijn kleiner dan 7 en hebben geen factor gemeenschappelijk met 7

Als p een priemgetal dan geldt Φ(p)=p-1, immers de getallen 1 t/m p-1 zijn zijn allemaal kleiner dan p en die hebben allemaal geen factor met p gemeen (want anders zou p geen priemgetal zijn).

Als n het product van de priemgetallen p en q is dan geldt Φ(n) = Φ(p*q)=(p-1)*(q-1)
Bewijs:
Je hebt p*q - 1 getallen die kleiner dan p*q zijn. Daarbij zijn een aantal die de factor p met n=p*q gemeenschappelijk hebben.
Dat zijn 1*p, 2*p, 3*p, (q-1)*p.         Dat aantal is dus q-1
Er zijn ook een aantal die de factor q met n=p*q gemeenschappelijk hebben.
Dat zijn 1*q, 2*q, 3*q, (p-1)*q.         Dat aantal is dus p-1
De rest heeft geen factor met n=p*q gemeenschappelijk, dat aantal is dus p*q-1 - (p-1) - (q-1) = p*q - p - q +1
En als je de haakjes wegwerkt bij (p-1)*(q-1) krijg je ook p*q - p - q +1, en dus klopt het.

De stelling van Euler
De stelling van Euler is een generalisatie van de kleine stelling van Fermat:
Als a geen factor gemeenschappelijk heeft met n = p*q (waarbij p en q priemgetallen zijn) dan geldt:
a(p-1)*(q-1)= 1 (mod n)

Het bewijs van de Stelling van Euler lijkt heel veel op het bewijs van de Kleine stelling van Fermat.
Dit keer vermenigvuldig je de getallen die kleiner dan n zijn en die geen factor met n gemeen hebben, dat zijn dus (p-1)*(q-1) getallen.
Modulo n zijn dat ook (p-1)*(q-1) getallen die geen factor gemeenschappelijk met n hebben.
Vermenigvuldigen we deze getallen met a, dan krijgen we opnieuw (p-1)*(q-1) verschillende getallen die geen factor gemeenschappelijk met n hebben. Omdat ze verschillend zijn moeten het wel dezelfde getallen (modulo n) zijn als waarmee we begonnen, maar misschien in een andere volgorde. De producten zijn dus gelijk (mod n), terwijl het ene product a(p-1)*(q-1) keer zo groot is als het andere. Dus moet er gelden: Dus a(p-1)*(q-1) (mod n) = 1

Toepassing:
1060 (mod 77) = 1,         want 77 = 7*11, en Φ(77)=6*10=60

  17.9 RSA

Bij de Caesarmethode, bij DES enz gebruik je voor encryptie en decryptie dezelfde sleutel. Dit wordt symmetrische encryptie genoemd. Symmetrische encryptiemethoden zijn vaak snel, maar hebben als nadeel dat er een aparte manier moet worden gevonden om de sleutel tussen de communicerende partijen uit te wisselen, omdat de sleutel geheim moet blijven.

Bij asymmetrische encryptie of public key encryptie zijn er voor codering en decodering verschillende sleutels nodig, die niet eenvoudig uit elkaar af te leiden te zijn.
Iemand die alleen de codeersleutel heeft, kan een bericht wel in geheimschrift zetten, maar hij kan een gecodeerd bericht niet decoderen.

Het verzenden van een geheim bericht gaat als volgt.
  1. De ontvanger O bedenkt twee sleutels. De decodeersleutel D houdt hij geheim.
  2. O stuurt de codeersleutel E naar de zender Z.
  3. De zender Z gebruikt de codeersleutel van O en codeert het bericht m hiermee.
  4. Z stuurt het gecodeerde bericht E(m) naar O.
  5. De ontvanger O gebruikt zijn geheime decodeersleutel D om het bericht te decoderen: D(E(m))=m.
Voor stap 2, het versturen van de codeersleutel hoeft niet een geheim kanaal gebruikt te worden. Iemand die het bericht zou willen ontcijferen, heeft immers niets aan de codeersleutel. Daarom wordt de codeersleutel wel de publieke sleutel of public key genoemd. Je kunt die publieke sleutel rustig op het internet zetten, en dat gebeurt dan ook vaak. Daarover later.

De belangrijkste public key encryptie methode is RSA.
Het RSA systeem is in 1978 door Rivest, Shimar en Adleman uitgevonden. RSA is daarom ook naar hen genoemd: de eerste letters van hun namen.

Hoe werkt RSA?
Stel je voor je wilt het woord WISKUNDE coderen.
  • Eerst maak je van elk teken een getal door het om te zetten in de bijbehorende ASCII-code.
  • Nu kies je twee priemgetallen p en q.
    Normaal gesproken worden daar gigantisch grote getallen voor gekozen, maar dan wordt voor dit voorbeeld het rekenwerk veel te lastig. Dus wij nemen twee vrij kleine getallen, namelijk p = 13 en q = 23.
  • Bereken het product: N = p · q = 13 · 23 = 299.
    Verder bereken je: X =  (p – 1) · (q – 1) = 12 · 22 = 264.
  • Daarna kies je een getal dat kleiner dan X is (dus kleiner dan 264) en wel zo dat dit getal geen deler heeft die X ook heeft. Dus de ggd van dit getal en X = 264 moet 1 zijn. Daar zijn meestal een heleboel mogelijkheden voor, maar het getal moet niet te klein worden gekozen want hoe kleiner het is hoe gemakkelijker het te kraken is. Dit getal S is de coderingssleutel.
    Bijvoorbeeld S = 259 voldoet aan de voorwaarden.
    (Die ggd is gemakkelijk met het algoritme van Euclides te berekenen)
  • Nu kun je aan het coderen met behulp van de getallen S = 259 en N = 299.
    De ASCII-omzetting van WISKUNDE is: 87 73 83 75 85 78 68 69.
  • Doe elk getal tot de macht 259 (mod 299)
    (als er in de praktijk met veel grotere getallen wordt gewerkt worden er een aantal getallen bij elkaar gedaan, er wordt bijv. gewerkt met blokjes van 6 cijfers, en dat wordt dan tot de macht 259 (mod 299) gedaan)
    Je kunt die machten op een handige manier berekenen, bijvoorbeeld 87259 (mod 16) berekenen.
    Het getal 259 kan binair geschreven worden als 100000011, want 1 + 2 + 256 = 259
    Dus 87259 = 871 + 2 + 256 = 871 x 872 x 87256
    Nu maken we via kwadrateren (mod 16) de onderstaande tabel.

    8718728748788716 873287648712887256
    879416516256553529243

    (Berekening van bijv. 872 (mod 16) : 872 = 7569,     7569 : 299 = 25,314,     7569 - 299 x 25 = 94,     dus 872 (mod 299) = 94)
    en dus is de uitkomst van 87259 (mod 299) gelijk aan 87 x 94 x 243 (mod 299) = 100

    Dus de eerste letter van het geheimschrift is d, want de d heeft ASC-code 100
    Zo doe je het ook met de andere getallen. Zet alles achter elkaar en je hebt je geheimschrift.
De getallen N en S vormen de publieke sleutel. Die mag iedereen weten, dus zo kan iedereen een bericht versleutelen.

Om het gecodeerde woord weer te decoderen heb je de decodeersleutel D nodig.
Die decodeersleutel moet voldoen aan D · S = 1 (mod X), dus in dit geval aan D · 259 = 1 (mod 264).
Volgens de stelling van Euler is er altijd zo'n getal te vinden.

Deze D (hier dus bijvoorbeeld 211) is de geheime sleutel die alleen bekend is aan degene die moet decoderen.

Je decodeert nu door de afzonderlijke cijfers van het geheimschrift tot de macht D (mod 299= N) te doen.
Decodeer je gecodeerde woord WISKUNDE en ga na dat je dit woord weer terug krijgt.

Hoe vind je de waarde van D ?
We hebben eerst 259 als codeersleutel genomen, en gecontroleerd of de ggd van 259 en 264 wel 1 is.
De ggd van 259 en 264 bereken je m.b.v. het algoritme van Euclides op de volgende manier:
264 = 1 x 259 + 5, dus je kunt ook de ggd van 259 en 5 berekenen.
259 = 51 x 5 + 4, dus je kunt ook de ggd van 5 en 4 berekenen.
5 = 4 x 1 + 1, dus je kunt ook de ggd van 4 en 1 berekenen, en die is 1.

Hij moet nog het getal D berekenen, waarvoor geldt S x D (mod X) = 1 , dus 259 x D = a x X + 1.
  1. Uit de laatste regel van de berekening van de ggd blijkt: 1 = 5 - 1 x 4 en de regel daarboven zegt: 4 = 259 - 51 x 5.
    In 1 = 5 - 1 x 4 gaan we 4 = 259 - 51 x 5 invullen, dus 1 = 5 - 1 x (259 - 51 x 5) = 5 - 259 + 51 x 5 = 52 x 5 - 259.
  2. In 1 = 52 x 5 - 259 gaan we vervolgens 5 = 264 - 1 x 259 invullen,
    dus 1 = 52 x (264 - 1 x 259) - 259 = 52 x 264 - 52 x 1 x 259 - 259 = 52 x 264 - 53 x 259.
  3. We hebben ontdekt dat 52 x 264 - 53 x 259 = 1, oftewel 53 x 259 = 52 x 264 - 1, dus 53 x 259 = - 1 (mod 264)
    Dus -53 x 259 = 1 (mod 264), dus 211 x 259 = 1 (mod 264) (want - 53 = -53 + 264 (mod 264) = 211 (mod 264). Dus D = 211.
De RSA-methode bestaat dus uit de volgende stappen:
  1. Persoon A wenst gecodeerde boodschappen te ontvangen. Daartoe zal hij twee grote priemgetallen p en q (minstens honderd cijfers per priemgetal) zoeken. Hij berekent hiermee de getallen N = p * q en X = (p-1)*(q-1).
    Vervolgens zoekt hij een (groot) getal S zodat 1 < S < X en zodat de ggd van S en X gelijk is aan 1.
    Tevens berekent hij het getal D, 1 < S < X zodat D * S (mod X) = 1 ( * staat voor keer)
    De getallen N, S en D noemt men resp. de modulus, de coderingsexponent en de decoderingsexponent.
  2. A maakt de getallen N en S publiek (ze vormen de publieke sleutel van de encryptie), terwijl de andere getallen geheim blijven.
    Iemand anders kan dan niet uitrekenen wat X is, tenminste, dat zou hem jaren kosten op een snelle computer. Het is wel zo dat N en S groot moet zijn (bijvoorbeeld 100 cijfers).
  3. Als B de boodschap x wil doorsturen naar A, zal hij eerst de boodschap moeten omzetten in een groot getal, eventueel opgesplitst in een aantal blokken. Dit gebeurt meestal m.b.v. de ASCII-code.
    Stel dat m het resultaat is van deze omzetting.
    Vervolgens berekent B het getal c = mS (mod N). Het getal c stuurt hij naar A.
  4. A ontvangt het getal c en berekent m = cD (mod N), waarmee hij de originele boodschap m krijgt.
    (want c D (mod N) = (m S)D (mod N) = m S.D (mod N) = mk.X+1 (mod N) = mk.X . m (mod N) = 1 . m (mod N) = m (mod N) )
    (volgens de stelling van Euler is m(p-1)*(q-1) (mod p*q) = 1, dus mX (mod m) = 1, dus mk.X = (mX)k = 1 )
RSA is de meest gebruikte en dus ook uitvoerig geteste publieke sleutel methode.
Als men met hele grote priemgetallen werkt is de methode veilig. Dit komt omdat het in een "redelijke tijd" niet mogelijk is N te ontbinden in p en q.

RSA is veel trager dan DES en andere symmetrische encryptiealgoritmes (dat zijn methoden waarbij voor het versleutelen en het ontsleutelen dezelfde sleutel nodig is.
In de praktijk worden berichten vaak met een symmetrisch algoritme versleuteld (bijv. met DES of RSA). En de symmetrische sleutel die daarbij nodig is wordt versleuteld met RSA. Het symmetrisch vercijferd bericht en de met RSA vercijferde sleutel worden dan beiden verstuurd.


Je kunt hier de RSA-methode uittesten.
Start door te klikken op Genereer twee priemgetallen (van 3 cijfers) of voer zelf twee priemgetallen in.
Voer zelf eventueel ook een coderingsexponent in. Klik dan op Genereer sleutel.
Vul een letter in in het tekstvenster achter "Teken om te coderen" en klik op Codeer of op Decodeer.
  
Eerste priemgetal (p)   
Tweede priemgetal (q)   
Coderingsexponent (s)   
Modulus (n)
Decoderingsexponent (d)   
Teken om te coderen (ASC)
Output (decimaal)
Details:

  17.10. Certificaten

Veel cryptografie op het internet gebruikt RSA. De public keys die daarvoor gebruikt worden, worden door een soort notarissen gepubliceerd op het internet.

Bekende voorbeelden zijn VeriSign en Thawte.
In Nederland maakt de overheid veel gebruik van Getronics Pinkroccade, en tot september 2011 van Diginotar, maar de laatste bleek niet betrouwbaar.
Deze certification authorities geven voor een zeker bedrag certificaten uit. In zo'n certificaat staat informatie over de eigenaar en de public key daarvan.
Een ander voorbeeld is CACert, die de identiteiten vaststelt met hulp van vrijwilligers en daardoor gratis kan werken. Als je dit gebruikt zul je misschien een cryptische melding krijgen dat het door CAcert uitgegeven certificaat niet vertrouwd kan worden. Dit zal in de toekomst veranderen, als alles goed gaat. Tot die tijd zul je zelf het root-certificaat van CAcert op je computer moeten installeren zodat deze melding niet meer wordt weergegeven.
Programma's die de cryptografie op je computer regelen, kunnen die certificaten opvragen (zonder dat je er iets van merkt), eventueel opslaan, en de informatie gebruiken.

Voorbeeld
Stel je voor dat je wilt internetbankieren via de ING-site en nadat je deze site in beeld hebt klik je op Inloggen MijnING
Dan verschijnt het volgende venster:



Het is het verstandig bij het inloggen te controleren of de juiste URL in de adresbalk van je browser staat, met "https" (zie waar de rechte pijl naar wijst). Dan weet je dat je wachtwoord en andere informatie gecodeerd wordt overgestuurd.
Als je in dat venster klikt op het leeuwtje in het begin van de adresbalk (waar de gebogen pijl naar wijst) dan krijg je informatie over de beveiliging.



En als je dan op Meer informatie klikt, en je klikt in het volgende venster op het tabbad Details, dan krijg je o.a. het volgende in beeld:



Je ziet daarin onder andere:
  • de naam van de eigenaar van de publieke sleutel, de ING
  • de naam van de uitgever van het certificaat, VeriSign
  • de publieke sleutel, een getal van 2048 bits, dus 128 bytes, in hexadecimale notatie (dat is de modulus)
  • de coderingsexponent 65536, het andere deel van de publieke sleutel
Zo'n certificaat kun je ook opslaan op je computer, en later weer bekijken.
Dat bekijken kun je bijv. m.b.v. Internet Explorer. Klik daarin op Extra, en dan op Internetopties, en dan op het tabblad Inhoud. Dan verschijnt het volgende venster:



Na een klik op Certificaten en dan op het tabblad Vertrouwde basiscertificeringsinstanties, dan dan krijg je zoiets als hier onder in beeld: (het certificaat van het Lauwerscollege heb ik zelf geïmporteerd, dat staat er standaard niet bij)

  17.11. SSL en TLS

Communicatie over het internet is gemakkelijk af te luisteren. Om te voorkomen dat er gevoelige informatie in verkeerde handen valt kun je de data die je verstuurt coderen.
Voorbeelden van protocols die dit regelen zijn SSL (dat is de afkorting van Secure Socket Layer) en zijn opvolger TLS (dat is de afkorting van Transport Layer Security). Maar de naam SSL wordt nog altijd gebruikt als het gaat om het beveiligen van de internetverbinding.

Als er in het adresveld van je browser "https://..." staat in plaats van "http://..." weet je dat één van deze protocols gebruikt wordt. Bij internetbankieren is dat bijvoorbeeld het geval.
Verder staat er een slotje op de statusbalk, of in de adresbalk.
Bij het totstandkomen van de verbinding met zo'n site wordt RSA gebruikt.

Stel je voor dat je wilt internetbankieren via MijnING, dan zijn er drie partijen die een rol spelen:
  1. De klant, dat ben jij dus. Afkorting: K
  2. De ING-bank. Afkorting: B. Publieke sleutel: EB, geheime sleutel: DB.
  3. De certification authority. Voor de ING is dat het bedrijf VeriSign. Afkorting V. Publieke sleutel: EV, geheime sleutel: DV.
In het onderdeel over RSA is uitgelegd hoe zo'n publieke en geheime sleutel werken. We gebruiken de volgende notatie voor het coderen en decoderen met RSA:
  • EX(blabla) is het geheimschrift dat je krijgt als je het bericht blabla codeert met de publieke sleutel van partij X (hier is dat B of V).
  • DX(blabla) is het geheimschrift dat je krijgt als je het bericht blabla codeert met de geheime sleutel van partij X.
Verder weet je waarschijnlijk nog wel dat je een bericht dat met de publieke sleutel gecodeerd is, kunt decoderen door er de geheime sleutel op los te laten, en andersom.

In de notatie die hier boven besproken is:
  • EX ( DX ( m ) ) = m voor ieder bericht m en voor iedere partij X
  • DX ( EX ( m ) ) = m voor ieder bericht m en voor iedere partij X
Totstandkoming beveiligde sessie
Nu gaan we bekijken hoe een beveiligde sessie tot stand komt.
(Als er "klant" staat wordt er meestal bedoeld: de computer van de klant)
  1. De klant K surft naar de site van de ING en klikt op de link 'Inloggen', waar de URL "https://mijn.ING.nl" bij hoort.
  2. De ING stuurt het volgende gecodeerde bericht naar de klant:           DB("mijn.ING.nl")
  3. De klant vraagt aan VeriSign om de public key die bij de URL "mijn.ING.nl" hoort.
  4. VeriSign stuurt aan K het volgende bericht:           DV (EB )
    Dat is de publieke sleutel van de ING, gecodeerd met de geheime sleutel van VeriSign.
    Dat laatste is nodig om zeker te weten dat die EB niet van een oplichter komt, maar echt van VeriSign.
  5. De public key van VeriSign is meegeleverd in de browser van de klant. De klant zoekt daar EV op.
  6. De browser van de klant rekent uit:           EV ( DV (EB ) )
    en dat is gelijk aan EB volgens de RSA-eigenschap hierboven.
  7. De browser van de klant rekent uit:           EB ( DB("mijn.ING.nl") )
    en dat is (als alles goed gegaan is) "mijn.ING.nl"
    Dit klopt met de URL die in de link stond. De browser zet nu "https://mijn.ING.nl" in de adresbalk.
Hiermee is de authenticatie afgelopen. De klant weet nu zeker dat de website, waarop hij aan het internetbankieren is, ook werkelijk van de bank is.

Het coderen en decoderen met RSA gaat relatief langzaam. Daarom stappen klant en bank nu over op een ander geheimschrift: AES. Dit geheimschrift gebruikt een symmetrische sleutel. Dat betekent dat er geen publieke sleutel is. De sleutel moet dus veilig uitgewisseld worden tussen bank en klant. Dat gebeurt, ook met RSA, in het volgende deel van het protocol.
  1. De klant bedenkt een AES-sleutel: s.
  2. De klant stuurt naar de ING:           EB (s)
  3. De ING zoekt z'n eigen geheime sleutel op en rekent uit:           DB (EB (s) en dat is gelijk aan s
  4. Klant en ING beschikken nu beide over de sleutel s en kunnen de rest van het verkeer coderen met het snelle AES.

  17.12. PGP

Je kunt er ook voor zorgen dat je email versleuteld wordt verzonden. Meestal wordt daarvoor PGP gebruikt, dat is de afkorting van Pretty Good Privacy. Als je PGP gebruikt worden je e-mailteksten omgezet in een onleesbare brij van cijfers en letters.

PGP gebruikt het publieke sleutel encryptie-algoritme RSA.
Maar PGP codeert niet het hele bericht met RSA, dat zou veel te lang duren.
In plaats daarvan maakt PGP een willekeurige 128 bits sleutel aan.
Deze 128 bits worden vervolgens versleuteld met de publieke sleutel van de ontvanger. Beide versleutelde berichten worden aan de ontvanger gestuurd. Deze kan met behulp van zijn geheime sleutel de 128-bits sleutel terugvinden, en daarmee kan hij weer het oorspronkelijke bericht met IDEA ontcijferen.

Digitale handtekeningen in PGP
Je kunt een zogenaamde digitale handtekening meesturen. Dat is een code, die je gecodeerd meezendt (RSA-gecodeerd), zodat degene die het ontvangt zeker weet dat het bericht van jou komt.
Verder wordt er een zogenaamde MD5-hash van het bericht genomen.
Bij elk bericht kun je een algoritme gebruiken dat er voor zorgt dat er een 128 bits getal wordt berekend. Elk bericht levert weer een ander getal op, en dat wordt de MD5-hash genoemd.
MD5 is ontworpen door Ronald Rivest die ook betrokken was bij de ontwikkeling van RSA.
In werkelijkheid zijn er natuurlijk "maar" 2128 mogelijkheden van dat getal, en theoretisch kunnen twee berichten hetzelfde MD5-hash getal opleveren. Maar die kans is zo klein dat we die wel kunnen verwaarlozen.

PGP plaatst dus een "digitale handtekening" op een bericht door er een MD5-hash van te berekenen en gecodeerd mee te sturen, en de gecodeerde "handtekening" wordt ook meegestuurd.
PGP versleutelt deze twee met de geheime sleutel van de zender.

De ontvanger kan de digitale handtekening ontcijferen met zijn eigen publieke sleutel en vergelijken met de MD5-hash die hij zelf berekent over het bericht zoals hij dat ontvangen heeft. Als beide MD5-hashes overeenkomen weet de ontvanger dat het bericht ongewijzigd is sinds de handtekening is geplaatst.
En omdat alleen de zender die geheime sleutel had kunnen gebruiken, weet hij dat het bericht afkomstig moet zijn van die persoon. Hierdoor kan een ontvanger nagaan of het bericht echt van de verzender afkomstig is (authenticiteit) en verder kan hij of zij controleren of het bericht nog intact is (data-integriteit).
Daarnaast zorgt het er ook voor dat een verzender niet kan ontkennen dat hij of zij een bericht gestuurd heeft ( non-repudiation).


Je kunt hier de MD5 hash van een tekst laten berekenen. Voer hieronder de tekst in, en klik op Bereken de Hash-code:

                        MD5 hash:



De keyservers
Om een bericht voor een ander te kunnen versleutelen, heeft de zender de publieke sleutel van de ontvanger nodig. Daarvoor is een netwerk van zogeheten keyservers opgezet. Nadat hij een sleutelpaar heeft aangemaakt kan de gebruiker zijn publieke sleutel naar een keyserver sturen.
Alle keyservers staan met elkaar in verbinding, zodat de sleutel nu bij alle servers opvraagbaar is.
Wie nu iemands sleutel zoekt kan naar een willekeurige keyserver gaan en de gewenste naam of e-mailadres opgeven. De keyserver stuurt dan de sleutel, die de gebruiker dan kan gebruiken.

De pgp sleutels van je kennissen bewaar je in een "openbare sleutelbos" (keyring) zodat jij, of je email-programma, handtekeningen kan verifiëren en berichten kan decoderen.

Sleutels
Sleutels worden versleuteld opgeslagen.
PGP laat de gebruiker een passphrase of wachtzin kiezen, die wordt gebruikt om een te bewaren sleutel mee te versleutelen voordat deze op de harde schijf wordt opgeslagen. PGP slaat de sleutels in twee bestanden op; één voor de publieke sleutels en één voor de geheime sleutels. Deze bestanden worden sleutelringen genoemd.
Wanneer je PGP gebruikt, zul je in het algemeen de publieke sleutels van jouw ontvangers toevoegen aan jouw publieke sleutelring. Jouw geheime sleutels worden opgeslagen in jouw geheime sleutelring.
Wanneer je deze ring kwijtraakt, kun je geen data meer ontcijferen waarvoor je deze sleutels nodig hebt.

S/MIME
Een alternatief voor PGP heet S/MIME. Dit wordt standaard gebruikt in bijvoorbeeld Outlook en in het email-programma van Mozilla.
S/MIME werkt net zo als PGP, maar voor de publieke sleutels wordt gebruik gemaakt van certificaten, terwijl de PGP-klant zijn sleutels zelf moet regelen.
Als je in Outlook in de menubalk op Extra → Opties → Beveiliging klikt dan verschijnt het volgende venster:



En dan kun je aangeven dat berichten gecodeerd moeten worden, en dat er een digitale handtekening aan toegevoegd moet worden.
Met het digitale id wordt hier een certificaat, zoals hierboven beschreven, bedoeld.