MARS (kryptografi)

MARS
Skaber Carolyn Barwick, Don Coppersmith
Oprettet 1998 _
offentliggjort 1998 _
Nøglestørrelse 128-448 bit
Blokstørrelse 128 bit
Antal runder 32
Type Feistel netværk

MARS er en AES  kandidat chiffer udviklet af IBM , som skabte DES på én gang . IBM siger, at MARS-algoritmen trækker på firmaets 25 års kryptoanalytiske ekspertise, og sammen med dens høje kryptografiske styrke tillader chifferen effektiv implementering selv inden for begrænsningerne af smart cards .

Don Coppersmith , en af ​​forfatterne af Lucifer -chifferet ( DES ), kendt for en række artikler om kryptologi, deltog i udviklingen af ​​chifferen : forbedring af strukturen af ​​S-bokse mod differentiel kryptoanalyse , den hurtige matrixmultiplikationsmetode ( Coppersmith-Winograd-algoritme ), RSA - kryptanalyse . Ud over ham deltog Carolyn Barwick , Edward D'Evignon , Rosario Genaro , Shai Halevi , Charanjit Jutla , Steven M. Matyas Jr. i udviklingen af ​​algoritmen . , Luke O'Connor , Mohamed Perevyan , David Safford , Nevenko Zunich .

I henhold til reglerne for AES -konkurrencen kunne deltagerne foretage mindre ændringer i deres algoritmer. Ved at udnytte denne regel ændrede forfatterne af MARSa nøgleudvidelsesproceduren, hvilket gjorde det muligt at reducere kravene til ikke-flygtig og RAM . En ændret version af algoritmen vil blive givet nedenfor.

Baseret på resultaterne af AES -konkurrencen kom MARS til finalen, men tabte til Rijndael . Efter offentliggørelsen af ​​resultaterne (19. maj 2000) dannede udviklingsteamet deres egen mening om AES -konkurrencen [1] , hvor de kommenterede påstandene til deres hjerne.

MARS distribueres nu over hele verden under en royalty-fri licens .

Kort beskrivelse af algoritmen

MARS er en bloksymmetrisk chiffer med en hemmelig nøgle. Blokstørrelsen for kryptering er 128 bit, nøglestørrelsen kan variere fra 128 til 448 bit inklusive (multipler af 32 bit). Skaberne forsøgte at kombinere kodningshastigheden og chifferens styrke i deres algoritme. Resultatet er en af ​​de stærkeste algoritmer i AES- konkurrencen .

Algoritmen er unik ved, at den brugte næsten alle eksisterende teknologier brugt i kryptoalgoritmer, nemlig:

Brugen af ​​dobbelt shuffling udgør en vanskelighed for kryptoanalyse , som nogle tilskriver ulemperne ved algoritmen. Samtidig er der i øjeblikket ingen effektive angreb på algoritmen, selvom nogle nøgler kan generere svage undernøgler.

Algoritmestruktur

Forfatterne af chifferen gik ud fra følgende antagelser:

  1. Valg af operationer . MARS er designet til at blive brugt på tidens mest avancerede computere . For at opnå den bedste defensive præstation blev de mest "stærke operationer" understøttet i dem inkluderet i den. Dette muliggjorde et større sikkerheds-per-instruktionsforhold for forskellige chifferimplementeringer.
  2. Chifferens struktur . Tyve års erfaring inden for kryptografi førte skaberne af algoritmen til ideen om, at hver runde af kryptering spiller en rolle i at sikre chifferens sikkerhed. Især kan vi se, at den første og sidste runde normalt er meget forskellige fra de mellemliggende ("centrale") runder af algoritmen med hensyn til beskyttelse mod kryptoanalytiske angreb. Ved oprettelsen af ​​MARSa blev der således brugt en blandet struktur, hvor den første og sidste runde af kryptering adskiller sig væsentligt fra de mellemliggende.
  3. Analyse . Mest sandsynligt vil en algoritme med en heterogen struktur være bedre i stand til at modstå fremtidens kryptoanalytiske metoder end en algoritme med alle runder identiske. Udviklerne af MARS-algoritmen gav den en meget heterogen struktur - algoritmens runder er meget forskellige fra hinanden.

