HC-256 är ett strömkrypteringssystem utvecklat av kryptografen Hongjun Wu från Institute of Infocommunication Research i Singapore. Första gången publicerad 2004. 128-bitarsversionen skickades till eSTREAM- tävlingen , som syftade till att skapa europeiska standarder för strömkrypteringssystem. Algoritmen var en av de fyra finalisterna i den första profiltävlingen (strömningschiffer för mjukvaruapplikationer med hög bandbredd). [1 ]
HC-256- strömchifferet genererar en nyckelsekvens (nyckelström) upp till bitar lång med hjälp av en 256-bitars hemlig nyckel och en 256-bitars initialiseringsvektor.
HC-256 innehåller två hemliga tabeller, var och en med 1024 32-bitars poster. Varje steg uppdaterar ett element från tabellen med hjälp av en icke-linjär återkopplingsfunktion. Varje 2048:e steg kommer alla element i de två tabellerna att uppdateras. [ett]
Algoritmen använder följande operationer:
: x+y betyder x+y mod , där 0 x och 0 y : x y betyder x - y mod 1024 : bitvis XELLER : sammanlänkning : höger skiftoperator med angivet antal bitar : vänster skiftoperator med angivet antal bitar : cirkulär förskjutning åt höger, x n betyder ((x n) (x (32 - n)), där 0 n 32 och 0 x
HC-256 använder två tabeller, P och Q. Nyckeln och initialiseringsvektorn betecknas med K respektive V. Tangentsekvensen betecknas S.
: tabell med 1024 32-bitars element. Varje element betecknas med P[i], där 0 är 1023. : en tabell med 1024 32-bitars element. Varje element betecknas med P[i], där 0 är 1023. : 256-bitars nyckel för HC-256-algoritmen. : 256-bitars initialiseringsvektor för HC-256-algoritmen. : nyckelsekvens genererad av HC-256-algoritmen. 32-bitarselementet vid utgången av det i:te steget betecknas med . S= || || || …
HC-256 har sex funktioner:
Här är x = || || || — 32-bitars ord. , , , består av 1 byte vardera, och , är låg respektive hög byte. [2]
Initieringsprocessen i HC-256 består av att konvertera P och Q med en nyckel och en initieringsvektor och köra kryptering 4096 gånger utan att generera en utdata.
1. Komponera K = || || … || och V = || || … || , där och består av 32 bitar. Nyckeln och initialiseringsvektorn expanderas till en array (0 i 2559).
tar följande värden:
2. Uppdatera tabellerna P och Q med W:
3. Kör kryptering (nyckelsekvensgenereringsalgoritm) 4096 gånger utan att generera utdata.
Initieringsprocessen är klar och chiffern är redo att generera nyckelsekvensen. [3]
Varje steg uppdaterar ett element från tabellen och genererar ett 32-bitars utdataelement. Processen för att generera en nyckelsekvens beskrivs nedan:
i=0;
repeat until enough keystream bits are generated.
{
}
end-repeat
[3]
Författarna gjorde följande säkerhetsförklaringar om HC-256:
HC-256-algoritmen säkerställer att nyckelsekvensens period är mycket stor. Men det är svårt att precisera det. Den genomsnittliga perioden för en nyckelsekvens uppskattas till ca .
Privat nyckelsäkerhetUtgångsfunktionen och återkopplingsfunktionen hos HC-256 är mycket icke-linjär. Den icke-linjära utgångsfunktionen tillåter mycket lite informationsläckage vid varje steg. Den icke-linjära återkopplingsfunktionen säkerställer att den hemliga nyckeln inte kan fastställas från denna läcka.
Från analysen av funktionernas värden och följer:
Av villkoret följer nämligen att . Eftersom med sannolikhet om , är sannolikheten att , också om . Det betyder att ungefär en bit information läcker ut vid varje kollision . Totalt antal matcher. För att återställa P behöver du utdataresultat. Så vi kan dra slutsatsen att nyckeln till HC-256 är säker och att den inte kan fastställas snabbare än en fullständig sökning av nycklarna.
HC-256-initieringsprocessen består av två steg (se ovan). P och Q omvandlas med hjälp av nyckeln K och initialiseringsvektorn V. Varje bit av K och V påverkar alla bitarna i de två tabellerna, och varje ändring i dem leder till okontrollerade ändringar i tabellerna. Kryptering körs 4096 gånger utan att generera en utdata, så tabellerna P och Q blir mer slumpmässiga. Efter initieringsprocessen resulterar ändringar i K och V inte i ändringar i tangentsekvensen. [fyra]
2008 föreslog Erik Zenner ett sätt att attackera HC-256-chifferet. Den föreslagna timingattacken låter dig återställa det inre tillståndet, vilket är 2 tabeller med 1024 32-bitars element, såväl som nyckeln. Attacken kräver 8 kilobyte av den kända nyckelsekvensen, 6148 exakta mätningar av cache-lästiden och beräkningstid som motsvarar nyckeltestningstiden. Det följer att, i teorin, är HC-256 sårbar för timingattacker. [5]
Du bör också vara uppmärksam på publiceringen av Gautham Sekar och Bart Preneel, som föreslår en klass av särskiljare, som var och en kräver testning av nära linjära funktioner. Varje ekvation inkluderar 8 bitar av nyckelsekvensen. Sannolikheten för ett framgångsrikt resultat är 0,9772. Som jämförelse krävde en liknande metod känd tidigare och föreslagen av författaren till HC-256 själv funktioner, som var och en inkluderade 10 bitar av en nyckelsekvens. [6]
HC-256 är praktiskt för moderna mikroprocessorer . Beroendet mellan operationer i HC-256 hålls till ett minimum: tre på varandra följande steg av algoritmen kan beräknas parallellt. Parallelliseringsförmågan gör att HC-256 är effektiv i dagens processorer. Författarna implementerade HC-256 i programmeringsspråket C och testade dess prestanda på Pentium 4-processorn . HC-256-krypteringshastigheten når 1,93 bps. HC-256 är inte patenterad och är fritt tillgänglig. [7]
Symmetriska kryptosystem | |
---|---|
Streama chiffer | |
Feistel nätverk | |
SP nätverk | |
Övrig |