Įvadas
Pirmasis duomenų šifravimą panaudojo Julijus Cezaris. Norėdamas nusiųsti žinutę savo generolams ir nepasitikėdamas savo pasiuntiniais, jis savo žinutėje pakeitė visas A raides į D, visas B į E ir t. t. Ir kiekvienas, kuris žinojo šį užkodavimo būdą, galėjo perskaityti žinutę.
Šifravimas ir dešifravimas
Tekstas, kurį galima skaityti nepanaudojus jokių specialių priemonių vadinamas paprastu tekstu. Metodas, naudojantis paprastą tekstą ir paverčiantis jį į gausybę nieko bendro tarp savęs neturinčių simbolių vadinamas šifravimu. O toks tekstas – užšifruotu tekstu. Pati šifravimo schema atrodytų maždaug taip:
|--------| --------> |/////| ----------> |---------|
paprastas šifravimas užšifruotas dešifravimas paprastas
tekstas tekstas tekstas
Kas yra kriptografija?
Kriptografija – tai mokslas, naudojantis matematiką duomenims užšifruoti ir dešifruoti. Kriptografija leidžia saugoti ypač slaptą informaciją ir siųsti ją nesaugiais tinklais (pvz., internetu), taigi jos negali perskaityti niekas kitas, kaip tik gavėjas.
Kriptografijos saugumui tikrinti yra naudojama kriptoanalizė. Paprasta kriptoanalizė – tai loginės kombinacijos, matematinių įrankių panaudojimas, kantrybė, pasiryžimas ir žinoma – sėkmė. Kriptoanalitikai dar kitaip vadinami atakuojančiaisiais.
Kodėl reikia naudoti kriptografija?
Yra nusistovėjusi nuomonė, kad žmogus šifruoja duomenis, todėl, kad daro kažką nelegalaus. Dauguma pasakys, kad jie neturi ką slėpti. Tačiau šiame informacijos amžiuje kiekviena gauta informacijos dalelytė gali būti panaudota prieš jus. Tai ypač aktualu konkurentams. Kam naudoti pinigus ir resursus, jei galima visą reikiamą informaciją gauti iš savo priešininkų. Šifravimas taip pat labai svarbi elektroninės komercijos dalis. Norint įgyti klientų pasitikėjimą, turi būti užtikrintas jų duomenų saugumas.
Algoritmai
Šiame skyriuje bus aptarti patys geriausi/stipriausi laiko patikrinti šifravimo algoritmai (PGP, DES, RSA).
PGP (Pretty Good Privacy) vienas populiariausių ir stipriausių šifravimo algoritmų. Kriptografijos stiprumas priklauso nuo to, kiek laiko ir resursų bus sunaudota norint iššifruoti tekstą. Stipri kriptografija yra užšifruotas tekstas, kurį labai sunku iššifruoti be specialaus dešifravimo įrankio. Kiek sunku? Tarkim, pasitelkus visą šių dienų kompiuterių arsenalą, net jeigu bilijonas kompiuterių padarytų bilijoną patikrinimų per sekundę, vis tiek nebūtų galima iššifruoti teksto iki visatos pabaigos. Žinoma, niekas neįrodė, kad šiandiena užšifruoti duomenys atsilaikys prieš rytojaus kompiuterių jėgą...
Kaip tai veikia?
Šifravimo algoritmas – tai matematinė funkcija, naudojama šifravimo ir dešifravimo procese. Algoritmo veikimui reikalingas slaptažodis. Slaptažodis gali buti žodis, numeris, frazė, įvairūs simboliai. Tas pats tekstas užšifruotas skirtingais slaptažodžiais skirsis vienas nuo kito.
Taigi, viso užšifruoto teksto saugumas priklausys nuo pasirinkto algoritmo ir slaptažodžio slaptumo.
Ankščiau, jei viena pusė norėjo nusiųsti įslaptintus duomenis kitai, turėjo pirma duomenis užšifruoti su raktu ir po to surasti būdą, kaip saugiai tą raktą nugabenti kitai pusei. Šia saugumo problemą išsprendė viešojo rakto kriptografija. Ji paremta tuo, kad yra sudaromi du raktai – viešas (naudojamas duomenims užšifruoti) ir privatus (naudojamas duomenims dešifruoti). Taigi jūs savo viešą raktą duodate kam tik panorėję, o privatų laikote saugiai padėtą (pvz., diske, CD-ROM ir t. t.). Žmonės, pasinaudoję Jūsų viešuoju raktu užšifruos duomenis, kuriuos dešifruoti galėsite tik Jūs patys (pasinaudodami savo privačiu raktu).
PGP naudoja viešojo rakto kriptografiją. Prieš šifruodama duomenis, PGP programa suspaudžia (suglaudžia) tekstą. Tai duoda nemažą pliusą saugumui: dauguma kriptoanalizių panaudoja iškarpų sutapimą duomenų dešifravimui. Suglaudžiamas tekstas yra šiek tiek iškraipomas, taip sumažinant galimybę sėkmingai panaudoti tokią ataką.
Rakto stiprumas dar priklauso nuo jo dydžio. Dydis matuojamas bitais. Pvz., 1028 bitų dydžio raktas skaitomas labai dideliu. Viešojo rakto kriptografijoje kuo didesnis raktas, tuo saugesni duomenys.
Viešasis ir privatus raktai yra matematiškai susiję. Nustatyti privatų raktą turint tik viešąjį yra begalo sunku, tačiau, tai įmanoma skyrus pakankamai laiko ir skaičiavimo resursų. Todėl svarbu parinkti teisingą dydį jūsų raktui. Taip pat reikia numatyti, kas norės perskaityti Jūsų duomenis, ar labai jie tam pasiryžę, kiek laiko jie turi ir maždaug kokius resursus jie gali panaudoti.
Raktai yra užšifruoti ir saugomi dvejuose failuose jūsų diske. Šie failai vadinami viešu žiedu raktams (angl. „public keyring“) ir privačiu žiedu raktams (angl. „private keyring“). Į viešą žiedą raktams galima dėti įvairių įmonių/žmonių viešuosius raktus. O į privatų žiedą – tik Jūsų privačius raktus. Jei prarasite savo privatų žiedą, nebegalėsite dešifruoti Jums skirtų duomenų.
Skaitmeninis parašas
Vienas didžiausių viešojo rakto kriptografijos privalumų yra galimybė sukurti savo skaitmeninį parašą. Tai užtikrina duomenų tikrumą ir patikimumą. Skaitmenis parašas turi tokią pat galią, kaip ir ranka rašytas. Ranka rašytą parašą galima lengvai suklastoti, tuo tarpu skaitmeninį padirbti praktiškai neįmanoma.
Skaitmeninis parašas naudoja maišymo (anlg. „hash“) funkciją. Ši funkcija sugeneruoja fiksuoto dydžio įrašą (pvz., 160 bitų) iš duotų duomenų, šis įrašo dydis nepriklauso nuo duomenų dydžio (kad ir 100 MB). Funkcija atsakinga už duomenų tikrumo/patikimumo užtikrinimą. Nors vienam bitui pakitus iš tų 100 MB, bus išvedami visiškai kitokie duomenys.
Kol bus naudojama saugi maišymo funkcija, nėra jokios galimybės parašą suklastoti, nes patys menkiausi pakitimai sužlugdys autentiškumo procesą.
Skaitmeniniai sertifikatai
Vienas minusas viešojo rakto kriptosistemoje yra tai, kad žmogus turi būti tikras, kad šifruoja duomenis tikrojo gavėjo viešuoju raktu. Kitaip gali būti įvykdyta „žmogus viduryje“ (Man-in-the-midle) ataka. Tai yra blogietis pakiša jums savo viešajį raktą, kuriame visa indentifikacija atitinka Jūsų pažįstamo (ar šiaip partnerio) indentifikaciją. Jūs nieko neįtardami tuo raktu užšifruojate slaptus duomenis. Tada blogiečiui tereikia perimti šiuos duomenis ir dešifruoti.
Skaitmeniniai sertifikatai gali užtikrinti, kad viešasis raktas priklauso būtent tam žmogui. Sertifikatą galime įsivaizduoti kaip asmens pasą. Tai dokumentas nurodantis Jūsų asmenybę, pasą jums suteikė valstybė ir jis užtikrina Jūsų identiškumą. Jūs jį saugote, nes jums pametus pasą, kitas žmogus gali apsimesti jumis.
Sertifikatas susideda iš trijų dalių:
- viešojo rakto;
- sertifikato informacija (informacija apie vartotoja tokia kaip vardas, ID (identifikacija) ir kita);
- vieno ar daugiau skaitmeninių parašų.
Yra du skirtingi PGP sertifikato formatai:
- PGP sertifikatai;
- X.509 sertifikatai.
PGP sertifikato formatas:
- PGP versijos numeris;
- sertifikato turėtojo viešasis raktas;
- sertifikato turėtojo informacija (vardas, ID, fotografija ir kita);
- sertifikato šeimininko skaitmeninis parašas;
- sertifikato galiojimo laikas;
- pageidaujamas simetrinio šifravimo algoritmas (CAST, „Triple-DES“, IDEA).
X.509 sertifikato formatas:
- X.509 versijos numeris;
- sertifikato turėtojo numeris;
- sertifikato serijinis numeris;
- sertifikato turėtojo unikalus identifikatorius;
- galiojimo laikas;
- unikalus sertifikato išdavėjo vardas;
- sertifikato išdavėjo skaitmeninis parašas;
- sertifikato išdavėjo naudojamas kodavimo algoritmas.
Sertifikato galiojimas ir patikimumas
Galimi keli galiojimo patikrinimo būdai. Pvz. pats gavėjas atneša savo viešąjį raktą. Toks būdas varginantis ir nepatogus. Kita galimybė, tai pačiam patikrinti sertifikato „pirštų atspaudą“ (angl. „fingerprint“). Taip, kaip kiekvieno žmogaus pirštų atspaudas yra unikalus, taip ir sertifikato „pirštų atspaudas“ yra tik vienas. „Pirštų atspaudas“ gali buti šešioliktainiai skaičiai arba tam tikrų raidžių sekos. Jį patikrinti galite tiesiog paskambinę gauto rakto savininkui ir paprašę, kad jis padiktuotų jį. Šis būdas tinka tik tuomet, kai pažystate tą žmogų. Šiaip dauguma įmonių užrašo sertifikato „pirštų atspaudą“ ant savo verslo kortelių (vizitinių).
Kitas reikalas, kai Jūs nepažįstate žmogaus ir Jums reikia patikrinti rakto galiojimą. Tuomet Jums reikia „patikėti“ trečiąja šalimi, kuri už jus patikrino rakto galiojimą. Pavyzdžiui „Sertifikato Autoriteto“ (angl. „Certification Authority“) patikrinti ir pasirašyti raktai automatiškai priimami kaip galiojantys.
Pasitikėjimo modeliai
- Tiesioginis pasitikėjimas. Paprasčiausias modelis, kai žmonės vieni kitus pažįsta ir žino, iš ko atėjo raktas.
- Hierarchinis pasitikėjimas. Yra naudojami keli pagrindiniai sertifikatai, su kuriais patikimi visi kiti paprastų vartotojų raktai.
- Pasitikėjimo voratinklis. Šis modelis naudoja ankstesnių modulių būdus ir dar prideda tai, kad kai vienas vartotojas pasirašo kito vartotojo raktą, tampa už tą raktą „atsakingas“.
Pasitikėjimo lygiai naudojami PGP
- Visiškas pasitikėjimas. Kuomet raktas yra pasirašytas Jūsų arba kokio kito autoriteto.
- Nežymus pasitikėjimas. Kai vienas iš dviejų raktų pažymimas „visiško pasitikėjimo“ parašu.
- Visiškas nepasitikėjimas.
Sertifikato panaikinimas
Sertifikatai tol naudingi, kol yra galiojantys. Neprotinga šiaip sau pažymėti, kad sertifikatas galioja amžinai. Daugumoje organizacijų sertifikatai galioja tam tikrą laiką. Sertifikate užfiksuojamas jo išleidimo laikas ir galiojimo pasibaigimo laikas. Galiojimui pasibaigus, jis bus „nebepatikimas“. Tačiau ir negaliojantį sertifikatą bus galima naudoti užšifruotų duomenų patikimumui patikrinti. Sertifikatas taip pat panaikinamas, kai vartotojas nori nutraukti sutartį su firma/organizacija. Kiekvienas žmogus gali panaikinti savo parašą iš sertifikato.
Svarbu apie sertifikato panaikinimą pranešti potencialiems vartotojams. Tai galima padaryti patalpinus jį į sertifikato serverį. CA yra sudaromas tokių sertifikatų sąrašas.
Raktų padalinimas
Yra galimybė „suskaldyti“ privatų raktą į dalis (ir pvz., išdalinti jas tam tikriems žmonės). Kiekviena dalis yra bevertė, kol nesurenkamos visos dalys. Surinkus dalis „sulipdomas“ privatus raktas.
PGP programas galima parsisiųsti iš http://www.pgpi.com svetainės.
DES
Duomenų kodavimo standartas (angl. „Data Encryption Standart“), sukurtas JAV vyriausybės 1977 metais. Tai blokinio tipo šifravimas, kuriame 64 bitų duomenų blokai užšifruojami naudojant 56 bitų privatų raktą. DES algoritmas naudojamas daugumoje programų. Naudojamas vyriausybiniuose bei privačiuose sektoriuose.
Šifruojant daugiau nei 64 bitus yra naudojami keturi oficialūs metodai:
- „Elektroninė kodų knyga“ (angl. „Electronic Codebook“) ECB;
- „Šifro blokų grandinių“ (angl. „Cipher Block Chaining“) CBC;
- „Išvesties atsakomoji reakcija“ (angl. „Output Feedback“) OFB;
- „Šifro atsakomoji reakcija“ (angl. „Cipher Feedback“) CFB.
DES algoritmas taip pat gali būti naudojamas iki 64 bitų kontrolės sumoms sudaryti (angl. „checksums“).
RSA
RSA yra viešojo rakto tipo kriptosistema, kuri palaiko duomenų šifravimą ir skaitmeninius parašus. Veikimas šio algoritmo yra toks: imami du dideli pirminiai skaičiai p ir q. Jie sudauginami n = p * q. n yra vadinamas moduliu. Po to parenkamas skaičius e, mažesnis už n ir artimas pirminiams (q - 1)(p - 1). Tai reiškia, kad e neturi nieko bendra su (q - 1)(p - 1) išskyrus 1. Surandamas kitas skaičius d, kad (e * d - 1) dalintųsi iš (q - 1)(p - 1). Atitinkamai e ir d yra viešas ir privatus komponentai. Pora (e, n) bus viešasis raktas, o (d, n) – privatus.
RSA nėra labai greitas algoritmas. DES iki 100 kartų greitesnis, tačiau ir silpnesnis už RSA. RSA laboratorija rekomenduoja naudoti 1024 bitų ilgio raktą. Labai svarbiems duomenis koduoti naudokite 2048 bitus.
Daugiau informacijos rasite kūrėjų svetainėje http://www.rsasecurity.com.
MD5
Labai populiarus algoritmas. Ima fiksuoto dydžio žinutę ir išveda 128 bitų „pirštų atspaudą“. Naudojamas viešojo rakto kriptosistemose skaitmeniniams parašams daryti. Taip pat failų palyginimui, pvz., sukuriame du vienodus failus:
$ echo "testas" > pvz1 $ echo "testas" > pvz2
Sukuriame md5 „pirštų atspaudą“ (angl. „fingerprint“):
md5sum pvz1 pvz2
22b3793a536400fd469807099e5d2b9d pvz1
22b3793a536400fd469807099e5d2b9d pvz2
Kaip matome vienodų failų „atspaudai“ sutampa. Dabar šiek tiek pakeiskime vieno failo turinį:
echo " " > pvz1
md5sum pvz1 pvz2
d784fa8b6d98d27699781bd9a7cf19f0 pvz1
22b3793a536400fd469807099e5d2b9d pvz2
Daugiau informacijos – http://www.rfc-editor.org, faile rfc1321.
Žinoma, čia aptarti tik populiariausi algoritmai. Liko nepaminėti IDEA, SHA, „Triple-DES“, „Blowfish“ ir kiti. Kriptografija kol kas vienintelis _patikimas_ būdas apsaugoti savo duomenis nuo svetimų akių.