Test av slumptalsgeneratorn DakaRand

Defcon 20- och Black Hat-konferenserna presenterade säkerhetsforskaren Dan Kaminsky en ny slumptalsgenerator kallad DakaRand.

Dan Kaminsky
Dan Kaminsky

DakaRand är en generator som körs som ett användarprogram. Som entropikällor används olika klockor. Tanken är att klockornas skillnad och varians i frekvens ger upphov till fysisk slump som går att samla in. I version 1.0 av DakaRand används upp till nio olika klockor. Dan skriver själv att alla klockor knappast är att lita på, men tilräckligt många. Den insamlade entropin skickas sedan periodiskt in i hashfunktionen SHA-256 som används för att skapa frön till den slumpgenerator som skapar utdatat.

DakaRand använder intressant nog nyckelordsgeneratorn scrypt som ett mellansteg. Syftet med detta är att det ska bli mycket svårare att räkna ut de frön som används givet det genererade datat. Datat genereras slutligen med kryptot AES-256 i counter (CTR)-mod.

Jag har testat DakaRand. Att bygga DakaRand för OSX gick inte direkt. Men i kommentarerna till Dans inlägg postade användaren jpgoldberg patchar som fixade problemen. Efter att ha genererat 1 GByte data gjorde jag några test. Ett första enkelt test på slumptal är att försöka komprimera innehållet med en packare som letar efter mönster. Zip lyckades inte komprimera filen över huvud taget (den blev aningen större efter komprimering). Detta indikerar att det inte finns några större mängder med mönster.

DakaRand i debugmod. DakaRand i debugmod.

Sedan använde jag testsystemet Dieharder och släppte lös alla tester. Resultatet var 94 godkända tester och bara fyra tester som fallerade. Detta är riktigt bra resultat väl i paritet med generatorerna i exempelvis FreeBSD och OSX.

Prestandamässigt fick jag ut 53 MByte/s. För att vara en användarprocess som ändå läser ut entropi och dessutom kör scrypt är det riktigt bra prestanda.

DakaRand påminner starkt tankemässigt om generatorn Haveged som jag skrivit om tidigare. Båda generatorer försöker använda fysiska beteenden i datorn som uppkommer vid exekvering av kod för att generera entropi. DakaRand använder till och med samma hårdvarufunktion, RDTSC för att läsa ut värden. Skillnaden är att Haveged försöker provocera processorn till att ge olika exekveringstid för ett program. DakaRand försöker inte provocera fram beteendet. Och dessutom är RDTSC i DakaRand bara en av de källor som används.

Jag tycker att DakaRand är intressant. Jag gillar att Dan tydligt talar om vilka miljör han inte ser att generatorn är vettig att använda i och det stora flertalet källor bör göra den robost. Och att öka scrypt i en slumpgenerator är en riktigt bra idé. Att använda DakaRand för att fylla på systemets entropi (genom att skriva till /dev/random) är enkelt.

För den som vill veta mer om DakaRand och testa själv finns en beskrivning och källkod på Dans bloggostning om DakaRand. Det finns även en presentation av Dan som ger mer information om DakaRand. Behöver du hjälp så hör av dig på mail eller Twitter (@kryptoblog).

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Följande HTML-taggar och attribut är tillåtna: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>