Ik denk niet dat je ooit kunt bewijzen dat iets "willekeurig" is. Want was is willekeurig? Pak nu een lijst met 100 keer een getal van 0 tot 1. Stel nu dat elke getal precies even vaak voorkomt. Is dat dan willekeurig? Nee zou je zeggen, elk getal komt precies even vaak voor. Dat kan geen toeval zijn. Dan neem je opnieuw een lijst. Dit keer heb je 30 keer het geval 10, en de rest is weer gelijk verdeeld over de anderer getalen? Is dit random? Nee, want 10 schiet er boven uit. Nu neem je een lijst met 100 getallen en het is ongeveer gelijk verdeeld .... 9 komt een paar keer meer voor, 7 een stuk minder, 5 precies gemiddeld. Etc etc.
Het probleem met "willekeurig" is dat mensen overal patronen in zien en waar ik geen patroon in zie zie jij misschien wel een patroon in.
Maar dan is er natuurlijk nog de wiskundige definitie van "willekeurig" namelijk: Het gebrek aan een patroon of voorspelbaarheid.
Maar als jij een regel text schrijft en ik zet die op de meest eenvoudige manier om naar getallen. Bijvoorbeeld a = 01, b=02, A= 27, B=28 enz enz.
Dan krijg je ook een lijst getallen waarvan de volgende niet zomaar te voorspellen zijn omdat niemand toch kan voorspellen wat jij gaat schrijven?
Maar dat is niet zo. In zo'n een textregel omgezet naar getallen zit namelijk wel een patroon. Een patroon die verraad dat het om de Nederlandse taal gaat. Immers bij scrabble krijgen sommige letters meer punten dan andere. Als je een analyse doet op een nederlands boek waar je gewoon elke letter van het alfabet telt en je vergelijkt die met een analyse van een ander boek waar je het zelfde doet. Op een paar uitschieters na zul je ongeveer dezelfde letter verdeling zien. Die is eigen aan onze taal.
En dus kunnen we concluderen dat willekeurigheid NOOIT 100% te defenieren valt. In het geval van letters die we omzetten naar cijfers zouden we een getallen lijst kunnen analyseren en concluderen dat de lijst inderdaad random is. Maar het zou best kunnen dat het gewoon een vreemde taal is waarvan wij niet weten wat de letter verdeling is.
Dat is dus het hele ding. Om echt te concluderen dat iets random is moet je de reeks getallen gaan controleren aan alle patronen en regels en verdelingsvormen en statistiek je maar kent.
En niemand kent ze allemaal.
Cryptografie werkt dus anders. Het werkt niet met willekeurigheid. Het merkt met het verstoppen van data IN willekeurigheid.
Zodat wij een analyse doet en wiskundig gezien onmogelijk achter kan komen wat de "garbage is" en wat de boodschap is.
En dat kan wiskundig inderdaad bewezen worden op een hele eenvoudige manier.
Als ik zeg 12 x 13 = 156 en ik geef je 156 en ik vraag je om mij te vertellen waarvan 156 de uitkomst is .... dan kun je echt van alles zeggen:
1+155?
2+154?
3+`153?
2 x 78?
En dat is wat brute force inhoud. Je voert willekeurige bewerkingen uit in volgorde en na elke uitkomst controleer je de uitkomst op patronen of op wat je zoekt.
In cryptografie heb je dus alleen maar wiskunde nodig waar je kunt bewijzen dat een bewerking makkelijk is uit te voeren in de ene richting maar heel erg moeilijk in de andere richting.
Een one way function.
Ik geef een voorbeeld in cryptografie waar je niet eens wiskunde voor nodig hebt.
Stel je hebt een lange lijst met boeken. Er staan er 10 000 op. Samen met je vriend kies je er eentje uit. Willekeurig. Gooi maar een dobbelsteen een keer of 6.
Je ziet dat je het boek twee keer hebt. Een keer jou en een voor je vriend. Nu gaat je vriend naar de andere kant van de wereld en jij blijft thuis.
Wanneer je veilig wilt communiceren dan doe je het als volg.
Je wilt bijvoorbeeld sturen: Het gaat goed met mij.
Dan neem je het boek en je begint met de eerste letter. Je volgt alle letters tot je de H tegenkomt en noteert de hoeveelste letter het is in de text. Bijvoorbeeld letter 130. Dan kijk je verder tot je de letter e tegenkomt. Die staat op nummer 140. Enz enz. Elk nummer zal groter zijn dan het vorige.
Die nummers stuur je naar je vriend en die doet gewoon het omgekeerde.
Dit concept noemt met een One-time pad -->http://en.wikipedia.org/wiki/One-time_pad
Het is de enige vorm van cryptografie die 100% onkraakbaar is.
Maar dan moet je de regels wel goed volgen. Wanneer jij en je vriend uitgepraat zijn of wanneer het "boek" op is .... dan mogen ze niet opnieuw starten. Nee, ze moeten een nieuw boek afspreken en dan opnieuw beginnen. En wanneer ze door alle 10 000 boeken zijn geweest moeten ze een andere lijst met boeken maken. En daar mag geen enkele keer hetzelfde boek opstaan.
Zie je waar ik naar toe wil?
Een one time pad werkt alleen als je random stream even lang is als je booschap. En je hebt constant een nieuwe randomstream nodig.
Hoe zou je dit nu zonder boeken kunnen doen? Stel dat je een computer systeem hebt die je random data geeft. Hoe kun je twee zulke systemen hebben die exact dezelfde random data geeft?
Dat kan alleen als er een patroon in zit.
Of ... nog leuker .... als je je random data van precies dezelfde plaats haalt.
Jij en je vriend zouden bijvoorbeeld een instrument op exact hetzelfde plekje van de zon richten. En die input gebruiken als random data. Eerst zou je dan een lange test moeten doen. En je vriend mag niet aan de andere kant van de wereld zitten. Jullie kunnen alleen maar de random data van de zon gebruiken als alle twee de kanten die kunnen opnemen om later te gebruiken.
En je systeem is ook niet onkraakbaar meer ... want als iemand uitvind waar je precies je instrument op richt dan kunnen ze meeluisteren.
En op dit soort principes is cryptografie gebouwd.
En enigma machine is exact hetzelfde! Alleen zitten nu al die boeken in de machine zelf ... zijn de boeken veel en veel korter .... en is er van te voren met iedereen een lijst afgesproken van welk boek wanneer gebruikt word.
De Alies hebben hier alleen maar door heen kunnen breken omdat de axis hun one-time-pad niet 100% op de juiste manier toepasten. Die kleine foutjes hebben er uiteindelijk toe geleid dat de code gebroken werd. Elke keer als ze zo'n klein foutje in een radioboodschap onderschepte dan konden ze alles ongedaan maken.
In de cryptografie die we nu hebben worden one time pads ook nog wel gebruikt maar meestal is dat niet practisch.
Ik wil ook kunnen communiceren met iemand die ik nog nooit hebt ontmoet om samen een geheime sleutel mee af te spreken (Welk boek). En als ik deze lijst met boeken eerst doorstuur .... wat als iemand die lijst onderschept? Vergeet niet ... Eve is always listening!
Dit soort problemen zijn langzaam door briljante wiskundige opgelost.
Modular arithmetic, priemgetallen, Discrete Logarithms, Integer Factorization , Elliptic Curves, dit zijn allemaal wiskundige "tools" die gebruikt kunnen worden voor ingenieuze puzzels en sloten.
Nooit kan er van te voren bewezen worden dat iets 100% onkraakbaar is. Tenzij het een perfect uitgevoerde one time pad is. Maar die is dus niet practisch op het internet.
Maar wat wel bewezen kan worden is dit: In de ene richting de bewerkingen uitvoeren kost een cpu een minimale inspaning. In de andere richting de bewerking uitvoeren een maximale inspanning ... tenzij je het geheim kent. De sleutel.
En zo zit je bij getallen als 2 tot de macht 256. Je kunt nog niet eens van 0 beginnen te tellen en eindigen bij 2 tot de macht 256 voor onze zon helemaal dood is.
Dus veel geluk met bruteforce. De enige manier waarop goede cryptografie uiteindelijk word gekraakt is wanneer het niet 100% de regels volgt en er dus ergens foutjes zitten die uitgebuit kunnen worden.
Dat brengt ons bij het volgende probleem: processors en willekeurigheid.
Mensen zijn een stuk beter in randomness dan computers.
Deze tekst ... ook al zit er een patroon van de Nederlandse taal in en een patroon van hoe ik schrijf is vrij random, Want niemand of niks in de wereld had precies kunnen voorspelen wat ik allemaal ging schrijven. Had ik iemand de eerste regel gegeven dan had die persoon nooit de rest kunnen voorspelen. Miscchien door de patronen van de Nederlandse taal toe te passen en mijn vorige schrijfsels te analyseren en het onderwerp mee te nemen zou het mogelijk zijn om een percentage juist te voorspelen.
En daar zit de scheidslijn. Als jou cryptografie onbreekbaar is als 10% van de data random is .... en breekbaar begint te zijn als het maar 9% random is. Dan kun je dit in de wiskunde bewijzen tot op een zeker foutmarge. De kunst is dus om genoeg marge over te hebben en dan kun je dus wiskundig bewijzen dat je cryptografie onbreekbaar is.
Zo is er dus perfect cryptografie mogelijk is onbreekbaar is.
Maar dat concept moet dus ook uitgewerkt worden in software, het moet practisch zijn, je CPU moet aan de regels van de random generatie voldoen .... etc etc. Ook maar een kleine foutje in het volgen van jou super precieze regels en er zit een zwakte in de UITWERKING van je algoritme.
En dit zijn dus twee manier waardoor wiskundige cryptografie gebroken word
1 --> one time pad die alle regels volgt --> onbreekbaar
2 --> algortime dat wiskundig bewezen is --> onbreekbaar en niet te brute forcen omdat de wiskundige hooiberg groter is dan ons zonnestelsel
3 --> algoritme dat wiskundig bewezen is maar in je bewijs zit een foutje --> foutje worden gevonden --> er word als nog bewezen dat het wiskundig veilig is --> niks aan de hand --> er word bewezen dat het niet wiskundig veilig is --> nu is het breekbaar
4 --> algortime dat wiskundig bewezen is --> geen fouten te vinden in bewijs --> iedereen neemt aan dat het veilig is tot iemand ooit een foutje vind --> maar in de uitwerking van het algoritme worden fouten gemaakt --> uitwerking kan worden uitgebuit --> je systeem is alleen maar onkraakbaar als een uitwerking perfect de regels volgt --> 10% van de tijd is dat niet het geval --> 10% van de tijd kan het dus gekraakt worden --> informatie van een kraak kan gebruikt worden om de andere 90% OOK te kraken, binnen een bepaalde uitwerking. Bijvoorbeeld VOIP van SKype is versleuteld met systeem A en VOIP van Voipbuster versleuteld met systeeem A. Maar voip van skype gebruikt uitwerking A en voip van voipbuster gebruikt uitwerking B. In uitwerking A zit een klein foutje, in uitwerking B niet.
Net als een klein beetje speling in een knoop kan uitwerking A ontraffelt worden tot 100% van de informatie gekraakt kan worden terwijl systeem A perfect waterdicht is.
En zo kunnen we bezig blijven.
Geheime sleutel op harde schijf maar geheime sleutel niet versleuteld met andere sleutel? Computer kan gehackt worden en geheimge sleutel kan uitlekken --> breach
Geheime sleutel op harde schijf versleutelt? --> versleutelde geheime sleutel word gehackt ---> versleuteling van geheime sleutel kan gebrute forced worden --> geheime sleutel is gehackt.
Enz enz enz. Een perfect uitgevoerde one time pad heeft hier ook een zwakte. Vind persoon A die met persoon B via het geheime boek communiceert en martel hem tot hij zegt welk boek er gebrukt word. Als persoon B nu ook met persoon C communiceert via HETZELFDE boek dan kan die communicatie onderschept worden omdat persoon A compromised is.
En dus heb je wiskunde waarvan bewezen kan worden dat het 100% veilig is. Maar van mensen kan dat dus nooit. En het zijn nog steeds mensen die software schrijven met foutjes in een mensen die hardware maken met foutjes in.
Wiskunde = perfect = kan bewezen worden --> al de rest is vertrouwen.
Tot daar ... hoop dat het een beetje te begrijpen is. Al snap ik niet al de wiskunde. De concepten, de ideeën, die kan iedereen snappen.