Wat zijn willekeurige getallen? Hoe krijg je ze en waarom zijn zeven zo belangrijk? Het lijkt heel simpel, maar het is het niet, daarom past dit onderwerp prima bij de rode draad van deze blog.
De mens
Zeg na het lezen van deze zin hardop een willekeurig getal tussen de 0 en de 10.
Grote kans dat je 7 wilt zeggen, omdat veel mensen hebben geleerd 7 als een geluksgetal te zien en ik je heb proberen te beïnvloeden met een `tikfout’ in de tweede zin van deze blog. Het is moeilijk om een mens al een echt random getal te laten bedenken, laat staan een computer.
Random
Random is belangrijk, omdat als je iets wil vercijferen je wil voorkomen dat mensen de inhoud van het gecodeerde bericht kunnen raden. Als je twee keer het bericht: `De geit is gemolken.’, zou versturen zou dat betekenen dat er twee keer dezelfde data voorbijkomt. Had je al één keer eerder de betekenisvan het gecodeerde `De geit is gemolken.’ ontdekt, dan zou dat dus betekenen dat je iedere keer weet wanneer mensen dat bericht versturen.
Om dit probleem op te lossen wordt de inhoud van het gecodeerde bericht aangevuld met random data. Deze random data zorgt ervoor dat, mits een fatsoenlijke encryptie algoritme wordt gebruikt, de gecodeerde variant hetzelfde is.
Gokken
Belangrijk is dan dus ook dat random waarden niet te gokken zijn. Maar hoe maak je met computer software nu een écht random getal? Het enige goede antwoord is: NIET!
Er zijn formules die hele ingewikkelde uitkomsten hebben, maar het nadeel is dat deze uitkomsten wel iedere keer hetzelfde zijn als met dezelfde start waarden wordt gewerkt. Tevens, omdat het hier om een formule gaat, is een opvolgend getal te berekenen zodra de `hacker’ genoeg informatie heeft.
Een betere oplossing is een microfoon aan een computer die omgevingsgeluid oppikt. Dat levert wel degelijk een sterke random op. Muis bewegingen en de timing van de bewegingen ook, wat ook weer geldt voor toetsaanslagen. Daarnaast zijn er ook hardware oplossingen die gebruik maken van bijvoorbeeld radioactief verval.
Gevaar
Er dreigt echter een gevaar in het gebruik van deze data. Toetsaanslagen bijvoorbeeld kunnen informatie verklappen over wat de gebruiker aan het tikken is geweest. Deze informatie die in de random verborgen zit moet er op een of andere manier worden uitgehaald.
Hier is ook een oplossing voor, namelijk een hashing functie. Hash komt van hakken en mixen, denk maar aan Hachee; je neemt de oorsponkelijke data, je husselt het wat en dan hak je het in stukken. Wat je overhoudt is een deel van het origineel maar niet alles, en het is gehusseld. Doe dit wiskundig op bit niveau en je hebt niets meer van de originele data over. Later kom ik terug op hashing functies, want ze worden ook gebruikt bij het controleren van een identiteit of de integriteit van data.
Als je verschillende bronnen gebruikt, en deze informatie met een cryptografische hash functie husselt dan heb je een veilige random.
Overdreven
Het lijkt misschien allemaal wat overdreven. Een goede pseudo-random formule is toch genoeg? Ja en nee. Ja, het is waarschijnlijk genoeg en overdreven. Nee, waarschijnlijk is niet goed genoeg. Ze kunnen je pseudo-random formule ontdekken en je random nummers gaan raden. Als je met relatief simpele middelen een nog veiliger systeem kan creëren die het misbruikers onmogelijk maakt, met uitsluiting van toeval, om ook maar één random getal te voorspellen dan moet je dat niet nalaten.
In het volgende blog ga ik het hebben over rekenen met grote getallen. Dat is simpel, want daar zijn computers goed in, toch?





