Panama [1] är en kryptografisk primitiv som kan användas antingen som en kryptografisk hashfunktion eller som ett strömchiffer. Den utvecklades 1998 av Joan Dymen och Craig Klep för att förbättra effektiviteten i programvara för 32-bitars arkitekturer. Det är en av förfäderna till Keccak- hash-algoritmen , som blev vinnaren i tävlingen om kryptografiska primitiver från US National Institute of Standards and Technology [2] . Förlitar sig mycket på StepRightUp-strömningshashmodulen. [3]
Enligt utvecklarna hade "Panama" vid utvecklingstillfället en hög säkerhetsnivå, men detta uppnåddes till priset av en enorm beräkningsbelastning. Därför, som det visade sig, visade sig "Panama" som hashfunktion vara mindre lämplig för att hasha meddelanden än sina konkurrenter. Om vi talar om "Panama" som ett strömchiffer, visade sig en lång initialiseringsprocedur vara ett utmärkande drag för dess användning. Därför, när du använder det i uppgifter som kräver höga hastigheter, är det nödvändigt att tillhandahålla alla villkor som kommer att syfta till att minska antalet avsynkroniseringar. [fyra]
Det antogs att "Panama" skulle användas för att kryptera eller dekryptera video för att komma åt vissa applikationer, i synnerhet "betal-TV". [5] Utvecklarnas logik var att set-top-boxar och digitala TV-apparater skulle använda höghastighetsprocessorer, och Panama skulle inte ladda dessa processorer för mycket under dekryptering.
"Panama" är baserad på en finita tillståndsmaskin, bestående av två stora block: 544 tillståndsbitar och en 8192-bitars buffert, som arbetar enligt principen om ett återkopplingsskiftregister . Återkopplingen säkerställer att ingångsbitarna går igenom flera iterationer efter inmatningen, vilket i sin tur säkerställer bitvis diffusion. Jag måste säga att en liknande buffert används i SHA-komprimeringsfunktionen. [6] Panama arbetsobjekt är ett 32-bitars ord och tillståndet består av 17 sådana ord, medan bufferten har 32 celler, som var och en innehåller 8 sådana ord. [7]
Panama kan uppdatera bufferten och tillstånden genom att iterera. Och för den iterativa funktionen är tre lägen implementerade: "Återställ", "Push" och "Pull". I "Push"-läge tar maskinen emot viss input men matar inte ut någonting. I "Pull"-läget, tvärtom, bildas utdata, men ingenting tas som indata. En "tom pull-iteration" betyder också att utdata från den iterationen kasseras. I "Reset"-läget återställs tillståndet och bufferten till noll. [åtta]
Tillståndsförändringen kännetecknas av hög diffusion och distribuerad icke-linjäritet. [9] Detta betyder att ett litet antal iterationer är tillräckligt för att uppnå god spridning. Detta görs med hjälp av 4 block, som var och en löser sin egen uppgift.
Om vi betraktar "Panama" som en hashfunktion, är algoritmen för dess funktion som följer. Inledningsvis accepterar hashfunktionen alla block av meddelanden. Därefter utförs flera fler "Push" iterationer, vilket gör att de senast mottagna blocken av meddelanden kan spridas inuti bufferten och tillståndet. Därefter utförs den sista "Pull" iterationen, vilket gör att du kan få hashresultatet. Strömmande krypteringsschemat initieras enligt följande: först går två "Push" iterationer igenom för att erhålla nyckeln och diversifieringsparametern. Därefter sker ett antal "Pull"-iterationer för att sprida nyckeln och parametern inuti bufferten och tillstånden. Detta slutför initieringen och Panama är redo att skapa bitar av utdatasekvensen genom att utföra "Pull" iterationer. [3]
Du kan beteckna tillståndet som , och de 17 orden som definierar tillstånd kan betecknas som . Bufferten betecknas som , den -th av dess cell - as , och ett av orden som ligger inuti denna cell - as . Inledningsvis är både tillståndet och bufferten fyllda med endast nollor. I "Push"-läget tar "Panama" emot ett 8-bitars ord som inmatning, i "Pull"-läget bildas ett 8-bitars ord som en utgång. [7]
Om vi anger funktionen som uppdaterar bufferten som , då, om vi accepterar det , kan vi få följande regler för uppdatering av bufferten:
vid , , fördär det i "Push"-läget finns ett ingångsblock och i "Pull"-läget är det en del av tillståndet , dvs 8 av dess komponenter, definierade som
förTillståndet uppdateras enligt följande regel , som är en överlagring av 4 olika transformationer:
där är en invers linjär transformation, är återigen en invers linjär transformation, är en kombination av ordbitrotation och ordpositionsblandning, och transformationen är en bitvis addition av bufferten och inmatningsordet.
I det här fallet kommer det att bestämma summan av operationer, där den till höger utförs först.
Nu kan vi överväga var och en av dessa operationer. definieras enligt följande:
för ,där alla index tas modulo . Observera att reversibiliteten för denna transformation följer av det faktum att den är coprime med .
kan definieras som:
för ,där alla index tas modulo .
Om det för konverteringen fastställs att det finns en offset i positioner från den minst signifikanta biten till den mest signifikanta, då:
,och , och
Om för omvandlingen kommer att utföras som , då
, för , förI "Push"-läge är inmatningsmeddelandet och i "Pull"-läge - .
Utgångsordet i "Pull"-läge definieras enligt följande:
. [elva]"Panama" som en hashfunktion mappar ett hashresultat på 256 bitar till ett meddelande av godtycklig längd. [11] I det här fallet sker hashing i två steg
Kan betecknas som en sekvens av ingångsblock . Sedan, vid tidpunkten noll, genereras återställningsläget, sedan, under cyklerna, laddas ingångsblocken. Därefter utförs 32 tomma "Pull" iterationer. Och sedan på den 33:e "Pull"-iterationen returneras hashresultatet .
Huvuduppgiften med att utveckla Panama-hashfunktionen var att hitta en "hermetisk" hashfunktion [11] , det vill säga en funktion för vilken (om hashresultatet består av bitar):
Dessutom är det inte möjligt att detektera systematiska korrelationer mellan någon linjär kombination av inmatningsbitar och någon linjär kombination av hashresultatbitar. [elva]
Denna hash-funktion har framgångsrikt attackerats två gånger. Redan 2001 visades det att denna hashfunktion inte är kryptografiskt säker, eftersom kollisioner för operationer hittades. Dessutom visade Joan Dymen att det är möjligt att hitta kollisioner redan för operationer, och för att uppfylla tillförlitlighetsparametrarna är det nödvändigt att kollisioner lokaliseras åtminstone för operationer. [12]
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|