ENRUPT

ENRUPT
Skaber Sean O'Neil _  _
Oprettet 2007 _
offentliggjort 2008 _
Nøglestørrelse min. 32 bit i intervaller på 32 bit
Blokstørrelse min. 64 bit i intervaller på 32 bit
Antal runder 8×(xw/32) + 4×(kw/32)
Type Ubalanceret modificeret Feistel-netværk [1]

EnRUPT  er en symmetrisk blokkryptoalgoritme og kryptoprimitiv i kryptografi udviklet af Sean O'Neil . 

Et kendetegn ved algoritmen er dens ekstreme fleksibilitet. Faktisk er algoritmen en kryptoprimitiv , der giver dig mulighed for at implementere en blokchiffer med en vilkårlig blokstørrelse - fra 64 bit og en nøglelængde fra 32 bit . I dette tilfælde vil antallet af runder være lig med 4 × (2 × xw + kw), hvor xw er blokstørrelsen i ord, kw er nøglelængden i ord. Ordstørrelsen kan være 32 eller 64 bit . Med et ord på 32 bit er antallet af runder 8 × (xb / 32) + 4 × (kb / 32), hvor xb er blokstørrelsen i bit, kb er nøglelængden i bit. For en chiffer med en 128-bit blok og en 512-bit nøgle bruges 96 runder og med en 256 bit nøgle 64 runder.

Anvendelsesområde

Da EnRUPT er en de facto krypto-primitiv, kan den bruges som en hurtig symmetrisk blokchiffer , stream cipher (irreversibel EnRUPT, irRUPT), hash-funktion (mdRUPT), MAC, RNG , PRNG .

Implementeringseksempel

Ligesom TEA -algoritmen er EnRUPT meget let at implementere. Faktisk er chifferen en forenklet, styrket og accelereret version af XXTEA- algoritmen . Nedenfor er et enkelt og fleksibelt eksempel på implementeringen af ​​algoritmen i 32-bit blokchiffertilstand.

#define er1(k) (rotr(2*x[(r-1)%xw]^x[(r+1)%xw]^k^r,8)*9^k) enRUPT ( u32 * x , const u32 xw , u32 * key , const u32 kw ) { u32 r , s = 4 , n = s * ( 2 * xw + kw ); for ( r = 1 ; r <= n ; r ++ ) x [ r % xw ] ^= er1 ( tast [ r % kw ]); } unRUPT ( u32 * x , const u32 xw , u32 * key , const u32 kw ) { u32 r , s = 4 , n = s * ( 2 * xw + kw ); for ( r = n ; r ; r -- ) x [ r % xw ] ^= er1 ( tast [ r % kw ]); }

Hvor x er en blok af 32-bit usignerede tal, nøgle er nøglen, xw er meddelelseslængden, kw er nøglelængden.

Sikkerhed

Der er et angreb på 32-bit-versionen af ​​EnRUPT-blokchifferet, forudsat at kryptoanalytikeren har mulighed for at ændre nøglen og opnå et stort antal almindeligtekst- og chiffertekstpar, for en 256-bit nøgle og en 128-bit blok , er der brug for omkring 2 64 udvalgte tekster. Dette angreb gælder også for XXTEA -krypteringen . [2] [3]

I SHA-3- konkurrencen blev en hash-funktion baseret på EnRUPT-algoritmen bestemt til at have kollisioner for alle syv deklarerede sikkerhedsparametre. Kompleksiteten ved at finde en kollision varierede fra 236 til 240 operationer for forskellige varianter af algoritmen, hvilket gjorde det muligt at demonstrere [4] en praktisk kollision for EnRUPT-256 varianten.

Ifølge forfatterne af EnRUPT-algoritmen blev et vellykket angreb ( eng.  linearization attack ) ikke udført på hashfunktionen som helhed og ikke på dens struktur, men kun på den deklarerede variant med en specifik parameter s = 4. Stigende parameteren s til 8 skal føre til øget diffusion og sikre et højere sikkerhedsniveau ved at reducere hastigheden for beregning af funktionen til det halve. Der er dog ikke udført uafhængige undersøgelser af denne version af algoritmen.

Inden for rammerne af den samme SHA-3 konkurrence blev der udgivet arbejde [5] , som viser muligheden for at finde en prototype til EnRUPT-512 varianten. Dette angreb kræver omkring 2480 operationer, hvilket kun er lidt bedre end 2512 for en komplet søgning, men viser stadig en svaghed i strukturen af ​​algoritmen.

Noter

  1. EnRUPT: Første alt-i-én symmetrisk kryptografisk primitiv Arkiveret 14. juli 2010 på Wayback Machine .
  2. Enrupt relateret nøgleangreb (utilgængeligt link) . Dato for adgang: 21. januar 2009. Arkiveret fra originalen 29. januar 2009. 
  3. EnRUPT relateret nøgleangreb  (downlink)
  4. Praktiske kollisioner for EnRUPT . Hentet 22. december 2009. Arkiveret fra originalen 5. marts 2016.
  5. Kryptoanalyse af EnRUPT . Hentet 22. december 2009. Arkiveret fra originalen 11. december 2010.

Links

  1. Reference EnRUPT kildekode
  2. EnRUPT-algoritmens kildekode porteret til Delphi