Osobna kriptografija - GPG, TrueCrypt, SSL

Izvor: SIS Wiki
Skoči na: orijentacija, traži

Sadržaj

GPG

Što je kriptografija

Još od davnih vremena ljudi su, zbog svoje znatiželje, imali potrebe čitati pisma drugih osoba, ali i presretati povjerljive sadržaje. Time su mogli, a pogotovo u ratna vremena, dobiti potrebne podatke koje će iskoristiti u svoju korist. Kriptografija (kriptologija) je izvedenica iz grčkog pridjeva κρυπτός kriptós "skriven" i glagola γράφω gráfo "pisati". Kriptografija je znanstvena disciplina koja se bavi proučavanjem metoda za slanje poruka u takvom obliku da ih samo onaj kome su namjenjene može pročitati. (prema[1])

Povijest kriptografije

Već u doba starog Rima, Gaj Julije Cezar kriptirao je svoje poruke. Njegova kriptografska metoda, odnosno šifra temelji se na zamjeni svakog slova abecede nekim drugim slovom abecede pa tako postoje dvije abecede, jedna standarda, a druga šifrirana.

pri čemu je šifrirana abeceda standardna abeceda pomaknuta za dva mjesta ulijevo. Tako će slijedeća poruka: „OVO JE KRIPTIRANA PORUKA“, kriptirana Cezarovom šifrom glasiti: „RŽR LG LJŠLSVLŠCNJC SRŠZLJC“. (prema [3])

I u današnje vrijeme ljudi pokušavaju čitati nečiju osobnu poštu, bili to e-mailovi, dopisivanje preko chat aplikacija... Kako tehnologija napreduje, tim je na tržištu dostupno sve više aplikacija koje na jednostavan način mogu odraditi posao nekadašnjih špijuna, a velik broj e-mail poslužitelja nema dovoljno napredne metode sigurne razmjene pošte. Također, pojedini servisi nadgledaju komunikaciju koja se izvršava preko njih radi sprječavanja nepodobne komunikacije (to se najčešće događa kad se komunikacija odvija u ili prema muslimanskim zemljama i zemljama pod strogom diktaturom). Stoga nam je u interesu slati poruke koje će moći pročitati samo osoba kojoj je poruka namjenjena. To je omogućeno PGP-om i svim njegovim inačicama.

Osnove kriptografije

Da bi mogli objasniti rad PGP-a, najprije je potrebno objasniti način rada kriptografije. Kriptografija se sastoji od kriptiranja sadržaja te dekripcije tog istog sadržaja. Za kriptiranje i dekriptiranje potrebni su nam ključevi. Postoje dva načina rada kriptografije:

- pomoću simetričnih kriptografskih algoritama - pomoću asimetričnih kriptografskih algoritama.

Kod simetrične kriptografije, isti ključ radi enkripciju i dekripciju sadržaja.

Simetrična kriptografija(preuzeto[4])

Simetrična kriptografija


Simetrična kriptografija ima svoje prednosti u obliku brže i jednostavnije enkripcije i dekripcije, dok su negativne strane simetrične kriptografije dostava ključa svim stranama uključenim u konverzaciju. (prema Garfinkel, 2002, str.50.& [www.pgpi.org/doc/pgpintro/])

Asimetrična kriptografija koristi dva ključa, javni ključ i privatni ključ. Javni ključ je dostupan svima i koristi se za enkripciju sadržaja dok je osobni ključ poznat samo vlasniku i koristi se za dekripciju sadržaja. (prema Garfinkel, 2002, str.67.-69. & [www.pgpi.org/doc/pgpintro/])

Asimetrična kriptografija(preuzeto[5])


Valja napomenuti da je RSA algoritam još uvijek siguran, no to bi se moglo promjeniti uvođenjem kvantnih računala koja se temelje na qubitu koja ćemoći nositi puno više informacija od dosadašnjih računala. U tom slučaju svi dosadašnji kriptografski algoritmi neće pružiti dovoljnu zaštitu jer kvantne metode omogućavaju vrlo brzo računanje perioda periodičnih funkcija što da je polinomijalne kvantne algoritme za probleme fakorizacije i diskretnog algoritma. (prema [6])

--Boris Smolek 19:05, 6. siječnja 2012. (CET)

Povijest PGP/GPG

Sam PGP razvio je davne 1991. godine Phil Zimmermann, a ime je dao kao parodija na jednu trgovinu namirnicama pod nazivom „Ralph's Pretty Good Grocery“. Prva verzija programa podržavala je simetričnu kriptografiju odnosno simetrične ključeve koji je sam Zimmermann kreirao. Kako je vrijeme proticalo, PGP je postao otvoreni standard pod imenom Open PGP. GNU PG ili GPG jest GPL alternativa PGP-u koju je 1999. godine razvio Werner Koch. Razlika između PGP-a i GPG-a jest u tome da GPG ne koristi patentirani softver ili algoritme za svoj rad, kao što je IDEA, algoritam enkripcije koji se koristi u PGP-u. GPG koristi druge, nepatentirane algoritme kao što su:

(prema [7] & Garfinkel, 2002, str. 60.,66.,72.-72.)

Način rada GPG

PGP/GPG u svom radu koristi oba načina kriptografije (simetrični i asimetrični), odnosno koristi oba ključa (javni i privatni ključ). Na samom se početku generira session key, simetrični privatni ključ koji se rabi samo za jednu enkripciju i dekripciju, nasumičnim povlačenjem miša i pisanjem nasumičnih slova. Taj se session key koristi za enkripciju sadržaja poruke te nastaje kriptirana poruka. Da bi primatelj mogao dekriptirati sadržaj poruke, potreban mu je session key koji se kriptira javnim ključem primatelja, jer koja je svrha kriptiranja, ako svi znaju tajni ključ kojim se kriptirao sadržaj poruke. Kriptirana poruka te kriptirani session key šalje se zajedno primatelju poruke.(prema [8] & Garfinkel, 2002, str. 82.-83.)

Enkripcija GPG(preuzeto[9])

Dekriptiranje poruke odnosno sadržaja jest suprotni proces od enkripcije sadržaja. Na samom početku primatelj poruke svojim tajnim ključem dekriptira session key koji je kriptiran kod pošiljatelja, a nakon što je session key dekriptiran, moguće je dekriptirati sadržaj poruke koji je kriptiran session keyem. (prema [10] & Garfinkel, 2002, str. 82.-83.)

Dekripcija GPG(preuzeto[11])


Prednosti i nedostaci GPG

Kombinacijom pogodnosti enkripcije javnim ključem te brzinom koje imaj konvencionalna enkripcija, dobiva se vrlo dobar kriptografski mehanizam. Uz to GPG je odličan „hibridni“ sustav koji koristi najbolje od javnih ključeva i simetrične kriptografije, a uz to, također rješava nedostatke istih. Kao nedostaci GPG sustava navode se kompleksnost. Većina ljudi odbacuje mogućnost korištenja nekih sustava, ako procijene da je korištenje istih prekomplicirano za njih. Slijedeće što se naglašava kao nedostatak jest da za uspješno korištenje GPG-a, isti mora biti instaliran na strani pošiljatelja i primatelja. Upravljanje javnim ključevima treći je nedostatak koji se navodi. Naime, javni ključ može biti ili izgubljen ili kompromitiran što dovodi do velikog sigurnosnog rizika. (prema [12] & [13])

