HC-256 er et strømkrypteringssystem udviklet af kryptograf Hongjun Wu fra Institute of Infocommunication Research i Singapore. Først udgivet i 2004. 128-bit versionen blev indsendt til eSTREAM- konkurrencen , som havde til formål at skabe europæiske standarder for strømkrypteringssystemer. Algoritmen var en af de fire finalister i den første profilkonkurrence (stream-cifre til softwareapplikationer med høj båndbredde). [1 ]
HC-256- strømchifferen genererer en nøglesekvens (keystream) op til bit lang ved hjælp af en 256-bit hemmelig nøgle og en 256-bit initialiseringsvektor.
HC-256 indeholder to hemmelige tabeller, hver med 1024 32-bit indgange. Hvert trin opdaterer et element fra tabellen ved hjælp af en ikke-lineær feedbackfunktion. Hvert 2048 trin vil alle elementer i de to tabeller blive opdateret. [en]
Algoritmen bruger følgende operationer:
: x+y betyder x+y mod , hvor 0 x og 0 y : x y betyder x - y mod 1024 : bitvis XOR : sammenkædning : højre skiftoperator med det angivne antal bit : venstre skiftoperator med det angivne antal bits : cirkulært skift til højre, x n betyder ((x n) (x (32 - n)), hvor 0 n 32 og 0 x
HC-256 bruger to tabeller, P og Q. Nøglen og initialiseringsvektoren er angivet med henholdsvis K og V. Tastesekvensen er betegnet S.
: tabel med 1024 32-bit elementer. Hvert element er betegnet med P[i], hvor 0 er 1023. : en tabel med 1024 32-bit elementer. Hvert element er betegnet med P[i], hvor 0 er 1023. : 256-bit nøgle af HC-256 algoritmen. : 256-bit initialiseringsvektor af HC-256 algoritmen. : nøglesekvens genereret af HC-256-algoritmen. 32-bit elementet ved udgangen af det i-te trin er angivet med . S= || || || …
HC-256 har seks funktioner:
Her er x = || || || — 32-bit ord. , , , består af 1 byte hver, og , er henholdsvis lav og høj byte. [2]
Initialiseringsprocessen i HC-256 består i at konvertere P og Q med en nøgle og en initialiseringsvektor og køre kryptering 4096 gange uden at generere et output.
1. Sammensætning af K = || || … || og V = || || … || , hvor og består af 32 bits. Nøglen og initialiseringsvektoren udvides til et array (0 i 2559).
tager følgende værdier:
2. Opdater tabel P og Q med W:
3. Kør kryptering (nøglesekvensgenereringsalgoritme) 4096 gange uden at generere output.
Initialiseringsprocessen er fuldført, og chifferen er klar til at generere nøglesekvensen. [3]
Hvert trin opdaterer et element fra tabellen og genererer et 32-bit outputelement. Processen til at generere en nøglesekvens er beskrevet nedenfor:
i=0;
repeat until enough keystream bits are generated.
{
}
end-repeat
[3]
Forfatterne fremsatte følgende sikkerhedserklæringer om HC-256:
HC-256-algoritmen sikrer, at nøglesekvensens periode er meget stor. Men det er svært at præcisere det. Den gennemsnitlige periode for en nøglesekvens estimeres til at være ca.
Privat nøglesikkerhedUdgangsfunktionen og feedbackfunktionen på HC-256 er meget ikke-lineær. Den ikke-lineære output-funktion giver mulighed for meget lidt informationslækage ved hvert trin. Den ikke-lineære feedback-funktion sikrer, at den hemmelige nøgle ikke kan bestemmes ud fra denne læk.
Fra analysen af værdierne af funktioner og følger:
For det følger nemlig af betingelsen , at . Da med sandsynlighed ca , er sandsynligheden for , også ca . Det betyder, at der lækkes cirka en bit information ved hver kollision . Samlede kampe. For at gendanne P skal du bruge outputresultater. Så vi kan konkludere, at nøglen til HC-256 er sikker, og at den ikke kan bestemmes hurtigere end en komplet søgning af nøglerne.
HC-256 initialiseringsprocessen består af to trin (se ovenfor). P og Q konverteres ved hjælp af nøglen K og initialiseringsvektoren V. Hver bit af K og V påvirker alle bits i de to tabeller, og hver ændring i dem fører til ukontrollerede ændringer i tabellerne. Kryptering kører 4096 gange uden at generere et output, så tabellerne P og Q bliver mere tilfældige. Efter initialiseringsprocessen resulterer ændringer af K og V ikke i ændringer af tastesekvensen. [fire]
I 2008 foreslog Erik Zenner en måde at angribe HC-256-chifferet på. Det foreslåede timingangreb giver dig mulighed for at gendanne den indre tilstand, som er 2 tabeller med 1024 32-bit elementer, samt nøglen. Angrebet kræver 8 kilobyte af den kendte nøglesekvens, 6148 nøjagtige målinger af cachelæsetiden og beregningstid svarende til nøgletesttiden. Det følger heraf, at HC-256 i teorien er sårbar over for timing angreb. [5]
Du bør også være opmærksom på udgivelsen af Gautham Sekar og Bart Preneel, som foreslår en klasse af kendetegn, som hver især kræver test af nær- lineære funktioner. Hver ligning indeholder 8 bits af nøglesekvensen. Sandsynligheden for et vellykket resultat er 0,9772. Til sammenligning krævede en lignende metode kendt før og foreslået af forfatteren til HC-256 selv funktioner, som hver inkluderede 10 bits af en nøglesekvens. [6]
HC-256 er praktisk til moderne mikroprocessorer . Afhængigheden mellem operationer i HC-256 holdes på et minimum: tre på hinanden følgende trin af algoritmen kan beregnes parallelt. Paralleliseringsevnen gør det muligt for HC-256 at være effektiv i nutidens processorer. Forfatterne implementerede HC-256 i programmeringssproget C og testede dens ydeevne på Pentium 4-processoren . HC-256-krypteringshastigheden når 1,93 bps. HC-256 er ikke patenteret og er frit tilgængelig. [7]
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |