Kriptografija
Į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 naudojatis 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 atrodytu maždaug taip
|--------| --------> |/////| paprastas šifravimas užšifruotas tekstas tekstas |/////| ----------> |---------| užšifruotas dešifravimas paprastas tekstas tekstas
Kas yra kriptografija?
Kriptografija, tai mokslas naudojantis matematiką užšifruoti ir dešifruoti
duomenims. Kriptografija leidžia saugoti ypač slaptą informaciją ir siųsti ją
nesaugiais tinklais(kaip Internet), 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ė. Kripto analitikai 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 delelytė 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).
1) PGP
Stipri kriptografija
“Šiame pasaulyje yra dviejų tipų kriptografijos: Viena, kuri apsaugos jūsų
duomenis nuo jūsų vaikų Kita, kuri apsaugos jūsų duomenis nuo didžiųjų
vyriausybių.”
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 vekia?
Š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 poto 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ėje, 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(suarchivuoja) tekstą. Tai duoda nemažą pliusą saugumui: dauguma
kriptoanalizių panaudoja iškarpų sutapimą duomenų dešifravimui. Archivuojant
tekstą jis š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 susije. 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šas žiedas raktams(angl. “public keyring”) ir privatus žiedas
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 100MB). Funkcija atsakinga už
duomenų tikrumo/patikimumo užtikrinimą. Nors vienam bitui pakitus iš tų 100MB
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žystamo (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(indentifikacija) 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 šeiminiko 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ų antspaudą” (angl. “fingerprint”). Taip, kaip
kiekvieno žmogaus pirštų antspaudas yra unikalus, taip ir sertifikato “pirštų
antspaudas” yra tik vienas. “Pirštų antspaudas” gali buti šešioliktainiai
skaičiai arba tam tikrų raidžių sekos. Jį patikrinti galite tiesiog paskambine
gauto rakto savinikui 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ų
antspaudą” 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čiaja šalimi, kuri už jus patikrinio
rakto galiojimą. Pavyzdžiui “Sertifikato Autoriteto”(angl. “Certification
Authority”) patikrinti ir pasirašyti raktai automatiškai priimami kaip
galiojantys.
Pasitikėjimo modeliai:
1) Tiesioginis pasitikėjimas. Papraščiausias modelis, kai žmonės vieni kitus
pažysta ir žino iš ko atėjo raktas.
2) Hierarchinis pasitikėjimas. Yra naudojami keli pagrindiniai sertifikatai su
kuriais patikimi visi kiti paprastų vartotojų raktai.
3) Pasitikėjimo voratinklis. Šis modelis naudoja ankstensių 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 šaip sau pažymėti,
kad sertifikatas galioja amžinai. Daugumoje organizacijų sertifikai 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(anlg. “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 oficialus metodai:
* “Elektroninė kodu knyga” (angl. “Electronic Codebook”) ECB
* “Šifro blokų grandinų” (anlg. “Cipher Block Chaining”) CBC
* “Išvesties atsakomoji reakcija” (angl. “Output Feedback”) OFB
* “Šifro atsakomoji reakcija” (angl. “Cipher Feedback”) CFB
DES algortimas taip pat gali būti naudojamas iki 64 bitų kontrolės sumoms
sudaryti(anlg. “checksums”).
RSA
RSA yra viešojo rakto tipo kriptosistema, kuri palaiko duomenų šifravimą ir
skaitmeninius parašus. Veikimas šio algortimo yra toks: imami du dideli
pirminiai skaičiai p ir q. Jie sudauginami n = p * q. n yra vadinamas moduliu.
Poto parenkamas skaičius e mažensis 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 algortimas. 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 kurėjų svetainėje
http://www.rsasecurity.com
MD5
Labai populiarus algortimas. Ima fiksuoto dydžio žinutę ir išveda 128 bitų
“pirštų antspaudą”. 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ų
antspaudą”(angl. “fingerprint”):
md5sum pvz1 pvz2
22b3793a536400fd469807099e5d2b9d pvz1
22b3793a536400fd469807099e5d2b9d pvz2
Kaip matome vienodų failų “antspaudai” 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 kolkas vienintelis _patikimas_ būdas
apsaugoti savo duomenis nuo svetimų akių.