--Boris Smolek 19:05, 6. siječnja 2012. (CET)

Digitalni potpis

Kako nam je u običnim pismima važno da znamo tko nam je poslao to pismo i da sadržaj pisma nije promjenjen, isto nam je tako važno i kod e-mail poruka da znamo da je ta poruka autentična i da joj nitko nije promjenio sadržaj odkako je poslana od strane pošiljatelja. Taj način zaštite omogućava nam digitalni potpis koji se temelji na kriptografiji javnim ključevima. Princip rada digitalnog potpisa jest slijeći: sadržaj poruke može biti vrlo velik, do nekoliko milijuna bitova, a što je veća poruka, to će vrijeme za enkripciju biti duže. Zbog toga se koriste u takvim slučajevima hash funkcije koje prave digest poruke (skraćeni oblik poruke) konstantne veličine. Te hash funkcije omogućuju provjeru vjerodostojnosti i nepromjenjivosti poruke. Ako je i jedan bit poruke promjenjen, hash funkcija će dati sasvim neku drugu vrijednost od one koja je bila na početku. Nadalje, PGP koristi digest i privatni ključ za izradu potpisa koji se zajedno sa sadržajem šalje primatelju sadržaja. Važno je naglasiti da se potpis ne može izdvojiti iz jednog sadržaja i dodjeliti drugom sadržaju te isto tako nije moguće mjenjati sadržaj koji je jednom potpisan, a da se to neće primjetiti kod potpisa, jer promjenom i jednog bita potpisanog sadržaja, potpis neće biti valjan.(prema [14] & Garfinkel, 2002, str.71.-75.)

Digitalni potpis (preuzeto [15])

Mreža povjerenja

Kod PGP-a odnosno GPG-a postoji jedna ranjivost, a to jest identitet vlasnika javnog ključa. Naime, vrlo je važno da znamo pripada li određeni ključ, koji je javno dostupan, navedenoj osobi. Nekoliko načina jest da provjerimo da li ključ pripada toj osobi:

Direktno povjerenje jest najjednostavniji model povjerenja u kojem znamo da taj javni ključ pripada osobi koja je navedena kao vlasnik. Mreža povjerenja jest kumulativni model temeljen na povjerenju. Naime, svaki korisnik može potpisati tuđi javni ključ i time je pokazano da mu vjeruje, automatski vjeruje i svim ključevima koje je potpisao korisnik čiji smo javni ključ potpisali. To izgleda na slijedeći način: Ako Ana potpiše Brankov javni ključ, znači da mu vjeruje, a Branko je potpisao Mijin javni ključ te joj vjeruje, onda implicitno vrijedi i da Ana vjeruje Miji. (prema [16])

--Boris Smolek 19:05, 6. siječnja 2012. (CET)

Ključevi

Do sada su se često spominjali pojmovi tajnih i javnih ključeva, hash funkcija, sažetaka i slično. No što su zapravo javni (privatni) ključevi, kako izgledaju i gdje se nalaze ? Ti ključevi su zapravo predstavljeni kroz određeni niz znakova. Zbog bolje ilustracije, u listingu je prikazan jedan takav javni ključ, konkretnije, javni ključ koji pripada autoru ovog teksta.

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (MingW32)

mQGiBE8CBEIRBADfsw9EBLE+eEsYD3KR2Bb5213aCrlcZ9q5WUvDMxOjObOG/VgF LPdHLSuBdLgZ5aQMFnAP3sHA4mgTE4J/7Km9aaOkQqcu0WlWnbWp1kUxyN4ENpOV jXwRppUy+TgGzcLJ6MWAvi4TA8mAyINb7QD3DvlLwWS5evbcQbeF7hQ7ywCg6/wI 0iC9wKR+TZigrH7Zl4xgyVMD/AwVVow7+MIu9VyhK/aGNs9PzlEuUx1u2r5Iscip POK4VmM9LDV/KIvgPam4Ol+P6nhlsEhDjLft+SXl1DmbOoyrZd/hZ0bbJL3PSoVt uTfgZwEoBVFZ4/+BJ1A44LFfcNVjPyENEpW7x9mIhF17POvwG6q1cifkOseTIYJW 7J0sA/9fFiy0LxPU/2DPEH+pB7UMdl10J66AafGeFCJFHq1UcEkbMfbPKIe3hagZ Njl265LwUl4sHo20Zzi0OAmApiLIwaWOo1xgRgh0mJ6C63l9si8avFJKpr18yZ+b +HaaWquDS0qhzPWYcJHZ/pqZxpQkaWkAVSduacDOoUcYOEGLlLQiTmlrb2xhIE5v dmFrIDxuaWtvbGEubm92YWtAZm9pLmhyPohiBBMRAgAiBQJPAgRCAhsjBgsJCAcD AgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAUKXNEsuLQZypRAKDFxr0ZgeW2wOcld6Z6 VxgnSfr31QCgiiQ2Dj8ARmkhxRxGWHS4CdJ7lTS5AQ0ETwIEQhAEAIlFcjTqE4U3 Bo5cEGVB5QyfMj89Uqi7MwZ7XkDkuLllAWhrUB22uSY8utARSA/KeMTCFMYYn0d7 5QsLx8E7l2tnmqj0h7IFQvH05kgf4BXEzzMhTCsEhlxL1OE7bzw9IP9uc0puK4FA n2Yv8tbp+UZLvw/mV6r0clnelQC3uMDzAAMGA/9o2E1rs0q3sdiNY/gfBjIEIz67 R6XNzXnHSYCBV0u4fZgJeoZntvA5auUPA2H2TInFk02t6l9FyymK3fLch/nDndlR pvpf1nPGSec8Ncp+AzP1BjiqGwTgc50mo3uMOvdbZPSxzbSs+mwo0GkIE6QkqWps v22WhcOGiaFsj/Dz/ohJBBgRAgAJBQJPAgRCAhsMAAoJEBQpc0Sy4tBnlqwAn3yY 96x3+0XYh0rdsueftDJcALoQAKDEeqlnVKqpTu0vB93F/fyrqml6/A== =r7Ql -----END PGP PUBLIC KEY BLOCK-----

Na prvi nam se pogled može činiti da je tajni ključ običan skup slučajnih znakova. Međutim, on je sve samo ne slučajan. To je specijalno građeni niz blokova koji mu jamče jedinstvenost. Blok ključa počinje ključnim riječima -----BEGIN PGP PUBLIC KEY BLOCK----- , a završava s -----END PGP PUBLIC KEY BLOCK----- . Nakon početnih ključnih riječi navedena je i verzija, odnosno ime alata kojim je načinjen ključ te njegova verzija. To je ono što se može uočiti i na prvi pogled. Nadalje, ono što se ne može tako lako uočiti, a iz ključa se može pročitati posebnim algoritmom su sljedeća polja:

Korisnik:

Nikola Novak <nikola.novak@foi.hr>

ID ključa:

86fb72489de7c6b0

Tip ključa:

ELGAMAL

Vrijednosti:

