szyfr blokowy rc6

4
Szyfr blokowy RC6 Adam Siemion Wstęp Szyfr Rc6 jest szyfrem blokowym z kluczem symetrycznym. Został zaproponowany jako kandydat do konkursu AES. Został stworzony w 1998 roku, jako ewolucja szyfru RC5. Wykorzystuje 16 bajtowe bloki oraz klucze 16, 24 lub 32 bajtowe. Opis programu Moja implementacja została napisana w języku Java. Oprócz samej implementacji szyfru zawiera graficzne narzędzie, które umożliwia wybór pliku, który będzie szyfrowany bądź deszyfrowany oraz podanie klucza użytkownika jako ciągu znaków. Opis klas Projekt składa się z następujących klas: * Rc6 - implementacja szyfru (zgodną ze specyfikacją) * Rc6Fs - operacje służące dostępu do systemu plików, takie jak czytanie i zapis do pliku * Rc6Helper - zawiera metody do szyfrowania i deszyfrowania, które automatycznie dzielą przekazane dane na 16 bajtowe bloki * Rc6Tool - implementacja graficznego interfejsu użytkownika Szczegółowy opis implementacji Szyfracja 1. Z klasy Rc6Tool (zawierającej implementację GUI) wywoływana jest metoda encrypyFile()/decryptFile() z klasy Rc6Fs, jako argumenty przekazywane są ścieżka do pliku oraz klucz użytkownika. 2. Ponieważ klucz użytkownika musi mieć 16 lub 24 lub 32 bajty konieczne jest dostosowanie podanego przez użytkownika ciągu znaków do jednej z w / w długości. 3. Tworzony jest obiekt klasy Rc6Helper i jako argument przekazywany jest mu klucz użytkownika (jako tablica bajtów o rozmiarze 16). 3.1. Patrz (Opis inicjalizacji) 4. Po wczytaniu do tablicy bajtów zawartości pliku wywoływana

Upload: adam-siemion

Post on 06-Jun-2015

880 views

Category:

Documents


5 download

DESCRIPTION

opis algorytmu szyfru blokowego RC6, PJWSTK 2007

TRANSCRIPT

Page 1: Szyfr blokowy RC6

Szyfr blokowy RC6

Adam Siemion

WstępSzyfr Rc6 jest szyfrem blokowym z kluczem symetrycznym.Został zaproponowany jako kandydat do konkursu AES.Został stworzony w 1998 roku, jako ewolucja szyfru RC5.Wykorzystuje 16 bajtowe bloki oraz klucze 16, 24 lub 32 bajtowe.

Opis programuMoja implementacja została napisana w języku Java.Oprócz samej implementacji szyfru zawiera graficzne narzędzie,które umożliwia wybór pliku, który będzie szyfrowanybądź deszyfrowany oraz podanie klucza użytkownika jako ciąguznaków.

Opis klasProjekt składa się z następujących klas:* Rc6 - implementacja szyfru (zgodną ze specyfikacją)* Rc6Fs - operacje służące dostępu do systemu plików, takie jak czytanie i zapis do pliku* Rc6Helper - zawiera metody do szyfrowania i deszyfrowania,które automatycznie dzielą przekazane dane na 16 bajtowe bloki* Rc6Tool - implementacja graficznego interfejsu użytkownika

Szczegółowy opis implementacji

Szyfracja1. Z klasy Rc6Tool (zawierającej implementację GUI) wywoływanajest metoda encrypyFile()/decryptFile() z klasy Rc6Fs, jako argumenty przekazywanesą ścieżka do pliku oraz klucz użytkownika.2. Ponieważ klucz użytkownika musi mieć 16 lub 24 lub 32 bajty konieczne jestdostosowanie podanego przez użytkownika ciągu znaków do jednejz w / w długości.3. Tworzony jest obiekt klasy Rc6Helper i jako argument przekazywanyjest mu klucz użytkownika (jako tablica bajtów o rozmiarze 16).3.1. Patrz (Opis inicjalizacji)4. Po wczytaniu do tablicy bajtów zawartości pliku wywoływanajest metoda encryptByte()/decryptByte() na rzecz obiektu klasy Rc6Helper.5. Zadaniem metody encryptByte()/decryptByte() jest podział danych na blokipo 16 bajtów, i dopełnienie ostatniego bloku (zawierającego mniejniż 16 bajtów danych).6. Dla każdego bloku wywoływana jest metoda syfruj() z klasyRc6, która działa w trybie szyfrowania lub deszyfrownia.6.1. Patrz (Opis działania metody szyfruj w trybie deszyfracji)6.2. Patrz (Opis działania metody szyfruj w trybie szyfracji)7. Wszystkie zaszyfrowane bloki dodawane są do tablicy, którazostanie zwrócona jako wynik działania metody encryptByte()/decryptBte().8. Zwrócona tablica z danymi zostanie zapisana do pliku

Page 2: Szyfr blokowy RC6

jako zaszyfrowane/odszyfrowane dane.9. Sterowanie powróci do klasy Rc6Tool i użytkownik będziemógł wykonywać kolejne operacje.

