ENRUPT

ENRUPT
Skapare Sean O'Neil _  _
Skapad 2007 _
publiceras 2008 _
Nyckelstorlek min. 32 bitar i steg om 32 bitar
Block storlek min. 64 bitar i steg om 32 bitar
Antal omgångar 8×(xw/32) + 4×(kw/32)
Sorts Obalanserat modifierat Feistel-nätverk [1]

EnRUPT  är en symmetrisk blockkrypteringsalgoritm och kryptoprimitiv i kryptografi utvecklad av Sean O'Neil . 

En egenskap hos algoritmen är dess extrema flexibilitet. Faktum är att algoritmen är en kryptoprimitiv som låter dig implementera ett blockchiffer med en godtycklig blockstorlek - från 64 bitar och en nyckellängd från 32 bitar . I det här fallet kommer antalet omgångar att vara lika med 4 × (2 × xw + kw), där xw är blockstorleken i ord, kw är nyckellängden i ord. Ordstorleken kan vara 32 eller 64 bitar . Med ett ord på 32 bitar är antalet rundor 8 × (xb / 32) + 4 × (kb / 32), där xb är blockstorleken i bitar, kb är nyckellängden i bitar. För ett chiffer med ett 128-bitars block och en 512-bitars nyckel används 96 rundor och med en 256-bitars nyckel 64 rundor.

Användningsomfång

Eftersom EnRUPT är en de facto krypto-primitiv kan den användas som ett snabbt symmetriskt blockchiffer , strömchiffer (irreversibel EnRUPT, irRUPT), hashfunktion (mdRUPT), MAC, RNG , PRNG .

Implementeringsexempel

Liksom TEA -algoritmen är EnRUPT mycket lätt att implementera. I själva verket är chifferet en förenklad, förstärkt och accelererad version av XXTEA- algoritmen . Nedan är ett enkelt och flexibelt exempel på implementeringen av algoritmen i 32-bitars blockchifferläge.

#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 ); för ( r = 1 ; r <= n ; r ++ ) x [ r % xw ] ^= er1 ( nyckel [ r % kw ]); } unRUPT ( u32 * x , const u32 xw , u32 * key , const u32 kw ) { u32 r , s = 4 , n = s * ( 2 * xw + kw ); för ( r = n ; r ; r -- ) x [ r % xw ] ^= er1 ( nyckel [ r % kw ]); }

Där x är ett block med 32-bitars osignerade nummer, nyckel är nyckeln, xw är meddelandelängden, kw är nyckellängden.

Säkerhet

Det finns en attack på 32-bitarsversionen av EnRUPT-blockchifferet, förutsatt att kryptoanalytikern har möjlighet att modifiera nyckeln och få ett stort antal klartext- och chiffertextpar, för en 256-bitars nyckel och ett 128-bitars block , behövs ca 2 64 utvalda texter. Denna attack är även tillämplig på XXTEA- chifferet . [2] [3]

I SHA-3- tävlingen fastställdes en hashfunktion baserad på EnRUPT-algoritmen ha kollisioner för alla sju deklarerade säkerhetsparametrarna. Komplexiteten i att hitta en kollision varierade från 236 till 240 operationer för olika varianter av algoritmen, vilket gjorde det möjligt att demonstrera [4] en praktisk kollision för EnRUPT-256-varianten.

Enligt författarna till EnRUPT-algoritmen utfördes en framgångsrik attack ( eng.  linearization attack ) inte på hashfunktionen som helhet och inte på dess struktur, utan bara på den deklarerade varianten med en specifik parameter s = 4. Ökar parametern s till 8 bör leda till ökad spridning och säkerställa en högre säkerhetsnivå genom att halvera beräkningshastigheten för funktionen. Oberoende studier av denna version av algoritmen har dock inte utförts.

Inom ramen för samma SHA-3- tävling publicerades arbete [5] som visar på möjligheten att hitta en prototyp för EnRUPT-512-varianten. Denna attack kräver cirka 2480 operationer, vilket bara är något bättre än 2512 för en fullständig sökning, men visar fortfarande en svaghet i algoritmens struktur.

Anteckningar

  1. EnRUPT: Första allt-i-ett symmetrisk kryptografisk primitiv Arkiverad 14 juli 2010 på Wayback Machine .
  2. Avbryt relaterad nyckelattack (otillgänglig länk) . Tillträdesdatum: 21 januari 2009. Arkiverad från originalet 29 januari 2009. 
  3. EnRUPT relaterad nyckelattack  (nedlänk)
  4. Praktiska kollisioner för EnRUPT . Hämtad 22 december 2009. Arkiverad från originalet 5 mars 2016.
  5. Kryptoanalys av EnRUPT . Hämtad 22 december 2009. Arkiverad från originalet 11 december 2010.

Länkar

  1. Referera till EnRUPT-källkoden
  2. EnRUPT-algoritmens källkod portad till Delphi