Grain 128a- strömchifferet användes först vid Symmetric Key Encryption Workshop (SKEW) 2011 som en förbättring av föregångaren Grain 128, som lade till säkerhetsförbättringar och valfri meddelandeautentisering med krypterings- och MAC-metoden. En av de viktiga egenskaperna hos Grain-familjen är att genomströmningen kan ökas på bekostnad av ytterligare hårdvara. Grain 128a är designad av Martin Ågren, Martin Hell, Thomas Johansson och Willi Meier.
Grain 128a består av två stora delar: Pre-output funktion och MAC. Pre-output-funktionen har en intern tillståndsstorlek på 256 bitar, bestående av två register med storleken 128 bitar: NLFSR och LFSR . MAC stöder variabla tagglängder w så att . Chifferet använder en 128 bitars nyckel.
Chifferet stöder två funktionslägen: med eller utan autentisering, som konfigureras via den medföljande så att om då autentisering av meddelande är aktiverat, och om är autentisering av meddelandet inaktiverad.
Pre-output funktion
Pre-output-funktionen består av två register med storleken 128 bitar: NLFSR ( ) och LFSR ( ) tillsammans med 2 återkopplingspolynom och och en boolesk funktion .
Förutom återkopplingspolynomen är uppdateringsfunktionerna för NLFSR och LFSR :
Förutgångsströmmen ( ) definieras som:
Initiering
Diagram som visar startproceduren för förutgången som matar tillbaka förutgångsströmmen till funktionerna och
Den sista 0-biten säkerställer att liknande nyckel-IV-par inte producerar förskjutna versioner av varandra.
NLFSR initieras genom att kopiera hela 128-bitarsnyckeln ( { till NLFSR :
för
Starta klockning
Innan pre-output-funktionen kan börja mata ut sin pre-output-ström måste den klockas 256 gånger för att värmas upp, under detta steg matas pre-output-strömmen in i återkopplingspolynomen g {\displaystyle g f .
Nyckelström
Nyckelströmmen ( ) och MAC-funktionaliteten i Grain 128a delar båda samma förutgångsström ( . Eftersom autentisering är valfri beror vår nyckelströmsdefinition på .
När autentisering är aktiverad använder MAC-funktionen de första -bitarna (där är taggstorleken) efter startklockningen för att initiera. Nyckelströmmen tilldelas sedan varannan bit på grund av den delade förutgångsströmmen.
Om autentisering är aktiverad:
Om autentisering är inaktiverad:
MAC
Vy över korn 128a
Korn 128a stöder taggar med storlek upp till 32 bitar, för att göra detta används 2 register av storlek ett skiftregister ( och en ackumulator ( ). För att skapa en tagg för ett meddelande där är längden på eftersom vi måste ställa in för att säkerställa att dvs. och har olika taggar, och även göra det omöjligt att generera en tagg som helt ignorerar indata från skiftregister efter initiering.
För varje bit i ackumulatorn vi vid tiden fördömer vi en bit i ackumulatorn som .
Initiering
När autentisering är aktiverad använder Grain 128a de första -bitarna av pre-output-strömmen ( ) för att initiera skiftregistret och ackumulatorn. Detta görs av:
Skift register:
för
Ackumulator:
för
Tagggenerering
Skift register:
Skiftregistret matas med alla udda bitar av pre-outputströmmen ( :
Ackumulator:
för
Sista taggen
När chiffret har slutfört L iterationerna är den sista taggen ( ) innehållet i ackumulatorn: