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.