FER, ZEMRIS
>>DES
Seminarski rad

Autor: Damir Perović
e-mail: per@fly.cc.fer.hr
(MBR: 36321365)

  1. Uvod
  2. DES
  3. Način korištenja programa
  4. Pregled programa
  5. Program (Simulacija DES Algoritma)

 

UVOD

DES je simetrični enkripcijski algoritam razvijen u IBM-a i kasnije prihvaćen kao federalni standard. Zadatak ovog seminara je bio prikazati način rada DES algoritma vizuelno. Pri tome se naglasak stavlja na sam algoritam, a ne na efikasnost i brzinu programa. Program je realiziran pomoću programskog jezika JAVA, kao vrsta programa APPLET. Time je omogućeno izvršavanje programa pomoću preglednika Interneta (browser-a) kojeg svaki moderni korisnik posjeduje. Jezik JAVA omogućuje pokretanje programa na gotovo svim platformama. Obzirom na te činjenice program će biti moguće pokrenuti govoto na svakom računalu.

 

DES

Tekst je preuzet iz priprema za labos iz OS2

DES algoritam kriptiranja podataka

DES (Data Encryption Standard) je simetrični enkripcijski algoritam razvijen sredinom 70-tih u IBM-u, a prihvaćen kao federalni standard u SAD-u u kasnim sedamdesetima te početkom osamdesetih. 1981. ANSI je potvrdio DES kao ANSI standard (ANSI X3.92 Data Encription Standard).

DES predstavlja kriptiranje koje transofmira 64 bitne blokove podataka u 64 bitne kriptirane blokove podataka. Duljina ključa kriptiranja je 64 bita, od kojih 8 otpada na provjeru pariteta, tako da je efektivna duljina ključa 56 bita.

DES kriptiranje/dekriptiranje se provodi u nekoliko koraka, kako je to prikazano na slici 1. Prvo se bitovi ulaznog bloka duljine 64 bita permutiraju nekom permutacijom IP. Tada se ulazni blok podijeli na dva dijela po 32 bita, lijevi L0 i desni dio R0. Nad desnim blokom se obavlja funkcija f(Ri, Ki), odnosno f(Ri, K16-i+1) kod dekriptiranja, gdje je Ri desnih 32 bita, a Ki je 48 bitni ključ koji se generira iz zadanog tajnog ključa kriptiranja. Vrijednost dobivena operacijom EXILI između vrijednosti funkcije f i lijevih 32 bita podataka, postaje Ri+1, tj. desnih 32 bita za sljedeći korak iteracije. Li+1 za slijedeći korak je Ri. Nakon 16 takvik koraka blokovi se zamjenjuju te se spajaju i obavlja se konačna permutacija koja je inverzna početnoj, tj. IP-1. Dobivenih 64 bita su kriptirani blokovi. Budući da se nakon dvije uzastopne operacije EXILI sa istim brojem dobiva početna vrijednost, tj. a = (aĹ b)Ĺ b, postupak dekriptiranja može se provesti tako da se operacije obavljaju obrnutim redoslijedom. Zbog simetričnosti algoritma to se postiže tako da se kriptitrani blok pusti kroz isti algoritam sa tom razlikom da se umjesto ključa Ki u i-tom koraku upotrijebi ključ K16-i+1.

Postupak generiranja šestnaest 48 bitnih ključeva od zadanog, tajnog ključa provodi se u nekoliko koraka. Prvo se pomoću zadane tablice permutacije iz ključa generiraju dva bloka po 28 bita. Zatim slijedi 16 slijedećih koraka: svaki se blok rotira u lijevo za određeni broj bita (ovisno o kojem je koraku riječ) te se iz nastalih blokova (2x28) pomoću tablicom zadane permutacije generira ključ Ki, gdje je i broj koraka. Funkcija enkripcije f jest zapravo najkritičniji dio algoritma, tj. upravo zbog njene kompleksnosti ne postoji (barem koliko je za sada poznato) način provaljivanja DES-a (osim grubom računalnom silom). Vrijednost funkcije dobiva se u nekoliko koraka. Najprije se od ulaznih 32 bita (Ri) proširenjem zadanom tablicom dobiva 48 bita. Ta se vrijednost zbraja logičkom operacijom EXILI sa ključem Ki paralelno nad svakim bitom. Dobivena se 48 bitna vrijednost dijeli na osam dijelova od po šest bita. Prvi i zadnji bit svakog dijela predstavlja adresu retka, a srednja četiri adresu stupca u tablici selekcije, odnosno, pomoću šest određena su četiri bita. Istim postupkom nad svakom šestorkom od ulaznih 48 bita selekcijom dobivamo 32 bita. Tih se 32 bita još permutira zadanom tablicom te se dobiva konačna vrijednost funkcije f.

 

Način korištenja

Po DES algoritmu prvo je potrebno kreirati Ki ključeve iz zadanog ključa K. Ključ je moguće zadati kao tekstualni (lijevo polje za unos) ili heksadecimalni (desno polje za unos). Ključ se unosi u polje desno od slova Key:. Ako se unesu i tekstualni i heksadecimalni ključ program će koristiti tekstualni ključ. Ako se koristi tekstualno polje za unos program će izračunati njegovu heksadecimalnu vrijednost i upisati je u heksadecimalno polje za unos. Kod unosa heksadecimalne vrijednosti polje za unos tekstualne vrijednosti mora biti prazno. Program će uvijek pretpostaviti ključ dužine 8 iako ključ može biti manji ili veći od 8 slova (bytova).

 

Nakon unosa ključa potrebno je pokrenuti generiranje ključeva pritiskom na tipku Generate Keys. Program će vizualno prikazivati korak po korak proces generiranja ključeva. Ako želimo preskočiti jedan korak možemo pritisnuti tipku SkipOne. Time ćemo preskočiti generiranje jednog ključa. Pritiskom na tipku SkipAll preskočiti ćemo sve korake. Brzinu izvršavanja programa moguće je podesiti unosom vrijednosti u polje Pause:. Ukoliko unesemo nevaljanu vrijednost program će pretpostaviti unos vrijednosti nula, odnosno neće postojati usporenje programa. Pritiskom na tipku Pause zaustavit ćemo izvođenje programa. Tipka Pause će prijeći u tipku Continue sa kojom ćemo nastaviti izvoditi program.

 

Nakon generiranja ključeva možemo pristupiti enkripciji/dekripciji podataka. Ta dva postupka su kod DES algoritma takoreći isti jer je DES simetrični algoritam zaštite podataka. Jedina razlika je u tome što kod enkripcije za i-ti koraka se koristi ključ Ki, dok kod dekripcije ključ K16-i+1. Pravila za unos su ista kao i kod unos ključa. Podatak je moguće zadati kao tekstualni (lijevo polje za unos) ili heksadecimalni (desno polje za unos). Podatak se unosi u polje desno od slova Data:. Ako se unesu i tekstualni i heksadecimalni podatak program će koristiti tekstualni podatak. Ako se koristi tekstualno polje za unos program će izračunati njegovu heksadecimalnu vrijednost i upisati je u heksadecimalno polje za unos. Kod unosa heksadecimalne vrijednosti polje za unos tekstualne vrijednosti mora biti prazno. Program će uvijek pretpostaviti ključ dužine 8, iako podatak može biti manji ili veći od 8 slova (bytova).

 

