Het internet: codering en openbare sleutels
Hallo ik ben Mia Gil-Epner, ik studeer Informatica op UC Berkeley, en ik werk
voor Defensie, waar ik probeer informatie veilig te houden. Het internet is
een open en openbaar systeem. We versturen en ontvangen allemaal informatie over
gedeelde kabels en verbindingen. Maar hoewel het een open systeem is, wisselen
we nog steeds veel privé informatie uit. Zaken zoals creditcard- nummers, bankinformatie, wachtwoorden en e-mails.
Hoe worden al deze privé zaken geheim gehouden? Data van elk type kan geheim worden gehouden
door een proces dat codering wordt genoemd, het vervormen of wijzigen van het bericht
om de originele tekst te verbergen. Decoderen is het omgekeerde proces, dat is het weer leesbaar maken.
Dit is een eenvoudig idee, en mensen doen dit al eeuwen. Een van de eerste bekende
methoden van coderen was de Caesarcijfer. Genoemd naar Julius Caesar, een Romeinse
generaal die zijn militaire bevelen codeerde om ervoor te zorgen dat als een
bericht door de vijand werd onderschept, deze dat niet kon lezen. De Caesarcijfer is
een algoritme dat elke letter in het originele bericht vervangt door een letter die wat
later in het alfabet voorkomt. Als het cijfer iets is dat alleen de verzender en ontvanger
weten, dan wordt het de sleutel genoemd. Het stelt de lezer in staat om het geheime
bericht te decoderen. Als je originele bericht "HALLO" is dan zal het met een Caesarcijfer-algoritme
met een sleutel van 5 er uitzien als... Voor het decoderen van het bericht hoeft de ontvanger alleen maar de sleutel
te gebruiken om het proces om te keren. Maar er zit een groot nadeel vast aan de Caesarcijfer: iedereen
kan makkelijk het gecodeerde bericht ontcijferen door elke mogelijke sleutel te proberen, en in het alfabet
zitten slechts 26 letters, en dat betekent dat je slechts 26 letters hoeft te proberen om
het bericht te decoderen. Het proberen te decoderen van 26 mogelijke sleutels is niet erg moeiljk.
Het kost je hooguit een uur of twee. Laten we het daarom moeiljker maken. Inplaats van elke letter met dezelfde hoeveelheid
te verschuiven, laten we elke letter verschuiven met een andere hoeveelheid. In dit voorbeeld toont
een sleutel van tien cijfers hoeveel posities elke opvolgende letter wordt verandert om een langer bericht te coderen.
Het raden van deze sleutel wordt echt erg moeilijk. Met een tiencijferige codering zijn er 10 miljard mogelijke sleutels.
Dat is duidelijk meer dan een mens kan hopen op te lossen, dat zou vele eeuwen duren.
Maar de gemiddelde moderne computer heeft slechts enkele seconden nodig om alle 10 miljard mogelijkheden uit te proberen.
Dus hoe kun je in de moderne wereld waar de schurken gewapend zijn met computers
in plaats van potloden, je bericht zo veilig coderen dat ze te moeilijk zijn om te kraken? Met te moeilijk
wordt bedoeld dat er te veel mogelijkheden zijn om in een redelijk tijdsbestek te berekenen.
Moderne communicatie wordt gecodeerd met 256-bit versleuteling. Dat betekent dat de computer van een schurk
die jouw bericht onderschept al deze mogelijke opties moet proberen... totdat deze
de sleutel ontdekt en het bericht kan kraken. Zelfs als je 100 duizend supercomputer hebt, en elk
van hen in staat is om een miljarden sleutels elke seconde te proberen, dan nog zou het triljoenen
jaren duren om elke optie te proberen, gewoon om een enkel bericht beschermt door 256 codering te kraken.
Natuurlijk worden computerchips elk jaar twee keer zo snel en de helft kleiner of zo.
Als die snelheid van exponentiële groei aanhoudt, dan zijn de onoplosbare problemen van vandaag
binnen enkele honderden jaren op te lossen en zijn 256 bits niet voldoende om veilig te zijn.
In feite hebben we reeds de standaard sleutellengte langer moeten maken om de snelheid van computers bij te houden.
Het goede nieuws is dat het gebruik van een langer sleutel het coderen van berichten niet moeilijker maakt, maar
het vergroot exponentieel het aantal gissingen nodig om een versleuteling te kraken.
Als de afzender en ontvanger dezelfde sleutel delen om een bericht te vervormen en te decoderen
dan heet dat Symmetrische codering. Dankzij Symmetrische codering, en net als Caesarcijfer, moet de geheime sleutel
van tevoren overeen zijn gekomen door twee mensen in een privé gesprek. Dat is fijn voor mensen, maar het internet
is een open en openbare ruimte, en dus kunnen twee computer elkaar niet privé "ontmoeten" om een geheime
sleutel overeen te komen. In plaats daarvan maken computers gebruik van Asymmetrische versleuteling,
een openbare sleutel die met iedereen kan worden uitgewisseld en een privé sleutel die niet wordt gedeeld. De openbare sleutel
wordt gebruikt om data te coderen en iedereen kan deze gebruiken om een geheim bericht te creëren, maar het
geheim kan alleen worden gedecodeerd door een computer met toegang tot de privé sleutel. Dit werkt met wat wiskunde
waar we nu niet op in gaan. Maar stel je voor dat je een privé brievenbus hebt waar iederen post in kan doen
maar daarvoor wel een sleutel nodig heeft. Je kunt veel duplicaten
maken van de depotsleutel en deze naar je vriend sturen of openbaar beschikbaar stellen.
Je vriend of zelfs een vreemde kan de openbare sleutel gebruiken om de postgleuf te openen en er post
in te doen. Maar alleen jij kan de brievenbus openen met je privé sleutel om toegang te krijgen tot alle
geheime berichten die je hebt ontvangen. En je kunt beveiligd bericht naar je vriend terugsturen
door de openbare depotsleutel van zijn brievenbus te gebruiken. Op deze manier kunnen mensen beveiligde berichten uitwisselen
zonder ooit overeenstemming te bereiken over een privé sleutel. Cryptografie voor openbare sleutels is het fundament
van alle beveiligde berichtgeving op het open internet. Inclusief de beveiligingsprotocollen die bekend staan als
SSL en TLS, die ons beschermen als we op het web surfen. Je computer gebruikt dit tegenwoordig
elke keer als je het kleine slotje of de letters HTTPS inde adresbalk van je browser zit staan.
Dit betekent dat je computer gebruik maakt van openbare versleuteling om data veilig te uit te wisselen
met de website waar je op zit. Hoe meer mensen er op het internet komen, hoe meer privé data
zal worden overgebracht, hoe belangrijker de behoefte om die data te beschermen wordt.
Terwijl computers steeds sneller worden, moeten wij nieuwe manieren ontwikkelen om codering
te moeilijk te maken voor computers om te breken. Dit is wat ik doe met mijn werk, en het staat nooit stil.