BACJRXI06hOFNwaOXBBlQeUMnzI/PVKouzMGe15A5Li5ZQFoa1AdtrkmPLrQEUgPynjEwhTGGJ9He+ULC8fBO5drZ5qo9IeyBULx9OZIH+AVxM8zIUwrBIZcS9ThO288PSD/bnNKbiuBQJ9mL/LW6flGS78P5leq9HJZ3pUAt7jA8wADBgP/aNhNa7NKt7HYjWP4HwYyBCM+u0elzc15x0mAgVdLuH2YCXqGZ7bwOWrlDwNh9kyJxZNNrepfRcspit3y3If5w53ZUab6X9ZzxknnPDXKfgMz9QY4qhsE4HOdJqN7jDr3W2T0sc20rPpsKNBpCBOkJKlqbL9tloXDhomhbI/w8/4=

Naravno, to nisu ni približno sva polja već su u ključu zapisani i ostali podaci, poput datuma isteka, bitovne duljine, algoritma kojim je kreiran, datuma nastanka i slično.

Javni ključevi su smješteni na javnim serverima tzv. keyserverima i dostupni su svakome tko ima pristup Internetu. Jedan od poznatijih keyservera je MIT-ov keyserver na adresi pgp.mit.edu. Kad korisnik pomoću GPG/PGP alata generira svoj par privatnog i javnog ključa, svoj javni ključ postavlja na neki keyserver (bilo ručno ili automatski). Keyserveri diljem svjeta usklađuju svoje zapise i tako se stvara distribuirana baza javnih ključeva. Kada je korisniku potreban javni ključ drugog korisnika (npr. u svrhu provjere potpisa ili kriptiranja poruke), njegov ključ može pronaći ne nekom keyserveru tražeći ga prema imenu korisnika, mail adresi ili pak prema ID-u ključa.

S druge strane, tajni ključevi s razlogom nose to ime pa su stoga pohranjeni na korisnikovom računalu u kriptiranom obliku. To se ostvaruje simetričnom enkripcijom, često CAST5 algoritmom. Kako je riječ o simetričnoj enkripciji, korisnik prvo zadaje frazu koja će biti korištena za otključavanje tajnog ključa. Sasvim je jasno da bez fraze nije moguće pristupiti tajnom ključu pa ukoliko se ona zaboravi i ključ je izgubljen. Za generiranje tajnog ključa koriste se algoritmi RSA i DSA, Elgamal i sl.

--Nikola Novak 20:17, 6. siječnja 2012. (CET)

TrueCrypt općenito

TrueCrypt je softverski sustav za uspostavu i održavanje on-the-fly-kriptiranih uređaja za pohranu podataka. On-the-fly enkripcija znači da su podaci automatski kodirani tren prije nego što se spreme i dešifrirani odmah nakon što se učitaju, bez ikakve potrebne intervencije od stane korisnika. Nema podataka pohranjenih na kriptiranom volume-u (uređaju za pohranu podataka) koji mogu biti pročitani ili dekriptirani bez korištenja ispravne lozinke ili keyfileova. Cjelokupni datotečni sustav je kodiran, između ostaloga i imena datoteka, imena mapa, sadržaj svake datoteke, slobodan prostor, meta podaci, itd.

Datoteke mogu biti kopirane sa i prema montiranom TrueCrypt volume-u, baš kako su kopirane sa i prema bilo kojem normalnom disku, primjerice sa jednostavnom drag-and-drop operacijom. Datoteke se automatski dekodiraju u letu u memoriji/RAM-u, dok su čitane ili kopirane sa kriptiranog TrueCrypt volume-a. Slično tome, datoteke koje su pisane ili kopirane na TrueCrypt volume automatski se kodiraju u letu (prije nego što su zapisane na disk) u RAM-u.Treba imati na umu da to ne znači da cijela datoteka koja je u pripremi da bude šifrirana/dešifrirana mora biti pohranjena u RAM-u prije nego može biti šifrirana/dešifrirana. Nema dodatnih zahtjeva za memorijom (RAM-om) od strane TrueCrypt-a.

Za primjer možemo uzeti .avi video datoteku pohranjenu na TrueCrypt volume-u, ta video datoteka je u cijelosti kodirana. Korisnik osigurava ispravnu lozinku i otvara TrueCrypt volume. Kada korisnik dvostruko klikne na ikonu video datoteke, operacijski sustav pokreće program povezan s tom vrstom datoteke. Program zatim počinje s učitavanjem malog početnog dijela video datoteke iz TrueCrypt kodiranog volume-a u RAM (memoriju) kako bi datoteka mogla biti pokrenuta. Dok se dio učitava, TrueCrypt ga automatski dekodira u RAM-u. Dekodiran dio videa koji je pohranjen u RAM-u zatim se od strane tog prije određenog programa izvodi. U trenutku dok se taj dio videa izvodi, program već učitava drugi manji dio video datoteke iz TrueCrypt kodiranog volume-a i taj se proces konstantno ponavlja. Ovaj proces se naziva on-the-fly šifriranje/dešifriranje i kao takav radi za sve vrste datoteka.

