Kratak kurs kriptografije - 1. deo

Vrlo je tesko. Kreiranje slucajnog niza, zahteva jako do ar algoritam, koji ce da obradi jako dobre, takodje prilicno slucajne ulazne podatke i kreira nam jedan dobar pseudo-slucajan niz.
Namerno koristim ovaj termin pseudo, jer apsolutno slucjana niz je u prirodi nemoguc - sve mora pre ili kasnije da se ponovi. Postoji posebna grana kriptografije koja se bavi samo kreiranjem dobrog kljuca, sa kompletnim protokolima, koji se moraju ispostovati da bi se dobio dobar kljuc.
Necemo opet u detalje, ali samo je bitno da znate da jeni kreiranje kljuca jako ozbiljan proces.
 
Postoji :)

Zove se "Jednokratna beleznica" i izmisljen je pre malo vise o 100 godina.

A vrlo je prost, i samo nekoliko stvari treba ispuniti:

1. U pitanju je simetricni kripto-sistem, i treba koristiti takav simetricni algoritam koji koristi kljuc iste duzine kao duzina poruke.

2. Jedan kljuc se koristi za sifrovanje i desifrovanje samo jedne poruke. Nakon toga se unistava.

I to je to. Nista prostije :)

Ali....implementacija ovakvog kriptosistema u realnom zivotu, ima jedan "mali" problem.

Mozete li da ga uocite, i imenujete jednom recju? (pretpostavka je da nije u pitanju ljudski faktor, vec jedan drugi, organizacioni problem)
 
Poslednja izmena:
Postoji :)

Zove se "Jednokratna beleznica" i izmisljen je pre malo vise o 100 godina.

A vrlo je prost, i samo nekoliko stvari treba ispuniti:

1. U pitanju je simetricni kripto-sistem, i treba koristiti takav simetricni algoritam koji koristi kljuc iste duzine kao duzina poruke.

2. Jedan kljuc se koristi za sifrovanje i desifrovanje samo jedne poruke. Nakon toga se unistava.

I to je to. Nista prostije :)

Ali....implementacija ovakvog kriptosistema u realnom zivotu, ima jedan "mali" problem.

Mozete li da ga uocite, i imenujete jednom recju? (pretpostavka je da nije u pitanju ljudski faktor, vec jedan drugi, organizacioni problem)

mozda vreme? tesko je pronaci novi kljuc za tako kratko vreme?
 
Delimicno tacno, a inace, potpun odgovor je sadrzan u jednoj reci: cena!

Cena implementacije ovakvog kriptosistema je velika, zato sto se mora obezbediti jako dobar protokol, koji zahteva puno resursa, i sve to mnogo kosta.
Evo uproscene price o zivotu kljuca, u jednoj ozbiljnoj instituciji (verujte mi, informacija je iz prve ruke): :)

- Kljuc se kreira u prostorijama koje su u faradejevom kavezu, koji je unutar objekta koji je opasan dvostrukom sigurnosnom ogradom, kroz koju se van radnog vremena propusta struja od 220V, a u kojoj postoji naurozano obezbedjenje 24h, a sam objekat se nalazi unutar jedne vojne kasarne.
- Kljuc se distribuira od mesta proizvodnje, do mesta upotrebe, u koferima koji su napravljeni da budu opet faradejev kavez, opet pod oruzanom pratnjom i u specialnim vozilima, i maksimalnim svim merama bezbednosti.
- Kljuc se skladisti i koristi u specijalnim prostorijama, koje su opet, faradejevi kavezi.
- Kada se kljuc potrosi, onda se unistava, vrlo slozenom bezbednosnom procedurom.

Mozete li sada da zamislite koliko sve ovo kosta? I koliko mora biti dobro organizovano? :)

Kada god se implementira neki kriptografski sistem, uvek se gleda odnos izmedju cene onoga sto zelimo da sacuvamo nasom kriptografijom, i cene implementacije same kriptografije.
I to je alfa i omega u kriptografiji. Odnos troskova.

