Kanin er en high-speed stream cipher første gang præsenteret [1] i februar 2003 på det 10. FSE Symposium. I maj 2005 blev han indsendt til eStream- konkurrencen , som havde til formål at skabe europæiske standarder for strømkrypteringssystemer.
Rabbit er udviklet af Martin Boesgaard , Mette Vesterager , Thomas Pedersen , Jesper Christiansen og Ove Scavenius .
Rabbit bruger en 128-bit nøgle og en 64-bit initialiseringsvektor. Chifferen er designet til at blive brugt i software som en høj krypteringshastighed. Samtidig kunne krypteringshastigheden nå 3,7 cyklusser pr. byte ( CPB ) for Pentium 3-processoren og 10,5 cyklusser pr. byte for ARM7. Chifferen viste sig dog også at være hurtig og kompakt, når den blev implementeret i hardware.
Hovedkomponenten i chifferen er en bitstrømsgenerator , som krypterer 128 bits af en besked pr. iteration. Fordelen ved en chiffer er den grundige blanding af dens interne tilstande mellem to på hinanden følgende iterationer. Blandingsfunktionen er udelukkende baseret på de aritmetiske operationer, der er tilgængelige på moderne processorer, dvs. substitutions-S-bokse og opslagstabeller er ikke nødvendige for at implementere chifferen.
Forfatterne af chifferen har leveret et komplet sæt datablade på Crypticos hjemmeside [2] . Chifferen er også beskrevet i RFC 4503 . Cryptico havde patentet på chifferen, og i mange år krævede kommerciel brug af chifferen en licens. Den 6. oktober 2008 fik chifferen dog lov til at blive brugt til ethvert formål gratis [3] .
Strømchifferne for eSTREAM-projektet omfatter to profiler. Profil 1 inkluderer software-orienterede cifre, og Profil 2 inkluderer hardware-orienterede ciphers.
Projektets bedste cifre:
Profil 1 | Profil 2 |
---|---|
HC-128 | F-FCSR-H v2 |
Kanin | Korn v1 |
Salsa20/12 | MICKEY v2 |
Sosemanuk | Trivium |
Profil 1 inkluderer symmetriske stream-cifre med god softwareimplementering. Så gode, at de burde have overgået den AES-bloksymmetriske krypteringsalgoritme i gammagenereringstilstande. Hovedkravet til denne profil var at give et sikkerhedsniveau på 128 bit.
Rabbit er et af de ældste designs af eSTREAM-projektet. Denne stream-chiffer har ikke været genstand for nogen ændringer eller tilføjelser. Dens specifikation er forblevet uændret fra 2003 til i dag. Chifferen overlevede alle tre faser af projektet og var ikke udsat for kryptoanalytiske angreb på nogen af dem. Blandt andet er denne algoritme rigtig godt implementeret på de nye processorer i Intel-familien. Som en ulempe kan du se det faktum, at Rabbit-chifferet giver et sikkerhedsniveau på kun 128 bit.
Resultater af den endelige afstemning af eSTREAM-projektet for Profil 1.
Profil 1 | briller |
---|---|
Kanin | 2,80 |
Salsa 20 | 2,80 |
Sosemanuk | 1,20 |
HC-128 | 0,60 |
NLS v2 | -0,60 |
LEXv2 | −1.20 |
CryptoMT v3 | −1.40 |
Trække på | −1,60 |
Strømchifferets interne tilstand indeholder 513 bit. 512 af dem er opdelt i otte 32-bit tilstandsvariable og otte 32-bit tællere , hvor er tilstandsvariablen for delsystemet under iteration , og er den tilsvarende variable tæller. Den 513. bit er bærebitten , som skal gemmes mellem iterationerne. Denne bit initialiseres til nul. 8 tilstandsvariable og 8 tællere afhænger af nøglen under initialisering.
Algoritmen initialiseres ved at udvide 128-bit nøglen til 8 tilstandsvariable og 8 tællere, således at der er en en-til-en overensstemmelse mellem nøglen, initialtilstandsvariablerne , og de initiale tællere, . Nøglen er opdelt i 8 undernøgler: , , … , , tilstandsvariable og tællere initialiseres ved hjælp af undernøgler
hvor er sammenkædningsoperationen.
Systemet køres 4 gange i henhold til den næste tilstandsfunktion defineret nedenfor for at reducere korrelationen mellem nøglebit og interne tilstandsvariable bit. Til sidst geninitialiseres tællerne som følger:
for at forhindre nøglegendannelse ved at invertere tællersystemet.
Her er alle tilføjelser modulo 2 32 . Funktionerne og returnerer henholdsvis de nederste og øverste fire bytes af et 64-bit tal , - cyklisk skift til venstre.
Ligninger, der specificerer ændringen i tællersystemet:
hvor bærebitantallet er givet af
Konstanterne er også defineret som
Efter hver iteration genereres 128 outputbits ved hjælp af følgende formler:
hvor er 128-bit blok af krypteringsstrømmen ved den iteration.
En XOR-operation udføres mellem de udtrukne bits og teksten/chifferteksten til kryptering/dekryptering.
hvor og angiver den th blok af henholdsvis chiffertekst og tekst.
Nøgleinstallation kan opdeles i tre faser: nøgleudvidelse, iterationssystem, modifikation.
Rabbit giver 128-bit beskyttelse mod angribere, hvis mål er en enkelt unik nøgle. Hvis angrebet sker på flere nøgler ad gangen, og det er lige meget, hvilken af dem der er knækket, så reduceres sikkerheden til 96 bit [5] .
Når først nøglen er indstillet, er tæller- og tilstandsbittene strengt og meget ikke-lineært afhængige af nøglebittene. Dette gør det sværere at knække for part-key gætteangreb, selvom tællerbits var kendt efter tælleren blev ændret. At kende tællerne gør selvfølgelig andre typer hacks lettere.
KollisionsangrebRabbit-chifferet bruger tvetydig kortlægning, forskellige nøgler kan potentielt føre til den samme farveskala. Dette problem koger dybest set ned til spørgsmålet om, hvorvidt forskellige nøgler resulterer i de samme tællerværdier, da forskellige tællerværdier næsten helt sikkert vil resultere i forskellige gammagenerationer. Bemærk, at nøgleudvidelses- og iterationssystemet er designet på en sådan måde, at hver nøgle resulterer i unikke tællerværdier. Ændring af tælleren kan dog resultere i lige store tællerværdier for to forskellige nøgler. Hvis vi antager, at den interne tilstand efter fire indledende iterationer i det væsentlige er tilfældig og ikke korrelerer med tællersystemet, er sandsynligheden for kollisioner givet af "fødselsdagsparadokset", det vil sige, for alle nøgler forventes en kollision i en 256- bittæller[ angiv ] . Tællersystemkollisionen bør således ikke give problemer i praksis.
Relateret nøgleangrebAngrebet er baseret på brugen af symmetriegenskaber i den næste tilstand og nøgleindstillingsfunktioner. Overvej for eksempel to nøgler og relateret til en relation for alle . Dette fører til forholdet og . Overvej nu, hvornår og er den samme nøgle. Hvis betingelsen er opfyldt, vil den næste tilstandsfunktion beholde symmetriegenskaben. Men man kan nemt kontrollere, at konstanterne , er valgt således, at . Den næste tilstandsfunktion er således ikke modtagelig for det tilknyttede nøgleangreb.
Et sådant angreb ville være muligt, hvis outputbits kunne forudsiges ved hjælp af et lille sæt interne tilstandsbit. Angriberen skal gætte den passende del af tilstandsvariablerne, forudsige outputbittene og sammenligne dem med direkte observerede bits i outputtet for at verificere, at hans gæt er korrekt. En angriber skal gætte mindst 2*12 inputbytes for at forskellige g-funktioner kan teste mod én byte. Dette svarer til at gætte 192 bit, hvilket er sværere end at prøve alle tasterne.
Gæt-og-bestem angrebEssensen af denne metode er, at du skal gætte flere ukendte chiffervariabler og ved hjælp af dem udlede de resterende ukendte. Derefter køres systemet flere gange, og outputtet sammenlignes med chifferens reelle output for at kontrollere antagelsen. Angriberen forsøger at genskabe 512 bits intern tilstand, dvs. han observerer 4 på hinanden følgende 128-bit data ved udgangen af chifferen og gør følgende:
Effektiviteten af denne tilgang afhænger af antallet af gættede variabler. Dette tal er afgrænset nedefra af 8-bit undersystemet med det mindste antal inputvariabler. Hvis vi ignorerer tællerne, afhænger hver byte af den næste tilstandsfunktion af 12 inputbytes. Hvis du tager tællerne i betragtning, afhænger hver byte ved udgangen af undersystemet allerede af 24 inputbytes. Derfor skal angriberen gætte mere end 128 bit, hvilket gør angrebet umuligt.
Givet en boolsk funktion er ANF en repræsentation som et multivariat polynomium (det vil sige summen af monomer fra inputvariablerne). Et stort antal monomialer og deres gode effektfordeling er vigtige egenskaber ved ikke-lineære blokke i en chiffer.
For en tilfældig boolsk funktion i 32 variabler er det gennemsnitlige antal monomialer , og det gennemsnitlige antal monomialer, der inkluderer alle givne variabler, er . Hvis vi betragter 32 sådanne funktioner valgt tilfældigt, så er det gennemsnitlige antal monomer, der ikke er i nogen af de 32 funktioner, 1, og den tilsvarende varians er også 1.
For en g-funktion i Rabbit-chifferet har ANF for de 32 boolske underfunktioner mindst en potens på 30. Antallet af monomialer varierer fra til , hvor det for en tilfældig funktion skal være . Fordelingen af monomialer som funktion af graden er vist i figuren. Ideelt set skulle hoveddelen have været mellem de stiplede linjer, der viser afvigelser fra middelværdien for en ideel tilfældig funktion. Nogle boolske funktioner adskiller sig væsentligt fra resultaterne for den tilfældige funktion, men de har alle et stort antal monomialer i høj grad.
Derudover blev et delvist sammenfald af 32 funktioner undersøgt. Det samlede antal monomialer, der forekommer én gang, er , mens antallet af monomialer, der slet ikke forekommer, er . Sammenlignet med en tilfældig funktion er der tale om ret store afvigelser. Disse oplysninger kan være nyttige til at analysere chifferen i fremtiden.
Algebraisk normal form (ANF) for den komplette chifferDet er praktisk talt umuligt at beregne ANF for alle bits i outputtet for en komplet chiffer. Men at reducere nøglestørrelsen fra 128 bit til 32 bit gør det muligt at lære de 32 booleske outputfunktioner som en funktion af en 32 bit nøgle.
For en strippet version af Rabbit-chifferet blev opsætningsfunktionen undersøgt for et andet antal iterationer. ANF bestemmes efter 0, 1, 2, 3, 4 iterationer og en yderligere iteration i ekstraktionsskemaet. For 0+1 iterationer var antallet af monomialer cirka 2^31, som forventet for den tilfældige funktion. Men efter to iterationer stabiliserede resultatet sig. Det betyder, at der ikke er flere udsving i outputtet. Antallet af manglende polynomier er henholdsvis 0, 1, 2, 3, 1 i iterationer (0+1), ..., (4+1). Det er indlysende, at disse data svarer til resultaterne for tilfældige funktioner.
Det lineære angreb involverer at finde den bedste lineære tilnærmelse mellem bitsene ved indgangen til den næste tilstandsfunktion og bitsene ved udgangen af ekstraktionskredsløbet. For at gøre dette skal du bruge Walsh-Hadamard Transform , idet det antages, at alle inputdata er lineært uafhængige. Det blev fundet, at den bedste lineære korrelation har en korrelationskoefficient af orden , hvilket indebærer at generere output fra iterationer for at sammenligne med en tilfældig funktion.
Anden ordens tilnærmelseAfskæring af ANF for g-funktionen af termer over anden orden forbedrer i høj grad tilnærmelsen under de rigtige forhold.
Betegn ved andenordens tilnærmelse ANF for . Ifølge de eksperimentelle resultater er korrelationskoefficienten mellem og mindre end , og korrelationskoefficienten mellem og er omtrent lig med . Dette betyder, at nogle termer i højere grad afskæres, når modulo 2 tilføjes til to tilstødende bit. Ved at bygge på disse data giver en chiffer med en anden tilnærmelsesorden i bedste fald en korrelationskoefficient . Denne værdi af korrelationskoefficienten er utilstrækkelig til et angreb. Hvis vi også tager højde for tællerne, så er analysen meget mere kompliceret. https://vk.com/tibber
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |