Blowfish

Blowfish sammendrag
Designer (r) Bruce schneier
Første publikasjon 1993
Avledet fra Nei
Kryptering (er) basert på denne algoritmen Twofish
Kjennetegn
Blokkstørrelse (r) 64 bits
Nøkkel lengde (r) 32 til 448 bits (med 8 bits)
Struktur Feistel- ordningen
Antall svinger 16 runder

Bedre kryptanalyse

Firetårnsangrep (Rijmen, 1997). Statistisk sårbarhet med svake nøkler demonstrert av Serge Vaudenay over 14 runder i 1996.

Blowfish er en algoritme for kryptering symmetrisk (det vil si "hemmelig nøkkel") blokk designet av Bruce Schneier i 1993 .

Blowfish bruker en 64- biters blokkstørrelse, og tasten med variabel lengde kan variere fra 32 til 448 bits. Det er basert på ideen om at god sikkerhet mot kryptanalyseangrep kan oppnås ved å bruke veldig store pseudo-tilfeldige nøkler.

Blowfish viser god utførelseshastighet, bortsett fra når du bytter nøkkel, den er omtrent 5 ganger raskere enn Triple DES og dobbelt så rask som IDEA . Til tross for alderen forblir den fortsatt kryptografisk sterk med relativt få effektive angrep på versjoner med færre svinger. Fullversjonen med 16 runder er så langt fullt pålitelig og uttømmende forskning er fortsatt den eneste måten å angripe den på.

Den ble plassert i det offentlige området av skaperen; den er ikke beskyttet av noe patent, og bruken er ikke lisenspliktig. Dette forklarer delvis suksessen, fordi det var en av de første krypteringsalgoritmene som ble brukt fritt. Den brukes i mange proprietær og gratis programvare (inkludert GnuPG og OpenSSH ).

Algoritme

Blowfish bruker en 64- biters blokkstørrelse, og nøkkelen , som kan variere i lengde , kan variere fra 32 til 448 bits. Blowfish er basert på en Feistel-ordning med 16 runder og bruker store skiftenøkkelavhengige S-bokser . Det ser ut som CAST-128 som har tatt i bruk S-Boxes med innhold som er løst på forhånd.

Diagrammet til venstre viser hovedstrukturen til Blowfish. Hver rad representerer 32 biter. Algoritmen styrer to sett med nøkler: de 18 oppføringene i matrisen P og de fire S-boksene på 256 elementer hver. S-bokser godtar et 8-biters ord som inndata og produserer 32-bits utdata. En oppføring fra tabell P brukes i hver runde. Kom på den siste runden, halvparten av datablokken utsettes for en XOR med ett av de to gjenværende elementer i matrisen P .

Det andre diagrammet viser Blowfishs F-funksjon . Den skiller en 32-biters inngang i fire 8-biters biter og bruker dem som innganger for å få tilgang til S-Boxes. Utgangene summeres med en modulo 2 32- sum og algoritmen utfører en XOR mellom de to delsummene for å produsere den endelige 32-biters utgangen. Som en Feistel-ordning kan Blowfish reverseres ganske enkelt ved å bruke en XOR av elementene 17 og 18 i matrisen P på krypteringsblokken. Oppføringene i tabell P må da brukes i omvendt rekkefølge.

Forberedelsen av strukturen fra nøkkelen begynner med initialiseringen av matrisen P og S-boksene med verdier som er hentet fra tallet Pi uttrykt i heksadesimal . En XOR utføres deretter mellom den hemmelige nøkkelen og oppføringene i tabellen P for å oppnå de nye oppføringene i tabellen P (med en syklisk forlengelse av nøkkelen om nødvendig). En 64-biters blokk, helt null, blir deretter kryptert med denne midlertidige versjonen av Blowfish. Det krypterte resultat erstatter da den første og andre element i gruppen P . Vi gjentar krypteringsoperasjonen med denne nye versjonen og dette på forrige resultat. Man oppnår da den tredje og fjerde element av P . Algoritmen fortsetter på denne måten ved å erstatte alle matrisen P og elementene i S-Boxene. Til slutt må 72 byte med data genereres for matrise P , og 1 024 byte data per S-Box, for totalt 4 168 byte, og Blowfish gjør 521 iterasjoner for å oppnå dette.

På grunn av disse begrensningene er Blowfish treg når det er nødvendig å bytte nøkkel, men veldig raskt for kryptering tatt separat.

Siden initialiseringsprinsippet består av å utføre en XOR mellom den 576-biters lange P- matrisen og nøkkelbitene syklisk utvidet til 576 bits, tillater mange implementeringer at nøkler opp til 576 bits i størrelse kan brukes til å øke sikkerheten. Selv om det er ganske mulig, har grensen på 448 bits blitt satt slik at hver bit av hver verdi av tabellen P og S-bokser avhenger av alle bitene i nøkkelen, de siste fire verdiene av tabellen P n 'påvirker ikke alle biter av krypteringsblokken.

Dette punktet bør tas i betraktning når man bestemmer maksimal nøkkelengde på en algoritmeimplementering av et annet antall svinger, fordi selv om utvidelsen av nøkkelstørrelsen (uavhengig av en utvidelse av antall svinger) gir bedre sikkerhet i ansiktet av et uttømmende søk, påvirker det sikkerheten som algoritmen garanterer. Fordi bortsett fra de åpenbare fordelene med økt nøkkelstørrelse, har ingen studier hittil studert innvirkningen på sikkerheten av manglende overholdelse av denne regelen, noe som fører mange programvareleverandører til respekten. Faktisk, gitt den lange og komplekse initialiseringen av Blowfish med hver nøkkelendring, er den utstyrt med en naturlig beskyttelse mot uttømmende søk fordi beregningstiden økes kraftig. For øyeblikket rettferdiggjør således ikke den oppnådde forsterkningen bruken av en nøkkel med større størrelse enn 448 bits, som allerede er langt utenfor beregningskapasiteten ved uttømmende søk, så vel som mange algoritmer som er ansett som sikre.

Kryptanalyse

I 1996 viste Serge Vaudenay at permutasjoner i Blowfish skilte seg betydelig fra helt tilfeldige permutasjoner over 14 svinger. Angrepet han smidde krever 2 8 r + 1 kjent klar tekst, med r antall svinger. Han fremhevet også såkalte svake taster , som genererer S-bokser med kollisjoner . Disse tastene kan påvises og brytes med det samme angrepet i bare 2 4 r + 1 kjente klare tekster. Angrepet kan ikke utvides til hele Blowfish med sine 16 svinger. Vincent Rijmen publiserte et angrep i fire omganger i 1997 , det er basert på andregrads differensial kryptanalyse. Det uttømmende søket er den eneste løsningen for å overvinne en komplett Blowfish til dags dato.

Eksempler

I GNU Privacy Guard implementeres Blowfish og Twofish, og de kan aktiveres. En annen Windows-programvare (Open Source) med Blowfish og Twofish er Blowfish Advanced CS.

Merknader og referanser

  1. (in) B. Schneier, "  Beskrivelse av en ny nøkkel med variabel lengde, 64-biters blokkering (Blowfish)  " ,Desember 1993(åpnet 4. oktober 2015 ) .
  2. (i) S. Vaudenay, på den svake nøkler Blowfish  " ,1996(åpnet 4. oktober 2015 ) .
  3. (in) Blowfish Advanced CS (Commercial Edition)  " (versjon 19. februar 2013 på Internet Archive ) .
  4. (de) Blowfish Advanced CS  " ( Internet Archive versjon 24. april 2013 ) [PDF] .

Eksterne linker