Yarrow - algoritmen är en kryptografiskt säker pseudoslumptalsgenerator . Yarrow valdes som namn , vars torkade stammar fungerar som en källa till entropi i spådomar [1] .
Algoritmen utvecklades i augusti 1999 av Bruce Schneier , John Kelsey och Nils Ferguson från Counterpane Internet Security.[2] . Algoritmen är inte patenterad och royaltyfrioch ingen licens krävs för att använda den. Yarrow ingår i februari2002 medFreeBSD , OpenBSD och Mac OS X som en implementering av enheten /dev/random [3] .
Yarrows vidareutveckling var skapandet av Fergus och Schneier av Fortuna-algoritmen , som beskrivs i deras bok "Praktisk kryptografi" [4] .
De flesta moderna kryptografiska applikationer använder slumptal. De behövs för att generera nycklar , erhålla engångsslumptal , skapa ett salt etc. Om slumptal är osäkra innebär detta uppkomsten av sårbarheter i applikationer som inte kan stängas med olika algoritmer och protokoll [5] .
1998 genomförde skaparna av Yarrow forskning om andra PRNG:er och identifierade ett antal sårbarheter i dem. De slumptalssekvenser som de producerade var inte säkra för kryptografiska tillämpningar [5] .
För närvarande är Yarrow-algoritmen en mycket säker pseudo-slumptalsgenerator. Detta gör att du kan använda den för ett brett utbud av uppgifter: kryptering , elektronisk signatur , informationsintegritet , etc. [5] .
Under utvecklingen av algoritmen fokuserade skaparna på följande aspekter [6] :
Yarrow-algoritmen består av 4 oberoende delar [7] :
Entropiackumulering är en process där en PRNG får ett nytt obegripligt internt tillstånd [8] . I denna algoritm ackumuleras entropi i två pooler: snabb och långsam [9] . I detta sammanhang är en pool ett lager av initierade och färdiga att använda bitar. Snabb pool ger ofta viktiga komplikationer . Detta säkerställer att nyckelkompromiss har en kort varaktighet. Den långsamma poolen ger sällsynta men betydande nyckelkomplikationer. Detta är nödvändigt för att säkerställa att en säker komplikation erhålls även i fall där entropiuppskattningarna är kraftigt överskattade. Ingångssamplen skickas växelvis till de snabba och långsamma poolerna [10] .
KomplikationsmekanismKomplikationsmekanismen förbinder entropilagringen med genereringsmekanismen. När komplexitetskontrollmekanismen bestämmer att komplexitet behövs, då använder komplexitetsmotorn information från en eller båda poolerna, uppdaterar nyckeln som används av genereringsmekanismen. Således, om angriparen inte känner till den aktuella nyckeln eller poolerna, kommer nyckeln att vara okänd för honom efter komplikation. Det är också möjligt att komplexiteten kommer att kräva en stor mängd resurser för att minimera framgången för en attack baserat på att gissa ingångsvärdena [11] .
För att generera en ny nyckel använder den snabba poolkomplexiteten den aktuella nyckeln och hasharna för alla snabba poolingångar sedan den senaste nyckelkomplexiteten. När detta är gjort, uppskattar entropinför den snabba poolen ställs in på noll [11] [12] .
Den långsamma poolkomplikationen använder den aktuella nyckeln och hasharna för de snabba och långsamma poolingångarna. Efter generering av en ny nyckel återställs entropiuppskattningarna för båda poolerna till noll [13] .
GenereringsmekanismGenereringsmekanismen ger utsignalen en sekvens av pseudoslumptal. Den måste vara sådan att en angripare som inte känner till generatornyckeln inte kan skilja den från en slumpmässig bitsekvens .[14] .
Genereringsmekanismen bör ha följande egenskaper [15] :
För att välja sofistikeringstiden måste kontrollmekanismen ta hänsyn till olika faktorer. Om du till exempel ändrar nyckeln för ofta blir en iterativ gissatack mer sannolik [16] . För långsamt, tvärtom, ger mer information till angriparen som komprometterade nyckeln. Därför måste kontrollmekanismen kunna hitta en mellanväg mellan dessa två tillstånd [17] .
När prover anländer i varje poolentropiuppskattningarna för varje källa lagras. Så snart denna uppskattning för någon källa når gränsvärdet uppstår en komplikation från snabbpoolen. I de allra flesta system sker detta många gånger per timme. En komplikation från den långsamma poolen uppstår när poängen för någon av källorna i den långsamma poolen överstiger en tröskel [17] .
I Yarrow-160 är denna gräns 100 bitar för den snabba poolen och 160 bitar för den långsamma. Som standard måste minst två olika källor i den långsamma poolen vara större än 160 bitar för att komplikationer ska uppstå från den långsamma poolen [18] .
En möjlig implementering av Yarrow-algoritmen är Yarrow-160. Huvudidén med denna algoritm är användningen av en enkelriktad hashfunktion och ett blockchiffer [19] . Om båda algoritmerna är säkra och PRNG får tillräckligt med initial entropi , då blir resultatet en stark sekvens av pseudoslumptal [20] .
Hashfunktionen måste ha följande egenskaper [21] :
Yarrow-160 använder SHA-1-algoritmen som [19] .
Blockchifferet måste ha följande egenskaper [22] :
Yarrow-160 använder 3-KEY Triple DES-algoritmen som [19] .
Generatorn är baserad på användningen av ett blockchiffer i räknarläge (se fig. 2) [23] .
Det finns ett n-bitars räknarvärde . För att generera nästa -bitar av den pseudo-slumpmässiga sekvensen, inkrementeras räknaren med 1 och krypteras med ett blockchiffer med nyckeln [24] :
var är utdata från PRNG och är nyckelns aktuella värde .
Om nyckeln vid någon tidpunkt äventyras är det nödvändigt att förhindra läckage av tidigare utdatavärden som en angripare kan få. Denna genereringsmekanism har inte skydd mot attacker av detta slag, så antalet PRNG-utgångsblock beräknas dessutom. Så snart en viss gräns har nåtts ( systemsäkerhetsinställningen, ), då genereras en -bit PRNG-utgång, som sedan används som en ny nyckel [15] .
I Yarrow-160 är den 10. Den här parametern är medvetet låg för att minimera antalet utgångar som kan läras in med en backtracking- attack [ 25 ] .
Exekveringstiden för komplikationsmekanismen beror på parametern . Denna parameter kan fixeras eller ändras dynamiskt [26] .
Denna mekanism består av följande steg [26] :
En funktion definieras i termer av en funktion enligt följande [27] :
I själva verket är det en storleksanpassningsfunktion, det vill säga den konverterar en indata av valfri längd till en utdata med en specificerad längd. Om ingången fick mer data än förväntat, tar funktionen de ledande bitarna. Om storleken på indata och utdata är desamma är funktionen en identitetsfunktion . Om storleken på indata är mindre än förväntat, genereras ytterligare bitar med denna hash-funktion . Detta är en ganska dyr PRNG-algoritm när det gäller beräkning, men för små storlekar kan den användas utan problem [28] .
Att sätta ett nytt värde på räknaren görs inte av säkerhetsskäl, utan för att ge större implementeringsflexibilitet och upprätthålla kompatibilitet mellan olika implementeringar [26] .
I dagens implementering av Yarrow-160-algoritmen, storleken på poolernaentropiackumulering är begränsad till 160 bitar. Attacker på 3-KEY Triple DES-algoritmen är kända för att vara effektivare än uttömmande sökningar . Men även för brute-force backtracking-attacker ändras nycklar ganska ofta, och 160 bitar är tillräckligt för att säkerställa säkerheten i praktiken [29] .
Ämnet för pågående forskning är förbättringen av entropiuppskattningsmekanismer. Enligt skaparna av Yarrow-160 kan algoritmen vara sårbar just på grund av dåliga entropiuppskattningar, och inte ur kryptoanalyssynpunkt [30] .
Skaparna har planer för framtiden att använda den nya AES-blockchifferstandarden . Det nya blockchifferet kan enkelt passa in i den grundläggande designen av Yarrow-algoritmen. Men som utvecklarna betonar kommer det att vara nödvändigt att antingen ändra komplexitetshashfunktionen eller komma med en ny hashfunktion för att säkerställa att entropipoolen är fylld med mer än 160 bitar. För AES med 128 bitar kommer detta inte att vara ett problem, men för AES med 192 eller 256 bitar måste detta problem lösas. Det bör noteras att den grundläggande strukturen för Yarrow-algoritmen är kombinationen av ett AES-blockchiffer och en 256-bitars hashfunktion [31] .
Uppsättningen av regler för mekanismen för komplikationshantering är fortfarande provisorisk, men ytterligare studier kan förbättra den. Av denna anledning är det föremål för pågående forskning [30] .