RC6

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 15 maj 2018; kontroller kräver 5 redigeringar .
RC6

Feistel nätverk av RC6 algoritm
Skapare Ronald Rivest, M. Robshaw, R. Sidney (RSA Laboratories)
Skapad 1998 _
publiceras 1998 _
Nyckelstorlek 128, 192 eller 256 bitar (0 till 2040 bitar)
Block storlek 128 bitar (för 32-bitars plattformar)
Antal omgångar 20 (standard)
Sorts Feistel nätverk

RC6  är en symmetrisk kryptografisk blockalgoritm härledd från RC5- algoritmen . Den skapades av Ron Rivest, Matt Robshaw och Ray Sidney för att uppfylla kraven i tävlingen Advanced Encryption Standard (AES). Algoritmen var en av de fem finalisterna i tävlingen och skickades även in av NESSIE och CRYPTREC . Det är en proprietär (proprietär) algoritm och är patenterad av RSA Security.

AES-varianten av RC6 stöder 128-bitars block och 128, 192 och 256-bitars nycklar, men själva chiffern, liksom RC5, kan konfigureras för att stödja ett bredare utbud av både block- och nyckellängder (från 0 upp till 2040 bitar ) [1] . RC6 är väldigt lik RC5 till sin struktur och är också ganska lätt att implementera.

Det är en AES-finalist, men en av de primitiva operationerna är multiplikationsoperationen, som är långsam på viss hårdvara och gör det svårt att implementera chifferet på ett antal hårdvaruplattformar och vilket visade sig vara en överraskning för författarna , implementeras också ganska dåligt på system med Intel IA-64-arkitekturen. I det här fallet förlorar algoritmen en av sina viktigaste fördelar - hög exekveringshastighet, vilket har blivit en anledning till kritik och ett av hindren för att bli vald som en ny standard. På Pentium II , Pentium Pro , Pentium III , PowerPC och ARM-processorsystem är dock RC6-algoritmen före vinnaren, Rijndael [2] .

Detaljer om RC6

Precis som RC5 är RC6 en helt parametriserad familj av krypteringsalgoritmer. För specifikation av en algoritm med specifika parametrar används beteckningen RC6-w/r/b , där

För att vara AES - kompatibel måste ett blockchiffer hantera 128-bitars block. Eftersom RC5  är ett exceptionellt snabbt blockchiffer , skulle utvidgning av det till att fungera med 128-bitars block resultera i att två 64-bitars arbetsregister används. Men arkitekturen och programmeringsspråken stöder ännu inte 64-bitars operationer, så projektet måste ändras för att använda fyra 32-bitars register istället för två 64-bitars.

Nyckelförlängning

Konstant generation:

Precis som i RC5 genereras i RC6 två pseudo-slumpvariabler med hjälp av två matematiska konstanter: exponenten (e) och det gyllene snittet (f).

,

där  är avrundning till närmaste udda heltal. Med w = 32 bitar (i hexadecimal):

I decimalform:

Nyckelexpansionsprocedur för RC6-w/r/b:

Nyckeltabellen för RC6-chifferet är också identisk med RC5- chiffertabellen . Skillnaden är att fler ord från array L härleds från en användarlevererad nyckel som ska användas under kryptering och dekryptering.

Ingång:

Utgång:

>>>, <<< - cykliska skiftningar till höger respektive vänster.

S [ 0 ] = Pw för i = 1 till 2 r + 3 do S [ i ] = S [ i - 1 ] + Qw A = B = i = j = 0 v = 3 * max { c , 2 r + 4 } för s = 1 till v do { A = S [ i ] = ( S [ i ] + A + B ) <<< 3 B = L [ j ] = ( L [ j ] + A + B ) <<< ( A + B ) i = ( i + 1 ) mod ( 2 r + 4 ) j = ( j + 1 ) mod c }

Kryptering och dekryptering

RC6 arbetar på fyra w-bitars register A, B, C och D som innehåller den ingående klartexten och utgående chiffertext i slutet av krypteringen.

Kryptering/Dekryptering med RC6-w/r/b

Krypteringsprocedur:

Ingång:

  • r antal omgångar
  • w-bit nycklar för varje omgång S[0, … , 2r + 3]

Utgång:

  • chiffertexten lagras i A, B, C och D


B = b + s [ 0 ] D = D + S [ 1 ] för i = 1 till r gör { t = ( B ( 2 B + 1 )) <<< lg w u = ( D ( 2 D + 1 )) <<< lg w A = (( A t ) <<< u ) + S [ 2 i ] C = (( C u ) <<< t ) + S [ 2 i + 1 ] ( A , B , C , D ) = ( B , C , D , A ) } A = A + S [ 2 R + 2 ] C = C + S [ 2 R + 3 ]

Dekrypteringsförfarande:

Ingång:

  • chiffertext lagrad i A, B, C och D
  • r antal omgångar
  • w-bit nycklar för varje omgång S[0, … , 2r + 3]

Utgång:

  • originaltexten lagras i A, B, C och D


C = C - S [ 2 R + 3 ] A = a - s [ 2 r + 2 ] för i = r ladda ner 1 gör { ( A , B , C , D ) = ( D , A , B , C ) u = ( D ( 2 D + 1 )) <<< lg w t = ( B ( 2 B + 1 )) <<< lg w C = (( C - S [ 2 i + 1 ]) >>> t ) u A = (( A - S [ 2 i ]) >>> u ) t } D = D - S [ 1 ] B = b - s [ 0 ]

Säkerhet

Varianten av RC6-algoritmen, som tillkännagavs vid AES , som redan nämnts, stöder block på 128 bitar och nycklar på 128, 192 och 256 bitar, och innehåller också 20 omgångar. Det är RC6-128/20/b, där b=128,192 eller 256 bitar. Inga attacker har hittats mot denna algoritm. Attacker har bara hittats mot förenklade versioner av algoritmen, det vill säga en algoritm med ett minskat antal omgångar.

Man tror att den bästa varianten av en attack på RC6 tillgänglig för en kryptoanalytiker är en brute -force-sökning av krypteringsnyckeln b-byte (eller den utökade nyckelmatrisen S[0,...,43] när användaren tillhandahåller krypteringsnyckeln är särskilt lång). En fullständig uppräkning kräver operationer. Don Coppersmith märkte att på grund av betydande minne och förberäkning är det möjligt att organisera ett möte i mittenattacken för att återställa den utökade nyckelmatrisen S [0,...,43]. Detta skulle kräva beräkningar och det krävda antalet operationer var således .

Mer avancerade attacker som differentiell och linjär kryptoanalys , som är möjliga på lågrunda versioner av chifferet, är svåra att attackera på hela RC6-chifferet med 20 omgångar. Svårigheten är att det är svårt att hitta bra repetitiva egenskaper eller linjära approximationer med vilka en attack skulle kunna utföras.

Ett intressant problem är att sätta upp lämpliga säkerhetsmål mot dessa mer avancerade attacker. För att lyckas kräver dessa attacker vanligtvis en stor mängd data, och att erhålla block av kända eller valda chiffertext/klartext-par är en annan uppgift än att försöka returnera en möjlig nyckel. Det är värt att notera att med ett chiffer som körs med en terabit per sekund (d.v.s. krypterar data med bitar per sekund), är tiden som krävs för 50 datorer som arbetar parallellt för att kryptera datablock över ett år; kryptera datablock - mer än 98 000 år gamla; och kryptera datablock är mer än år.

Även om datakraven för block för en framgångsrik attack kunde anses tillräckliga rent praktiskt, strävade utvecklarna efter att ge en mycket högre säkerhetsnivå.

RC5- forskning har inte visat några svagheter i nyckelkonfigurationen. Detta resulterade i att samma nyckelinstallationsprocess användes i RC6. Processen att konvertera en nyckel som tillhandahålls av användaren till en nyckelkarta verkar vara väl modellerad av en pseudo-slumpmässig process. Så även om det inte finns några bevis för att inga två nycklar resulterar i samma nyckeltabell, verkar detta vara mycket osannolikt. Detta kan uppskattas som sannolikheten att det finns två 256-bitars nycklar som resulterar i samma tabell med 44, 32-bitars nycklar är ungefär .

Vi kan sammanfatta våra krav på RC6-säkerhet enligt följande:

- Den bästa attacken mot RC6 är brute-force på en användarförsedd krypteringsnyckel.

- Datakrav för att organisera mer komplexa attacker på RC6, såsom differentiell och linjär kryptoanalys, överstiger tillgänglig data.

Ett viktigt kriterium för säkerhetsmarginalen är det maximala antalet omgångar där en attack är möjlig. Detta är möjligt för 12-, 14- och 15-runda varianter av RC6.

Chiffer Antal omgångar (b) Attack typ Text Baytes av minne Operationer
RC6-128/20/B 12 Statistiska skillnader
fjorton Statistiska skillnader
15 (256) Statistiska skillnader

