|
FER, ZEMRIS
Autor: Damir Perović e-mail: per@fly.cc.fer.hr (MBR: 36321365)
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.
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.
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 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.
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. 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. 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. 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.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
|