Treba imati na umu da TrueCrypt nikada ne sprema dešifrirane podatke na disku, samo ih privremeno pohranjuje u RAM-u. Čak i kada je volume montiran, podaci pohranjeni u samom volume-u još uvijek su kodirani. Kada se ponovo pokrene sustav ili isključi računalo, volume će biti dismountan i datoteke pohranjene u njemu će biti nedostupne, odnosno kodirane. Čak i kada je napajanje iznenada prekinuto, datoteke pohranjene u volume-u su nedostupne i kodirane. Da bi ih opet učinili dostupnim, moramo nanovo montirati volume i osigurati ispravnu lozinku. [ preuzeto sa http://www.truecrypt.org/docs/ dana 6.1.2012. ]

--Luka.cvetko 09:43, 6. siječnja 2012. (CET)



TrueCrypt primjer

U slijedećih nekoliko redova slijedi prikaz kreiranja novog Volume-a u TrueCrypt-u. U ovom primjeru kriptiran je USB stick.

Slika 1.1. Glavni prozor TrueCrypt







Prva točka je klik na tipku Create Volume u glavnom TrueCrypt prozoru. U drugom izborniku biramo što želimo kriptirati. U ovom primjeru izabiremo drugu opciju, kriptirat ćemo non-system partition/drive.

Slika 1.2. Hidden TrueCrypt‎ volume











U ovom izborniku nećemo izabrati standardni model TrueCrypt volume-a, već ćemo izabrati drugu opciju, odnosno Hidden TrueCrypt volume. Što je Hidden volume? Može se desiti da ste prislijeni od neke strane da otkrijete svoju tajnu lozinku od kriptiranog volume-a. Postoji mnogo situacija u kojima nemožete izbjeći otkrivanje lozinke, primjerice zbog iznude. Koristeći Hidden volume omogućuje vam se da takve situacije riješite dajući lozinku vanjkog volume-a i tako ne otkrivajući vaše ključne podatke.

Slika 1.3. Hidden volume, preuzeto sa http://www.truecrypt.org/images/docs/hidden-volume.gif, dana 2.1.2012.









Sljedeća slika u potpunosti prikazuje princip rada Hidden volume-a. Princip je taj, da je jedan volume kreiran unutar drugog, odnosno unutar njegovog slobodnog mjesta. Kada je vanjski volume montiran nemoguće je zaključiti da li postoji taj skriveni volume unutar njega zahvaljujući nekim principima rada koje koristi TrueCrypt. U sljedećem izborniku biramo opciju Normal, koja kaže da želimo kreirati normalni(vanjski) volume, te nakon njega i skriveni volume unutar normalnog.

Slika 1.4. Volume location
Slika 1.5. Outer volume















Slika 1.6. Enkripcijske opcije




Na slici 1.4 vidimo odabir uređaja, u ovom slučaj USB-a na kojem će biti postavljen TrueCrypt. Na slici lijevo vidimo enkripcijske opcije. TrueCrypt nam omogućuje da za kriptiranje koristimo različite algoritme, između ostaloga i AES, Serpent, Twofish i njihove kombinacije. U ovom slučaju možete primijetiti da je korišten AES. AES(Advanced Encryption Standard) je kriptografski algoritam dizajniran od strane Joana Daemena i Vincenta Rijmena 1998. godine. Američka sigurnosna agencija je zaključila da su AES-ov dizajn i snaga dostatni da zaštite i Top Secret informacije. TrueCrypt nam omogućuje i razne Hash algoritme koji se koriste kod generiranja random brojeva pomoću kojih se generiraju master key, secondary key, itd... TrueCrypt nudi tri algoritma RIPEMD-160, SHA-512 i Whirlpool. U ovom slučaju korišten je Whirlpool. Whirpool hash algoritam dizajnirali su Vincent Rijmen i Paulo S. L. M. Barreto, 2000. godine.

Slika 1.7. Outer volume format






U sljedećih nekoliko prozora i dalje se bavimo vanjskim volume-om. Prikazuje nam se prozor za veličinu koji je automastski fiksiran, za razliku od skrivenog volume-a u kojem ćemo imati izbor da odaberemo njegovu veličinu. U sljedećem prozoru upitani smo za lozinku i njezinu potvrdu. Treba napomenuti da se ta lozinka za vanjski volume treba bitno razlikovati od lozinke skrivenog volume-a koju ćemo upisivati kasnije. Na slici lijevo vidimo opcije za odabir filesystem formata i random pool. Što znači radnom pool? Sugerira nam se da što različitije i raznovrsnije pomićemo miš barem 30 sekundi. Što ga duže pomićemo to bolje jer se time značajno povečava kriptografska snaga nekripcijskog ključa, a iz kojeg slijedi povećana sigurnost.

Slika 1.8. Outer volume sadržaj






Nakon formatiranja, možemo po mogućnosti ubaciti neki sadržaj u vanjski volume. Vanjski volume je kreiran i nastavljamo s izradom skrivenog volume-a. Princip kreiranja skrivenog volume-a je isti kao i kod kreiranja vanjskog volume-a. Započinje s odabirom enkripcijskog algoritma i hash algoritma. U ovom primjeru za enkripcijski algoritam odabran je AES, a za hash algoritam odabran je Whirlpool, isti izbor kao i kod vanjskog volume-a. Na sljedećem prozoru primorani smo da izaberemo veličinu skrivenog volume-a. Najčešće nije preporučljivo odabrati maksimalnu moguću veličinu, jer primjerice ako u budućnosti želimo unijeti dodatne sadržaje u vanjski volume, to zbog našeg izbora nećemo biti u mogućnosti uraditi. Na sljedećem prozoru od nas se iziskuje lozinka i njezina potvrda, a nakon toga isto kao i kod vanjskog volume-a slijedi izbor filesystem formata i random pool-a. Nakon formatiranja, skriveni(hidden) volume je kreiran.


Slika 1.9. Montiran hidden volume








Jedino što nam još preostaje je montiranje kreiranih volume-a. Najjednostavniji način za to uraditi je kliknuti na Auto-Mount Devices gumb na glavnom TrueCrypt prozoru, upisati lozinku ili vanjskog ili skrivenog volume-a i kliknuti OK. Odabrani volume je montiran i omogućen mu je pristup. Ako želimo pristupiti drugom volume-u, prvo je potrebni demontirati prije montiran volume. Ukoliko želimo ukloniti TrueCrypt sa našeg uređaja, jednostavno moramo formatirati USB Stick.








--Luka.cvetko 14:41, 6. siječnja 2012. (CET)

SSL

Povijest

SSL protokol je izvorno razvijen od tvrtke Netscape. Verzija 1.0 nije nikada javno objavljena, verzija 2.0 je izdana u veljači 1995. godine, ali je ta verzija sadržavala veliki broj propusta što je dovelo do stvaranja verzije 3.0 koja je izdana u veljači 1996. godine. Novije verzije SSL/TLS se temelje na SSL 3.0, a nacrt SSL-a iz 1996. godine je objavio IETF kao povijesni dokument u RFC 6101.

TSL (engl. Transport Layer Security) je nasljednik SSL-a. TSL verzija 1.0, odnosno SSL verzija 3.1, je definirana u siječnju 1999. godine u RFC 2246 kao nadogradnja na SSL 3.0. Verzija TSL-a 1.1 je definirana u travnju 2006. godine u RFC 4346 što predstavlja ažuriranje verzije 1.0, a razlike na verziju 1.0 su:

TSL 1.2.,odnosno SSL 3.3, definiran je u kolovozu 2008. godine u RFC 5246 i temelji se na TSL 1.1 specifikaciji. Verzija 1.2 je detaljnije dorađena u RFC 6176 u ožujku 2011. godine i preuredila je svoju kompatibilnost sa SSL-om tako da TSL sesije nikada neće koristiti SSL verzije 2.0. (prema [17])

--Sandi Galović 14:07, 6. siječnja 2012. (CET)


Što je SSL?

SSL (engl. Secure Socet Layer) predstavlja protokol kojim omogućava da dva uređaja sigurno komuniciraju uz mogućnost identifikacije uređaja s kojim se komunicira putem interneta. Osim toga, SSL je metoda enkripcije podataka putem transportnog protokola. SSL se primjenjuje i u Internet preglednicima kada je potrebno osigurati povjerljivost podataka, npr. online plaćanje.

Kod stvaranja SSL-a postavljeni su ciljevi:(prema [18])

--Sandi Galović 15:12, 6. siječnja 2012. (CET)

Sigurnost na internetu

TCP/IP (engl. Transmission Control Protocol/Internet Protocol) omogućava komunikaciju putem interneta tako što dozvoljava da se podaci šalju od računala do računala, posrednika i preko pojedinih mreža do odredišta. TCP/IP je prihvaćen kao osnovni protokol interneta. Načini na koji TCP/IP omogućava da se podaci šalju od računala do računala, kroz posrednike su:

(prema [19])

--Sandi Galović 15:24, 6. siječnja 2012. (CET)

Zašto koristiti SSL?

Kao što je prije navedeno, prijenos podataka i osjetljivih informacija preko interneta može biti rizičan zbog:

Stoga se SSL bavi takvim problemima. SSL omogućava da se osigura identitet kod dviju strana koje komuniciraju uz pomoć autentikacije. Nakon što je proveden proces autentikacije, SSL osigurava kriptiranu vezu između tih dviju strana za siguran prijenos podataka. Kriptirana komunikacija između dviju strana u komunikaciji pruža privatnost. Algoritmi enkripcije koji se koriste kod SSL-a uključuju i hash funkcije koje su slične checksum-u. Time se osigurava da se podaci tijekom prijenosa ne promijene. Autentikacija i enkripcija su opcionalni i ovise o dogovoru parametara između dva sudionika u komunikaciji.

Jedan od najčešćih primjera upotrebe SSL-a je Internet trgovina. Kod takvih transakcija traži se autentikacija poslužitelja, a isto tako poslužitelj može tražiti autentikacija klijenta, mada to nije nužno. U takvim načinima komunikacije kada se potvrdi identitet servera i klijenta, kako bi se očuvala privatnosti i integriteta podataka SSL koristi algoritme kriptiranja. Tako se onda mogu prenositi osjetljivi podaci kao što su brojevi kreditnih kartica, brojevi socijalnog osiguranja i drugi važni poslovni ili osobni podaci. (prema [20])

--Sandi Galović 16:06, 6. siječnja 2012. (CET)

SSL protokol

Tablica TCP/IP slojevi sa SSL-om (prema [21])

TCP/IP sloj Protokol
Aplikacijski sloj HTTP, NNTP, Telnet, FTP,…
Secure Socket Layer SSL
Transportni sloj TCP
Mrežni sloj IP

SSL protokol se smješta iznad transportnog sloja jer ostvaruje zaseban komunikacijski sloj i iznad njega se nalazi aplikacijski sloj. Kod razmjene poruka SSL od aplikacijske razine primi poruku koju treba poslati, zatim je rastavi u manje dijelove koji su prikladni za kriptiranje, dodaje kontrolni broj, šifrira, komprimira ukoliko je potrebno i ti dijelovi se zatim pošalju. Primatelj prima dijelove poruke, poruku zatim dekomprimira, dekriptira, provjeri kontrolne brojeve, sastavi dijelove poruke i nakon toga ih preda aplikacijskog razini.

SSL je neovisan o aplikacijskom sloju i prije nego aplikacijski sloj primi ili pošalje poruku se uspostavlja sigurna veza. Prije slanja zaštićenih podataka kroz mrežu, identificira se server, može se identificirati i klijent s kojim komunicira. SSL se sastoji od:

SSL zahtijeva minimalno identifikaciju servera kako bi se uspostavio siguran prijenos podataka. To se događa kod uspostavljanja razgovora (engl. handshake) tako da se pokaže potvrda klijentu. Za identifikaciju koriste sustav javnih ključeva i digitalni potpis. Nakon što se server identificira, server i klijent razmjenjuju međusobno poruke simetričnim ključem. Server može zatražiti od klijenta da se identificira i taj proces je identičan identifikaciji servera. SSL može uspostaviti razgovor između klijenta i servera,a da se oni međusobno ne identificiraju, međutim kod takvog razgovora zaštita prijenosa podataka je vrlo niska.

Zaštita komunikacije koju ostvaruje SSL ima tri osnovna svojstva:

(prema [22])

--Sandi Galović 16:25, 6. siječnja 2012. (CET)

Kako radi SSL

Razlog zbog kojeg je SSL tako učinkovit je zato što koristi nekoliko različitih vrsta kriptografskih postupaka. Kako bi se osigurala autentikacija, SSL koristi kriptografiju s javnim ključem, a da bi se osigurala privatnost i integritet podataka SSL koristi kriptografiju s tajnim ključem i digitalni potpis. Stoga postoji nekoliko kriptografskih procesa koji su opisani u nastavku.

Kriptografski procesi

Osnovna svrha kriptografije je otežati neovlaštenoj trećoj strani da ima pristup i da razumije privatnu komunikaciju između dva sudionika u komunikaciji. Međutim, nije moguće uvijek onemogućiti neovlaštenim osobama da imaju pristup podacima, ali privatni podaci uz pomoć enkripcije mogu biti nerazumljivi neovlaštenim osobama. Enkripcija koristi složene algoritme koji pretvaraju izvornu poruku ili čisti tekst u kodiranu, odnosno šifriranu poruku. Algoritme koji se koriste za kriptiranje i dekriptiranje podataka koji se prenose preko mreže možemo podijeliti u dvije kategorije, a to su kriptografija s tajnim ključem i kriptografija s javnim ključem. Kriptografija s tajnim i javnim ključem ovise o korištenju dogovorenog kriptografskog ključa ili o paru ključeva. Ključ je niz bitova kojeg koriste kriptografski algoritmi ili kod kriptiranja i dekriptiranja podataka. U sljedećim opisima kriptografskih procesa imena Alice i Bob se koriste za primjer komunikacije između dviju strana, a kao neovlaštena treća strana se koristi Charlie napadač. (prema [23])

--Sandi Galović 16:39, 6. siječnja 2012. (CET)

Kriptografija tajnim ključem

Kod kriptografije s tajnim ključem obje strane koje sudjeluju u komunikaciji, Alice i Bob, koriste za kriptiranje i dekriptiranje isti ključ. Prije slanja kriptiranih podataka preko mreže, Alice i Bob se moraju dogovoriti koje će kriptografske algoritme koristiti za kriptiranje i dekriptiranje i moraju imati ključ.

Glavni problem koji se javlja kod kriptografije s tajnim ključem je prijenos ključa s jedne do druge strane, a da napadač nema pristup tom prijenosu. Ako kod razmijene poruka između Alice i Bob oni te poruke osiguraju tako da ih kriptiraju s tajnim ključem, te ako Charlie tijekom prijenosa dobije pristup njihovom ključu tada Charlie može razumjeti sve poruke koje si Alice i Bob razmjenjuju. Osim što može čitati poruke, Charlie može i slati umjesto Alice ili Bob poruke jednom od njih pretvarati se kao da je on druga strana. Tako na primjer Alice neće znati da poruka koja je došla od Boba zapravo nije poslao Bob, nego Charlie. Nakon što se riješi problem razmjene tajnog ključa između Alice i Bob, kriptografija tajnim ključem postaje jako vrijedan alat. Algoritmi omogućavaju sigurnost i postupak kriptiranja podataka se zbiva relativno brzo. Kriptografija tajnim ključem je poznata i kao simetrična kriptografija jer se za kriptiranje i dekriptiranje koristi isti ključ. Poznati kriptografski algoritmi za tajne ključeve uključuju Data Encryption Standard (DES), triple-strength DES (3DES), Rivest Cipher 2 (RC2), and Rivest Cipher 4 (RC4). (prema [24])

--Sandi Galović 16:38, 6. siječnja 2012. (CET)

Kriptografija javnim ključem

Kriptografija s javnim ključem rješava problem prijenosa ključa tako što se koristi javni i privatni ključ. Javni ključ se može razmijeniti putem mreže, dok se privatni ključ čuva kod jedne strane koja sudjeluje u komunikaciji. Javni i privatni ključ se koriste za kriptiranje i dekriptiranje, javnim ključem se kriptira, a privatnim dekriptira.

Imamo jedan primjer u kojem Bob želi poslati poruku Alice i pri tome koristi kriptografiju javnim ključem. Alice posjeduje javni i privatni ključ i taj svoj privatni ključ čuva kod sebe, dok javni ključ šalje Bob-u. Bob šalje poruku Alice i kriptira je javnim ključem od Alice. Alice prima poruku i dekriptira je svojim privatnim ključem. Ukoliko Alice kriptira poruku svojim privatnim ključem i šalje kriptiranu poruku Bob-u, Bob je siguran da je poruka poslana od Alice i može je dekriptirati s javnim ključem od Alice. Problem je u tome što netko drugi može pročitati poruku koju je poslala Alice jer njezin javni ključ javan. Ovaj se način ne koristi za siguran prijenos podataka, ali daje osnove za digitalni potpis. Digitalni potpis je jedna od komponenti certifikata javnog ključa te se kod SSL-a koristi za autentikaciju klijenta ili poslužitelja.

Kriptografija javnim ključem je poznata i kao asimetrična kriptografija jer se za kriptiranje i dekriptiranje koriste različiti ključevi. Poznati kriptografski algoritam s javnim ključem je Rivest Shamir Adleman (RSA) algoritam. Drugi algoritam s javnim ključem koji se koristi s SSL-om koji je posebno napravljen za razmjenu tajnih ključeva je Diffie-Hellman (DH) algoritam. Kriptografija s javnim ključem zahtijeva opsežna računanja i zbog toga je ona usporena. Zbog tog razloga pogodna je za kriptiranje malih paketa podataka, kao što su tajni podaci. (prema [25])

--Sandi Galović 16:38, 6. siječnja 2012. (CET)

Certifikat javnih ključeva

Certifikat javnih ključeva osigurava za subjekta prenošenje javnog ključa koji će se koristiti kod asimetrične kriptografije. Certifikat javnih ključeva omogućava izbjegava situacije kao što je u primjeru: ako Charlie (napadač) napravi svoj privatni i javni ključ onda može tvrditi da je on Alice i može poslati svoj javni ključ Bob-u. Tako će Bob misliti da on komunicira s Alice, ali zapravo on komunicira s Charlie-m. Certifikat javnog ključa se može poistovjetiti kao digitalni ekvivalent putovnice. Dakle, izdan je od pouzdane organizacije i omogućava identifikaciju osobe.

Organizacija koja izdaje certifikate javnih ključeva je poznata kao izdavatelj (engl. certificate authority(CA)). CA se može usporediti s javnim bilježnikom. Da bi se dobio certifikat od CA treba pokazati dokaz o identitetu. Nakon što CA utvrdi da je podnositelj zahtjeva uistinu organizacija/osoba kojom se predstavlja onda CA potpisuje certifikat kojim se potvrđuje valjanost informacija sadržanih u certifikatu.

Certifikat javnog ključa sadrži polja:

Više certifikata može biti povezano u lanac certifikata. Kada se koristi lanac certifikata onda je prvi certifikat onaj od pošiljatelja. Sljedeći certifikat je potvrda subjekta koji je izdao pošiljateljev certifikat. Ako u lancu ima više certifikata onda je autoritet/izdavač koji je izdao prethodni certifikat. Krajnji certifikat u lancu je certifikat korijenskog izdavača (CA). Korijenski izdavač (CA) je javno certificirani autoritet kojemu se vjeruje na širem području. Podaci o korijenskom izdavaču (root CA) su obično pohranjeni u Internet pregledniku klijenta i ti podaci uključuju javni ključ CA. Najpoznatiji CA su VeriSign, Entrust i GTE CyberTrust. (prema [26])

--Sandi Galović 16:48, 6. siječnja 2012. (CET)

Kriptografske hash funkcije

Kod slanja kriptiranih podataka SSL u većini slučajeva koristi kriptografske hash funkcije kako bi se osigurao integritet podataka. Tako se sprječava da neka treća strana manipulira podacima koji se šalju između sudionika u online komunikaciji.

Kriptografske hash funkcije su vrlo slične checksum-u, a razlika je u tome što je checksum napravljen tako da otkrije slučajne promjene u podacima koji se prenose, dok su kriptografske hash funkcije napravljene tako da otkriju namjerne promjene. Kada se podaci obrađuju kriptografskim hash funkcijama onda se generira niz bitova, poznat kao hash. Male promjene koje nastaju u poruci rezultiraju velikim promjenama u konačnom hashu. Kriptografske hash funckije na zahtijevaju kriptografski ključ. Dvije hash funkcije koje se često koriste s SSL-om su Message Digest 5 (MD5) i Secure Hash Algorithm (SHA). (prema [27])

--Sandi Galović 16:54, 6. siječnja 2012. (CET)

Kod za autentikaciju poruka

Kod za autentikaciju poruka (engl. message authentication code (MAC)) je sličan kriptografskom hashu, a razlika je u tome što se temelji na tajnom ključu. Kada su informacije s tajnim ključem sadržane u podacima koji se obrađuju s kriptografskim hash funkcijama kao rezultat toga nastaje hash koji se zove HMAC.

Ako na primjer Alice i Bob komuniciraju i Alice želi biti sigurna da Charlie neće promijeniti sadržaj poruke koji se šalje Bobu onda Alice može izračunati HMAC za svoju poruku i dodati taj HMAC poruci. Tako Alice može kriptirati poruku s HMAC-om koristeći tajni ključ koji je dala Bobu. Kada Bob dekriptira poruku i izračuna HMAC onda on može provjeriti da li je poruka mijenjana tijekom prijenosa. Osim sa SSL-om, HMAC se koristi i kod sigurnosnih prijenosa podataka. (prema [28])

--Sandi Galović 16:58, 6. siječnja 2012. (CET)

Digitalni potpis

Kada se kreira kriptografski hash za poruku koja se šalje, hash je kriptiran s privatnim ključem pošiljatelja. Takav kriptirani hash se zove digitalni potpis. (prema [29])

--Sandi Galović 17:06, 6. siječnja 2012. (CET)


SSL proces

Komunikacija putem SSL-a počinje razmjenom informacija između klijenta i poslužitelja, a takva razmjena informacija naziva se SSL rukovanje (engl. SSL handshake).

SSL rukovanje se sastoji od:

Dogovaranje paketa šifri

SSL sesija započinje prvo dogovorom između poslužitelja i klijenta o paketima šifri koje će se koristiti u komunikaciji. Paket šifri je skup kriptografskih algoritama i veličina ključeva koje računalo može koristiti kod enkripcije podataka. Paketi šifri uključuju informacije o dostupnim algoritmima razmjene javnih ključeva, algoritmima za enkripciju tajnim ključevima, kriptografskim hash funkcijama. Klijent se dogovara s poslužiteljem koji paket šifri je dostupan, a poslužitelj odabire obostrano prihvatljivi paket šifara. (prema [30])

--Sandi Galović 17:06, 6. siječnja 2012. (CET)

Autentikacija servera

Kod SSL-a autentikacija nije nužna, ali je poželjna. Tako na primjer kupac u slučaju transakcije novca kada kupuje na Internet trgovini želi autentikaciju poslužitelja. Kada se poslužitelj autentificira onda je kupac siguran da je to taj subjekt kakvim se poslužitelj predstavlja. Poslužitelj mora klijentu prikazati certifikat javnog ključa kako bi dokazao da pripada organizaciji za koju se predstavlja. Ukoliko je certifikat valjan onda klijent može biti siguran da je identitet poslužitelja istinit. Kako bi se dogovorili oko tajnog ključa klijent i poslužitelj moraju razmijeniti podatke. Tako na primjer klijent koristi javni ključ poslužitelja kako bi kriptirao podatke. Tada klijent šalje kriptirane podatke poslužitelju, a samo poslužitelj može dekriptirati podatke svojim privatnim ključem. (prema [31])

--Sandi Galović 17:06, 6. siječnja 2012. (CET)

Slanje kriptiranih podataka

Kada pristup istom tajnom ključu imaju i klijent i poslužitelj tada koriste taj tajni ključ kako bi kriptirali tajne podatke i HMAC. Dakle, za svaku poruku koju međusobno razmjenjuju klijent i poslužitelj koriste kriptografske hash funckije te zajedničke tajne podatke kako bi izračunali HMAC koji je dodan u poruku. (prema [32])

--Sandi Galović 17:06, 6. siječnja 2012. (CET)

Tutorial s osnovnim koracima u OpenSSL-u

OpenSSL Project je robustan, komercijalan, potpuno opremljen Open Source alat koji implementira SSL v2/v3 i TLS v1 protokol te kriptografske operacije kao simetrična kriptografija, digitalni potpis, hash funkcije i ostalo. OpenSSL je dostupan za razne operacijske sustave, ali se najviše koristi na Linuxima.

Alat je dostupan za Linux na adresi: http://www.openssl.org/source/, a za Windowse je dostupan na adresi http://www.slproweb.com/products/Win32OpenSSL.html. Primjeri su rađeni na Ubuntu 11.10.

Kriptografija tajnim ključem

Napravimo tekstualnu datoteku i u nju spremimo tekst koji želimo kriptirati: „Ovo je proba za SSL!“ sa AES algoritmom u CBC modu i ključem od 256 bita.

>touch primjer.txt
>echo „Ovo je proba za SSL!“ > primjer.txt
OpenSSL> enc -aes-256-cbc -in primjer.txt -out encrypted.bin
enter aes-256-cbc encryption password: primjer
Verifying - enter aes-256-cbc encryption password: primjer

Tajni ključ od 256 bita je izračunat na temelju lozinke, s time da je u ovom primjeru odabrana jednostavna lozinka, dok se u realnim slučajevima koriste složenije lozinke. Izlazna datoteka je encrypred.bin koja je binarna i ako je želimo dektriptirati onda napišemo sljedeći kod:

OpenSSL> enc -aes-256-cbc -d -in encrypted.bin -pass pass:primjer
Ovo je proba za SSL!

Kriptografija javnim ključem

Za kreiranje javnog ključa koristit će se RSA algoritam.

Kreiranje ključa

Dakle,prvo treba generirati par javnog i privatnog ključa, a u sljedećem primjeru je generiran RSA ključ od 1024 bita.

OpenSSL> genrsa –out key.pem 1024
Generating RSA private key, 1024 bit long modulus
...++++++
.......++++++
e is 65537 (0x10001)

Generirana datoteka sadrži i javni i privatni ključ. Privatni ključ se mora čuvati na sigurnom mjestu ili mora biti kriptiran. Privatni ključ je kodiran koristeći PEM (engl. Privacy Enhanced Email) standard.

>cat key.pem 
-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQDgVrqxwTk8WbDLfSUxi3nJVfhBwNi9xCopnxw+qGUrd3DwoAS0
b3PNhVuKMwSqTrRt676slgkyaLuQdhPxBR3zHR741R1MVEy+IJxWkj8KXTSJ/I5T
s2ydSSL/eMb6lShbzrp/J5a5VvVOpWu1C6Li9F0G4g9CFonAMXA4b9JYawIDAQAB
....
...
..
MF60iROCyOrMUvB+UkSQPFUfPLJg1lGKV+8KlQBqQLODrw==
-----END RSA PRIVATE KEY-----


U dole priloženom kodu možemo vidjeti detalje o RSA paru ključeva:

OpenSSL> rsa -in key.pem -text –noout
Private-Key: (1024 bit)
modulus:
   00:e0:56:ba:b1:c1:39:3c:59:b0:cb:7d:25:31:8b:
   79:c9:55:f8:41:c0:d8:bd:c4:2a:29:9f:1c:3e:a8:
   ..
   89:c0:31:70:38:6f:d2:58:6b
publicExponent: 65537 (0x10001)
privateExponent:
   00:87:5a:2c:98:14:e1:a8:94:e0:c3:55:85:3c:48:
   4f:b9:77:02:2b:01:e4:83:52:38:b2:16:0a:9f:8f:
   ..
   46:20:40:ae:46:9d:ce:e7:11
prime1:
   00:f9:71:07:d3:df:8e:27:c0:74:eb:3d:23:2d:98:
   ..
   44:6c:a3:79:a9
prime2:
   00:e6:3c:bb:fc:77:cd:5e:bb:18:45:98:c6:8a:a0:
   ..
   de:33:33:15:f3
exponent1:
   5f:d4:96:e7:45:29:be:07:e8:63:3f:b7:b6:1a:d2:
    ..
   b0:fa:15:11
exponent2:
   00:85:54:26:88:cd:d7:e0:43:f8:8a:55:2e:a4:98:
   ..
   31:f0:f4:64:81
coefficient:
   00:f4:f3:a0:a2:bf:8a:ea:71:f8:56:5e:15:8f:ef:
   ..
   6a:40:b3:83:af

Opcija –noout omogućava da se izbjegne prikaz ključa u formatu base64. Brojevi koji se mogu vidjeti u heksadecimalnom obliku su: modul, javni i privatni eksponent, dva primarna od kojih se sastavlja modul i eksponent1, eksponent2 te koeficijent koji služe za optimizaciju algoritma.

Za kriptiranje privatnog ključa se koristi sljedeći kod:

OpenSSL> rsa -in key.pem -des3 -out enc-key.pem
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Ključ će biti kriptiran algoritmom s tajnim ključem,a tajni ključ će biti kreiran na temelju lozinke od korisnika. Privatni ključ nije toliko zanimljiv, jer korisnici koji žele poslati poruku trebaju javni ključ kako bi kriptirali poruku, a primatelj onda svojim privatnim ključem dekriptira poruku.

Kako bi smo izdvojili javni ključ iz datoteke key.pem i spremili ga u datoteku pub-key.pem koristimo sljedeći kod:

OpenSSL> rsa -in key.pem -pubout -out pub-key.pem
writing RSA key

Enkripcija

Nakon što smo generirali privatni i javni ključ i izdvojili u zasebne datoteke možemo kriptirati, dekriptirati poruke ili napraviti digitalni potpis.

Tako u primjeru imamo datoteku sandi.txt u kojoj se nalazi tekst: „Ovo je proba za projekt iz sigurnosti IS-a“ te ju kriptiramo javnim ključem koji je spremljen u datoteku pub-key.pem, a kao izlaznu datoteku u koju se sprema kriptirani tekst koristimo nesto.txt. Kod za enkripciju:

OpenSSL> rsautl -encrypt -in sandi.txt –pubin -inkey pub-key.pem  -out nesto.txt

Kada otvorimo datoteku nesto.txt ona izgleda kao na slici:

Kriptirana datoteka nesto.txt
















Kako bismo dekriptirali sadržaj datoteke nesto.txt u datoteku decrypt.txt koristimo kod:

OpenSSL> rsautl -decrypt -in nesto.txt -inkey key.pem  -out decrypt.txt

Kada otvorimo datoteku decrypt.txt, kao na slici, onda vidimo da se u njoj nalazi tekst koji smo kriptirali:

Dekriptirana datoteka
















Digitalni potpis

Isto tako nakon što smo kreirali privatni i javni ključ možemo napraviti digitalni potpis i verificirati ga. Iako nije učinkovito potpisati velike datoteke i pri tome koristiti algoritam s javnim ključem. Zbog toga treba prvo izračunati sažetak informacija koje se potpisuju. U ovom primjeru je to jednostavnije prikazano, dok je u realnim slučajevima stvar puno kompliciranija. Sigurnost koja je osigurana putem ove sheme koristeći hash, a zatim potpisivanje direktno koristeći RSA nije ista kao kod sheme koja direktno koristi RSA algoritam za potpisivanje cijelog dokumenta. Shema koja se koristi u realnim aplikacijama se zove RSA-PSS koji je dokazao učinkovitost i najbolju razinu sigurnosti.

Kod koji se koristi u za stvaranje certifikata je:

OPENSSL> dgst -<hash_algorithm>-out  <digest> <input_file>

Pri čemu:

Sljedeći kod se može koristiti kako bi se provjerile hash vrijednosti nekih arhiviranih datoteka, kao na primjer OpenSSL izvorni kod. Kako bi se napravio potpis sažetak koristimo:

OpenSSL> rsautl-sign-in-out <digest>  <signature>-inkey <key>

Kako bi se provjerila valjanost potpisa koristi se:

OpenSSL>rsautl -verify -in <signature> -out <digest>  -inkey <key> -pubin

(napravljeno prema [33])

--Sandi Galović 17:48, 6. siječnja 2012. (CET)

Public Key Infrastructure (PKI)

U sljedećem primjeru ćemo ukratko prikazati kako se kreira vlastiti PKI, s time da se realne aplikacije ne temelje isključivo na informacijama koje se nalaze u ovom primjeru.

U datoteci openssl.cnf koja se nalazi u bin direktoriju moramo podesiti nekoliko stvari. Treba podesiti dobru putanju do privatnog ključa, koji će biti naknadno kreiran, također treba provjeriti da li su datoteke .rand ili .rnd koje će kreirati cakey.pem dobro smještene. Za bazu certifikata možemo kreirati praznu datoteku index.txt. Zatim treba kreirati datoteku serial s tekstom na primjer 011E. 011E je serijski broj za sljedeći certifikat.

dir  = ./demoCA  # Where everything is kept
database = $dir/index.txt     # database index file.
serial  = $dir/serial       # The current serial number
private_key = $dir/private/cakey.pem # The private key
RANDFILE = $dir/private/.rnd     # private random number file


Stvaranje PKI

Prvo treba napraviti certifikat za PKI koji će sadržavati par privatnog i javnog ključa. Privatni ključ će se koristiti za potpisivanje certifikata. Kod izgleda:

Openssl> req -new -x509 -keyout cakey.pem -out cacert.pem
Generating a 1024 bit RSA private key
……………++++++
……++++++
Writing new pritvate key to 'cakey.pem'
Enter PEM pass phrase:

Privatni i javni ključ će biti spremljeni u cakey.pem, a certifikat koji će sadržavati javni ključ će biti spremljen u cacert.pem. Prilikom kreiranja morat će se dopisati podaci o organizaciji kao npr. ime, zemlja, adresa elektroničke pošte itd. Privatni ključ sadržan cakey.pem je kriptiran s lozinkom. –x509 se odnosi na standard koji definira kako će podaci u certifikatu biti kodirani. Korisno je izvesti PKI certifikata u DER format kako bi se mogao učitati pomoću preglednika.

OpenSSL> x509 -in cacert.pem -outform DER -out cacert.der

Stvaranje korisničkog certifikata

Sada kada PKI ima svoj par javnog i privatnog ključa i certifikat, onda pretpostavimo da korisnik želi dobiti certifikat iz PKI-a. A da bi kreirao certifikat iz PKI-a, korisnik mora kreirati zahtjev za certifikatom, koji će sadržavati sve informacije potrebne za certifikat kao ime, prezime, zemlja, adresa elektroničke pošte, itd. Zahtjev za certifikatom je poslan PKI-u:

OpenSSL> req-new-keyout userkey.pem -out usercert-req.pem

Taj kod će kreirati par ključeva i zahtjev za certifikatom. Par ključeva će biti spremljen u userkey.pem, a zahtjev za certifikatom će biti spremljen u usercert-req.pem. Tako je PKI spreman za potpisivanje zahtjeva certifikata kako bi se dobio korisnički certifikat.

> openssl ca -in usercert-req.pem -out usercert.pem
Using configuration from /home/openssl/openssl.cnf
Loading 'screen' into random state - done
Enter pass phrase for demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
       Serial Number: 286 (0x11e)
       Validity
           Not Before: Jan 05 16:00:22 2012 GMT
           Not After : Jan 04 16:00:22 2013 GMT
       Subject:
           countryName               = HR
           stateOrProvinceName       = Vz
           organizationName          = Fakultet organizacije i informatike
           commonName                = Sandi Galovic
           emailAddress              = sangalovi@foi.hr
       X509v3 extensions:
           X509v3 Basic Constraints:
               CA:FALSE
           Netscape Comment:
               OpenSSL Generated Certificate
           X509v3 Subject Key Identifier:
               21:A4:88:24:C1:18:0A:00:B1:99:90:65:AA:45:F1:...
           X509v3 Authority Key Identifier:
               keyid:98:AC:89:14:65:E2:AB:78:CC:77:16:81:AA:...
Certificate is to be certified until Jan 04 16:00:22 2013 GMT (365 days)
Sign the certificate? [y/n]:y

usercert.pem je javni certifikat potpisan od PKI-a. Ukoliko želimo uvesti certifikat u Internet preglednik, certifikat treba pretvoriti u PKCS12 format:

OpenSSL> pkcs12 -export -in usercert.pem -inkey userkey.pem > usercert.p12

(tutorial je napravljen prema [34])

--Sandi Galović 18:04, 6. siječnja 2012. (CET)

Literatura

http://en.wikipedia.org/wiki/Transport_Layer_Security
http://fly.srk.fer.hr/~peloquin/SSL/ssl.html
http://docs.oracle.com/javase/1.4.2/docs/guide/security/jsse/JSSERefGuide.html#SSLOverview
http://www.dcc.uchile.cl/~pcamacho/tutorial/crypto/openssl/openssl_intro.html

Autori i podjela zadaća

Luka Cvetko

2 TrueCrypt općenito

2.1 TrueCrypt primjer

Sandi Galović

3 SSL

3.1 Povijest
3.2 Što je SSL?
3.3 Sigurnost na internetu
3.4 Zašto koristiti SSL?
3.5 SSL protokol
3.6 Kako radi SSL
3.6.1 Kriptografski procesi
3.6.1.1 Kriptografija tajnim ključem
3.6.1.2 Kriptografija javnim ključem
3.6.1.3 Certifikat javnih ključeva
3.6.1.4 Kriptografske hash funkcije
3.6.1.5 Kod za autentikaciju poruka
3.6.1.6 Digitalni potpis
3.6.2 SSL proces
3.6.2.1 Dogovaranje paketa šifri
3.6.2.2 Autentikacija servera
3.6.2.3 Slanje kriptiranih podataka
3.7 Tutorial s osnovnim koracima u OpenSSL-u
3.7.1 Kriptografija tajnim ključem
3.7.2 Kriptografija javnim ključem
3.7.2.1 Kreiranje ključa
3.7.2.2 Enkripcija
3.7.2.3 Digitalni potpis
3.7.3 Public Key Infrastructure (PKI)
3.7.3.1 Stvaranje PKI
3.7.3.2 Stvaranje korisničkog certifikata

Nikola Novak

Boris Smolek

1 GPG

1.1 Što je kriptografija
1.2 Povijest kriptografije
1.3 Osnove kriptografije
1.4 Povijest PGP/GPG
1.5 Način rada GPG
1.5.1 Prednosti i nedostaci GPG
1.6 Digitalni potpis
1.6.1 Mreža povjerenja
Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima