Intels nya slumptalsgenerator

IEEE Spectrum har en artikel om Intels nya slumptalsgenerator som kommer i deras kommande processorarkitektur Ivy Bridge. (Sweclockers har en artikel om Ivy Bridge.)

Att bygga in en slumptalsgenerator i processorn är inte nytt – vare sig för Intel eller generellt bland processortillverkare. Det nya är istället hur den fungerar. Grunden för en TRNG – True Random Number Generator är någon form av entropikälla – en fysikalisk slumpmässig process som på något sätt mäts upp.

Det vanliga sättet att skapa en entropikälla som direkt i en en integrerad krets är med frisvängande ringoscillatorer. Genom att integrera flera stycken ringoscillatorer på kretsen och sedan mixa dessa fås en entropikälla som inte kräver externa beroenden.

Ringoscillator
Ringoscillator byggd med sammankopplade inverterare.

Det finns dock flera problem med ringoscillatorer. Dom är känsliga för kretsens temperatur, vilket processhörn kretsen tillhör. Vidare kräver det mycket arbete att flytta oscillatorerna till nya processer med finare geometrier. Ett annat problem Intel tar upp är att ringoscillatorerna alltid körs, vilket gör att dom drar mycket energi och att det inte går att göra dom strömsnålare på samma sätt som andra delar ev kretsen. En ringoscillator är helt enkelt inte en normal, digital komponent.

Intel har därför försökt hitta en rent digital entropikälla. Deras lösning ser ut så här:

Intels nya entropikälla

Kretsen består väsentligen av två normala inverterare. Däremot är inverterarna sammankopplade på ett litet ovanligt sätt. Vidare styrs inverterarna av en klocka. Det som inträffar när klockan sätts är att inverterarna försöker ställa in sig i ett stabilt tillstånd – ett eller noll. När klockan för en stund går låg blir inverterarna instabila – dom hamnar i metastabilt tillstånd. När klockan återigen sätts kommer inverterarna återigen att ställa in sig i ett stabilt tillstånd. Ett tillstånd oberoende av tillståndet förra gången klockan var satt.

Metastabilitet är normalt sett ett otäckt problem man som kretskonstktör gör allt för att undvika och minimera. Men här har Intels utvecklare istället hittat ett sätt att utnyttja metastabiliteten till att skapa en fungerande, digitalt baserad entropikälla.

Den nya källan skalar snällt med övriga digitala funktioner vid byte av processgeneration och den skall även vara mindre känslig variation i processhörn och temperaturer. En annan fördel med källan är att den är snabb, den kan generera Gbit med slumpat per sekund.

För att sedan bygga en slumptalsgenerator runt entropikällan har Intel skapat en kedja där insamlade slumptal, samlas ihop, tvättas och görs tillgänglig för systemet:

Kedjan i Intels slumptalsgenerator
Kedjan i Intels slumptalsgenerator

Den nya slumptalsgenerator med tillhörande entropikälla kommer att introduceras i Ivy Bridge tillsammans med en ny instruktion, RdRand. Intel har valt att döpa paketet med ny slumptalsgenerator or instruktion för Bull Mountain. För den som är intresserad finns det en hel del information om Bull Mountain hos Intel, bland annat rekommenderad användning av RdRand.

Intel är som tidigare sagt inte först att bygga in slumptalsgeneratorer, och inte heller att skapa specifika instruktioner för att läsa ut värden från dessa. Via har haft detta i sina processorer sedan processorn C3. Via har tidigare publicerat en utvärdering av generatorn i C3, ett dokument som även ger en bra beskrivning av hur en slumptalsgenerator i ett chip kan byggas. För den som vill veta hur Via gör i modernare processorer, ex C7 finns detta i deras PadLock-teknologi.

Grunden till bra säkerhet är i många gånger en bra, högkvalitativ källa till slumptal. Genom att det nu finns en bra källa till slumptal med hög kapacitet även från Intel tror jag att Bull Mountain kommer att vara ett bra steg framåt för många applikationer och tjänster.

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>