Den fjärde kolumnen "Text" innehåller information om antalet okrypterade block och motsvarande chiffertextblock med den givna nyckeln. Den femte kolumnen "Minnesbytes" innehåller det maximala antalet minnesbytes som behövs vid en godtycklig punkt i attacken. Den sjätte kolumnen "Operationer" anger det förväntade antalet operationer som måste utföras för att utföra attacken.

Hårdvaruutvärdering

För de flesta applikationer är förmodligen det bästa valet att bädda in RC6 i mjukvara. De primitiva RC6-operationerna (addition, subtraktion, multiplikation, XOR, offset) stöds mycket väl av moderna mikroprocessorer och därför är det fördelaktigt att ta hänsyn till detta när man utvecklar dessa processorer.

Men i vissa fall är det användbart att ha RC6 som en inbyggd krets. Då skulle det vara möjligt att uppnå maximal hastighet eller kombinera andra funktioner kring RC6. Eftersom RC6 använder de primitiva operationerna som beskrivs ovan, är det möjligt att dra fördel av befintlig validering när man designar kretsmoduler för att implementera dessa primitiva operationer. Till exempel, om RC6 implementeras med gate array-baserade teknologier, kommer det inte att ge de önskade fördelarna på grund av den enorma ansträngning som skulle behöva läggas på att designa multiplikatorkretsen. Implementeringen baserad på denna teknik är betydligt sämre än implementeringen baserad på processorn. Men detta är inte en typisk situation och man kan enkelt designa en multiplikationskrets som ska användas som en undermodul.

Med 20 rundor per block är krypteringstiden cirka 100 nanosekunder per block, vilket ger en uppskattad datahastighet på cirka 1,3 Gbps.

Utförande

Som följer av beskrivningen av algoritmen är RC6 mycket kompakt. Faktum är att implementeringen av RC6-algoritmen i Assembler för Intel Pentium Pro-mikroprocessorn kan göras på mindre än 256 byte kod för var och en av uppgifterna:

  1. nyckelinstallation,
  2. krypteringsblock,
  3. dekrypteringsblock.

Till skillnad från många andra krypteringsalgoritmer använder RC6 inte uppslagstabeller under kryptering. Detta innebär att RC6-kod och data kan passa i modernt cacheminne och därmed spara minnesutrymme.

Med tanke på att RC6 är helt parametriserbar och att den kan implementeras effektivt och kompakt, verkar chifferen särskilt mångsidig.

Flexibilitet och utvecklingsanvisningar

Som vi redan har noterat ger RC6 användaren stor flexibilitet när det gäller storleken på krypteringsnyckeln, antalet rundor och ordstorleken på huvuddatormodulen.

Medan RC6 som lämnats in för övervägande vid AES är baserad på användningen av 32-bitars ord (blockstorlek 128 bitar), måste framtida efterfrågan på marknaden utöka RC6 till andra blockstorlekar. Av största vikt är 256-bitars blockstorlekar, som skulle utnyttja 64-bitars ordstorlek och prestanda som erbjuds av nästa generations systemarkitektur. Observera också att RC6-strukturen tillåter att en viss grad av parallellitet utnyttjas i dekrypterings- och krypteringsrutinerna. Till exempel kan beräkningen av t och u i varje omgång beräknas parallellt, liksom uppdateringarna av A och C. När processorer utvecklas mot mer intern parallellism (till exempel rör sig mot en superskalär arkitektur), bör RC6-implementationer visa sig bättre prestanda.

Licensiering

Eftersom RC6 inte valdes som AES finns det ingen garanti för att användningen är gratis. Från och med januari 2007 innehåller webbsidan på den officiella webbplatsen för RSA Laboratories, utvecklaren av RC6, följande:

"Vi betonar att om RC6 väljs för AES kommer RSA Security inte att kräva några licenser eller royaltybetalningar för produkter som använder algoritmen."

Det markerade ordet "om" betyder att RSA Security Inc. kan nu kräva licenser och upphovsrättsbetalningar för alla produkter som använder RC6-algoritmen. RC6 är en egenutvecklad krypteringsalgoritm ( US Patent 5 724 428 och US Patent 5 835 600 ).

Källor

Anteckningar

  1. RC6-32/20/64 källtexter med en 512 bitars nyckel på C-språk  (otillgänglig länk)
  2. Jämförelse av RC6- och AES-algoritmer  (otillgänglig länk)

Externa länkar