Grain er en symmetrisk synkron strømkrypteringsalgoritme , primært fokuseret på hardwareimplementering. Cipher indsendt til 2004 eSTREAM- konkurrencen af Martin Hell , Thomas Johansson og Willi Meyer . Algoritmen blev en af finalisterne i konkurrencen i den anden profil (hardware-orienterede ciphers).
Chifferen består af tre hovedblokke: to 80-bit feedback-skiftregistre og en outputfunktion. Et af registrene har en lineær feedback-funktion (LFSR), det andet register har en ikke-lineær feedback-funktion (NFSR). Chifferens interne tilstand er fuldstændig bestemt af skifteregistrene.
Feedbackfunktionen af dette register er givet af et primitivt polynomium
Hvis vi repræsenterer registrets tilstand som , så vil den næstmindst signifikante (højre) bit blive givet af forholdet
Feedbackfunktionen af et ikke-lineært feedbackregister er givet af
For bits i NLSR-registret er udtrykket
Funktionen tager bitværdier fra LFSR og NFSR som argumenter:
hvor er lige hhv
Som et resultat, output
Chifferen accepterer en 80-bit nøgle ( hemmelig nøgle ) og en 64-bit initialiseringsvektor ( initieringsvektor ) som input.
Før du begynder at generere en nøglestrøm ( keystream ), skal chifferen initialisere sin tilstand.
Lad og . Der kan skelnes mellem følgende stadier af tilstandsinitialisering:
Derefter fungerer chifferen i 160 cyklusser uden at udstede en nøglestrøm, men resultatet af chifferoperationen føres til input fra NFSR og LFSR.
I det tilfælde, hvor hardwareplatformen ikke er begrænset i ressourcer, giver chifferen dig mulighed for blot at øge krypteringshastigheden. Fordi begge registre forskydes med 1 bit hver cyklus, så hvis du blot implementerer flere gange ( ) feedbackfunktionerne og og outputfunktionen , så kan krypteringshastigheden øges med en faktor, mens skifteregistrene for hver cyklus også skal forskydes med lidt. De nederste 15 bit af skifteregistrene bruges ikke i feedbackfunktioner og kan derfor tage værdier fra 1 til 16
. når tilstanden initialiseres, skal chifferen udarbejde 160 cyklusser, så dette pålægger nogle begrænsninger på værdien af , skal være et heltal.
Tilbage i version 0.0 udtalte forfatterne, at chifferen var designet på en sådan måde, at et angreb hurtigere end en fuldstændig søgning på nøgler er umuligt. Det bedste angreb bør således have en kompleksitet i størrelsesordenen 2 80 .
I Grain 0.0-specifikationen [1] udtalte forfatterne: "Grain giver større sikkerhed end nogle andre velkendte hardware-baserede ciphers. Velkendte eksempler på sådanne ciphers er E0 , der bruges i Bluetooth , og A5/1 , der bruges i GSM . Selvom disse cifre er enkle i implementeringen, har de vist sig at være meget upålidelige. Sammenlignet med E0 og A5/1 giver Grain mere pålidelighed, samtidig med at den er nem at implementere."
I version 0.0 blev der fundet en række alvorlige sårbarheder, så i den opdaterede version 1.0 [2] blev outputfunktionen og feedbackfunktionen i det ikke-lineære inverse funktionsregister (NFSR) ændret lidt for chifferen. Derefter, siden oktober 2006, er intet angreb mod Grain version 1.0 kendt for at være hurtigere end brute force. I september 2006 blev der dog gjort et forsøg på at angribe nøglen [3] . Artiklen siger: "vi har fundet tilknyttede nøgler og frø i Grain, for ethvert par (K,IV) med sandsynlighed 1/22 er der et tilknyttet par (K',IV'), der genererer en nøglestrøm forskudt med 1 bit. Selvom dette ikke er et vellykket angreb på nøglen, viser denne kendsgerning en mulig svaghed ved chifferen ved initialisering af staten."
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |