Locked History Actions

RC4

Žodis angliškai:

Ron`s Code arba Riverst Cipher

Santrumpa:

RC4

Žodis lietuviškai:

Rono Kodas 4 arba Riversto Šifras 4

Apibrėžimas:

  • RC4 – srautinis simetrinis algoritmas dar vadinamas ARC4 arba ARCFOUR. RC4 algoritmas yra pagrįstas OFB(Output feedback ) ir yra labai greitas. Jo saugumas nežinomas, bet nulaužimas visgi neatrodo paprastas. Dėl greičio jis gali būti naudojamas atitinkamuose taikymuose. Jis taip pat gali priimti įvairaus ilgio raktus, rakto dydis galimas nuo 40 bitų iki 256. Galimas būsenos dydis yra 2064, tačiau tik 1684 bitai yra efektyvūs. RC4 iš esmės yra pseudo atsitiktinių skaičių generatorius (PRGA), kurio rezultatas yra XOR`inamas su koduojamais duomenimis. Dėl to labai svarbu, kad tas pats RC4 raktas nebūtų naudojamas dviem skirtingiem duomenų srautams užkoduoti.

Kaip jau minėjau RC4 generuoja pseudo atsitiktinius srautinius bitus. Generuojant srautinį ranktą, šifras naudoja slaptas vidines būsenas, kurios susideda iš 2 dalių: 1. Visų 256 bitų kombinacija (S), 2. Du 8 bitų indeksų rodykles (i ir j).

Kombinacija pradedama su kintamo ilgio raktu, kuris kaip jau minėjau, gali būti nuo 40 bitų iki 256, naudojamas rakto planavimo algoritmas (key-scheduling algorithm - KSA). Kuomet algoritmo veikimas baigiasi, srautiniai bitai yra generuojami pseudo atsitiktiniu generacijos algoritmu (pseudo-random generation algorithm - PRGA).

Rakto planavimo algoritmas

  • Rakto planavimo algoritmas naudojamas su “S” masyvu pradėti inicializacijos kombinaciją. Rakto ilgis turi įeiti į 1 ir 256 diapazoną, dažniausiai prie 5 – 16 rakto ilgis būna 40 – 128 bitai. Žemiau pateiktas algoritmo kodas po kurio pradedamas vykdyti PRGA algoritmas.

KSA algoritmas

  • for (i=0; i<=255; i++) { S[i]=i; K[i]=key[i mod N]; } j = 0;

for (i=0; i<=255; i++) { j=(j+S[i]+K[i]) mod 256; swap(S[i],S[j]); } i = j = 0;

  • N – rakto ilgis, swap – elementų apkeitimas vietomis.

Pseudo atsitiktinis generacijos algoritmas

  • Naudojantis šiuo algoritmu galutinai yra užkoduojami reikiami duomenys. Paaiškinsiu patį algoritmo veikimą, kuris pateiktas 3 pav. Pradžioje i padidiname vienetu ir randame jo liekana nuo 256, tą pati padarome ir su j reikšmę, tačiau ten vietoj vieneto įdedame S[i] reikšmę. Gavę i ir j, jų masyvo elementų narius sukeičiame vietomis ir randame jų abiejų sumos liekaną nuo 256. Ją gavę, iš S masyvo išimame liekanos narį ir priskiriame K[k] masyvui. Žemiau pateiksiu formules.

PRG algoritmas: i=j=0; for(k=0; k<msglength; k++) {

  • i=(i+1) mod 256; j=(j+S[i]) mod 256;
    • swap(S[i],S[j]); K[k]=S[(S[i]+S[j]) mod 256];
    • }

rc4.png 3 pav. PRGA veikimas

Pateiksiu RC4 šifravimo algoritmo pavyzdį (jau užkoduotą tekstą).

Raktas = Key Rakto srautas = EB9F7781B734CA72A719… Tekstas = Plaintext Užkoduotas tekstas = BBF316E8D940AF0AD3