U članku o zaštiti (WordPress) sajtova, spominjao sam značaj SSL/TLS enkripcije (i korištenja https protokola). Ono na čemu se taj protokol zasniva je asimetrična enkripcija. U ovom članku objasniću kratko i jednostavno šta je to asimetrična enkripcija. Ovaj mehanizam enkripcije je važno razumeti, kako bi se lakše shvatile druge teme vezane za bezbednost i privatnost i kako bi se moglo prepoznati koji saveti u vezi toga su dobri, a koji pogrešni. Internet je pun i jednih i drugih. Poseban članak objašnjava pojam “višefaktorske (dvostepene) autentifikacije“.
Sadržaj:
- Definicija asimetrične enkripcije
- Problemi – Zadaci
- Digitalni otisak prsta – “Hash”, ili “Message digest”
- Kriptovanje (šifrovanje, enkripcija)
- Asimetrično šifrovanje
- Slanje i prijem poruke
- PKI – infrastruktura sistema sa javnim ključevima
- Objašnjenje asimetrične enkripcije na praktičnom primeru
1. Definicija asimetrične enkripcije
Asimetrična enkripcija se može objasniti u jednoj rečenici. Zapamtite samo narednu rečenicu, a kroz tekst ćete korištenjem u njoj datih pravila, logički zaključiti kako se tim “alatom” rešavaju postavljeni zadaci, dakle:
Imamo povezan par ključeva, takav da sve što jedan ključ kriptuje (“zaključa”), jedino drugi ključ može dekriptovati (“otključati”).
2. Problemi – Zadaci
Savremene komunikacije zadaju nam sledeće probleme (između ostalih) prilikom razmene podataka/informacija, koje možemo rešiti na različite načine:
- Tajnost – samo primalac može videti podatke (dekriptovane).
- Autentičnost – primalac ima potvrdu da je onaj ko se predstavlja kao pošiljalac zaista i autor poruke.
- Integritet – primalac ima potvrdu da je poruka stigla u neizmenjenom stanju (kako je poslata).
- Neporecivost – pošiljalac ne može poreći slanje podataka (ne može tvrditi da je to neko drugi slao).
Svi navedeni problemi mogu se rešiti asimetričnom enkripcijom (mada se prvi može rešiti i simetričnom enkripcijom) i hash funkcijom. Do kraja ovog članka biće vam jasno i kako.
3. Digitalni otisak prsta – “Hash”, ili “Message digest”
Da bi se u potpunosti razumela asimetrična enkripcija, važno je shvatiti još jedan alat (pojam): heš (eng. “hash”). Hash je matematička funkcija koja se vrši nad podacima, tako da daje digitalni otisak tačno određene dužine (u zavisnosti od funkcije to može biti 128 bita, 256 bita, ili manje/više). Jedan primer primene hash funkcije:
Sva ispod nabrojana svojstva hash funkcije, osim poslednjeg, se mogu zaključiti iz slike 1:
- Primenom hash funkcije nad originalom, dobija se digitalni otisak (hash) iste dužine.
- Čak i minimalna promena podataka rezultuje drastičnom promenom hash vrednosti.
- Originalni podaci se ne mogu rekonstruisati iz hash vrednosti.
Gore navedena svojstva su od ključnog značaja. Na primer, hash vrednost rečenice “Vrati vrata.” i celokupne trilogije “Gospodar Prstenova” biće identične dužine (reda veličine 256 bita, u zavisnosti od korištenog hash algoritma). Takođe, heš vrednosti reči “gremlin” i “gremlini” biće drastično različite. Konačno: iz dobijenih hash vrednosti, biće nemoguće zaključiti sadržaj originalnih podataka – hash je “jednosmerna funkcija” (ispravan termin je “ireverzibilna funkcija”).
Hash se naziva i “digitalnim potpisom” – što u suštini i jeste.
4. Kriptovanje (šifrovanje, enkripcija)
Za razliku od hash funkcije, šifrovanje (kako god da se izvodi), ima sledeća svojstva:
- Veličina dobijenih šifrovanih podataka zavisi od veličine izvornih podataka koji se šifruju (tehnički ovo nije uvek obavezno, ali u praksi se svodi na to).
- Originalni polazni (izvorni) podaci se mogu rekonstruisati (uz odgovarajući ključ za dekriptovanje).
Sada vas molim da pročitate još jednom prva tri poglavlja. Ponovite i zapamtite boldovanu rečenicu iz 1. poglavlja. Zatim shvatite i zapamtite razliku između hash funkcije i kripovanja. Na kraju, pokušajte smisliti kako biste rešili probleme navedene u poglavlju 2, koristeći te alate.
Ovo nije bio test da li ste robot (hoćete li upasti u beskonačnu petlju), zaista je važno da vam prva tri poglavlja “legnu”. 🙂 Sad možemo nastaviti.
Šifrovanje može biti:
- Simetrično – jedan (isti) ključ se koristi za enkripciju i za dekripciju.
- Asimetrično – koristi se par ključeva. To jest, dva ključa su generisana kao poseban par, tako da sve što jedan ključ kriptuje, (jedino) drugi ključ iz tog para može da dekriptuje – i obrnuto.
Simetrično kriptovanje je brže (zahteva manje resursa) od asimetričnog. Glavni problem sa simetričnim šifrovanjem je kako da razmenim sa sagovornikom jedan isti ključ koji ćemo koristiti – tako da ga niko drugi ne može videti / presresti / ukrasti.
Ovo praktično zahteva da se lično vidimo i razmenimo ključ. Dodatni problem je ako se ne poznajemo lično. Ili ako smo daleko jedno od drugog. Sve u svemu, razmena simetričnog ključa može biti prilično nepraktična. Osim ako iskoristimo asimetričnu enkripciju!
Asimetrična enkripcija nam omogućava da razmenimo tajni ključ (za simetričnu enkripciju) preko Interneta – na način koji je bezbedan, tako da ga niko ne može ukrasti / videti! Kako se to postiže, objasnićemo u nastavku.
5. Asimetrično šifrovanje
Kao što je rečeno, asimetrično šifrovanje se zasniva na paru ključeva:
- Jedan od njih svi znaju (imaju) i on je javni ključ.
- Drugi zna (ima) samo vlasnik para i to je tajni ključ (privatni ključ).
Dakle: svako zna (ima) moj javni ključ, a jedino ja znam (imam) svoj privatni ključ.
Isto važi i za Perin, Sanjin i Averelov par ključeva – svi znamo javne, a privatne zna jedino svako svoj.
Sada da ponovimo: sve što jedan ključ šifruje, može dešifrovati samo drugi ključ (iz istog para ključeva).
6. Slanje i prijem poruke
Setite se problema iz 2. poglavlja, potrebno je postići:
- Tajnost – samo ovlašteni smeju videti podatke (dekriptovane).
- Autentičnost – primalac ima potvrdu da je onaj ko se predstavlja kao pošiljalac zaista i autor poruke.
- Integritet – primalac ima potvrdu da je poruka stigla u neizmenjenom stanju (kako je poslata).
- Neporecivost – pošiljalac ne može poreći slanje podataka (ne može tvrditi da je to neko drugi slao).
Pošiljalac poruke (podataka) može ovo postići korištenjem asimetrične enkripcije (i hash funkcije). Da bi to postigao, pošiljalac radi sledeće:
- Uradi hash nad originalnom porukom (podacima).
- Svojim tajnim ključem šifruje dobijeni hash poruke.
- Poruku šifruje javnim ključem primaoca.
- Šalje primaocu zajedno ono što je kreirao pod 2. i 3.
Primalac poruke treba onda da:
- Dešifruje poruku svojim tajnim ključem.
- Dešifruje primljeni hash javnim ključem pošiljaoca.
- Uradi hash nad dešifrovanom porukom (dobijenom pod 1.).
- Uporedi hash dobijen pod 2. sa hash-om dobijenim pod 3.
Rezultati ove procedure
Pošiljalac je siguran da:
- poruku može pročitati (dešifrovati) samo onaj kome je namenjena.
Primalac je siguran da:
- je poruku mogao samo on/ona pročitati (dešifrovati).
- je poruku poslao onaj koji se i predstavio da ju je poslao.
- pošiljalac ne može poreći slanje poruke.
- poruka na putu nije izmenjena.
Ako vam nije jasno zbog čega su pošiljalac i primalac toliko sigurni u gore navedene tvrdnje, pročitajte iz početka šta je enkripcija, hash i setite se glavnog pravila asimetrične enkripcije:
Sve što jedan ključ šifruje, može dešifrovati samo drugi ključ (iz istog para ključeva).
7. PKI – infrastruktura sistema sa javnim ključevima
U praksi se asimetrična enkripcija najčešće izvodi uz pomoć Sertifikacionog tela (eng. “Certificate Authority” – CA). Sertifikaciono telo je organizacija koja izdaje digitalne sertifikate, tj. parove ključeva (javnih i tajnih). Da bi ovakav sistem funkcionisao, Sertifikaciono telo mora biti od poverenja – tj. CA je onaj kojem “svi veruju”.
Dakle, CA radi sledeće:
- Proveri (utvrdi) identitet vlasnika.
- Generiše par ključeva (javni i tajni).
- Poveže ime vlasnika sa njegovim javnim (i tajnim) ključem. Ovo se zove “izdavanje digitalnog sertifikata“.
- Potpisuje izdati digitalni sertifikat tajnim ključem CA.
- Objavljuje ovo javno (CA takođe objavljuje i rok važenja digitalnih sertifikata, kao i listu nevažećih sertifikata).
Digitalni sertifikat = ime, prezime i podaci vlasnika + njegov javni ključ, potpisani tajnimi ključem CA.
Suština je: svi moraju verovati CA. Sistem asimetrične enkripcije ne može postojati (funkcionisati) bez postojanja CA kojem svi veruju.
8. Objašnjenje asimetrične enkripcije na praktičnom primeru
Pošto je meni tako lakše bilo da shvatim, ovde ću se poslužiti praktičnim primerom za objašnjenje. Prvo da ponovimo ključne rečenice:
Asimetrična enkripcija
- Sve što jedan ključ šifruje, može dešifrovati samo drugi ključ (iz istog para ključeva).
Hash
- Primenom hash funkcije nad originalom, dobija se digitalni otisak (hash) iste dužine.
- Čak i minimalna promena podataka rezultuje drastičnom promenom hash vrednosti.
- Originalni podaci se ne mogu rekonstruisati iz hash vrednosti.
Krenimo sad s primerom. Recimo da želim poslati poruku Betmenu (sve jedno da li je to pismo, ili neki fajlovi, šta god – nazvaćemo to “poruka”). Tako da je samo Betmen može pročitati. I tako da Betmen bude siguran da je poruku poslao baš kolega superheroj Bike Gremlin, a ne neko ko se lažno tako predstavlja.
- Pošto nemam pojma ko je čovek (recimo tako, nećemo raditi spojlere ovde), pitaću sertifikaciono telo (CA): “Koji je Betmenov javni ključ?”
- Kako da Betmen bude siguran da poruku šalje baš Bike Gremlin? Potpisaću je digitalno. Dakle: radim hash nad porukom. Onda šifrujem hash svojim tajnim ključem.
- Sad mogu šifrovati poruku Betmenovim javnim ključem, tako da je samo Betmen može dešifrovati (svojim tajnim ključem).
- Zajedno sa porukom šaljem i hash koji sam kriptovao svojim tajnim ključem.
Nekoliko sekundi kasnije, u Gotamu:
Betmen vidi da mu je stigla poruka. Od “Bike Gremlin” – “Skice Bet-cikl prototipa”.
Konta – moglo bi biti super, osim ako je Joker podmetnuo neku smicalicu da se polomim u vožnji. Da proverim.
- Betmen dešifruje poruku svojim tajnim ključem. Sad hoće da potvrdi da je poruku zaista poslao Bike Gremlin.
- Da bi to uradio, prvo pravi hash poruke.
- Zatim pita CA: “Koji je Bike Gremlin-ov javni ključ?” i tim ključem dekriptuje hash koji sam ja poslao.
- Na kraju poredi dekriptovani hash sa hash-om koji je on napravio. Ako su isti, poruku je sigurno poslao Bike Gremlin i niko drugi. Istovremeno, ako se polomi u vožnji, ja neću moći okriviti Joker-a da je podmetnuo loše planove, jer moj potpis originalne poruke potvrđuje da sam ja autor.
Ono što se u praksi često koristi je da se na ovaj način razmene ključevi za simetričnu enkripciju. Tako da mogu koristiti asimetričnu enkripciju da pošaljem poruku koja kaže:
“Pozdrav Betmene, ođe Bike Gremlin sinji. Kako bismo brže komunicirali, a i da ne moramo smarati CA svaki put, hajde da koristimo simetričnu enkripciju od sada. Neka šifra za kriptovanje bude: ‘Marvel je smeće’. “
Molio bih čitaoce da ovu šifru nikom ne kažu, jer ćemo onda morati smišljati drugu.
– Vaš Bike Gremlin
Kad pristupate sajtu preko https protokola (TLS enkripcija), dešava se upravo nešto nalik ovome. Asimetrična enkripcija se koristi za potvrdu identiteta i sigurnu razmenu simetričnih ključeva, koji se onda koriste za dalju komunikaciju. Ovo se zove: “HTTPS rukovanje“.