MARS-krypteringen brugte følgende krypteringsmetoder:

  1. Arbejde med 32-bit ord . Alle handlinger gælder for 32-bit ord. det vil sige, at al den originale information er opdelt i blokke på 32 bit. (hvis blokken viste sig at være kortere, så var den polstret til 32 bit)
  2. Feistel netværk . Skaberne af chifferen mente, at dette var den bedste kombination af krypteringshastighed og kryptografisk styrke. MARS bruger et Type 3 Feistel-netværk.
  3. Symmetri af algoritmen . For krypteringens modstand mod forskellige angreb blev alle dens runder lavet fuldstændig symmetriske , det vil sige, at den anden del af runden er en spejlgentagelse af dens første del.

Strukturen af ​​MARS-algoritmen kan beskrives som følger:

  1. Pre-keying: 32-bit underblokke A, B, C, D er overlejret med 4 fragmenter af den udvidede nøgle k 0 ...k 3 af modulo 2 32 ;
  2. 8 runder af direkte blanding udføres (uden deltagelse af krypteringsnøglen);
  3. Der udføres 8 runder af direkte kryptokonvertering;
  4. Der udføres 8 runder med omvendt kryptotransformation; [2]
  5. Der udføres 8 runder med back-mixing, også uden deltagelse af krypteringsnøglen;
  6. Den endelige overlejring af fragmenter af den udvidede nøgle k 36 ... k 39 ved operationen af ​​subtraktion modulo 2 32 .

Direkte blanding

I den første fase overlejres hvert dataord med et nøgleord, og derefter er der otte omgange med blanding efter Feistel-netværket af den tredje type, sammen med noget ekstra blanding. I hver runde bruger vi et dataord (kaldet kildeordet) til at ændre tre andre ord (kaldet målordene). Vi behandler de fire bytes af det oprindelige ord som indekser i to S-bokse, S 0 og S 1 , som hver består af 256 32-bit ord, og derefter XOR eller tilføjer de tilsvarende S-boks data til tre andre ord.

Hvis de fire bytes af det oprindelige ord er b 0 , b 1 , b 2 , b 3 (hvor b 0 er den første byte og b 3 er den høje byte), så bruger vi b 0 , b 2 som indekser i blok S 0 og bytes b 1 , b 3 , som indekser i S-boksen S 1 . Først XOR S 0 til det første målord og derefter tilføje S 1 til det samme ord. Vi tilføjer også S 0 til det andet målord og blokerer XOR-S 1 til det tredje målord. Til sidst roterer vi det oprindelige ord 24 bit til højre.

I næste runde roterer vi de fire ord, vi har: så det aktuelle første målord bliver det næste kildeord, det nuværende andet målord bliver det nye første målord, det tredje målord bliver det næste andet målord, og nuværende kildeord bliver det tredje målord.

Desuden tilføjer vi efter hver af de fire runder et af målordene tilbage til det oprindelige ord. Konkret tilføjer vi efter første og femte runde det tredje målord tilbage til det oprindelige ord, og efter anden og sjette runde tilføjer vi det første målord tilbage til det oprindelige ord. Grunden til disse yderligere blandingsoperationer er at eliminere nogle få simple differentielle kryptoangreb i blandingsfasen for at bryde symmetrien i blandingsfasen og få et hurtigt flow.

Pseudokode 1. // Første overlejring af en nøgle på dataene 2. 3. 4. // Derefter 8 omgange med fremblanding 5. // brug D[0] til at ændre D[1]; D[2]; D[3] 6. // adgang til 4 S-bokse 7.8.9.10 _ _ _ 11. // og drej det oprindelige ord til højre 12. 13. // udfører også yderligere blandingsoperationer 14. 15. // tilføje D[3] til det oprindelige ord 16. 17. // tilføje D[1] til det oprindelige ord 18. // roter array D[ ] 19.20 .

Kryptografisk kerne

Den kryptografiske kerne i MARS er et type 3 Feistel-netværk, der indeholder 16 runder. I hver runde bruger vi nøglen E-funktion, som er en kombination af multiplikationer, rotationer og S-boks-kald. Funktionen tager et dataord som input og returnerer tre ord, med hvilke operationen med addition eller XOR til andre tre dataord efterfølgende vil blive udført. Derudover roteres kildeordet 13 bit til venstre.

For at give alvorlig modstand mod kryptoangreb bruges de tre outputværdier af E-funktionen (O 1 , O 2 , O 3 ) i de første otte runder og i de sidste otte runder i forskellige rækkefølger. I de første otte runder tilføjer vi O 1 og O 2 til henholdsvis det første og andet målord og XOR O 3 til det tredje målord. I de sidste otte runder tilføjer vi O 1 og O 2 til henholdsvis tredje og andet målord og XOR O 3 til det første målord.

Pseudokode 1. // Lav 16 runder med kryptering med nøglen 2. 3. 4. 5. 6. // første 8 runder fremadkonvertering 7. 8. 9. // derefter 8 runder omvendt transformation 10. 11. 12. 13. // roter array D[ ] 14. 15. E-funktion

E-funktionen tager ét ord med data som input og bruger yderligere to nøgleord, hvilket producerer tre ord som output. I denne funktion bruger vi tre midlertidige variable, betegnet L, M og R (for venstre, midterste og højre).

Indledningsvis satte vi R til værdien af ​​det oprindelige ord, der blev flyttet 13 bit til venstre, og satte M til summen af ​​de oprindelige ord og det første nøgleord. Vi bruger derefter de første ni bit af M som et indeks til en af ​​de 512 S-bokse (som opnås ved at kombinere S 0 og S 1 ved faseblanding), og lagrer i L værdien af ​​den tilsvarende S-boks.

Derefter multiplicerer vi det andet nøgleord med R, og gemmer værdien i R. Så roterer vi R 5 positioner til venstre (så de 5 høje bit bliver de 5 lave bits af R efter rotationen). Derefter XOR R til L, og ser også på de nederste fem bits af R for at bestemme mængden af ​​skift (fra 0 til 31), og roterer M til venstre med denne mængde. Dernæst roterer vi R yderligere 5 positioner til venstre og XOR L ind i L. Til sidst ser vi igen på de 5 mindst signifikante bits af R som mængden af ​​rotation og roterer L med den mængde til venstre. Resultatet af E-funktionen er således 3 ord (i rækkefølge): L, M, R.

Pseudokode 1. // brug 3 midlertidige variable L; M; R 2. //tilføj det første søgeord 3. // gange med det andet nøgleord, som skal være lige 4. 5. // tag S-boks 6. 7. // disse bits beskriver mængden af ​​efterfølgende rotation 8. // første rotation ved variabel 9. 10. 11. 12. // disse bits beskriver mængden af ​​efterfølgende rotation 13. // anden variabel rotation fjorten.

Omvendt blanding

Tilbage shuffle er næsten det samme som fremad shuffle, bortset fra at dataene behandles i omvendt rækkefølge. Det vil sige, at hvis vi kombinerede frem- og tilbageblanding, så deres udgange og indgange ville blive forbundet i omvendt rækkefølge (D[0] fremad og D[3] tilbage, D[1] fremad og D[2] tilbage), så ville ikke se resultatet af blandingen. Som ved direkte blanding bruger vi også her ét kildeord og tre målord. Overvej de første fire bytes af det oprindelige ord: b 0 , b 1 , b 2 , b 3 . Vi vil bruge b 0 , b 2 som et indeks til S-boksen - S 1 , og b 1 b 3 for S 0 . Lad os XOR S 1 [b 0 ] ind i det første målord, trække S 0 [b 3 ] fra det andet ord, trække S 1 [b 2 ] fra det tredje målord og derefter XOR S 0 [b 1 ] også for at det tredje målord . Til sidst roterer vi det oprindelige ord 24 steder til venstre. Til næste runde roterer vi de tilgængelige ord, så det aktuelle første målord bliver det næste kildeord, det aktuelle andet målord bliver det første målord, det aktuelle tredje målord bliver det andet målord og det aktuelle kildeord bliver det tredje målord. Derudover trækker vi før en af ​​de fire "særlige" runder et af målordene fra kildeordet: før fjerde og ottende runde trækker vi det første målord fra; før tredje og syvende runde trækker vi den tredje fra målord fra kildeordet.

Pseudokode 1. // Lav 8 omgange med tilbageblanding 2. 3. // yderligere blandingsoperationer 4. 5. //træk D[3] fra det oprindelige ord 6. 7. // trække D[1] fra det oprindelige ord 8. // henviser til de fire elementer i S-bokse 9. 10. 11. 12. 13. // og drej det oprindelige ord til venstre fjorten. 15. // roter array D[] 16. 17. 18. // Træk nøgleord fra 19.20 .

Dekryptering

Afkodningsprocessen er det omvendte af kodningsprocessen. Dekrypteringskoden ligner (men ikke identisk) med krypteringskoden.

Direkte blanding 1. // Indledende nøgleoverlejring 2. 3. 4. // Derefter laves 8 runder fremadblanding 5. 6. // roter array D[] 7. 8. // og drej det oprindelige ord til højre 9. 10. // adgang til 4 elementer af S-bokse 11. 12. 13. 14. 15. // yderligere blanding 16. 17. // tilføje D[3] til det oprindelige ord 18. 29. // tilføje D[1] til det oprindelige ord tyve. Kryptografisk kerne 1. // Kør 16 runder med overlay-tasten 2. 3. // roter array D[] 4. 5. 6. 7. 8. // sidste 8 runder i direkte rækkefølge 9. 10. 11. // første 8 runder i omvendt rækkefølge 12. 13. 14. 15.


Omvendt blanding 1. // Lav 8 omgange med tilbageblanding 2. 3. // Roter array D[] fire. 5. // yderligere blandingsoperationer 6. 7. // trække D[3] fra det oprindelige ord 8. 9. // trække D[1] fra det oprindelige ord 10. // Drej det oprindelige ord til venstre elleve. 12. // henviser til de fire elementer i S-bokse 13. 14. 15. 16. 17. 18. // trække en undernøgle fra dataene 19.20 .

Funktioner af algoritmen

S-blokke

Ved oprettelse af en S-boks S blev dens elementer genereret af en pseudo-tilfældig generator, hvorefter de blev testet for forskellige lineære og differentielle egenskaber. Pseudo-tilfældige S-bokse blev genereret med følgende parametre:

(hvor  er det j-te ord i SHA-1 output ) Her anses i for at være et 32-bit heltal uden fortegn, og c1, c2, c3 er nogle konstanter. I IBM-implementeringen: c1 = 0xb7e15162; c2 = 0x243f6a88 (som er den binære notation af brøkdelen af ​​hhv .). c3 blev ændret indtil S-bokse med passende egenskaber blev fundet. SHA-1 fungerer på datastrømme og bruger lidt endian.

S-boks egenskaber

Differentielle egenskaber .

  1. S-boks må ikke indeholde ord, der består af alle 0'ere eller 1'ere
  2. Hver anden S-boks S 0 , S 1 skal adskille sig fra hinanden i mindst 3 ud af 4 bytes. (Da denne tilstand er yderst usandsynlig for pseudo-tilfældige S-bokse, er en af ​​de to S-bokse modificeret)
  3. En S-boks indeholder ikke to elementer, sådan at eller
  4. S-boksen indeholder ikke to par af elementer, hvis xor-forskelle er ens, og to par af elementer, hvis ordnede forskel er lig med
  5. Hvert andet element i S-boksen skal afvige med mindst 4 bit
Krav #4 blev ikke opfyldt i IBM-implementeringen til AES, men blev rettet umiddelbart efter finalen. Det er blevet observeret, at følgende elementer er til stede i S-bokse, i modsætning til dette krav [3] :
XOR Subtraktion

Lineære egenskaber

  1. Offset forhold: . Det er nødvendigt, at dette udtryk er større end mindst
  2. One-bit offset: Dette udtryk skal være større end mindst
  3. To-bit offset: . Det er nødvendigt, at dette udtryk er større end mindst
  4. En smule korrelation :. Det er nødvendigt at minimere dette udtryk blandt alle mulige S-bokse, der opfylder de foregående punkter

Nøgleudvidelse

nøgleudvidelsesproceduren udvider det givne array af nøgler k[], bestående af n 32-bit ord (hvor n er et heltal fra 4 til 14) til et array K[] med 40 elementer. Den originale nøgle behøver ikke følge nogen struktur. Derudover garanterer nøgleudvidelsesproceduren følgende egenskaber for nøgleordet, der bruges til multiplikation i den kryptografiske kerne af algoritmen:

  1. de to mindst signifikante bits af søgeordet vil altid være et
  2. ingen af ​​søgeordene vil indeholde ti på hinanden følgende 0'ere eller 1'ere

Lad os beskrive nøgleudvidelsesalgoritmen.

  1. Først er arrayet fuldstændigt omskrevet til et mellemliggende array bestående af 15 elementer.
  2. Denne proces gentages derefter 4 gange. Ved hver iteration genereres 10 udvidede nøgleord. variabel, der viser det aktuelle iterationsnummer. (0 for den første iteration, 1 for den anden osv.)
    1. Arrayet T[] konverteres i henhold til følgende regel:
    2. Dernæst blander vi arrayet ved hjælp af 4 runder af Type 1 Feistel Network. Vi gentager følgende operation fire gange:
    3. Derefter tager vi ti ord fra T[]-arrayet og indsætter dem som de næste ti ord i K[]-arrayet, blander igen:
  3. Til sidst gennemgår vi de seksten ord, der bruges til multiplikation (K[5],K[7]...K[35]) og modificerer dem, så de matcher de to egenskaber beskrevet ovenfor.
    1. Vi skriver de to mindst signifikante bits af K[i] ned efter formlen , og så skriver vi i stedet for disse to bits en, .
    2. Vi samler en maske M for bits w , der hører til sekvenser på ti eller flere nuller eller enere. For eksempel hvis og kun hvis det tilhører en sekvens på 10 eller flere identiske elementer. Derefter nulstiller vi (indstil dem til 0) værdierne for dem M, der er i enden af ​​nul- eller en-sekvenser, såvel som dem, der er i de høje og lave bits. Lad for eksempel vores ord se sådan ud: (udtrykket eller betyder, at 0 eller 1 vil blive gentaget i ordet i gange). Så vil masken M se sådan ud: . Så vi nulstiller bitsene i 4, 15, 16, 28 positioner, dvs
    3. Yderligere, til korrektion, bruger vi en tabel med fire ord B[]. Alle elementer i tabel B er valgt på en sådan måde, at for dem og for alle deres cykliske skift er egenskaben opfyldt, at de ikke har syv på hinanden følgende 0'er eller 1'ere. I IBM-implementeringen blev tabellen brugt . Dernæst bruges de to skrevne bit j til at vælge et ord fra tabel B, og de mindst signifikante fem bits af ordet K[i-1] bruges til at rotere dets elementer,
    4. Til sidst XORedles mønsteret p til det oprindelige ord, idet der tages hensyn til masken M :. Det er værd at bemærke, at de 2 mindst signifikante bits af M er 0, så vil de to mindst signifikante bits af det sidste ord være enere, og ved at bruge tabel B er det muligt at garantere, at der ikke vil være 10 på hinanden følgende 0 eller 1 i ord

Fordele og ulemper ved algoritmen

Chifferen var en AES - kandidat , efter nogle mindre ændringer i løbet af konkurrencens første runde, relateret til en ændring i nøgleudvidelsesproceduren, gik MARS med succes videre til finalen.