Nakon unosa podatka potrebno je pokrenuti enkripciju ili dekripciju podatka pritiskom na tipku Encode Data ili Decode Data. Program će vizualno prikazivati korak po korak proces ekripcije podatka. Ako želimo preskočiti jedan korak možemo pritisnuti tipku SkipOne. Time ćemo preskočiti generiranje jedne funkcije i izračunavanje L i R dijela. Pritiskom na tipku SkipAll preskočiti ćemo sve korake. Brzinu izvršavanja programa moguće je podesiti unosom vrijednosti u polje Pause:. Ukoliko unesemo nevaljanu vrijednost program će pretpostaviti unos vrijednosti nula, odnosno neće postojati usporenje programa. Pritiskom na tipku Pause zaustavit ćemo izvođenje programa. Tipka Pause će prijeći u tipku Continue sa kojom ćemo nastaviti izvoditi program.

 

Nakon završetka programa rezultat enkripcije ili dekripcije će se upisati u polja desno od Result:. Prvo polje je tekstualni prikaz rezultata, a slijedeće heksadecimalni prikaz rezultata.

 

Pregled programa (po klasama)

  1. Class Binary
  2. Class Binary Label
  3. Class Generate Keys
  4. Class EnDecode Data
  5. Class DES

Class Binary

Ova klasa služi za spremanje binarnog podatka. Binarni podatak je smiješten u polju logičkih vrijednosti (boolean). Moguće je pojedinačno mijenjanje bita ili promijena svih bitova odjednom. Postoje osnovne operacije za kružno pomicanje bitova u lijevo ili desno, globalne logičke operacije ili(or), i(and) te eksluzivno ili (xor) nad dva binary objekta i podrška za ispis u string u binarnom, heksadecimalno i tekstualnom obliku. Code.

Class Binary Label

Klasa za grafičko prikazivanje binarnog podatka. Binarnom podatku moguće je osvijetliti pojedini bit radi ukazivanja na njegovu važnost ili sakriti ako ne želimo da je njegova vrijednost vidljiva. Za osvjetljivanje i skrivanje ugrađene su specijalne metode lit. Nakon promijene lit vrijednosti objekt će se ponovo iscrtati - repaint(). Za promijenu lit vrijednosti koriste se metode normBit(int index), highBit(int index) i hideBit(int index). Code.

Class Generate Keys

Klasa za generiranje ključeva DES algoritma. Klasa je izvedena iz klase Thread. Na konstrukciji predaju se parent object DES i ključ K. Prilikom konstrukcije kreiraju se vizualni objekti. Nakon kreiranja pokreče se metoda run() sa kojom objekt počinje sa radom. Prvo se izračunavaju C i D. Nakon toga se u 16 koraka kružno pomiču C i D u lijevo i generiraju ključevi Ki. Nakon završetka rada rezultati se upisuju u parent object DES, a objekt se uništava. Code.

Class EnDecode Data

Klasa za enkripciju ili dekripciju podatka. Klasa je izvedena iz klase Thread. Na konstrukciji predaju se parent object DES, podatak i tip (ekripcija ili dekripcija). Prilikom konstrukcije kreiraju se vizualni objekti. Nakon kreiranja pokreče se metoda run() sa kojom objekt počinje sa radom. Prvo se permutira podatak, zatim se dijeli na dva dijela L i R. Slijedi 16 koraka u kojima se računa funkcija fi iz ključa Ki i vrijednosti Ri-1. Pomoću funkcije fi i Li-1 dobiva se nova vrijednost Ri, a Li postaje Ri-1. Nakon 16 koraka dijelovi L i R zamijenjuju mjestu, spajaju se u podatak nad kojim se vrši inverzna permutacija. Završetkom rada rezultati se upisuju u parent object DES, a objekt se uništava. Code.

Class DES

Osnovna klasa koja čini bazu programa. Kontrolni dio sa vizualnim kontrolama za unos podatka koji želimo kriptirati/dekriptirati, unos ključa, namještanje brzine izvođenja i zaustavljenje izvođenja. Poziva objekte tipa Class Generate Keys za generiranje ključeva DES algoritma i Class EnDecode Data za enkripciju ili dekripciju podataka. Code.



© Zavod za Elektroniku, Mikroelektroniku, Računalne i Inteligente Sustave