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.