Danas su matematicki algoritmi toliko dobri, da matematika vise nije problem. Sve se, na kraju, svodi na pricu oko kljuceva.

Je li vam sada prica oko kljuceva i njihove vaznosti, malo jasnija?
 
Delimicno tacno, a inace, potpun odgovor je sadrzan u jednoj reci: cena!

Cena implementacije ovakvog kriptosistema je velika, zato sto se mora obezbediti jako dobar protokol, koji zahteva puno resursa, i sve to mnogo kosta.
Evo uproscene price o zivotu kljuca, u jednoj ozbiljnoj instituciji (verujte mi, informacija je iz prve ruke): :)

- Kljuc se kreira u prostorijama koje su u faradejevom kavezu, koji je unutar objekta koji je opasan dvostrukom sigurnosnom ogradom, kroz koju se van radnog vremena propusta struja od 220V, a u kojoj postoji naurozano obezbedjenje 24h, a sam objekat se nalazi unutar jedne vojne kasarne.
- Kljuc se distribuira od mesta proizvodnje, do mesta upotrebe, u koferima koji su napravljeni da budu opet faradejev kavez, opet pod oruzanom pratnjom i u specialnim vozilima, i maksimalnim svim merama bezbednosti.
- Kljuc se skladisti i koristi u specijalnim prostorijama, koje su opet, faradejevi kavezi.
- Kada se kljuc potrosi, onda se unistava, vrlo slozenom bezbednosnom procedurom.

Mozete li sada da zamislite koliko sve ovo kosta? I koliko mora biti dobro organizovano? :)

Kada god se implementira neki kriptografski sistem, uvek se gleda odnos izmedju cene onoga sto zelimo da sacuvamo nasom kriptografijom, i cene implementacije same kriptografije.
I to je alfa i omega u kriptografiji. Odnos troskova.

Danas su matematicki algoritmi toliko dobri, da matematika vise nije problem. Sve se, na kraju, svodi na pricu oko kljuceva.

Je li vam sada prica oko kljuceva i njihove vaznosti, malo jasnija?

jel nema govora o distribuiranju ključa elektronskim putem, verovatno je previše rizično?
 
Sada ide pitanje za razmisljanje: sta mislite, koliko je jednostavno kreirati slucajan niz?
Slucajan nemoguce, pseudo-slucajan svakako. :D
Dakle, taj pseudo-slucajan niz je nista drugo nego neka kompleksna matematicka funkcija koja na osnovu ulaznog parametra (seed) generise "nasumicne" brojeve.
Znaci svaki od tih nizova je jednoznacno odredjen njegovim seed-om. :)

Znam npr za linear shift register... :)

Naravno, slucajan bi mozda mogao da se napravi koriscenjem nekih slucajnih dogadjaja u okolini, npr. da hvatamo odredjene sumove/zvukove u okolini, i da to koristimo za randomizovanje.

- - - - - - - - - -

jel nema govora o distribuiranju ključa elektronskim putem, verovatno je previše rizično?

Asimetricni kriptografski sistemi se koriste izmedju ostalog za razmenu simetricnih kljuceva, tako da je moguce.
Da li je bezbednije od onoga sto je frederikrr pomenuo? Pa najverovatnije da nije, kad su u pitanju jako jako poverljivi podaci.
Vise o tome kasnije, frederikrr ce to kasnije da objasni i napomene, tako da ne ulecem i ne kvarim plan. :)
 
Poslednja izmena:
jel nema govora o distribuiranju ključa elektronskim putem, verovatno je previše rizično?

Ni slucajno. Ali, opet, zavisi od cene, od rizika. Sve se svodi na glavnu pricu oko toga, koliko vredi to sto zelimo da sacuvamo, i koliko ce nas kostati nas kripto-sistem.

Takodje, zavisi od vrste kljuca :)

Kao sto smo rekli, kriptografija se deli na simetricnu i asimetricnu.

Simetricnu smo vec obradili, i mozemo uraditi jedan kratak rezime:

- kod simetricne kriptografije, algoritam je takav da se isti kljuc koristi za sifrovanje i desifrovanje.
- imperativ u ovakvoj kriptografiji je tajnost kljuca, i kvalitet kljuca: sto je kljuc slucajniji niz brojeva, to je kvalitetniji. I @miki208 je potvrdio: ne postoji apsolutno slucajan niz -> samo pseudo-slucajan.
- sto je kljuc duzi (tacnije, sto je njegova duzina pribliznija duzini poruke koju sifrujemo), to je sifrat (rezultat sifrovanja) bolji - kvalitetniji.

A sada, kada smo napravili rezime, vreme je da predjemo na pricu o Asimetricnoj kriptografiji.
Spremni? Ili cete jos da diskutujemo o simetricnoj kriptografiji i kljucevima? :)
 
Spremni? Ili cete jos da diskutujemo o simetricnoj kriptografiji i kljucevima? :)

Spremni. :)
Posto se nece zalaziti u matematicku osnovu, pretpostavljam da nema svrhe pominjati kriptoanaliticke napade na AES, i ostale blokovske i protocne sifre? Doduse, verovatno ne bi bilo potrebno, vecinu to verovatno ni ne zanima, a onda bismo morali da pomenemo modularnu aritmetiku, sve teoreme i leme koje idu uz to, konacna polja, a i sama analiza takvih napada nije trivijalna (a kada je AES u pitanju, taj napad je moguc u teoriji samo uglavnom :lol: ) :)

Nisam siguran jesmo li negde gore opisali razliku izmedju protocnih i blokovskih sifara? :)
 
Poslednja izmena:
Ni slucajno. Ali, opet, zavisi od cene, od rizika. Sve se svodi na glavnu pricu oko toga, koliko vredi to sto zelimo da sacuvamo, i koliko ce nas kostati nas kripto-sistem.

Takodje, zavisi od vrste kljuca :)

Kao sto smo rekli, kriptografija se deli na simetricnu i asimetricnu.

Simetricnu smo vec obradili, i mozemo uraditi jedan kratak rezime:

- kod simetricne kriptografije, algoritam je takav da se isti kljuc koristi za sifrovanje i desifrovanje.
- imperativ u ovakvoj kriptografiji je tajnost kljuca, i kvalitet kljuca: sto je kljuc slucajniji niz brojeva, to je kvalitetniji. I @miki208 je potvrdio: ne postoji apsolutno slucajan niz -> samo pseudo-slucajan.
- sto je kljuc duzi (tacnije, sto je njegova duzina pribliznija duzini poruke koju sifrujemo), to je sifrat (rezultat sifrovanja) bolji - kvalitetniji.

A sada, kada smo napravili rezime, vreme je da predjemo na pricu o Asimetricnoj kriptografiji.
Spremni? Ili cete jos da diskutujemo o simetricnoj kriptografiji i kljucevima? :)

mislim da mozemo dalje, bar sto se mene tice
 
Nisam siguran jesmo li negde gore opisali razliku izmedju protocnih i blokovskih sifara? :)

Cilj kursa je overview, i da ljudi razumeju ono sto svakodnevno koriste. Da im potpuno razjasnimo zasto mora https, cemu, zapravo, sluzi taj PIN kada koriste karticu u bankomatu, zasto je njihova kartica bas takva, sta je to digitalni potpis (sertifikat), i tako te stvari koje se koriste svakodnevno.

Detalje implementacije algoritama, matematiku i ostalo, nisam planirao da objasnjavam, da se ne izgubimo u moru svega toga, a i da ne uplasim ljude :)

E, sada kada ja pauza za rucak gotova, i ja se najeo kao prase - mozemo da nastavimo :D

ASIMETRICNA KRIPTOGRAFIJA

Za razliku od simetricne kriptografije, u asimetricnoj kriptografiji jedan kljuc se koristi da se poruka sifruje, a drugi da se desifruje.
Dakle, algoritam je tako napravljen, da mu je potrebno jedno da zakljuca, a drugo da otkljuca.

Sad, nakon onoga sto znate na snovu dosada ispricanog, mora da postavljate pitanje "cemu sada to?" "zasto mi uopste treba da dalje komplikujemo, kada je simetricna kriptografija sasvim dovoljna da sakrije poruku?".

Pa, kriptografija nije samo prica o SAKRIVANJU.i o TAJNOSTI. Ako vam je stalo samo da sifrujete nesto, sto niko osim vas ne moze da desifruje, onda cete koristiti simetricnu kriptografiju. I to je sasvim dovoljno da svalerki posaljete skrivenu poruku.

Ali zamislite sledeci scenario: stigla vam je poruka od svalera/svalerke. Upotrebili ste kljuc, i desifrovali, i kaze vam "dodji tad i tad, tu i tu, cekam te.". I ti odes, a tamo, saceka te gomila placenih tabadzija, i olese te od batina!
I to je sve zato je je njen/njegov muz/zena posumnjao/la na prevaru, otkrilo/la kljuc, i napravio/la sacekusu! :mrgreen:

Ono sto vi bilo jako zgodno, jeste, sledeci scenario: da vi uvek mozete da znate da je tu poruku poslala bas ta osoba od koje je ocekujete.
Cesto se desava da je cak mnogo vaznije od tajnosti same poruke, upravo saznanje od koga je ta poruka dosla. I to je jedan aspekt pri razmeni poruka - autenticnost!
Drugi aspekt je neporecivost. Tacnije, da ne mogu ja da poreknem da sam bas ja poslao tu poruku. Da ne bude puj-pike ne vazi, nego da je nas kripto-protokol tako kreiran da nam obezbedi i autenticnost i neporecivost.

@PerfectOne je na prethodnoj strani postavila jako dobro pitanje: "Da li je moguce da se poruka prilikom desifrovanja promeni, i na kraju dobijemo nesto sasvim drugo?".
Vrlo lako je moguce. Moze se to desiti slucajno, greskom u procesu obrade, moze se desiti i da je se neko docepao naseg sifrata i nesto promenio-dodao (to je jedan od napada, ali kasnije cemo o tome), i jos milion drugih scenarija koje mozete da zamislite.
I sada, dolazimo do treceg glavnog aspekta sigurne digitalne razmene poruka: integritet poruke.

Dakle, identicno je kao i u obicnoj komunikaciji, tako i u elektronskoj: bilo da pirmate ili saljete poruku, vi zelite da ta poruka stigne do onoga kome je namenjena, da taj zna od koga je poruka stigla, i da ta poruka dodje nepromenjena.

Tu stupa na snagu asimetricna kriptografija.

Glavni elementi koji cine asimetricni kripto sistem su:

- Asimetricni algoritam - necemo detalje o tome, slicna je prica kao i kod simetricnog, javni su, matematicari lome glave oko njih, i na kraju se manje-vise zna koji su dobri i koji algoritmi su bezbedni za koriscenje.
- Par kljuceva (najcesce se taj par kljuceva kreira upravo tim asimetricnim algoritmom, i da korisnicima na upotrebu).
- I jos nesto trece ;)

Upamtite ovo dobro: PAR KLJUCEVA! Jer ti kljucevi, kao sto ste mozda pretpostavili, moraju biti u nekoj medjusobnoj vezi da bi mogli da otkljucaju i zakljucaju istu poruku. Moraju biti upareni!

Tako dolazimo do pojmova koje ste, mozda, bar jednom culi, a to su PRIVATNI i JAVNI kljuc.

Asimetricnu kriptografiju cemo nauciti kroz primere. Ali pre nego krenemo dalje, moramo da se upoznamo sa jos jednim pojmom, sa tim "trecim" elementom asimetricne kriptografije, koji cini svu tu magiju mogucom:

JEDNOSMERNA HASH FUNKCIJA.

Jednosmerna HASH funkcija (u daljem tekstu cu je zvati samo HASH funkcija), je takodje jedan matematicki algoritam, koji ima sledece osobine:

- Kakav god da je ulaz u funkciju, izlaz iz funkcije je uvek unapred poznate, i uvek iste velicine. Na primer, propustite 2MB podataka kroz nju, i dobijete 512 bita kao izlaz. To je, zapravo, definicija HASH funkcije.
- Jednosmerna je: dakle radi samo u jednom smeru! U suprotnom smeru, racunanje je ili nemoguce, ili toliko tesko i skupo izvodljivo (treba mnogo vremena i resursa), da je vrlo neprakticno i neisplativo.

Dakle, ne mozete od izlaznog parametra nikakvom poznatom matematikom dobiti ulazni.

Danas postoji jako puno takvih funkcija, i svaka od njih se smatra manje ili vise pouzdanom. Jedna od pouzdanijih je SHA-512.
Mozete na ovom linku (http://www.md5calc.com/) pogledati kako ona radi:
Prvo odaberite funkciju koju zelite (recimo SHA512, ili MD5), zatim u gornje polje ukucajte tekst koji zelite da propustite kroz funkciju i na kraju kliknite dugme "calculate" i dobicete ispod rezultat HASH funkcije. Obrnuti proces cemo smatrati nemogucim (kazem smatrati, jer kao i kod slucajnog-pseduoslucajnog niza, uvek je nesto moguce, ali cena gotovo uvek prevazilazi vrednost onoga sto kriptujemo).

Jeste li isprobali HASH funkciju?
Ima li sada nekih pitanja? :)
 
Poslednja izmena:
I jos jedna lepa osobina HASH funkcija - promene na samo jednom bitu u podacima su sasvim dovoljne da se HASH vrednost podataka totalno promeni, da ne bude slicna prethodnoj HASH vrednosti :)

Pored toga, HASH funkcije moraju da zadovoljavaju svojstvo da se za dati podatak x ne moze lako pronaci neki drugi podatak y, tako da vazi HASH(x) = HASH(y), takozvana otpornost na kolizije. A ako je tesko pronaci bilo kakav par x i y za koje vazi HASH(x) = HASH(y), kaze se da je funkcija jako otporna na kolizije.

A sto se tice one-way funkcija, njihovo postojanje naravno jos nije potvrdjeno (sto bi jelte znacilo da je P != NP :D), iako se veruje u to da je istina, bez obzira sto jos ne postoji dokaz :)
 
Poslednja izmena:
I jos jedna lepa osobina HASH funkcija - promene na samo jednom bitu u podacima su sasvim dovoljne da se HASH vrednost podataka totalno promeni, da ne bude slicna prethodnoj HASH vrednosti :)

A sto se tice one-way funkcija, njihovo postojanje naravno jos nije potvrdjeno (sto bi jelte znacilo da je P != NP :D), iako se veruje u to da je istina, bez obzira sto jos ne postoji dokaz :)

Da, updavo zato HASH funkcije imaju ogromnu ulogu u obezbedjenju integriteta, ali o tom potom. A sto se tice jednosmerne, rekosmo, kao i pseudo-slucajan niz, tako su i jednosmerne, zapravo, pseudo-jednosmerne: nisu 100% jednosmerne, ali su dovoljno jednosmerne, da obezbede ono sto mi od njih ocekujemo. :)

- - - - - - - - - -

Jel jednosmernost funkcije mozemo da proverimo tako sto kod koji dobijemo nakon pritiska na calculate ponovo unesemo u polje i pritisnemo calculate, pa ako ne dobijemo inicijalnu poruku to znaci da je f-ja jednosmerna?

Ne, nije to bas tako. Sto se tice pouzdanosti neke funkcije (da li je ona zaista jednosmerna ili ne), je ista prica kao i kod samih simetricnih ili asimetricnih algoritama: imamo dve opcije:
1. Da se edukujemo do te mere da postanemo baba-roge matematicari, i da sami dokazemo da li algoritam valja ili ne.
2. Da verujemo onima koji su to vec probali, i koji i dalje pokusavaju, testiraju, i rade na tome.

Ja licno sam se opredelio za drugu opciju :) Kao sto ne mogu da zavrsim medicinu sad pa da lecim sam sebe, nego verujem lekaru, tako i ovde - verujem strucnoj javnosti da su te i te funkcije dovoljno dobre za moje potrebe :)
 
Jel jednosmernost funkcije mozemo da proverimo tako sto kod koji dobijemo nakon pritiska na calculate ponovo unesemo u polje i pritisnemo calculate, pa ako ne dobijemo inicijalnu poruku to znaci da je f-ja jednosmerna?

One-way je dobila naziv po tome sto se poznavanjem fje H(x) ne moze pronaci njen inverz H'(x) :)

Tacnije, posto preslikavanje nije "1-1", inverz ni ne postoji, postoji vise podataka koji se preslikavaju u isti hash, vazno je samo da je problem odredjivanja bilo kojih od tih podataka na osnovu hasha jako tesko (da ne moze da se pronadje u doglednom vremenu, koliku god racunarsku moc da imas)

Odgovor je da, ali opet neki sajtovi uspevaju da pronadju originalne podatke na osnovu hasha. Ako neko pre tebe konvertuje neki podatak u hash, oni u bazi podataka sacuvaju par (podatak, hash), i tako za neke vrednosti uspevaju da pronadju. Kad kazemo proveriti jednosmernost, kao sto frederikrr rece, mi verujemo da je ona jednosmerna dok se ne dokaze drugacije :)
 
Poslednja izmena:
Da probam ovako da postavim pitanje: da na ovom linku imamo XOR f-ju i da je u pitanju simetricna f-ja da li bismo onda nakon unosenja sifrovane poruke i pritska na calculate mogli da dobijemo jasnu inicijalnu poruku?
Poput onog primera koji je frederikrr zadavao u vezi sa XOR funkcijom...
 
Poslednja izmena:
Da probam ovako da postavim pitanje: da na ovom linku imamo XOR f-ju i da je u pitanju simetricna f-ja da li bismo onda nakon unosenja sifrovane poruke i pritska na calculate mogli da dobijemo jasnu inicijalnu poruku?

Naravno (ukoliko poznajes i kljuc). Uz poznavanje koriscenog kriptografskog sistema, kljuca i sifrata, originalna poruka je jednoznacno odredjena. Bez samog kljuca to ne bi bilo moguce (ne bez upotrebe grube sile, koja bi verovatno bilo beskorisna ukoliko je kljuc veliki, osim ako kriptografski sistem ne sadrzi neki propust).

Treba praviti razliku izmedju HASH funkcija, i funkcija za enkripciju/dekripciju podataka. Hash funkcija H(x) -> y nije "1-1", i ne moze biti koriscena u svrhe sifrovanja necega, jer tu istu stvar kasnije ne mozes da desifrujes. Za razliku od toga, simetricna funkcija za sifrovanje F(x, kljuc) -> y je "1-1", i poznavanjem kljuca lako mozemo dobiti originalne podatke F'(y, kljuc) = x. Dakle, ima osobinu da je desifrovanje lako i brzo ako poznajes kljuc, a bez poznavanja kljuca mora biti pretesko, odnosno prakticno nemoguce za desifrovanje u doglednom vremenu.
 
Poslednja izmena:

Back
Top