Locked History Actions

RC2

Žodis angliškai:

Ron`s Code arba Riverst Cipher

Santrumpa:

RC2

Žodis lietuviškai:

Rono Kodas 2 arba Riversto Šifras

Apibrėžimas:

  • RC2 - blokinis simetrinis algoritmas, sukurtas Ron Rivest 1987 m. Raidės RC (Ron`s Code arba Riverst Cipher) reiškia „Rono kodas“ arba „Rivesto šifras“. RC2 kūrimą rėmė kompanija Lotus Software. RC2 turi kintamo dydžio raktą, nuo 8 iki 128 bitų, 8 bitų žingsnis, pradinė vertė 64 bitai, o blokų ilgis yra 64 bitai. RC2 buvo sukurtas pakeisti DES algoritmą. Pasak kompanijos, RC2 įgyvendinimas programinėje įrangoje yra tris kart greitesnis už DES. Iki 1996 metų algoritmo detalės buvo laikomos paslaptyje, įmonės RSA nuosavybe, tačiau 1996 metais, anoniminis asmuo Usenet forume patalpino pirminį programos kodą.
    • Į algoritmo aprašymą yra įtraukti 3 skirtingi algoritmai, tai:

1. Rakto išplėtimas. Paima įvedama teksta ir jį išskaido į 64 žodžius, kurie sudaro išplėstą raktą nuo K[0] iki K[63]. 2. Šifravimas. Paima 64 bitų įvedamą tekstą ir ji patalpina žodžiuose nuo R[0] iki R[3] ir jį užšifruoja. 3. Iššifravimas. Vykdomas atvirkščiai nei šifravimas.

Rakto išplėtimas

  • Dirbant su 8 bitų baitų operacijomis, taip pat dirbant su 16 bitų žodžių operacijomis, yra naudojamas 2 alternatyvos pagrindiniam buferiui. Žodžių operacijoms naudosime buferį su K[0], ..., K[63] masyvą, kurio kiekvienas narys K[i] yra 16 bitų žodis, o bitų operacijoms naudosime buferį L[0], ..., L[127], ir kiekvienas masyvo narys L[i] bus 8 bitų. Rakto išplėtimo algoritmas apskaičiuoja efektyvujį rakto ilgį baituose T8 ir kaukę TM pagrįsta rakto ilgio T1 bituose. Norint apskaičiuoti kiekvieną iš šių parametrų naudojamos funkcijos:

T8 = (T1 + 7) / 8; TM = 255 mod 2^(8 + T1 – 8*T8);

Pateiksime pavyzdį, tarkim efektyvus rakto ilgis T1 yra 64 bitai, tuomet T8 bus lygus 8, nes (T1 + 7)/8 = (64+7)/8= 8 (/ apskaičiuoja sveikąją dalį). TM bus lygus 0xFF, nes 255 mod 2(8 + T1 – 8*T8) = 255 mod 2(8+64-8*8) = 255 mod 2^8 = 255 mod 256 = 255 = 0xFF. Gauname 256 narių masyvą, kuri pavadinkime PITABLE[i]. Rakto išlėtimas toliau apdorojamas 2 ciklais ir tarpiniu žingsniu.

for (i=0; i<128; i++) { L[i] = PITABLE[L[i-1] + L[i-T]}; } L[128-T8] = PITABLE[L[128-T8] & TM]; for (i=127-T8; i<=0; i--) { L[i] = PITABLE[L[i+1] xor L[i+T8]]; }

rc21.png 1 pav. PITABLE masyvas

Šifravimas

  • Šiame algoritme naudojamos „mix“ ir „mash“ operacijos. 2 pav pateikta miksavimo ciklas. Šio ciklo veikimas yra labai paprastas. Pirmiausia prie R[i] yra pridedamas K[j], toliau seka R[i-2] su R[i-3] loginis AND ir inversija R[i-2] su R[i-1], sudedame abi gautas reikšmes ir prie jų dar pridedame R[i] K[j] suma ir daromas postūmis į dešinę per s[i]. Žemiau pateiksiu formules, kurios tai aprašo:

Šifravimo algoritmas: R[i] = R[i] + K[j] + (R[i-1] & R[i-2]) + ((~R[i-1]) & R[i-3]); j = j + 1; R[i] = R[i] rol s[i];

rc22.png 2 pav. Miksavimo ciklas

Visas aukščiau aprašytas šifravimo operacijas galima apibūdinti taip: 1. Inicijuoti žodžius R[0], ..., R[3] taip, kad būtų sudaryti blokai iš 64 bitų teksto. 2. Išplėsti raktą, kad žodžiai K[0], ..., K[63] butu aiškūs. 3. Nustatyti j = 0. 4. Atliekami 5 ciklai „mix“ operacijos. 5. Atliekamas 1 ciklas „mash“ operacijos. 6. Atliekami 6 ciklai „mix“ operacijos. 7. Atliekamas 1 ciklas „mash“ operacijos. 8. Atliekami 5 ciklai „mix“ operacijos. 9. Užšifruojamas tekstas R[0], ..., R[3].

Iššifravimas

  • Šiame algoritme viskas vyksta atvirkščiai nei šifravimo algoritme, iš esmės galime pasakyti, jog viskas vyksta iš kito galo. Norint suprasti jo veikimą, reikia į 2 pav. žiurėti iš apačios į viršų ir naudotis šiomis formulėmis:

Iššifravimo algoritmas: R[i] = R[i] ror s[i]; R[i] = R[i] - K[j] - (R[i-1] & R[i-2]) - ((~R[i-1]) & R[i-3]); j = j - 1;

  • Truputi aprašysiu formules, kad būtų aiškiau. R[i] rotacija į dešinę per s[i] bitus. Toliau vykdomas kiekvieno komponento atėmimas ir galiausiai vienetu sumažinamas j. Kaip ir šifravimas, taip ir iššifravimas turi savo operacijas, kurias pateiksiu žemiau:

1. Inicijuoti žodžius R[0], ..., R[3] taip, kad būtų sudaryti blokai iš 64 bitų teksto. 2. Išplėsti raktą, kad žodžiai K[0], ..., K[63] butu aiškūs (išskaidyti). 3. Nustatyti j = 63. 4. Atliekami 5 ciklai „reverse mix“ operacijos. 5. Atliekamas 1 ciklas „reverse mash“ operacijos. 6. Atliekami 6 ciklai „reverse mix“ operacijos. 7. Atliekamas 1 ciklas „reverse mash“ operacijos. 8. Atliekami 5 ciklai „reverse mix“ operacijos.

Pateiksiu keletą RC2 šifravimo algoritmo pavyzdžių (jau užkoduotų tekstų).

Rakto ilgis (baitais) = 8 Efektyvus rakto ilgis (bitais) = 63 Raktas = 00000000 00000000 Tekstas = 00000000 00000000 Užkoduotas tekstas = ebb773f9 93278eff

Rakto ilgis (baitais) = 7 Efektyvus rakto ilgis (bitais) = 64 Raktas = 88bca90e 90875a Tekstas = 00000000 00000000 Užkoduotas tekstas = 6ccf4308 974c267f