I finalen i konkurrencen havde MARS en række mangler:

  1. Kompleks struktur . Algoritmens komplekse heterogene struktur gjorde det svært ikke kun at analysere den, men også at implementere den.
  2. Implementering . Der var problemer ved implementering af chifferen på platforme, der ikke understøttede 32-bit multiplikation og rotationsoperationer med et vilkårligt antal bits.
  3. Begrænsede ressourcer . Manglende evne til at implementere algoritmen i hardware med små ressourcer af operationel eller ikke-flygtig hukommelse .
  4. Beskyttelse . MARS viste sig at være dårligt beskyttet mod angreb på køretid og strømforbrug .
  5. Nøgleudvidelse . MARS var værre end de andre AES-finalister til at støtte nøgleudvidelsen i farten.
  6. Parallellerbarhed . Det er muligt at parallelisere kun en lille del af algoritmen.

For alle disse mangler fremhævede ekspertkommissionen en stor fordel ved denne algoritme - dens symmetri. Baseret på de identificerede mangler blev MARS, som forventet, ikke vinderen af ​​AES.

Svar til AES-analytikere

Efter offentliggørelsen af ​​resultaterne af AES-konkurrencen udgav MARS-holdet deres anmeldelse af hele konkurrencen. Det satte spørgsmålstegn ved kriterierne for at vurdere konkurrencen. De mente, at det vigtigste kendetegn ved chifferen netop skulle være pålideligheden og dens modstand (for eksempel mod brute-force- angreb). Derudover besvarede de alle krav fra juryen til deres algoritme.

1. MARS er ikke egnet til hardwareimplementering Blandt klagerne over chifferen var dens vanskelige hardwareimplementering, hvilket kunne føre til byrden af ​​internettet, samt indførelsen af ​​store, i størrelse ordninger.

Udviklerne hævder, at deres implementering er i stand til at fungere med en hastighed på 1,28 Gbps, hvilket er acceptabelt for internettet, og prisen på deres chips kan være høj ($13 for en 12Gbps-chip eller $1 for en 1Gbps-chip), men i deres prisen vil falde markant i fremtiden.

2. MARS er ikke egnet til implementering på enheder med lav hukommelse Til implementering på SMART-kort har algoritmerne kun 128 bytes hukommelse. Til nøgleudvidelsesproceduren kræver MARS 512 bytes.

Udviklerne mener, at der ikke er nogen grund til at implementere AES på en så sårbar ressource med lav hukommelse som smart cards, da alle disse ressourcer nemt og hurtigt kan konverteres til offentlige nøglesystemer.

3. MARS er ikke egnet til implementering på FPGA MARS er ikke egnet til implementering på platforme, hvor rotation ikke er tilladt (afhængigt af eksterne faktorer).

Udviklerne bemærker, at dette problem ikke er fatalt, men det tager lidt tid at tilpasse algoritmen til denne platform.

4. MARS nøgleudvidelse er en meget tung operation

Udviklerne hævder, at dette er en latterlig udtalelse. De hævder at have det "ideelle" forhold mellem yderligere hukommelse pr. nøgle og gennemløb (25 bytes pr. nøgle)

Som konklusion giver udviklerne deres analyse af AES-deltagernes algoritmer, ifølge resultaterne af hvilke MARS sammen med Serpent var den bedste kandidat til titlen AES. [en]

Algoritmesikkerhedsanalyse

Der er i øjeblikket ingen effektive angreb på denne algoritme. Selvom det har flere svagheder [1] :

  1. Undernøgler med et stort antal gentagne nuller eller enere kan føre til effektive angreb på MARS, da svage undernøgler vil blive genereret baseret på dem.
  2. De to mindst signifikante bit, der bruges i multiplikation, er altid 1. Der er således altid to inputbits, der er uændrede under nøglemultiplikationsprocessen, samt to outputbits, der er uafhængige af nøglen.

Litteratur

  • Panasenko S. P. Krypteringsalgoritmer. Særlig opslagsbog - St. Petersborg. : BHV-SPb , 2009. - S. 65-68, 219-228. — 576 s. — ISBN 978-5-9775-0319-8

Noter

  1. 1 2 3 Kryptografiforskning . Hentet 13. november 2011. Arkiveret fra originalen 16. maj 2006.
  2. Trin 3 og 4 kaldes den "kryptografiske kerne" af MARS-algoritmen
  3. Kryptografiforskning . Hentet 14. november 2011. Arkiveret fra originalen 23. maj 2009.

Links