InicjalizacjaSednem inicjalizacji jest generacja podkluczy, która odbywa sięw następujący sposób.Wykorzystywane zmienne:* Wynikowa tablica podkluczy zostanie oznaczona S* Tablica z kluczem użytkownika zostanie oznaczona K* Tymczasowa tablica zostanie oznaczona L

1. Alokowana jest pamięć dla tablicy L wielkości 4 razy mniejszejniż wielkość tablicy K2. Inicjalizowana jest tablica L, danymi z tablicy K, ponieważtablica K zawiera typ byte jako element a tablica L typ int,na jeden element tablicy L przypisywane są 4 elementy z tablicy K.Odbywa się to wykorzystując bitowy AND i OR oraz przesunięcie bitowew lewo. Pierwszy bajt pierwszego elementu tablicy L jest zapisywany napierwszym elemencie tablicy K, drugi bajt pierwszego elementu tablicy Ljest zapisywany na drugim elemencie tablicy K itd.L[i] = ((key[off++] & 0xFF)) | ((key[off++] & 0xFF) << 8) | ((key[off++] & 0xFF) << 16) | ((key[off++] & 0xFF) << 24); 3. Inicjalizowana jest tablica S (pamięć zostałazaalokowana w momencie definicji, o wielkości 2x ilość rund + 4).Pierwszy element inicjalizowany jest wartością magicznej stałej P.Każdy następny element inicjalizowany jest sumą poprzedniego elementuS oraz magicznej stałej Q.

4. W pętli wykonywana jest operacja, która wykorzystuje kluczprzekazany przez użytkownika (znajdujący się w tablicy L)do ustawienia wartości elementów tablicy S. Wykonywane są dwie operacje:A = S[i] = rotl(S[i] + A + B, 3);B = L[j] = rotl(L[j] + A + B, A + B);gdzie, zmienna i to indeks w tablicy S,a zmienna j to indeks w tablicy L.Metoda rotl dokonuje przesunięcia bitowego w lewo(bardziej szczegółowy opis w następnym punkcie).

Metoda szyfruj w trybie deszyfracjiWykorzystywane zmienne:* t,u - tymczasowe zmienne 4 bajtowe (typ int)* A,B,C,D - tzw. rejestry, tymczasowe zmienne 4 bajtowe (typ int)* S - tablica z podkluczami wygenerowana w poprzednim punkcie

1. Zmienne A,B,C,D są inicjalizowane kolejnym bajtamiz bloku z danymi (podobnie jak miało to miejsce przy generowaniupodkluczy).2. Rejestr C jest pomniejszany o wartość ostatniego elementu S3. Rejestr A jest pomniejszany o wartość przedostatniego elementu S

4. Dla 2x ilosc rund wykonywana jest następująca pętla:4.1. Wartości rejestrów ulegają permutacji w następujący sposób:(A;B;C;D) = (D;A;B;C)4.2. Zmiennym przypisywane są wartości w następujący sposób:

Page 3: Szyfr blokowy RC6

u = rotl(D * (2 * D + 1), 5);t = rotl(B * (2 * B + 1), 5);C = rotr(C - S[--i], t) ^ u;A = rotr(A - S[--i], u) ^ t;gdzie, i to indeks w tablicy S, wartość 5 to wynik operacji(lg w) dla w równego 32.Operacja rotl dokonuje przesunięcia bitowego w lewo, jedynki, któreznikną z powodu skończenia się zakresu z lewej strony pojawią się po prawej.Oto kod tej operacji: return (val << amount) | (val >>> (32 - amount));gdzie val jest wartością, która ulega przesunięciu, a amountto o ile należy przesunąć w lewo val.Podobnie działa operacja rotr.

5. Rejestr D jest pomniejszany o wartość drugiego elementu S6. Rejestr B jest pomniejszany o wartość pierwszego elementu S7. Tablica wynikowa jest inicjalizowana wartościami rejestrów A,B,C,D.

Metoda szyfruj w trybie szyfracjiWykorzystywane są następujące zmienne:* t,u - tymczasowe zmienne 4 bajtowe (typ int)* A,B,C,D - tzw. rejestry, tymczasowe zmienne 4 bajtowe (typ int)* S - tablica z podkluczami wygenerowana w poprzednim punkcie

1. Zmienne A,B,C,D są inicjalizowane kolejnym bajtamiz bloku z danymi (podobnie jak miało to miejsce przy generowaniupodkluczy).2. Rejestr B jest powiększany o pierwszy element tablicy S3. Rejestr D jest powiększany o drugi element tablicy S4. Dla 2x ilość rund wykonywana jest następująca pętla:4.1. Zmiennym przypisywane są wartości w następujący sposób:t = rotl(B * (2 * B + 1), 5);u = rotl(D * (2 * D + 1), 5);A = rotl((A ^ t), u) + S[++i];C = rotl((C ^ u), t) + S[++i];działanie powyższych operacji jest takie samo jak metodzie deszyfracji.4.2. Wartości rejestrów ulegają permutacji w następujący sposób:(A;B;C;D) = (B;C;D;A)5. Rejestr A jest powiększany o przedostatni element tablicy S6. Rejestr C jest powiększany o ostatni element tablicy S7. Tablica wynikowa jest inicjalizowana wartościami rejestrów A,B,C,D.

Adam Siemion