Yarrow - algoritmen er en kryptografisk sikker generator af pseudo-tilfældige tal . Røllike blev valgt som navn , hvis tørrede stængler tjener som en kilde til entropi i spådomskunst [1] .
Algoritmen blev udviklet i august 1999 af Bruce Schneier , John Kelsey og Niels Ferguson fra Counterpane Internet Security.[2] . Algoritmen er ikke patenteret og royaltyfri , og der kræves ingen licens for at bruge den. Yarrow er inkluderet i februar2002 med FreeBSD , OpenBSD og Mac OS X somen implementering af /dev/random [3] enheden .
Yarrows videre udvikling var Fergus og Schneiers skabelse af Fortuna-algoritmen , beskrevet i deres bog "Praktisk kryptografi" [4] .
De fleste moderne kryptografiske applikationer bruger tilfældige tal. De er nødvendige for at generere nøgler , opnå engangs-tilfældige tal , skabe et salt osv. Hvis tilfældige tal er usikre, medfører dette tilsynekomsten af sårbarheder i applikationer, der ikke kan lukkes ved hjælp af forskellige algoritmer og protokoller [5] .
I 1998 foretog skaberne af Yarrow forskning i andre PRNG'er og identificerede en række sårbarheder i dem. De tilfældige talsekvenser, de producerede, var ikke sikre til kryptografiske applikationer [5] .
I øjeblikket er Yarrow-algoritmen en meget sikker pseudo-tilfældig talgenerator. Dette giver dig mulighed for at bruge det til en lang række opgaver: kryptering , elektronisk signatur , informationsintegritet osv. [5] .
Under udviklingen af algoritmen fokuserede skaberne på følgende aspekter [6] :
Røllike-algoritmen består af 4 uafhængige dele [7] :
Entropiakkumulering er en proces, hvor en PRNG opnår en ny, ufattelig indre tilstand [8] . I denne algoritme akkumuleres entropi i to puljer: hurtig og langsom [9] . I denne sammenhæng er en pulje et lager af initialiserede og klar-til-brug bits. Hurtig pool giver hyppige nøglekomplikationer . Dette sikrer, at nøglekompromis har en kort varighed. Den langsomme pool giver sjældne, men betydelige nøglekomplikationer. Dette er nødvendigt for at sikre, at der opnås en sikker komplikation, selv i tilfælde, hvor entropi-estimaterne er stærkt overvurderet. Indgangsprøverne sendes skiftevis til de hurtige og langsomme puljer [10] .
KomplikationsmekanismeKomplikationsmekanismen forbinder entropilageret med genereringsmekanismen. Når kompleksitetskontrolmekanismen bestemmer, at kompleksitet er nødvendig, så bruger kompleksitetsmotoren information fra en eller begge puljer, opdaterer nøglen, der bruges af genereringsmekanismen. Således, hvis angriberen ikke kender den aktuelle nøgle eller puljer, så vil nøglen være ukendt for ham efter komplikation. Det er også muligt, at kompleksiteten vil kræve en stor mængde ressourcer for at minimere succesen af et angreb baseret på at gætte inputværdierne [11] .
For at generere en ny nøgle bruger den hurtige poolkompleksitet den aktuelle nøgle og hasherne for alle de hurtige poolinputs siden den sidste nøglekompleksitet. Når dette er gjort, estimerer entropienfor den hurtige pool vil blive sat til nul [11] [12] .
Den langsomme pool-komplikation bruger den aktuelle nøgle og hasherne for de hurtige og langsomme pool-inputs. Efter generering af en ny nøgle nulstilles entropi-estimaterne for begge puljer til nul [13] .
GenereringsmekanismeGenereringsmekanismen giver outputtet en sekvens af pseudo-tilfældige tal. Det skal være sådan, at en angriber, der ikke kender generatornøglen, ikke kan skelne den fra en tilfældig bitsekvens .[14] .
Genereringsmekanismen bør have følgende egenskaber [15] :
For at vælge sofistikeringstiden skal kontrolmekanismen tage højde for forskellige faktorer. For eksempel, at ændre nøglen for ofte gør et iterativt gætteangreb mere sandsynligt [16] . For langsomt giver tværtimod mere information til den angriber, der kompromitterede nøglen. Derfor skal kontrolmekanismen kunne finde en mellemvej mellem disse to forhold [17] .
Som prøver ankommer i hver puljeentropi-estimaterne for hver kilde gemmes. Så snart dette skøn for en kilde når grænseværdien, er der en komplikation fra hurtigpuljen. I langt de fleste systemer sker dette mange gange i timen. En komplikation fra den langsomme pulje opstår, når scorerne for nogen af kilderne i den langsomme pulje overstiger en tærskel [17] .
I Yarrow-160 er denne grænse 100 bit for den hurtige pool og 160 bit for den langsomme. Som standard skal mindst to forskellige kilder i den langsomme pool være større end 160 bit, for at der kan opstå komplikationer fra den langsomme pool [18] .
En mulig implementering af Yarrow-algoritmen er Yarrow-160. Hovedideen med denne algoritme er brugen af en envejs-hash-funktion og en blokchiffer [19] . Hvis begge algoritmer er sikre, og PRNG'en modtager nok indledende entropi , så vil resultatet være en stærk sekvens af pseudo-tilfældige tal [20] .
Hash-funktionen skal have følgende egenskaber [21] :
Yarrow-160 bruger SHA-1-algoritmen som [19] .
Blokchifferen skal have følgende egenskaber [22] :
Yarrow-160 bruger 3-KEY Triple DES-algoritmen som [19] .
Generatoren er baseret på brugen af en blokcifre i tællertilstand (se fig. 2) [23] .
Der er en n-bit tællerværdi . For at generere de næste -bits af den pseudo-tilfældige sekvens, inkrementeres tælleren med 1 og krypteres med en blokchiffer ved hjælp af nøglen [24] :
hvor er output fra PRNG , og er den aktuelle værdi af nøglen .
Hvis nøglen på et tidspunkt er kompromitteret , er det nødvendigt at forhindre lækage af tidligere outputværdier, som en angriber kan få. Denne genereringsmekanisme har ikke beskyttelse mod angreb af denne art, så antallet af PRNG-outputblokke beregnes yderligere. Så snart en vis grænse er nået ( systemsikkerhedsindstillingen, ), så genereres et -bit PRNG-output, som derefter bruges som en ny nøgle [15] .
I Yarrow-160 er den 10. Denne parameter er bevidst sat lavt for at minimere antallet af output, der kan læres ved hjælp af et backtracking - angreb [ 25 ] .
Udførelsestiden for komplikationsmekanismen afhænger af parameteren . Denne parameter kan fastgøres eller ændres dynamisk [26] .
Denne mekanisme består af følgende trin [26] :
En funktion er defineret i form af en funktion som følger [27] :
Faktisk er det en størrelsestilpasningsfunktion, det vil sige, at den konverterer et input af enhver længde til et output af en specificeret længde. Hvis inputtet modtog flere data end forventet, tager funktionen de førende bits. Hvis størrelserne på input og output er de samme, er funktionen en identitetsfunktion . Hvis størrelsen af inputdataene er mindre end forventet, genereres yderligere bits ved hjælp af denne hash-funktion . Dette er en temmelig dyr PRNG-algoritme i form af beregning, men til små størrelser kan den bruges uden problemer [28] .
Indstilling af en ny værdi til tælleren sker ikke af sikkerhedsmæssige årsager, men for at give større implementeringsfleksibilitet og opretholde kompatibilitet mellem forskellige implementeringer [26] .
I dagens implementering af Yarrow-160-algoritmen, størrelsen af poolsentropiakkumulering er begrænset til 160 bit. Angreb på 3-KEY Triple DES-algoritmen er kendt for at være mere effektive end udtømmende søgning . Men selv for brute-force backtracking-angreb ændres nøgler ret ofte, og 160 bit er nok til at sikre sikkerhed i praksis [29] .
Emnet for igangværende forskning er forbedring af entropi-estimeringsmekanismer. Ifølge skaberne af Yarrow-160 kan algoritmen være sårbar netop på grund af dårlige entropi-estimater, og ikke ud fra et krypteringssynspunkt [30] .
Skaberne har planer for fremtiden om at bruge den nye AES-blokkrypteringsstandard . Den nye blokchiffer kan nemt passe ind i det grundlæggende design af Yarrow-algoritmen. Men som udviklerne understreger, vil det være nødvendigt enten at ændre kompleksitets-hash-funktionen eller komme med en ny hash-funktion for at sikre, at entropipuljen er fyldt med mere end 160 bit. For AES med 128 bit vil dette ikke være et problem, men for AES med 192 eller 256 bit skal dette problem løses. Det skal bemærkes, at den grundlæggende struktur af Yarrow-algoritmen er kombinationen af en AES-blokchiffer og en 256-bit hashfunktion [31] .
Regelsættet for komplikationshåndteringsmekanismen er stadig foreløbigt, men yderligere undersøgelser kan forbedre det. Af denne grund er det genstand for igangværende forskning [30] .