Lämna aldrig slumpen åt slumpen! – Internetdagarna .FILE
Köp nu

23-24 november 2020

Köp nu

Endast 500 kr/dag (exkl. moms)

Lämna aldrig slumpen åt slumpen!

Jag och min kollega Patrik (@pawal) satt och slog tärningar för att skapa en serie siffror framtagna med äkta slump. Dessa siffror ska användas som inmatning i en mycket viktig del av arbetet med övergång till OpenDNSSEC. Till det använde vi tiosidiga tärningar med siffrorna 0-9. Tärningarna lades i en mugg där de skakades om för att slutligen hällas ut på en liten platta med grön filt och kanter så att det inte ska skramla så mycket och tärningarna inte ska trilla ner på golvet.

Ett enstaka slumptal ska vara lika oförutsägbart som utfallet av ett tärningskast

Slumptal är viktiga tal som används inom programmering och kryptering. De behövs till exempel för nyckelgenerering och autentisering. De måste hålla hög kvalitet, ett enstaka slumptal ska vara lika oförutsägbart som utfallet av ett tärningskast och en serie av slumptal ska vara jämnt fördelade.
Undermåliga slumptalsgeneratorer är en alltför vanlig källa till bristande säkerhet i kryptografiska system. Inom datatekniken är ett slumptal ett slumpmässigt valt tal. Vi skiljer på äkta slumptal och pseudoslumptal.

Äkta slumptal

En äkta slumptalsgenerator uppfyller följande krav:

  • Det går inte att genom statistiska test visa några samband i en tillräckligt stor mängd utdata.
  • Det går inte att återskapa samma slumptalsföljd genom att starta om slumptalsgeneratorn med exakt samma indata.

Pseudoslumptal

I en dator är ingenting slumpmässigt. Allt följer samma mönster varje gång och de regler som ges av programmen som datorn kör är det som etydigt bestämmer vad som ska hända. Att skapa något riktigt slumpartat är därför inte så lätt. Äkta slumptal finns normalt inte att tillgå utan man brukar ofta tala om pseudoslumptal (ungefär låtsasslumptal).

En pseudoslumptalsgenerator måste uppfylla följande krav:

  • Det går inte att genom statistiska test visa några samband i en tillräckligt stor mängd utdata.
  • Givet en godtyckligt stor mängd utdata skall det vara svårt att gissa någon annan bit av utdata med större sannolikhet än 50 procent.

Det finns många olika sätt att beräkna pseudoslumptal. Pseudoslumptal beräknas med någon matematisk formel som utgår från ett frö. För att skapa en följd av olika slumptal brukar dessa formler använda det senast genererade slumptalet som frö för nästa beräkning. Formeln är naturligtvis deterministisk och med samma frö får man därför alltid samma slumptal.

Random.org erbjuder äkta slumptal sedan 1998

Eftersom datorer är deterministiska kan äkta slumptal inte genereras av ett program. För att få äkta slumptal måste entropin komma från ickedeterministiska källor, till exempel den tid som förflyter mellan tangenttryckningar, rörelsemönster för hur musen flyttas, tid mellan mottagen data på nätverket eller dedicerade slumptalsgeneratorer i hårdvara som mäter elektroniskt brus eller radioaktivt sönderfall.

De flesta programspråk har funktioner, inbyggda eller separerade i programbibliotek som utger sig för att vara slumptalsgeneratorer. Dessa är ofta utformade så att de ger ett flyttal jämnt fördelat mellan 0 och 1. Sådana funktioner är deterministiska till sin natur, och därför inte äkta slumpmässiga; dessutom har de ofta usla statistiska egenskaper och kan ibland upprepa mönster efter bara några tiotusentals anrop. Dessa funktioner initieras ibland med datorns realtidsklocka som kanske kan ge tillräcklig slumpmässighet för mindre kritiska tillämpningar som datorspel, men som däremot aldrig får användas för många andra tillämpningar, framför allt kryptografiska.

De använder sig av atmosfäriska störningar från radio

Vill man däremot förvissa sig om att använda sig av äkta slumptal så måste man gå utanför datorn för att hämta inspiration. Sådan inspiration finns hos random.org. Random.org har funnits sedan 1998 och erbjuder äkta slumptal till vem som helst över Internet. De använder sig av atmosfäriska störningar från radio, vilket för många ändamål är mycket bättre än de pseudoslumptalsgeneratorer som används i olika programspråk. Prova!