U subotu 26. septembra sam učestvovao na developers’ mday konferenciji u organizaciji kompanije Mainstream koja je okupila predstavnike nekih od najvećih domaćih sajtova i portala.
Ja sam ispred LimundoGrada održao predavanje o SSL protokolu, njegovoj generalnoj matematičkoj pozadini i njegovoj upotrebi u sigurnim https konekcijama. U nastavku je deo predavanja koje objašnjava osnovne koncepte https (HTTP over TLS, HTTP over SSL ili HTTP Secure) protokola.
1.) Razmena poruka – problem
Istorijski, ljudi su oduvek imali potrebu da razmenjuju poverljive poruke preko nesigurnih kanala komunikacije. Tako je prema mnogim izvorima jos Julije Cezar koristio način šifrovanja poruke koji se zasnivao na zameni slova poruke po ključu koji je bio poznat samo njemu i njegovim generalima kojima je poruka bila namenjena. Ovakvu poruku su njegovi glasnici nosili kroz rimsko carstvo, a šifrovanje je garantovalo da poruka ne bi mogla da se pročita ako bi glasnik bio presretnut i poruka pala u pogrešne ruke. Takav način kriptovanja je po njemu dobio naziv Cezarova šifra i predstavlja jedan od prvih simetričnih kriptoalgoritama.
Sa ulaskom Interneta u sve pore naših života, više nego ikada postoji potreba za kriptovanjem komunikacije koja ide kroz nesigurni kanal – Internet.
Poruke koje preko Interneta šaljemo jedni drugima prolaze kroz mnoga čvorišta na svom putu između pošiljaoca i primaoca, i na svakom takvom čvorištu ju je vrlo lako presresti i pročitati, ili još gore izmeniti i proslediti dalje primaocu koji nije svestan da je poruka izmenjena.
2.) Prvo rešenje
Očigledno rešenje za ovaj problem je primena simetričnog šifrovanja/kriptovanja poput Cezarovog algoritma. Kod simetričnog kriptovanja se podaci koji se razmenjuju šifruju i dešifruju jednim tajnim ključem (lozinkom), koji mora da bude poznat i pošiljaocu i primaocu kako bi se omogućila komunikacija. Samo kriptovanje se vrši snažnim algoritmima koji praktično onemogućavaju kriptoanalizu i dešifrovanje poruke ako se ne zna tajni ključ. Neki od predstavnika simetričnih algoritama su Twofish, Serpent, AES, Blowfish, DES koderi itd.
Na prvi pogled ovakvo kriptovanje obezbeđuje sigurnost poruka, međutim ono sadrži jednu ugrađenu manu – da bi primalac mogao da dešifruje našu poruku mora da zna naš tajni ključ. A u praksi jedini način da primaocu efikasno saopštimo naš tajni ključ/lozinku jeste da ga pošaljemo nekriptovanog kroz taj isti nesigurni kanal komunikacije. To obesmišljava ceo koncept, jer osoba koja prisluškuje našu rutu će iščitati tajni ključ i moći će da ga koristi ubuduće za dešifrovanje naših šifrovanih poruka.
3.) Drugo rešenje
Rešenje ovog problema je tokom sedamdesetih godina prošlog veka pronađeno razvojem matematičkog modela asimetričnog kriptovanja. Asimetrično kriptovanje podrazumeva da primalac poseduje jedinstveni par ključeva – tajni ključ i javni ključ. Ova dva ključa uvek idu u paru, tačnije svaki javni ključ je povezan sa tačno jednim tajnim ključem i obrnuto. Javni ključ primaoca je javno dostupan i poznat svim zainteresovanim pošiljaocima. Tajni ključ poznaje isključivo primalac – njegov vlasnik.
Sam proces komunikacije izgleda tako što pošiljalac najpre iščita javni ključ primaoca (sa njegovog websajta npr) i kriptuje svoju poruku javnim ključem primaoca. Algoritam asimetričnog kriptovanja obezbeđuje da se ova poruka nakon toga može dekriptovati isključivo tajnim ključem primaoca (nemoguće ju je dešifrovati javnim ključem korišćenim za njeno kriptovanje). Kriptovana poruka se zatim šalje primaocu koji je dekriptuje svojim tajnim ključem i tako je otvara za čitanje.
Ovakav proces ne zahteva razmenu tajnog ključa koji uvek ostaje u isključivom posedu primaoca i time je ukinuta najveća mana simetričnog kriptovanja – razmena tajnog ključa.
Prvi algoritam koji je omogućavao ovakav koncept je RSA (dobio je naziv po prezimenima matematičara koji su ga razvili – Ron Rivest, Adi Shamir i Leonard Adleman) i zasnovan je na faktorisanju dva velika prosta broja i upotrebi Ojlerove fi funkcije. Detaljnije proučavanje same matematike RSA algoritma možete da nastavite ovde.
Kasnije su razvijani novi asimetrični algoritmi, kao što su na primer DSA (Digital Signature Algorithm) razvijen od strane vlade Sjedinjenih Američkih Država, ECDSA (Elliptic Curve DSA) varijanta DSA zasnovana na grupi eliptičkih krivulja koji ima manji ključ ali povećanu sigurnost itd.
4.) Opet problem
Međutim, kako to obično biva u inženjerskoj praksi, kada god na jednoj strani nešto dobijete – na drugoj strani morate nešto da izgubite. Isto je važilo i za rešenje sigurne komunikacije preko asimetričnih kriptoalgoritama. Naime, ovi algoritmi jesu omogućavali sigurnu razmenu šifrovanih poruka eliminacijom potrebe za razmenom tajnog ključa, međutim zbog kompleksnije matematike u svojoj pozadini oni su značajno sporiji od simetričnih algoritama. To bi u slučaju njihovog isključivog koriščenja dovelo do značajnog smanjena brzine Interneta i povećanja troškova zbog skupih procesora potrebnih za obradu ovakvih poruka.
5.) Hibridno rešenje
Inženjerska praksa je dala i rešenje ovog novog problema – hibridizacija. Hibridizacija ili ukrštanje je proces u kojem se dve vrste spajaju/ukrštaju sa ciljem da se uklone mane a zadrže prednosti svake od ukrštenih vrsta.
U ovom slučaju osnovna ideja je da se samo prilikom prvog uspostavljanja veze koristi asimetrični kriptoalgoritam kojim se kriptuje simetrični ključ i zatim se tako kriptovan simetrični ključ pošalje drugoj strani. Nakon što se na ovaj način razmeni simetrični ključ, ostatak komunikacije se kriptuje brzim simetričnim algoritmom uz korišćenje simetričnog tajnog ključa. Ovakav koncept omogućava da se spori asimetrični kriptoalgoritam koristi samo prilikom prve razmene paketa (handshake) koji čini zanemarljivo mali procenat svih razmenjenih podataka. Tako je obezbeđena sigurnost a istovremeno sačuvana i brzina komunikacije.
6.) Ljudski faktor
Međutim, ovo nije dovoljno da se u potpunosti garantuje bezbedna komunikacija. Sa tehničke strane podaci su kriptovani i ne mogu se pročitati, ali ništa ne sprečava treću stranu da se lažno predstavlja kao primalac poruke, pošalje svoj javni ključ, i tako na prevaru od pošiljaoca dobije poverljive podatke koje je u stanju da dekriptuje (man in the middle attack).
Da bi se rešio ovaj problem, koji suštinski nije tehničke prirode, uvodi se posebno telo – Certificate Authority (CA). CA je treća strana koja je od poverenja i kojoj veruju sve ostale strane u komunikaciji. CA kod sebe drži spisak javnih ključeva i izdaje poseban fajl sa kriptovanom potvrdom da je javni ključ zaista u vlasništvu osobe koja to tvrdi – ovaj fajl se naziva certifikat. Svako može da zatraži certifikat o svom javnom ključu tako što ovom telu pošalje Certificate Signing Request (CSR) koji sadrži javni ključ za koji se traži certifikat i naravno podatke o tražiocu. Neka od najpoznatijih CA tela su na primer Thawte, Symantec, Digicert itd.
Time se zaokružuje proces komunikacije:
– pošiljalac kontaktira primaoca i traži od njega javni ključ i certifikat
– pošiljalac kod CA pomoću certifikata upoređuje da li je javni ključ zaista u vlasništvu primaoca, ili je neko pokušao da se lažno predstavlja i da poturi svoj javni ključ
– CA potvrđuje da je javni ključ u vlasništvu primaoca
– pošiljalac kriptuje simetrični ključ koristeći javni ključ primaoca i šalje ga primaocu
– primaoc dekriptuje simetrični ključ koristeći svoj asimetrični tajni ključ
– Ostatak komunikcije se obavlja simetričnim kriptovanjem za koje se koristi razmenjeni tajni ključ
7.) SSL
Gornji proces zapravo predstavlja SSL (Secure Sockets Layer) protokol koji se koristi za sigurnu (https) komunikaciju preko Interneta. Pošiljalac je browser posetioca websajta koji je zaštićen https protokolom, a primalac je server na kome se taj websajt nalazi (hostuje).
Želeo bih ovde da napomenem da je TLS (Transport Layer Security) zapravo isto što i SSL. Tačnije, TLS je unapređenje SSL algoritma koje je primenjeno 1999. godine. Izraz SSL se jednostavno zadržao iz navike.
8.) Upotrebe
SSL kao koncept omogućava još neke veoma važne koncepte, od kojih bih izdvojio:
– Digitalni potpis – nedvosmisleno utvrđivanje ko je pošiljalac poruke
– Neporecivost – pošiljalac poruke/emaila koji je digitalno potpisan ne može da porekne da je upravo on poslao tu poruku
– Nepromenljivost – Ako treća osoba pokuša da promeni poruku, proverom digitalnog potpisa to može nepobitno da se utvrdi. Nepromenljivost je vrlo bitna – poznata je priča o drevnom pisaru koji je zatvoru sa osuđenikom na smrt poslao poruku “Ubiti, ne osloboditi” umesto poruke “Ubiti ne, osloboditi”. Jedna sitna promena – zarez na pogrešnom mestu, je značila razliku između života i smrti.
O ovim i drugim konceptima kao i o našim iskustvima vezanim za uticaj https na SEO, brzinu sajta i slično, planiramo da pišemo detaljnije u nekom od narednih blogova, u međuvremenu sva svoja pitanja može postaviti ovde ili preko @LimundoGradnja twitter naloga.
Super što si prošao kroz istoriju kriptografije i na koje mane su nailazili i kako je rešeno,
tako je jasnije kako (i zašto) SSL funkcioniše na ovaj način.
Kratak prilog o budućnosti kriptografije (video 3 min):
https://www.youtube.com/watch?v=BylWT5gsgfM