Sinds de opkomst van het internet hebben we een groot deel van onze communicatie naar het internet verplaatst. Omdat het internet als communicatiemedium berust op miljoenen computers die de overdracht van de stukjes informatie die we uitwisselen voor hun rekening nemen, laten we onderweg sporen van de communicatie en van onszelf achter.
Informatie van een enkele uitwisseling levert buitenstaanders misschien niet zo heel veel informatie op, maar omdat we zo veel gebruik maken van het internet, kan en zal de enorme hoeveelheid achtergelaten informatie, hoe gefragmenteerd ook, onvermijdelijk worden gecombineerd om u te identificeren. Gegevens blootstellen kan ook betekenen dat uw persoonlijke informatie online uitlekt.
Het privé houden van communicatie is essentieel om de informatie die u achterlaat, te beperken. Wanneer u uw communicatie beveiligt, verbergt u in wezen de informatie voor publiek toegankelijke bronnen. De meeste manieren om communicatie privé te houden zijn gebaseerd op encryptie. In wezen verbergt encryptie uw communicatie voor alle andere computers waar de informatie doorheen reist. Het versleutelingsalgoritme bepaalt hoe veilig de versleuteling is, maar aangezien de gegevens worden verwerkt via niet-vertrouwde computers (denk eraan, iedereen kan een knooppunt op het internet opzetten) kan de manier waarop de versleutelingscodes worden uitgewisseld ook het zwakke punt zijn.
Een korte inleiding tot de cryptografie
U hoeft niet alle details van encryptie te begrijpen, maar hier is een zeer beperkte inleiding over eenvoudige encryptiemethoden. Deze informatie vinden de meeste mensen wel interessant. Een of andere vorm van cryptografie wordt immers al duizenden jaren gebruikt. De eerste bekende gebruikers van encryptie waren waarschijnlijk de Egyptenaren, hoewel het eenvoudig vervangen van de inhoud van een bericht om het oorspronkelijke bericht te verbergen misschien zelfs daarvoor al in gebruik was.
Denk terug aan het eerste hoofdstuk waarin u leerde over de BIV-classificatie. Cryptografie is een gebruikelijke manier om ervoor te zorgen dat het vertrouwelijkheidaspect van de classificatie naar behoren aan bod komt.
Het Caesarcijfer
De Romeinen maakten vrij regelmatig gebruik van cryptografie. Van Julius Caesar is bekend dat hij een soort substitutiecijfer gebruikte, dat we tegenwoordig kennen als het Caesarcijfer. Een cijfer is een term die een algoritme beschrijft dat gebruikt wordt om gegevens te vercijferen en te ontcijferen. Een substitutieversleuteling is een versleuteling waarbij een teken wordt vervangen door een ander teken volgens een bepaalde wijze. Caesar gebruikte bijvoorbeeld een cijfer waarbij elke letter zo werd geschreven dat het teken werd vervangen door de derde letter in alfabetische volgorde, d.w.z. een A werd een D, een B een E, enzovoort.
Zoals u op de afbeelding kunt zien, is de sleutel voor deze ‘codering’ ‘ga drie stappen vooruit in het alfabet’. Afhankelijk van hoe geheim u het systeem kunt houden in plaats van de sleutel, kunt u ook dit soort versleutelingen afleiden. In het voorbeeld van het Caesarcijfer kan de sleutel om het even wat zijn en is het vrij gemakkelijk te raden door gewoon alle combinaties te proberen (brute force) of door de frequentie van letters in een bepaalde taal te gebruiken. Bijvoorbeeld, indien de letter P de meest voorkomende letter is in het gecodeerde bericht en de taal is Engels, dan is het een redelijke gok dat P in het geheime bericht E is in het onbewerkte bericht, aangezien E de meest voorkomende letter is in het Engels. Minstens duizend jaar lang werden verschillende variaties van substitutieversleutelingen gebruikt, tot de wiskunde betere manieren van versleuteling bood.
Een ander bekend substitutiecijfer dat vaak wordt genoemd is het zogenaamde Kamasutracijfer. De versleuteling wordt voor het eerst vermeld in de Kamasutra als de kunst van het verbergen van berichten, vooral door vrouwen. Het Kamasutracijfer suggereerde dat het alfabet in twee werd gesplitst en aan elkaar werd gekoppeld. Deze twee letters zouden de substitutie in het cijfer zijn, niet enkel een verschuiving over een bepaalde lengte.
Terzijde: codering hoeft niet perfect te zijn. In conflicten zoals oorlog kan het van essentieel belang zijn ervoor te zorgen dat het bericht niet in minuten of uren wordt gelezen. In gevallen waarin de versleutelde gegevens vertrouwelijk zijn en ook later nog schade kunnen berokkenen, zorgt u echter best voor een methode die niet te gemakkelijk in gevaar kan komen.
Vigenèrecijfer
In de zestiende eeuw werd een nieuwe en betere manier van versleutelen ontwikkeld die bescherming bood tegen frequentie-aanvallen. Het Vigenèrecijfer gebruikt een herhalende sleutel, waardoor het eenvoudige gebruik van frequentie analyse teniet wordt gedaan aangezien de letter P niet meer overeenkomt met E in de meeste van de vercijferde teksten.
Het Vigenèrecijfer gebruikt een variabele sleutel die het eenvoudige substitutiecijfer robuuster maakt. De sleutel wordt herhaald zodat hij de volledige lengte van het bericht bestrijkt. De lengte van de sleutel is het belangrijkste deel van het Vigenèrecijfer omdat met een sleutellengte van 1 het cijfer in feite een Caesarcijfer is. Laten we er een voorbeeld bij nemen
Een voorbeeld van een Vigenèrevierkant. Zoals u ziet, is deze versie van het Vigenèrecijfer in feite een cyclisch verschoven Caesar cijfer.
In de tabel hierboven ziet u dat het cijfer met een sleutel van alleen het karakter ‘D’ identiek is aan het cijfer dat Caesar gebruikte in zijn berichten. Kijk in de tabel door de D rij en in de A kolom vindt u de letter A vercijferd als de letter D, net als in het Caesarcijfer.
Om de kracht van het Vigenèrecijfer te begrijpen, nemen we er een vollediger voorbeeld met een langere sleutel bij. Daarvoor gebruiken we het Vigenèrevierkant hierboven (ook wel een Vigenèretabel genoemd). We kunnen een onbewerkt bericht ‘CYBERSECURITY’ met de sleutel "SECRET" als volgt vercijferen.
Bericht: CYBERSECURITY
Sleutel: SECRETSECRETS
Gecodeerd:
Eerst moeten we de kolom vinden die overeenkomt met de letter C in rij S van de tabel. Met behulp van de tabel vinden we dat het resultaat de letter U is. Voeg deze in als de eerste letter van de gecodeerde tekst.
Bericht: CYBERSECURITY
Sleutel: SECRETSECRETS
Gecodeerd: U
De volgende letter van de boodschap is Y op rij E (tweede letter van de encryptiesleutel). Het resultaat is de letter C. Als u dit toevoegt aan de encryptie, ziet u dat de eerste twee letter van de gecodeerde tekst (ciphertext) UC is.
Bericht: CYBERSECURITY
Sleutel: SECRETSECRETS
Gecodeerd: UC
Als we hetzelfde patroon volgen, verkrijgen we de uiteindelijke ciphertext:
Bericht: CYBERSECURITY
Sleutel: SECRETSECRETS
Gecodeerd: UCDVVLWGWIMMQ
Gefeliciteerd, u hebt uw eerste boodschap gecodeerd met het Vigenèrecijfer! The code werd ongeveer drie eeuwen lang met succes gebruikt totdat er een algemene coderingsmethode werd ontdekt. Zoals u misschien al kon raden, werden sommige boodschappen vroeger al gedecodeerd omdat het geheime karakter van de boodschappen afhangt van het geheime karakter en de kwaliteit van de sleutel.
Sign up to solve exercises
Het Vigenèrecijfer bleef lange tijd veilig, maar in de negentiende eeuw werden algemene zwakheden gevonden en gepubliceerd. Met behulp van deze methoden was de codering over het algemeen te breken, ongeacht de gebruikte sleutel. De aanvallen berusten op zwakheden en herhaling van de sleutel in het algoritme om de sleutellengte (of mogelijke sleutellengten) te achterhalen en met die informatie kan een sleuteleliminatie-aanval worden gebruikt om de gebruikte sleutel te achterhalen. Er kunnen verschillende methoden worden gebruikt om de sleutellengte met een hoge mate van zekerheid te raden.
Een vorm van Vigenère-codering werd ook gebruikt door de confederale strijdkrachten in de Amerikaanse burgeroorlog. Tegen die tijd ontcijferden de unionistische troepen regelmatig hun berichten omdat er verschillende zwakke punten in de codering waren gevonden.
Een Vigenèrecijfer dat een werkelijk willekeurige sleutel gebruikt met dezelfde sleutellengte als het bericht wordt algemeen beschouwd als onbreekbaar en wordt een one-time pad genoemd. Een one-time pad heeft niet de zwakke punten van een repetitieve sleutel. Aangezien woordenboekaanvallen niet van toepassing zijn op echt willekeurige sleutels, is de geheimhouding van het bericht afhankelijk van de sleutel en niet van de code. Het gebruik van een one-time pad is echter moeilijk omdat het zwakke punt zal zijn hoe de sleutel tussen de partijen wordt uitgewisseld.
Een leuke interactieve site met veel voorbeelden van verschillende historische cryptografische functies is The Black Chamber van Simon Singh.
Met de uitvinding van de machinebouw werden nieuwe en betere methoden uitgevonden op het gebied van encryptie. Er ontstonden machines waarbij een druk op de knop de vercijferde letter zou doen oplichten. Deze eerste mechanische coderingsmachines breidden ook de lengte van de woordenlijst uit door naast elkaar draaiende rotors toe te voegen. Wanneer een rotor met 26 tekens van A tot Z ronddraaide, schoof een andere een stap verder waardoor het herhalende patroon van de sleutel verborgen werd. Een enkele rotor zou dus een sleutel van lengte 26 opleveren. Door nog een bewegende rotor toe te voegen, zouden de beschikbare posities worden uitgebreid tot 26 x 26 = 676. Om de gedeelde sleutel op te zetten, zou u enkel de begintoestand van beide rotors moeten meedelen.
In de veronderstelling dat we drie rotors hebben en dat de initiële instelling voor alle drie A is, krijgen we de volgende posities voor elke volgende toetsaanslag:
A A A
B A A
C A A
D A A
…
Z A A
A B A
B B A
…
Y Z Z
Z Z Z
A A A
De eigenlijke opstelling, bedrading en werking van de machines is ingewikkelder dan het voorbeeld, maar het toont de kracht van het automatiseren van het genereren van de eigenlijke encryptiesleutel vanuit een initiële opstelling van de mechanische machines.
De bekendste van deze rotormachines was de Enigma, die veel gebruikt werd door de Duitsers in WO II. Enigmamachines gebruikten tijdens de oorlog drie tot acht rotors. Door de manier waarop de Duitsers deze machines gebruikten, konden Poolse en Britse cryptologen echter gebruik maken van deze zwakke punten bij het ontcijferen van Duitse berichten.
Meer informatie over misschien wel de bekendste codeermachine die ooit heeft bestaan, is te lezen op Wikipedia.
De codes die we bekeken hebben, zijn symmetrische cijfers, wat betekent dat dezelfde sleutel die gebruikt werd bij de codering ook gebruikt kan worden bij de decodering. In de loop der jaren zijn methoden ontwikkeld waarbij de geheime sleutel niet aan de ontvanger van het bericht hoeft te worden doorgegeven; deze worden asymmetrische codering genoemd. Bij asymmetrische codering wordt het bericht versleuteld met een openbare sleutel die is afgeleid van de geheime sleutel van de ontvanger van het bericht. Als u bijvoorbeeld wilt dat uw collega's berichten aan u coderen, stuurt u uw openbare sleutel naar hen en zij gebruiken die sleutel om hun berichten aan u te coderen. Nadat de berichten zijn versleuteld, kan alleen iemand (hopelijk u) die uw geheime sleutel heeft, het bericht ontgrendelen. Dit wordt cryptografie met openbare sleutel genoemd, omdat er een openbare sleutel voor de encryptie wordt gebruikt.
Hashing om integriteit te bewijzen
Hash functies worden veel gebruikt om de integriteit van een bericht te verifiëren. Zoals u zich wellicht herinnert, is integriteit één zijde van de BIV (Beschikbaarheid-Integriteit-Vertrouwelijkheid)-classificatie. De hashfunctie kan worden gebruikt om de integriteit te verifiëren op dezelfde manier als een wachtwoord kan worden beveiligd. Een hashfunctie kan worden gebruikt om een waarde te berekenen voor de gehele inhoud van een bericht en samen met het oorspronkelijke bericht worden verzonden. De ontvanger van het gehashte wachtwoord kan dan nagaan of de hashwaarde (de zogenaamde 'message digest') overeenkomt met de berekende waarde aan de ontvangende zijde. Sommige cryptografische hashfuncties bevatten een identiteit in de functie, die door de ontvanger kan worden geverifieerd. Deze functies creëren wat een Message Authentication Code (MAC) Message Authentication Code (MAC) wordt genoemd.
Moderne cryptografie
Moderne cryptografie is afhankelijk van de geheimhouding van de sleutel en maakt gebruik van bekende en veel bestudeerde codes. De codes kunnen gekend zijn omdat de geheimhouding afhankelijk is van de sleutel en niet van de manier waarop hij wordt gebruikt. Wanneer u bijvoorbeeld uw onlinebank bezoekt, wisselen uw browser en de webserver van de bank veilig een eenmalige symmetrische (en lange) geheime sleutel uit die wordt gebruikt om het verkeer tussen uw browser en de bankserver te versleutelen. Bovendien wordt openbare-sleutelcryptografie meestal gebruikt om de identiteit van de andere partij te verifiëren. Elk bericht kan ook worden geverifieerd met een berichtauthenticatiecode. Dit proces van een browser en server die sleutels, verificatie en authenticatie uitwisselen wordt TLS of transport layer security genoemd, waarover we meer zullen leren in het volgende hoofdstuk. Eerdere versies gebruikten een nu verouderde methode: SSL, secure socket layer.
De belangrijkste lessen van cryptografie
De geheimhouding van uw bericht moet altijd afhangen van de geheimhouding van de sleutel, en niet van de geheimhouding van het coderingssysteem (dit staat bekend als ‘het principe van Kerckhoffs).
Gebruik altijd codes die publiekelijk zijn beoordeeld en als standaard zijn vastgesteld. Het gebruik van ‘geheime crypto’, of het zelf verzinnen ervan is slecht, omdat alle berichten kunnen worden ontcijferd eens het systeem bekend en begrepen is, net als bij het Caesarcijfer.