Uvod

Osnovni pojmi

Kriptologija je veda o tajnosti, šifriranju, zakrivanju sporočil (kriptografija) in o razkrivanju šifriranih podatkov (kriptoanaliza). Beseda prihaja iz grščine: kryptos logos pomeni skrita beseda. Uporabljata se še pojma enkripcija (šifriranje) in dekripcija. Osnovno sporočilo ponavadi imenujemo čistopis (cleartext, plaintext), zašifrirano pa šifropis ali tajnopis(kriptogram, ciphertext)

Sporočilo po nekem postopku (algoritmu, metodi) spremenimo v kriptirano sporočilo, pri tem uporabimo določene vrednosti za parametre v algoritmu, ki jim rečemo ključ. Sogovornika se morata torej dogovoriti o algoritmu in ključu, da si lahko pošiljata šifrirana sporočila.

Začetki uporabe kriptografije segajo v čase pred našim štetjem. Razvitih je bilo nešteto načinov za zakrivanje sporočil. Prestrezanje sporočil ni bilo v navadi samo v vojnih časih, predvsem prestrezanje diplomatske pošte je bila običajna praksa. Na dvorih so obstajale "črne sobe", kjer so poskušali razvozlati prestrežena in prepisana sporočila.

Primeri klasične kriptografije

Špartanci so uporabljali naslednji način: na valj so navili ozek trak in sporočilo napisali pravokotno na smer traku. Poslali so odvit trak, naslovnik pa je moral imeti valj enakega premera.

Julij Cezar je svojim vojskovodjem pošiljal sporočila, kjer je vsako črko zamenjal s črko, ki je bila v abecedi nekaj mest za njo. Postopek lahko opišemo kot zamenjavo črk a -> a+k po modulu n (n pomeni število črk v abecedi). "k" predstavlja ključ. Cezar je menda običajno uporabil ključ 3. Kako bi dešifrirali HAL, če vemo, da smo uporabili isti algoritem s ključem -1?

V začetnih letih svetovnega spleta je bil v uporabi postopek ROT-13 (zamenjava črk a -> a+13 po modulu 26 - angleška abeceda) v Usenetu za šifriranje neprimernih šal in podobnega. Seveda ni predstavljal nobene resne zaščite. Netscape-ov brskalnik je imel v prvih verzijah vgrajeno možnost pod View -> Unscramble ROT-13.

To sta primera za monoalfabetsko substitucijo, kjer se črka vedno preslika v isto črko, zato frekvenčna porazdelitev črk kaže podoben vzorec kot v jeziku čistopisa. Pri dešifriranju poiščemo najbolj pogoste črke in jih nadomestimo z najbolj pogostimi črkami v jeziku, potem pa iščemo še najbolj pogoste dvojčke, trojčke oziroma besede v tekstu. Prvi opis dešifriranja monoalfabetske substitucije je znan iz devetega stoletja, uporabljala pa se je še v srednjem veku. Nadomestile so jo varnejše polialfabetske substitucije, na primer Vigenèrjeva.

V prvi polovici 20. stoletja so za polialfabetsko substitucijo uporabljali šifrirne stroje. Najbolj znana je Enigma, ki so jo uporabljali Nemci med 2.svetovno vojno.

 

Klasični algoritmi spadajo med simetrične algoritme ali algoritme z zasebnim ključem: imamo samo en ključ, s katerim zašifriramo in dešifriramo sporočilo.

Šifriranje s simetričnimi algoritmi je običajno hitro, težko pa je varno izmenjati ključ. Problem predstavlja tudi število ključev - vsak uporabnik mora imeti za vsakega dopisovalca svojega.

Odkar uporabljamo računalnike, so se ravno zaradi teh problemov razvile asimetrične metode ali algoritmi z javnim ključem (začetki v letu 1975). Uporabnik si skreira dva med seboj povezana ključa in enega objavi. Vsi, ki mu hočejo poslati sporočilo, bodo uporabili njegov javni ključ za šifriranje sporočila. Dešifriral pa ga bo lahko le on sam, ki pozna še svoj skriti ključ. Te metode so računsko bolj zahtevne in zato počasnejše kot simetrične.

Pri pošiljanju sporočila po internetu ni dovolj, da sporočilo zašifriramo. Ko potuje po javnih vodih, preko nešteto vozlišč, lahko kdo naše zašifrirano sporočilo spremeni. Pojavi se tudi problem identifikacije lastnika javnega ključa - ali ni objavil ključa namesto mene kdo drug, ki se hoče izdajati za mene in dobivati pošto, namenjeno meni. Varnostna aplikacija mora torej zagotoviti naslednje:

  • zaupnost (confidentiality);
  • celovitost (integrity);
  • overjanje (authentication);
  • preprečevanje tajenja (nonrepudiation);
  • kontrolo dostopa (access control).

Zato se je razvilo podpisovanje sporočil (digital signatures) in overjanje javnih ključev. Potrdilo (certificate) vsebuje poleg podatkov o ključu še čas nastanka, podatke o lastniku, rok veljavnosti ipd.

V aplikacijah, ki omogočajo zaupnost pošiljanja sporočil, se uporablja obe vrsti algoritmov. Obenem vključujejo zgoščevalne funkcije, ki poljubno dolg tekst preslikajo v število fiksne dolžine (npr. 128 bitov). Najbolj znani sta MD5 in SHA. Poleg tega pred šifriranjem tekst običajno stisnemo na manj kot polovico dolžine z enim od programskih produktov za to. Vhod v kriptografske algoritme predstavlja binarni zapis.

Če hočemo zagotoviti verodostojnost svojega sporočila, mu dodamo digitalni podpis: z zgoščevalno funkcijo izračunamo fiksni "povzetek" sporočila, ki ga zašifriramo s svojim zasebnim ključem. Prejemnik bo najprej z našim javnim ključem dešifriral podpis, iz sporočila bo ponovno izračunal povzetek ter ga primerjal s tistim, ki ga je dobil v podpisu. Če se ujemata, je dobil tako sporočilo, kot smo ga podpisali.

Ker se s kriptologijo ukvarja veliko institucij z močnimi ekipami, je razumljivo, da so danes varnejši znani, javno objavljeni in preizkušeni algoritmi, pri katerih je vsa tajnost zagotovljena s ključem. Čim daljši je ključ, teže ga je razkriti. Ključi pri asimetričnih metodah so neprimerljivi s ključi pri simetričnih, saj gre za povsem različne algoritme. Ocenjujejo, da za isto stopnjo varnosti ključu simetrične metode dolžine 56 bitov ustreza javni ključ 384 bitov (in 128 bitov : 2304 bitov). V splošnem svarijo pred nakupom šifrirnih naprav, če prodajalec noče objaviti algoritma šifriranja. O tem govori dokument z zanimivim naslovom Snake Oil FAQ.

Možnih zmot pri uporabi kriptografije je veliko, Steve Burnett v svojem članku Crypto Blunders navaja naslednjih pet, vse podkrepi s konkretnimi primeri:

  1. Proglasi svoj algoritem za nezlomljiv.
  2. Uporabi one-time pad več kot enkrat.
  3. Ne uporabljaj najboljših algoritmov, ki so na voljo.
  4. Ne implemetiraj algoritma pravilno.
  5. V svoj produkt vgradi skrita vrata.

Ameriški produkti so imeli do januarja 2000 zaradi izvoznih omejitev za neameriške kupce skrajšane ključe ali pa so nudili šibkejše algoritme. Po novih predpisih lahko ameriški proizvajalec kriptografske opreme dobi dovoljenje za izvoz izdelkov z neokrnjenimi algoritmi oziroma ključi.


Pri varovanju podatkov torej uporabljamo simetrične , asimetrične in zgoščevalne algoritme. Za šifriranje podatkov vedno uporabljamo simetrične algoritme, ker so hitrejši od asimetričnih. Vendar moramo pred tem izmenjati ključ za simetrični algoritem. To lahko naredimo tako, da se priključimo na nek centralni strežnik ključev ali pa uporabimo asimetrični algoritem. V protokolih SSL, IPSEC in SET uporabimo asimetrični algoritem za izmenjavo skupnega skritega ključa.

Kriptografski algoritmi in protokoli za šifriranje

Vigenère-jev algoritem

Blaise de Vigenère je algoritem opisal v delu Traicté des Chiffres (1586). Poznal je dela Albertija, Trithemiusa in Porte, ki so že pred njim ugotovili, da bi bilo treba pri šifriranju kombinirati substitucije z različnimi koraki.

Za postopek šifriranja si najprej pripravimo tabelo, kjer navedemo črke po abecedi, v vsaki naslednji vrsti pa jih zamaknemo za eno črko, kot bi jih šifrirali s Cezarjevim algoritmom s koraki k=1, 2, ... 25. Šifriramo tako, da za vsak znak uporabimo drug korak - tako se ista črka vsakič preslika v drugo in zato pri dešifriranju ne moremo uporabiti tabele pogostosti črk v jeziku. Kateri korak uporabimo, določimo s ključem - nizom znakov.

Za primer zašifrirajmo naslednji tekst:

CENA NAFTE NA NAŠEM TRGU RASTE

s ključem PLANETI.

Ključ tolikokrat napišemo nad tekst, ki ga moramo zašifrirati, kot je dolg tekst. Šifriramo tako, da v tabeli poiščemo sečišče stolpca, kjer se nahaja črka čistopisa, in vrstice, ki se začne s črko ključa.

           ključ  P L A N E T I P L A N E T I P L A N E T I P L A N
        čistopis  C E N A N A F T E N A N A Š E M T R G U R A S T E
        tajnopis  S R N N Š T O K R N N Š T Č U A T F L P B P E T Š

                  A B C Č D E F G H I J K L M N O P R S Š T U V Z Ž
             k
             1    B C Č D E F G H I J K L M N O P R S Š T U V Z Ž A
             2    C Č D E F G H I J K L M N O P R S Š T U V Z Ž A B
             3    Č D E F G H I J K L M N O P R S Š T U V Z Ž A B C
             4    D E F G H I J K L M N O P R S Š T U V Z Ž A B C Č
             5    E F G H I J K L M N O P R S Š T U V Z Ž A B C Č D
             6    F G H I J K L M N O P R S Š T U V Z Ž A B C Č D E
             7    G H I J K L M N O P R S Š T U V Z Ž A B C Č D E F
             8    H I J K L M N O P R S Š T U V Z Ž A B C Č D E F G
             9    I J K L M N O P R S Š T U V Z Ž A B C Č D E F G H
            10    J K L M N O P R S Š T U V Z Ž A B C Č D E F G H I
            11    K L M N O P R S Š T U V Z Ž A B C Č D E F G H I J
            12    L M N O P R S Š T U V Z Ž A B C Č D E F G H I J K
            13    M N O P R S Š T U V Z Ž A B C Č D E F G H I J K L
            14    N O P R S Š T U V Z Ž A B C Č D E F G H I J K L M
            15    O P R S Š T U V Z Ž A B C Č D E F G H I J K L M N
            16    P R S Š T U V Z Ž A B C Č D E F G H I J K L M N O
            17    R S Š T U V Z Ž A B C Č D E F G H I J K L M N O P
            18    S Š T U V Z Ž A B C Č D E F G H I J K L M N O P R 
            19    Š T U V Z Ž A B C Č D E F G H I J K L M N O P R S
            20    T U V Z Ž A B C Č D E F G H I J K L M N O P R S Š
            21    U V Z Ž A B C Č D E F G H I J K L M N O P R S Š T 
            22    V Z Ž A B C Č D E F G H I J K L M N O P R S Š T U
            23    Z Ž A B C Č D E F G H I J K L M N O P R S Š T U V 
            24    Ž A B C Č D E F G H I J K L M N O P R S Š T U V Z
            25    A B C Č D E F G H I J K L M N O P R S Š T U V Z Ž

Dešifriramo tako, da ključ napišemo nad tajnopis in v stolpcu, ki ga označuje črka ključa, poiščemo črko tajnopisa - v prvi koloni te vrstice je črka čistopisa.

Algoritem je do srede 19.stoletja veljal za nezlomljivega. Leta 1863 je Friedrich Wilhelm Kasiski objavil delo, v katerem je opisal postopek za razbitje algoritma. V tajnopisu poiščemo ponovitve dvojčkov in si zapišemo razdalje med njimi. Sklepal je, da so vsaj nekateri od teh dvojčkov zašifrirani dvojčki v čistopisu in iz tega sledi, da so bili zašifrirani z istim delom ključa. Iz tega ugotovimo dolžino ključa in tako razdelimo tajnopis na toliko monoalfabetskih substitucij, kot je dolžina ključa. Potem za vsako od teh uporabimo tabelo pogostosti črk.

Zgornji primer je prekratek, kljub temu pa takoj opazimo ponovitev NN (pravzaprav imamo še večjo srečo - ponovi se RNNŠT), ki je 7 črk narazen. Sklepamo, da je ključ dolg 7 znakov. Tako tajnopis razdelimo na sedem delov (1., 8., 15., 22. znak so zašifrirani z isto črko itd.) in za vsakega posebej iz pogostosti črk poskušamo ugotoviti črko ključa oziroma čistopisa.

 

Simetrični algoritmi

Delimo jih na dve skupini:

  • tekoče šifriranje - sporočilo šifriramo bit za bitom (stream ciphers);
  • sporočilo razbijemo na bloke in vsak blok posebej šifriramo (block ciphers)..

Pri prvem načinu šifriramo tako, da kombiniramo bit ključa in bit sporočila (običajno je to kar XOR). Če uporabimo kratek, ponavljajoč ključ, postopek ni varen - s kombiniranjem zašifriranega teksta je razmeroma lahko ugotoviti najprej dolžino ključa, potem vrednost ključa in dešifrirati sporočilo. Nasprotno pa je ta sistem nezlomljiv, če se ključ ne ponavlja in je povsem naključen niz bitov (one-time pad).

Večina algoritmov, ki jih danes uporabljamo v civilnih organizacijah, je blokovnih: sporočilo razbijemo na tako dolge bloke, kot zahteva algoritem, in vsak blok preoblikujemo in kombiniramo s ključem. Permutacije, substitucije in kombinacije s ključem (glej n.pr.opis DES-a) morajo zagotoviti, da so v izhodnem bloku zabrisani vsi vzorci iz vhodnega bloka - skratka, da izgleda kot naključen niz bitov. Za vse dobre simetrične algoritme velja, da se izhoda ne da kompresirati za več kot nekaj odstotkov.

Pri blokovnih algoritmih je pomembno tudi, kako spreminjamo ključ pri šifriranju zaporednih blokov.

Kdaj je algoritem varen? Napad s preizkušanjem vseh možnih kombinacij bitov ključa (brute-force attack) je za kriptoanalitika najslabša možnost. Poznajo tudi druge, hitrejše metode. Zato je bistveno, da je algoritem javno objavljen in da so ga imeli možnost preizkusiti vodilni kriptoanalitiki.

Pomembno pa je tudi, kako je algoritem implementiran:

  • implementiran neokrnjen algoritem;
  • uporaba načina, ki spreminja ključ (CBC, CFB ali OFB);
  • testiranje in izločitev šibkih ključev pri nekaterih algoritmih;
  • generiranje ključev s pravimi generatorji naključnih števil;
  • primerno dolg ključ (po podatkih iz leta 1997 vsaj 70 bitov, za leto 2000 pa 86 bitov).

Najbolj znani simetrični algoritmi so:

  • DES (Data Encryption Standard) ali DEA (Data Encryption Algorithm), ki sta ga razvila NIST (National Institute of Standards and Technology) ter IBM.
  • RC2, RC4, RC5 - je razvil Ronald Rivest. RC2 je vgrajen v mail. Dopušča ključe dolžine 1 do 2048 bitov. V softveru, ki ga prodajajo izven ZDA, običajno omejijo ključ na 40 bitov dolžine, kar seveda pomeni manjšo varnost. RC4 je tekoč šifrirni algoritem z variabilno dolžino ključa do 2048 bitov. Vgrajen je v brskalnike kot del protokola SSL oziroma TLS. Pred letom 2000 je ameriška verzija uporabljala 128-bitni ključ, neameriška pa 40-bitnega, zdaj je možno povsod uporabljati 128-bitni ključ.

    RC5 je bil objavljen 1994. Uporabnik lahko določi dolžino ključa, velikost bloka in število ponovitev šifrirnega postopka.

  • IDEA (International Data Encryption Algorithm): razvila sta ga James L.Massey in Xuejia Lai v Zuerichu in objavila 1990. Uporablja 128 bitov dolg ključ na 64 bitov dolgih blokih. Patent zanj ima Ascom-Tech iz Švice. Če DES uporabljamo s trojnim ključem, je počasnejši od IDEE.

Ameriška organizacija za standarde NIST (National Institute of Standards and Technology) je septembra 1997 razpisala natečaj za naslednika algoritma DES, ki naj bi bil močnejši in hitrejši od trojnega DES, odporen proti vsem zdaj znanim napadom, s 128 in 256-bitnimi ključi ter ne bi smel biti patentiran.

Izmed 15 kandidatov so se v finale uvrstili naslednji algoritmi, ki so vsi uspešno prestali testiranja:

  • MARS (IBM)
  • RC6 (RSA Laboratories)
  • Rijndael (Joan Daemen, Vincent Rijmen)
  • Serpent (Ross Anderson, Eli Biham, Lars Knudsen)
  • Twofish (Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Chris Hall, Niels Ferguson)

Postopek za izbiro "algoritma za 21. stoletje" Advanced Encryption Standard (AES) je bil zaključen 2. oktobra 2000, ko je bil izbran algoritem Rijndael.

 

XOR

Seštevanje z XOR (ekskluzivni ali, ekskluzivna disjunkcija): rezultat je TRUE, če je eden od seštevancev TRUE, drugi pa FALSE; v drugih primerih je FALSE.

Primer:   11010
             01110
             -------
             10100

Če rezultatu prištejemo enega od seštevancev z XOR, dobimo drugi seštevanec:

          10100
          01110
         -------
          11010

Zato je ta operacija velikokrat uporabljena pri šifriranju:

šifropis dobimo tako, da tekstu z XOR prištejemo ključ; dešifriramo pa tako, da šifropisu spet z XOR prištejemo ključ.

 

Načini za spreminjanje ključa pri šifriranju sporočila

Če šifriramo vsak blok z istim ključem (to imenujemo način ECB - Electronic Code Book), potem se enak blok preslika v enak šifriran blok, kar pa kriptoanalitikom olajša dešifriranje. Bolj varni so naslednji trije načini:

  • CBC (Cipher Block Chaining): Začetni blok teksta seštejemo z XOR z naključnim številom, ki mu rečemo inicializacijski vektor in ga postavimo na začetek šifriranega teksta. Vsak naslednji blok teksta seštejemo s šifriranim prejšnjim blokom in to potem zašifriramo.
  • CFB (Cipher Feedback, včasih mu pravijo tudi CTAK - ciphertext auto key): Inicializacijski vektor zašifriramo s ključem in rezultat seštejemo s prvim blokom teksta in tako dobimo prvi šifrirani blok. To vsoto zašifriramo s ključem in tako dobimo začasni ključ. Temu prištejemo drugi blok teksta ... Vidimo, da pri tem načinu s šifriranjem pravzaprav spreminjamo ključ.
  • OFB (Output Feedback) Inicializacijski vektor zašifriramo s ključem. Ta rezultat (recimo mu R1) z XOR seštejemo s prvim blokom teksta in to je prvi šifrirani blok teksta. Potem dobimo ključ za šifriranje naslednjega bloka tako, da R1 zašifriramo s prvotnim ključem... Od prejšnjega načina se razlikuje v tem, da začasni ključ tvorimo s šifriranjem predhodnega ključa, ni odvisen od teksta.

Pri ECB in OFB zašifrirani bloki niso odvisni od predhodnih blokov - če se spremeni en blok, se spremeni samo njemu ustrezni zašifrirani blok. Ta lastnost pride prav pri nezanesljivih povezavah, saj se vseeno da dešifrirati večino sporočila tudi v primeru, da je nekaj blokov pokvarjenih ali izgubljenih.

Pri načinih CBC in CFB pa se ob spremembi enega vhodnega bloka spremenijo tudi vsi zašifrirani bloki za njim. Če nam en blok sporočila manjka ali je spremenjen, ne moremo dešifrirati nobenega od blokov za njim. Zato zagotavljata celovitost (nespremenjenost) zašifriranega sporočila.

 

DES

je naslednik algoritma Lucifer, ki so ga razvili in patentirali pri IBM. Leta 1976 je bil sprejet kot standardni kriptografski algoritem v ZDA in je vključen v ogromno aplikacij. Do leta 1997 je bila dovoljena splošna uporaba znotraj ZDA, prepovedan pa izvoz. Leta 1999 so dovolili izvoz opreme z algoritmom s 56-bitnim ključem, od januarja 2000 pa so te omejitve še zmanjšane (v brskalnikih lahko uporabljamo trojni DES).

NIST je tri leta vodil postopek za izbor naslednika DES, ki mu je ime AES (Advanced Encryption Standard). Izmed petih finalistov (Mars, RC6, Rijndael,Serpent in Twofish) je bil 2. oktobra 2000 izbran algoritem Rijndael.

Julija 2004 je NIST objavil predlog, da se DES s 56-bitnim ključem ne bi več uporabljal. Obrazložitev: "DES is now vulnerable to key exhaustion using massive, parallel computations." To pa ne velja za trojni DES.

Po skoraj letu dni za to objavo (19.maj 2005) je NIST umaknil vse standarde v zvezi z DES: Federal Information Processing Standard (FIPS) 46-3, Data Encryption Standard (DES); FIPS 74, Guidelines for Implementing and Using the NBS Data Encryption Standard; and FIPS 81, DES Modes of Operation. DES je bil tako v uporabi tri desetletja - koliko časa bo AES?


Šifrirajo se 64 bitov dolgi bloki z uporabo 56 bitov dolgega ključa, uporablja transpozicije in substitucije. 64 bitov na začetku permutiramo, potem jih preuredimo s pomočjo posebnih tabel (S-boxes) in ključa. Ta del postopka se 16-krat ponovi - vsakokrat z drugače preurejenim ključem.

Postopek za šifriranje 64-bitnega bloka:

  1. Blok permutiramo z začetno permutacijo IP.
  2. Blok razdelimo na dva 32-bitna bloka (levi gre v register L, desni v register R).

Začetek zanke

3. V vsakem bajtu bloka R podvojimo prvi, četrti, peti in osmi bit (32 + 4.4 = 48 bitov).

4. Ta rezultat seštejemo z operacijo XOR s ključem, ki je v vsaki ponovitvi zanke drugačen.

5. Vsoto razbijemo na 8 x 6 bitov. Vsak tak sekstet zamenjamo z elementom sustitucijske tabele, ki ima dimenzije 4 x 16 in vsebuje elemente od 0 do 15. Pozicijo elementa dobimo takole: vrstico povesta 1. in 6. bit (0 - 3), stolpec pa 2. - 5.bit (0 - 15).

6. Osemkrat po 4 bite premešamo s permutacijo P.

7. Rezultat seštejemo z vsebino registra L z XOR in shranimo v začasni register.

8. Vsebino registra R prenesemo v L, vsebino iz začasnega registra pa v R.

To zanko ponovimo 16-krat.

9. Bloka iz L in R združimo v obratnem vrstnem redu in premešamo z inverzom začetne permutacije IP.

Kako dobimo 48-bitni ključ, ki ga uporabimo v 4. koraku:

Izmed 64 bitov izločimo vsakega 8., preostalih 56 bitov razdelimo in damo v registra C in D. V 16 korakih ju ciklično premaknemo za eno ali dve mesti v levo (1, 2, 9, 16 -eno mesto, sicer 2). Bloka združimo, 8 bitov izpustimo in preostanek premešamo.

Algoritem učinkuje tako, da sprememba enega samega vhodnega bita bloka spremeni skoraj vse bite v rezultatu bloka. Dešifriramo z istim ključem in skoraj enakim postopkom.

Zakaj ima DES ključ dolg le 56 bitov (njegov predhodnik Lucifer pa 112) ? V času, ko je algoritem nastajal (1974-1976), je 56 bitov popolnoma zadoščalo. Zdaj so te številke malo drugačne. Priporočajo vsaj 70-bitne ključe - glej n.pr. članek Arjana Lenstre in Erica Verheula.

Zato zdaj priporočajo trojno enkripcijo z DES na takle način: zašifriramo s ključem 1, dešifriramo s ključem 2, zašifriramo s ključem 3. Pri dešifriranju gremo po istih stopinjah v obratnem redu: dešifriramo s ključem 3, šifriramo s ključem 2 in dešifriramo s ključem 1. Ocenjujejo, da je tako uporabljen algoritem tako varen, kot da bi imel 112 bitov dolg ključ. Recimo, da imamo računalnik, ki je zmožen testirati 1012 enkripcij na sekundo. Izvršiti mora 2112 = 5.19 x 1033 testiranj. Če to delimo z 1012, še vedno ostane 1021 sekund, kar je 1014 let.

 

Advanced Encryption Algorithm: Rijndael

je bil 2. oktobra 2000 izbran za naslednika DES.

DES je bil v uporabi od leta 1977. Upajmo , da se bo njegov naslednik uporabljal vsaj toliko časa. Zato ponuja možnost treh dolžin ključev: 128, 192 in 256 bitov, prav take so tudi možne dolžine blokov.

Število zank je odvisno od kombinacije dolžin bloka in ključa:

                                  Število zank

 

blok=128

blok=192

blok=256

ključ=128

      10

      12

      14

ključ=192

      12

      12

      14

ključ=256

      14

      14

      14

Iz ključa se na začetku izračunajo ključi za vsako zanko. V vsaki zanki se zvrstijo substitucije in premiki, nazadnje pa se prišteje ključ za zanko. Na začetku bomo večinoma uporabljali algoritem s 128-bitnim ključem nad 128-bitnimi bloki v desetih zankah. Avtorja pravita, da že šest zank dovolj razprši informacijo.

 

Algoritmi z javnim ključem (asimetrični algoritmi)

Naloga, najti način šifriranja podatkov, kjer bosta znana metoda in ključ za šifriranje, pa vendar bo podatke lahko dešifriral samo naslovnik, se zdi težko uresničljiva. Najti je treba tako transformacijo, za katero je težko ali nemogoče izvesti inverzno transformacijo, če nimamo dodatne informacije (privatnega ključa). Za take transformacije se uporablja izraz One-Way Function oziroma Trap-door one-way function: inverzna operacija je lahka, če imamo neko dodatno informacijo (trap-door), sicer pa skoraj nemogoča.


Koncept javnega in zasebnega ključa sta prva predstavila Whitfield Diffie in Martin Hellman (1975) - The Diffie-Hellman key agreement protocol. Kot že ime pove, to ni algoritem za šifriranje podatkov, temveč postopek za kreiranje in izmenjavo skritega ključa po javnem omrežju.

Imamo parametra p in g, ki sta oba javno znana. p je praštevilo, g (generator) pa celo število, manjše od p, iz katerega lahko dobimo katerokoli število od 1 do p-1, če ga potenciramo in vzamemo vrednost po modulu p.

Alica si izbere naključno število a, Bob pa svojega (b). Ti dve števili morata ostati skriti. Potem Alica izračuna svoj javni ključ ga mod p, Bob pa svojega gb mod p. Ti števili si izmenjata. Njun skrivni ključ Alica izračuna takole: kab (gb)a mod p, Bob pa poišče vrednost kba (ga)b mod p. Ker je kab = kba , imata skupni skrivni ključ, ki ga lahko uporabita kot ključ za šifriranje podatkov s katerim od simetričnih algoritmov.

Če je praštevilo p dovolj veliko, je skoraj nemogoče izračunati gab mod p iz ga mod p in gb mod p. Najti bi morali diskretni logaritem a iz ga mod p, to pa spada v enak težavnostni razred kot faktorizacija velikega števila.


Decembra 1997 je postalo znano, da so angleški znanstveniki James Ellis, Clifford Cocks in Malcolm Williamson, zaposleni v tajni službi angleške vlade GCHQ (Government Communications Headquarters), odkrili oba postopka - Diffie Hellman in RSA - več let pred Diffiejem in Hellmanom, niso pa smeli tega objaviti, ker je šlo za vojaško skrivnost. Na straneh angleške vlade lahko najdemo nekaj dokumentov o tem:

Ni pa še znano, ali so do podobnih odkritij prišli tudi v NSA.


Danes se najbolj uporablja algoritem RSA, ki ima ime po svojih avtorjih (Ronald Rivest, Adi Shamir, Leonard Adleman) - MIT, 1977. Metoda je v ZDA patentirana, patent je potekel septembra 2000. Do tega časa je bilo treba za uporabo v ZDA plačevati licenčnino, zato algoritem ni bil vključen v nekatere produkte.

Metoda temelji na predpostavki, da je razmeroma lahko najti dve veliki praštevili, če pa poznamo samo njun zmnožek, je težko najti faktorja. Vzemimo primer s 3-številčnima prašteviloma: 191 x 283 = 54053. Če hočemo faktorirati to število, ga moramo deliti z vsemi praštevili do 191 oziroma v splošnem do njegovega kvadratnega korena. V praksi pa so ta števila več kot stoštevilčna.

Osnovo metode prestavlja naslednji izrek iz teorije števil, ki ga pripisujejo Eulerju:
Naj bosta p in q različni praštevili, velja naj tudi ed 1 mod (p-1)(q-1).

Potem sledi (Te)d T mod pq.

Če nam T predstavlja blok teksta, ga zašifriramo takole: s Te mod pq
dešifriramo pa: T sd mod pq.
Če označimo n = pq, javni ključ sestavljata n ter e, skriti ključ pa p, q in d.

Kako bomo izbrali vrednosti p, q, e in d? p in q morata biti veliki praštevili- več sto-mestni števili, razmeroma blizu skupaj. V praksi za e običajno izberemo 3 (glej opombo) ali pa 65537 (216+1). Zdaj izračunamo produkt (p-1)(q-1). Drugo predpostavko iz gornjega izreka lahko izrazimo tudi takole:
ed -1 je deljivo s (p-1)(q-1) oziroma v obliki Diofantske enačbe: ed + k(p-1)(q-1) = 1. Ta pa je rešljiva s celimi števili, če velja, da sta števili e in d tuji proti p-1 in q-1 (nimajo skupnih deliteljev). Izberemo tako število, ki je večje od p+1 oziroma q+1 in manjše od produkta (p-1)(q-1). Zdaj izračunamo število d iz formule ed mod (p-1)(q-1) 1.

Sporočilo, ki ga želimo šifrirati, najprej razbijemo na bloke, krajše od pq, - danes je to ponavadi 512 ali 1024 bitov. Izračunamo vrednost s Te mod pq za vsak kos sporočila. Ta števila združimo in dobimo šifrirano sporočilo. Pri dešifriranju spet najprej razbijemo sporočilo na bloke in na vsakem uporabimo formulo T sd mod pq.

Za ponazoritev naredimo primer za majhna števila. Na internetu najdemo različne programe za ponazoritev RSA, n.pr. RSA Demo Applet Richarda Holowczaka.

Vohun bi moral najprej najti števili p in q iz njunega produkta, to pa je po sedaj znanih metodah pri velikih p in q dolgotrajen postopek. Znan je naslednji primer:
Martin Gardner je avgusta 77 objavil v Scientific Americanu 129 številk dolgo število in ponudil 100 dolarjev za razbitje na faktorje. Uganko je rešila mednarodna skupina iz več kot 600 prostovoljcev jeseni 1994.

Leta 1999 so uspeli faktorirati 155-mestno število (kar ustreza 512 bitom), konec leta 2003 pa 174-mestno število (576 bitov). Sledilo je faktoriranje 193-mestnega števila (640 bitov), ki so ga dosegli novembra 2005. Najnovejši dosežek pa je faktoriranje 307-mestnega števila (števila 21039 - 1) marca 2007. Tu gre za posebno število, katerega faktorizacija je lažja, vendar znanstveniki, ki so dosegli ta uspeh pravijo, da so pri tem izboljšali postopek faktorizacije. Tri sodelujoče skupine so porabile enajst mesecev. Po drugi strani pa še vedno čaka na faktorizacijo 704-bitno število, za kar je ponujena nagrada 30000$.

Prisiljeni smo uporabljati vedno daljše ključe (s tem mislimo produkt pq). Tako bo potrebno opustiti 1024-bitne ključe in začeti uporabljati 2048 bitov, za pomembne operacije pa vsaj 3072 bitov (n.pr. za ključe overiteljev oziroma certifikatskih agencij). Zaenkrat nihče ne bo šel razbijat ključa običajnega uporabnika, ker je na voljo veliko lažjih načinov, da se pride do njegovih podatkov (luknje v operacijskih sistemih, trojanski konji, phishing, ...). Po drugi strani pa imajo zlikovci na voljo vojske ugrabljenih računalnikov (botnetov), ki bi jih v bodočnosti lahko uporabili tudi za take naloge.

Znani so tudi asimetrični algoritmi, ki temeljijo na eliptičnih krivuljah (ECC - elliptic curve cryptosystems). Ideja je znana že od leta 1985. Najdlje na tem področju je kanadska firma Certicom. V primerjavi z RSA zadoščajo krajši ključi, zato kaže, da bodo v bodočnosti ti algoritmi prevladali vsaj pri uporabi v manj zmogljivih napravah. Da se že zdaj bolj ne uporabljajo, je kriva patentna zaščita.

dolžina ključa ECC dolžina ključa RSA
106 bitov 512 bitov
132 bitov 768 bitov
160 bitov 1024 bitov
191 bitov 1536 bitov
211 bitov 2048 bitov

Asimetrični algoritmi se uporabljajo za izmenjavo skupnih ključev in za digitalno podpisovanje, za masovno šifriranje podatkov pa ne, ker so počasnejši od simetričnih algoritmov.

ime matematična osnova namen uporaba
Diffie-Hellman diskretni logaritmi izmenjava skritega ključa v protokolih IPSEC, SSL, ...
ElGamal diskretni logaritmi digitalen podpis, enkripcija za digitalen podpis v DSS
RSA faktoriranje velikih števil digitalen podpis, enkripcija zaenkrat najbolj pogosto uporabljen asim.algoritem
ECC eliptične funkcije digitalen podpis, enkripcija naslednik RSA ?

September 2006: Opomba glede uporabe javnega RSA eksponenta 3:
Daniel Bleichenbacher je na konferenci Crypto 2006 opozoril na luknjo v kriptografskih knjižnicah, ki jih uporabljajo nekateri brskalniki in drugi programi, in ki omogočijo napadalcu, da ponaredi digitalno potrdilo, če se za podpisovanje uporabi potrdilo z javnim RSA eksponentom 3. MSIE nima te napake, za Mozillo, Firefox in OpenSSL so na voljo popravki.

Iskanje velikega praštevila

V teoriji računske zahtevnosti algoritmov se problemi uvrščajo v različne težavnostne razrede glede na to, koliko resursov je potrebnih za rešitev (n.pr. časa reševanja, korakov v algoritmu, velikosti spomina računalnika itd.). Najlažji problemi so tisti, za katere obstaja algoritem, s katerim pridemo do rešitve v času, ki je omejen z neko fiksno potenco dolžine vhoda (s polinomom) - ti spadajo v razred P (polynomial time class).

Naslednji razred je NP (nondeterministic polynomial time class). Za te probleme se da v času, omejenem s polinomom, preveriti, ali je neka rešitev pravilna, medtem ko se časa, potrebnega za rešitev, ne da omejiti s polinomom.
Primer problema iz razreda NP: Hitro lahko preverimo, ali je sestavljanka (jigsaw puzzle) pravilno sestavljena - za vsak košček pogledamo sosednje, za kar potrebujemo približno (število sosednjih koščkov) x (število koščkov sestavljanke) enot časa. Pri reševanju pa imamo toliko kombinacij, da ni mogoče najti algoritma, ki bi imel število korakov omejeno z neko fiksno potenco števila koščkov.

Verjamemo, da sta razreda P in NP različna, ni pa dokazano. Pravzaprav je za dokaz tega razpisana nagrada v višini milijon dolarjev.

Predpostavki pri RSA sta, da spada razstavljanje velikega števila v razred NP, iskanje velikega praštevila pa v razred P.

Prva predpostavka še ni dokazana. Če število n delimo po vrsti z vsemi števili, ki so manjša od njegovega kvadratnega korena, vidimo, da je število potrebnih korakov eksponentno odvisno od dolžine števila: Označimo n = 10N (N pomeni število cifer števila n), potrebujemo torej (10N)1/2 korakov.
Problem bi uvrstili v razred NP, če bi imeli dokaz za to, da ne obstaja algoritem z manj koraki.

Drugo predpostavko so avgusta letos (2002) dokazali trije indijski znanstveniki M. Agrawal, N. Kayal, and N. Saxena v članku PRIMES is in P. Iz "malega Fermat-ovega izreka" so izpeljali algoritem, s katerim ugotovimo, ali je število n praštevilo v času, ki je omejen s polinomsko funkcijo dolžine števila n: O(N)12f(log N).
To je velik teoretičen dosežek, ali pa bo tudi praktično uporaben, je zaenkrat težko reči.

V praksi bomo še naprej uporabljali sedaj uveljavljene postopke:

Kako najdemo veliko praštevilo?

V zadnjih 30 letih so predstavili več postopkov, ki temeljijo na "malem Fermat-ovem izreku":

Če je p praštevilo, potem za vsako število a, ki ni deljivo s številom p, velja:
ap-1 - 1 0 (mod p)

Če enačba velja za vsa števila a (a < p), je izpolnjen potreben pogoj za to, da je število p praštevilo, žal pa ni zadosten. Obstajajo namreč števila, ki pogoj izpolnjujejo, pa niso praštevila (Carmichaelova števila, n.pr. 561).

Število, ki naj bi bilo praštevilo, mora biti liho, in ga lahko zapišemo v obliki

p = 2sd - 1, kjer jed liho število,s pa enak ali večji od 0.

Iz tega se da izpeljati sklep, da je p praštevilo z veliko verjetnostjo glede na osnovo a, če velja

ad 1 (mod p)   ali   ad.2r -1 (mod p), kjer je r večji ali enak 0 in manjši od s (test Rabin - Miller).

Če število ne ustreza testu, je gotovo sestavljeno, v nasprotnem primeru pa je verjetnost napake 1/4t, kjer t pomeni število ponovitev testa za različne osnove. Število, ki ustreza testu za 6 osnov, bi torej z verjetnostjo 1/46 = 0,00024 bilo sestavljeno število. Napaka se manjša z večanjem števila p. Pri 256-bitnem številu p ocenjujejo verjetnost napake na 1/251 pri 6 testih. Za običajno uporabo je taka možnost napake sprejemljiva.

V praksi je postopek takle:

  • naključno izberemo N-bitno liho število n;
  • preverimo, da ni deljivo z najmanjšimi praštevili - vsaj do 256;
    (ocenjujejo, da tako izločimo 80% sestavljenih števil)
  • izvedemo Rabin-Millerjev test za vsaj pet naključno izbranih osnov a, manjših od n:
    Izračunamo m ad (mod n)
    Če je 1, sledi, da je n praštevilo in test je končan.
    (z) Sicer pa nadaljujemo: m -> m2 (mod n)
    Če je m -1 (mod n), sledi, da je n praštevilo in konec testa, sicer pa se vrnemo v zanko (z).
    Postopek končamo, ko pridemo do ms.

Več o iskanju praštevil: Distinguishing prime numbers from composite numbers

 

Zgoščevalne funkcije

(cryptographic hash functions, one-way hash functions)

Zgoščevalne funkcije preslikajo poljubno dolg niz znakov v blok konstantne dolžine, ki je nekakšen prstni odtis oziroma povzetek vhodnega niza (message digest, message fingerprint). Od zgoščevalne funkcije pričakujemo, da:

  • je nemogoče najti dve različni sporočili, ki bi ju preslikala v isti blok;
  • isto sporočilo vedno preslika v enak blok;
  • iz zgoščevalnega bloka ni mogoče restavrirati sporočila (od tu ime one-way hash function);
  • vsaka sprememba v sporočilu povzroči spremembo zgoščevalnega bloka.

Pri ocenjevanju zgoščevalnih funkcij se uporabljajo izrazi:

  • collision resistance
    Temu, da dvema različnima vhodnima datotekama ustreza enak povzetek, rečemo kolizija. Jasno je, da za vsako zgoščevalno funkcijo obstajajo kolizije, ker imamo neskončno mnogo možnih vhodov, ki jih preslikamo v končno mnogo izhodov. Zahtevana lastnost zgoščevalne fukcije je, da se kolizij s sedanjo tehnologijo ne da najti dovolj hitro.
  • preimage resistance
    To je lastnost, da je v primernem času nemogoče najti vhod, ki se preslika v vnaprej določen izhod.
  • second preimage resistance
    To je lastnost, da je v primernem času nemogoče najti drugi vhod, ki se preslika v enak izhod, kot vnaprej določen vhod.

Rezultat mora torej enolično identificirati datoteko. Zaradi te lastnosti so povzetki postali nepogrešljivi pri digitalnem podpisovanju, kjer zašifriramo samo povzetek, in pa kot indikatorji nespremenjenosti podatkov v postopkih za prenos podatkov. Ne smemo pa teh funkcij zamenjevati s kompresijskimi postopki (zip in podobnimi), kjer vedno lahko iz zgoščene datoteke dobimo nazaj prvotno datoteko.

Postopek se začne tako, da vhodno datoteko razdelimo na bloke konstantne dolžine in konec dopolnimo do polnega bloka (padding). Potem zaporedoma obdelujemo bloke:


Ena od možnosti je, da za zgoščevalno funkcijo uporabimo katerega od simetričnih algoritmov: vhodno datoteko razbijemo na bloke take dolžine, kot ustrezajo algoritmu, prvi blok zašifriramo s ključem, vsak naslednji blok seštejemo (XOR) z zašifriranim povzetkom prejšnjega bloka. Vendar se zaenkrat v glavnem uporabljajo posebej za to razviti algoritmi (MD5, SHA-1), ker so hitrejši.

Kako dolg pa naj bi bil povzetek? Ali je 128 bitov dovolj, da ne bo možno najti enakih povzetkov različnih sporočil (collision free)?
Da se izpeljati oceno (glej n.pr. Douglas R.Stinson: Cryptography Theory and Practice, pogl.7), da bo ob n-bitov dolgih povzetkih, kar da k=2n možnih različnih povzetkov, s polovično verjetnostjo prišlo do kolizije ob približno 1.17 k1/2 = 1.17 2n/2 zgostitvah naključnih nizov. Za 128-bitne povzetke torej velja, da bo med 264 povzetki naključnih nizov ena kolizija z verjetnostjo 50%. Ta dolžina je zdaj ocenjena kot premajhna, zato priporočajo uporabo vsaj 160-bitnih povzetkov, posebej še za primere, kjer bomo povzetek hranili dalj časa.

Izkoriščanje kolizij pri prekratkih povzetkih imenujejo "birthday attack". Ime ima po paradoksu rojstnega dne (birthday paradox): če kot "povzetek" za vsakega človeka izberemo obletnico njegovega rojstnega dne (k je število dni v letu, k=365), iz zgornje formule dobimo rezultat 22.3. To pomeni, da bosta od 23 naključno izbranih ljudi z verjetnostjo 50% vsaj dva imela isti rojstni dan.

Najbolj znane zgoščevalne funkcije so

- MD5 (MD je okrajšava za Message Digest)

Razvil jo je Ronald Rivest leta 1991. Opisana je v RFC 1321.
Sporočilu v binarni obliki doda toliko bitov, da je skupno število deljivo s 512 in sicer je zadnjih 64 bitov rezerviranih za zapis dolžine sporočila. Prostor med koncem sporočila in temi 64 biti pa napolni tako, da najprej doda 1, potem pa same 0. Potem zaporedoma obdeluje bloke po 512 bitov. Blok razdeli na 16 besed po 32 bitov, ki jih obdeluje v štirih 32-bitnih registrih. Postopek ima štiri različne zanke. Povzetek je tisto, kar na koncu dobimo v registrih, torej je dolg 128 bitov. Njena uporaba ni več priporočljiva.

- SHA (Secure Hash Algorithm) - zdaj verzija SHA-1,

Razvili sta jo organizaciji NIST in NSA in je objavljena kot standard FIPS PUB 180-1 (1995). Ravno tako kot MD5 obdeluje bloke po 512 bitov. Obdeluje jih v petih registrih po 32 bitov, kar da 160-bitni rezultat.
Leta 2002 je NIST objavil standard FIPS PUB 180-2, ki določa SHA-256 s 256-bitnimi povzetki, SHA-384 s 384-bitnimi povzetki in SHA-512 s 512-bitnimi povzetki.

- HAVAL

To je verzija MD5, ki so jo razvili Yuliang Zheng, Josef Pieprzyk in Jennifer Seberry. Lahko se izbere število ponovitev algoritma in dolžino rezultata (od 92 do 256 bitov).

- RIPEMD-160

so leta 1996 razvili Hans Dobbertin, Antoon Bosselaers in Bart Preneel v sklopu evropskega projekta RIPE. Obdeluje 512-bitne bloke v petih zankah, rezultat je 160-bite


Niels Ferguson in Bruce Schneier v knjigi "Practical Cryptography" (Wiley Publishing, 2003, stran 95) pravita, da zgoščevalne funkcije še niso bile dovolj analizirane in da znanje na tem področju za 20 let zaostaja za znanjem o blokovnih algoritmih. To se popravlja, saj je bilo na konferenci Crypto 2004 predstavljenih več projektov na to temo:

  • Eli Biham je predstavil način, kako najti kolizije pri okrnjenem algoritmu SHA-1 (pri 34 zankah namesto 80, kolikor jih ima neokrnjeni algoritem). SHA-1 je torej še vedno varen algoritem.
  • Antoine Joux - kolizije za SHA-0. Ta algoritem je bil predhodnik SHA-1 in se že več let ne uporablja.
  • Wang, Feng, Lai in Yu - kolizije za MD4, MD5, HAVAL-128, RIPEMD .

Gre za teoretične dosežke, ki zaenkrat najbrž niso praktično uporabni. Če iz dveh datotek, ki se razlikujeta v nekaj bitih, dobimo enak povzetek, to še ne pomeni, da lahko za dve konkretni pogodbi dobimo enak povzetek. Reakcije na konferenco so spodbudile NIST, da je objavil sporočilo o uporabi SHA-1. V njem previdevajo zamenjavo SHA-1 s SHA-256 ali SHA-512 do leta 2010.

Februarja 2005 je dodatno vznemirjenje povzročil Schneierjev dnevniški zapis, v katerem omenja, da kroži povzetek članka Xiaoyun Wang, Yiqun Lise Yin in Hongbo Yu, kjer trdijo, da so našli učinkovite postopke za iskanje kolizij za SHA-1 v 269 poskusih, kar je seveda bistveno manj od 280 poskusov. V povzetku navajajo primer kolizije za okrnjen SHA-1 (58 zank namesto 80). Članek z naslovom Finding Collisions in the Full SHA-1 je na voljo od konca junija 2005. V intervjuju Yiqun Lisa Yin pravi, da so našli dve pomanjkljivosti SHA-1 - priprava datoteke na začetku postopka bi morala biti boljša in matematični postopek v prvih 20 zankah ima nepričakovane varnostne slabosti. Odmevi na to novico so naslednji:

Na konferenci Crypto 2005 je bilo 16.avgusta v predavanju z naslovom "New collision search for SHA-1" povedano, da je skupina profesorice Xiaoyun Wang našla način najti kolizije za SHA-1 v 263 poskusih. Ker ni dobila vstopne vize za ZDA, rezultatov ni predstavila sama, vendar strokovnjaki verjamejo njenim rezultatom.

Zaenkrat torej to še ne pomeni konca e-trgovanja (263 operacij je ogromna številka), je pa jasno, da bo treba SHA-1 nadomestiti z varnejšo funkcijo prej, kot smo mislili pred nekaj leti. NIST priporoča naslednje korake:

  • prehod na SHA-2 (torej na SHA-224, SHA-256, SHA-384 ali SHA-512);
    Čeprav gre za isto vrsto algoritmov kot SHA-1, so toliko močnejši, da bi morali biti nezlomljivi še eno desetletje.
  • pospešiti raziskave zgoščevalnih funkcij;
    NIST organizira konference, posebej namenjene zgoščevalnim funkcijam. Druga je bila 24. in 25. avgusta 2006 (povzetek).
  • priprava izbora za novo zgoščevalno funkcijo na način, kot so ga izvedli za naslednika DES.

 

PGP (Pretty Good Privacy)

Leta 1990 so se razširile govorice, da ameriška vlada na predlog FBI in NSA pripravlja zakon, ki bo močno omejil uporabo kriptografskih algoritmov. Phil Zimmermann, računalniški strokovnjak in idealist, je kot odgovor na to napisal programski paket PGP (Pretty Good Privacy). Za to je porabil pol leta neplačanega dopusta in se moral celo zadolžiti. Ko ga je s pomočjo somišljenikov junija 1991 začel širiti po Internetu, si je nakopal triletno preganjanje ameriških vladnih ustanov, saj so ga hoteli obsoditi, da je kršil zakon o izvozu orožja. Prav gotovo je razširjenost uporabe PGP prispevala k temu, da je ameriška vlada v začetku leta 2000 omilila omejitve za izvoz kriptografske opreme.

PGP je šifrirni program, ki omogoča enostavno šifriranje podatkov in pri tem uporablja simetrične in asimetrične algoritme, zgoščevalne funkcije in vse, kar je potrebno, da lahko pošiljamo šifrirana poročila po elektronski pošti. Poleg avtorja in njegovih sodelavcev so ga dopolnjevali uporabniki po vsem svetu.

Zimmermannu je poleg preganjanja zaradi izvoza kriptografske opreme grozila še tožba zaradi kršitve patentnih pravic. V ZDA se namreč da patentirati algoritme in podjetje Public Key Partners (PKP) je imelo patent za uporabo algoritma RSA (patent je potekel leta 2000). Tako je bil prisiljen pripraviti dve verziji- eno za ZDA in eno za preostali svet. Dogovoril se je z MIT, da od verzije 2.5 naprej vzdržujejo verzijo za ZDA, ki za implementacijo algoritma RSA uporablja podprograme RSAREF podjetja PKP. Za uporabnike izven ZDA so na strežniku www.pgpi.org na voljo verzije s končnico i kot international, ki jih vzdržuje Norvežan Staale Schumacher. Te inačice PGP uporabljajo Zimmermannovo knjižnico programov za RSA MPILIB. Poleg tega ameriška verzija ne zna prebrati tekstov, zašifriranih s starejšimi verzijami. Tako so zagotovili, da bodo vsi uporabniki v ZDA uporabljali "uradno" verzijo.

PGP je uspešno preživel težave zaradi kršenja izvoznih omejitev in patentnih pravic, manj uspešni pa so poskusi trženja. Zimmermann je leta 1996 ustanovil podjetje PGP Inc., da bi si s prodajo PGP in svetovanjem povrnil stroške razvoja. Podjetje je še naprej nudilo neplačljivo verzijo. Zaslužka ni bilo dovolj in po enem letu je podjetje propadlo. Kupila ga je firma Network Associates. Tudi ta je po petih letih ugotovila, da PGP ni dovolj donosen in so to področje ukinili. Lani je Zimmermann s sodelavci ustanovil podjetje PGP Corp. V decembru 2002 so objavili verzijo 8.0. Tokrat pa v neplačljivi različici ni več pluginov za programe za elektronsko pošto, tako da je treba datoteke zašifrirati posebej ali prek odložišča.

V prvih verzijah je uporabnik vnašal ukaze v ukazni vrstici, saj je bil takrat najbolj razširjen operacijski sistem na osebnih računalnikih DOS. Zdaj je na voljo grafični vmesnik za različne operacijske sisteme.

 

Na voljo imamo module za upravljanje s ključi, za šifriranje datotek, za podpisovanje, za dešifriranje in verificiranje podpisov, za varno brisanje datotek ter druge. Poleg tega so na voljo tudi plugini za večino znanih programov za elektronsko pošto. Prvotno je PGP uporabljal algoritme RSA, IDEA in MD5, od verzije 5 naprej pa je možno izbirati med algoritmi RSA, Diffie-Hellman, DSA, med simetričnimi pa med IDEA, CAST, trojni DES, Twofish in AES. Ključ za asimetrični algoritem Diffie-Hellman je lahko dolg do 4096 bitov, za RSA do 2048 bitov.

Nastavitve izberemo z uporabo modula PGP-keys prek menija Edit -> Options, n.pr. kje naj bosta datoteki z zasebnim in javnim ključem. Ko kreiramo ključ, lahko izberemo možnost "Expert" za določanje dolžine ključa, algoritma ipd. Seveda si moramo zapomniti geslo, s katerim smo zaščitili naš zasebni ključ. Na koncu postopka nas program opozori, naj si naredimo varnostno kopijo ključa.

 

To moramo vsekakor narediti.

Vidimo, da sta se pojavili datoteki SECRING.SKR in PUBRING.PKR. PGP je avtomatično shranil privatni ključ na obroč tajnih ključev SECRING.SKR in ga zaščitil z geslom, ki smo ga vnesli ob tvorjenju. Javni ključ je shranjen v obroču javnih ključev PUBRING.PKR. Sem bomo dodajali javne ključe ljudi, s katerimi si bomo dopisovali.

Kako ugotovimo, ali nek javni ključ pripada ravno človeku, ki mu hočemo pisati? V času nastanka PGP overiteljev javnih ključev skoraj še ni bilo, poleg tega je Zimmermann želel, da bi se PGP uporabljal brez dodatnih stroškov ali vpletanj državnih ali komercialnih overiteljev. Zato si je zamislil "mrežo zaupanja" (web of trust) - uporabniki si sami izmenjujejo javne ključe v obliki digitalnih potrdil in jih drug drugemu podpisujejo ter tako jamčijo za njihovo verodostojnost. Objavljajo jih tudi na strežnikih javnih ključev.

Digitalna potrdila PGP vsebujejo poleg javnega ključa imetnika, imena, elektronskega naslova, identifikacijske oznake, algoritmov, dolžine ključa, časa kreiranja in veljavnosti še enega ali več digitalnih podpisov, ki jih naredijo znanci. Lahko vključimo tudi fotografijo.

 

Ko hočemo pisati prijatelju, lahko njegovo potrdilo potegnemo s strežnika javnih ključev, ali pa nam dopisovalec pošlje svoj javni ključ na datoteki, ki jo uvozimo v svoj obroč javnih ključev. Če nismo prepričani, da imamo pravi ključ, lahko lastnika ključa prosimo, da nam sporoči njegov prstni odtis. PGP ponudi prstni odtis v dveh verzijah - običajnih hexadecimalnih oznakah ali kot seznam besed, kar je primerno za sporočanje po telefonu. Tudi svoj javni ključ lahko objavimo na strežniku javnih ključev ali pa ga dopisovalcu pošljemo kot pripeto datoteko (svoj javni ključ izvozimo na datoteko prek menija "Export Selected keys to a file").

Potrdila niso v skladu s standardom X509V3. V plačljivi verziji pa je na voljo tudi možnost, da imamo potrdilo v tem formatu in ga pridobimo od overitelja javnih ključev.

Ko imamo dopisovalčev javni ključ, mu pošljemo podpisano šifrirano sporočilo. PGP iz datoteke najprej izračuna povzetek z zgoščevalno funkcijo in ga zašifrira s privatnim ključem pošiljatelja z algoritmom RSA oziroma drugim izbranim asimetričnim algoritmom. Ta podpis doda datoteki in vse skupaj zgosti s postopkom ZIP. Izračuna enkratni ključ (session key) in z njim zašifrira zgoščeno datoteko z uporabo izbranega simetričnega algoritma. Zdaj z naslovnikovim javnim ključem zašifrira enkratni ključ po asimetričnem algoritmu in vse skupaj doda prejšnji datoteki. Rezultat je šifrirano sporočilo (8-bitni znaki). To običajno pretvori v berljive znake s programom radix64 (iz treh 8-bitnih znakov naredi štiri 6-bitne ). Tako prirejeno sporočilo potuje do naslovnika. Tu se vsi postopki odvijejo v obratnem vrstnem redu:

  • PGP pretvori datoteko iz formata, ki je primeren za prenos po elektronski pošti;
  • dobi enkratni ključ z dešifriranjem s prejemnikovim privatnim ključem po asimetričnem algoritmu;
  • dešifrira datoteko z enkratnim ključem s simetričnim algoritmom;
  • razširi (dekompresira) datoteko z UNZIP;
  • verificira pošiljateljev digitalni podpis z njegovim javnim ključem.

Možnost izbire različnih algoritmov lahko predstavlja problem, če si dopisujemo z ljudmi, ki uporabljajo starejše verzije PGP. N.pr. za RSA sta na voljo dva formata - "RSA legacy" in novi RSA. Če izberemo "RSA legacy", bodo našo pošto lahko dešifrirali z večino verzij PGP, ne bomo pa imeli na voljo novejših opcij, kot so slike v potrdilu ali ADK.

ADK -Additional Decription Key so dodali v verziji 5 na zahtevo organizacij, da bi se dalo dešifrirati datoteke, ki so jih s svojimi ključi zašifrirali bivši uslužbenci. Tako se izognemo temu, da bi se izgubili pomembni službeni podatki. Pri kreiranju ključa izberemo, da se bodo vsa sporočila, zašifrirana s tem ključem, zašifrirala tudi s ključem organizacije, za katero delamo. PGP v tem primeru doda ključ organizacije v seznam prejemnikov pošte. Uporabnik lahko to opcijo obide in šifrira podatke samo s svojim ključem. V zvezi z ADK so ugotovili programsko napako v vseh verzijah 5.5.x in 6.x - odpravljena je bila z verzijo 6.5.8.

V plačljivih verzijah je na voljo PGPnet, ki omogoča vzpostavljanje navideznih zasebnih povezav (VPN) na nivoju IP po protokolu IPsec.


April 1998, dopolnjeno septembra 2006

SSL (Secure Sockets Layer)

je protokol, ki omogoča šifrirano povezavo med strežnikom in odjemalcem. Netscape ga je predstavil leta 1994. Dve leti kasneje je bila objavljena verzija 3 kot Internet Draft.

Poleg osnovnega cilja - varnosti in zasebnosti povezave - so si pri Netscape-u pri razvoju SSL zastavili še naslednje naloge:

  • odprtost - lahko ga implemetirajo drugi proizvajalci;
  • možnost dograjevanja z novimi kriptografskimi algoritmi;
  • učinkovitost: parametri, izmenjani s pomočjo asimetričnih algoritmov, ki so dosti počasnejši od simetričnih, se nekaj časa hranijo zato, da se asimetrični algoritmi izvajajo manjkrat.

Nalogo so rešili tako uspešno, da je SSL de facto standard. Njegov naslednik TLS (Transport Layer Security) - RFC 2246, ki ga je pripravil IETF, se od SSL le malo razlikuje. Seveda pa se razvoj ni ustavil in ga dopolnjujejo. Junija 2003 je bil objavljen RFC 3546, ki dopolnjuje RFC 2246 tako, da bi bil TLS bolj učinkovit. Naslednje dopolnitve so naštete v RFC 4366, tu gre predvsem za izboljšave zaradi uporabe mobilnih telefonov oziroma manj zmogljivih klientov..

Po OSI modelu komunikacijskih protokolov je vložen med transportni in aplikacijski nivo. Preverjanje vrstnega reda ali sprememb v izmenjanih blokih prepušča niže ležečemu protokolu, zato mora biti ta zanesljiv (TCP, ne pa UDP). Omogoča zaščito za vse aplikacijske protokole nad TCP (http, smtp, news, pop3, ldap, ...). Netscape je rezerviral naslednje številke za vrata aplikacijskih protokolov nad SSL:

      443      https                   989     ftp-podatki (ftps-data)
      465      ssmtp                   990     ftp-kontrolni (ftps)
      563      nntps (news)         992     telnets
      614      SSLshell                993     imap4 (imaps)
      636      ssl-ldap                995     POP3 (POP3S)

Iz prej povedanega vemo, da samo šifriranje blokov podatkov še ne bi omogočilo varne komunikacije, prav tako pomembno je preverjanje nespremenjenosti podatkov (integrity) ter preverjanje avtentičnosti obeh strani ( authentication) in vse to vključuje SSL.

Odjemalec in strežnik vzpostavita povezavo po protokolu TCP na običajen način, SSL pa poskrbi za šifriranje izmenjanih sporočil.

SSL sestavljata dva sloja:
Opis protokolov na zgornjem sloju

Opis Record protokola

V zgornjem sloju so protokoli, ki poskrbijo za to, da se medsebojno preverita, se dogovorita za način šifriranja podatkov ter varno izmenjata simetrični ključ. Samo šifriranje podatkov pa se izvaja na spodnjem sloju po prej dogovorjenem simetričnem algoritmu (Record Protocol).

V opisu protokola algoritmi niso zafiksirani in jih določi proizvajalec posameznega programskega produkta. Za overjanje in izmenjavo ključa so v zdaj definiranih naborih našteti algoritmi RSA, Diffie-Hellman in Fortezza, od simetričnih algoritmov pa DES, RC2, RC4, IDEA, 3DES, FORTEZZA.

Protokol je od svojih začetkov doživel nekaj sprememb. Izboljšave v verziji 3 glede na verzijo 2 so naslednje:

  • Dodan je povzetek vseh izmenjanih sporočil na koncu dogovarjanja o ključih, kar otežuje "man-in-the-middle attack". Ta je med drugim omogočal, da je napadalec izsilil uporabo krajših ključev, kot je bilo prvotno dogovorjeno med klientom in strežnikom.
  • Dodana je možnost komprimiranja podatkov z algoritmi, kot je ZIP.
  • Ker je bila do nedavnega dolžina simetričnega ključa po ameriških izvoznih pravilih omejena, so za zagotavljanje celovitosti in overjanja dodali overitveno število (MAC secret), ki je dolgo 128 bitov pri MD5 in 160 bitov pri SHA. Omejitve so namreč veljale samo za šifriranje, ne pa za podpisovanje.
  • Klient in strežnik lahko med povezavo spremenita ključe - pobudnik pošlje sporočilo Hello in sproži se Handshake protokol.
  • Omogoča izmenjavo več potrdil (certifikatov), povezanih v verigo. Tako lahko strežnik pošlje klientu poleg svojega digitalnega potrdila še potrdilo (ali več potrdil) overitelja zato, da lahko klient preveri strežnikovo potrdilo, tudi če ne pozna overitelja.
Zato ne bi smeli več uporabljati verzije 2.

 

SSL Handshake Protocol

Odjemalec in strežnik se morata medsebojno overiti in se dogovoriti za algoritme in ključe, s katerimi bo potekala šifrirana izmenjava podatkov med njima.

Glede medsebojnega overjanja so možne naslednje kombinacije:

  • ni overjanja
  • anonimni odjemalec preveri certifikat strežnika
  • vsak preveri certifikat sogovornika

Prva možnost je najslabša - podatki se sicer izmenjujejo zašifrirani, vendar jih lahko kdo prestreže in spremeni (man-in-the-middle attack). Pri overjanju so certifikati po standardu X509v3. Certifikat vsebuje poleg lastnega še certifikat overovitvene ustanove - agencije, ki ga je izdala, lahko pa tudi verigo certifikatov nadrejenih agencij.

Nabor algoritmov se spreminja - dodajajo nove, opuščajo pa tiste, ki ne veljajo več za varne. V RFC 2246, ki je nastal leta 1999, imamo naslednji nabor algoritmov (Cipher Suite), med njimi so

TLS_NULL_WITH_NULL_NULL
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_EXPORT_WITH_RC4_40_MD5

Pet let kasneje pa opuščajo algoritem MD5, kot simetrični algoritem pa se uvaja AES, kar lahko vidimo iz nabora OpenSSL verzija 0.9.7d.

Dokler se ne dogovorita za nabor, je v veljavi SSL_NULL_WITH_NULL_NULL, torej Record Protocol ne šifrira podatkov. Na začetku dogovarjanja klient pošlje strežniku vse kombinacije algoritmov, ki jih podpira, strežnik pa izbere tisto, ki jo tudi sam podpira in je našteta prej, Če ne najdeta skupnega nabora algoritmov, zveze ne moreta vzpostaviti. Algoritmi za komprimiranje podatkov (ZIP ipd.) niso vključeni v "Cipher Suite".

SSL loči podatke seje (Session), ki se hranijo dalj časa, in podatke povezave (Connection). S sejo označujemo neprekinjeno izmenjavo podatkov med klientom in strežnikom. Vsaki seji pa lahko pripada več povezav (connections), tudi istočasnih, n.pr. za prenos slike poleg teksta. Seji pripadajo naslednji podatki, ki si jih oba zapomnita in s tem skrajšata naslednja dogovarjanja:

  • oznaka seje - 32 bajtov
  • certifikat sogovornika (če ga ima oziroma če je tako določeno)
  • simetrični algoritem za šifriranje podatkov
  • zgostitveni algoritem za računanje MAC (Message Authentication Code)
  • postopek za komprimiranje
  • Master Secret - 48 bajtov (osnova za izračun simetričnega ključa in drugih parametrov)
  • is_resumable Flag (če je to stikalo vključeno, bosta za naslednjo povezavo te seje uporabila iste pravkar naštete parametre)

Za povezavo (connection) pa so značilni naslednji podatki:

  • Client Challenge (32-bajtno naključno generirano število)
  • Server Challenge (32-bajtno naključno generirano število)
  • zaporedno številko poslanega paketa
  • zaporedno številko dobljenega paketa
  • števila, ki jih izračunata iz Master Secret
    • simetrični ključ klienta
    • simetrični ključ strežnika
    • overitveno število klienta (MAC secret)
    • overitveno število strežnika
    • začetni vektor za klienta (če je potreben)
    • začetni vektor za strežnik (če je potreben)

Za vsako povezavo si izmenjata drugo osnovo za ključ (Challenge), zato s ključem ene povezave ne moremo dešifrirati podatkov druge povezave - poznati bi morali 48-bajtni Master Secret. Dolžina ene seje je po protokolu omejena na 24 ur (če je seveda klient in strežnik prej ne prekineta), kar bi veljalo skrajšati na nekaj ur.

Postopek poteka v naslednjih korakih:
V tem pregledu predpostavimo, da gre za RSA. Če izbereta DH ali Fortezzo, je postopek v korakih, kjer se tvori skupni ključ, drugačen. Z modro so označeni opcijski koraki, odvisni od načina overjanja (ali imata certifikate ali ne).

I. Začetek (Client Hello)
Odjemalec pošlje strežniku številko verzije SSL, kombinacije algoritmov, ki jih podpira, in 32 bajtov dolgo naključno generirano število (Client Challenge). Če to ni prvi poskus povezave in hoče le nadaljevati že prej začeto sejo, pošlje tudi oznako seje (Session ID), sicer je to polje prazno.

II. Odgovor strežnika
Strežnikov odgovor vsebuje verzijo SSL, seznam algoritmov, ki jih je strežnik izbral iz nabora, ki ga je predlagal odjemalec, in 32-bajtno število (Server Challenge). Če je od odjemalca dobil oznako seje, išče podatke o njej in če jih še ima, velja, da bosta ohranila iste podatke seje. V tem primeru strežnik vključi isto oznako seje in postopek je krajši.
Če pa gre za novo sejo, mora strežnik poslati klientu svoj javni ključ, da si bosta lahko izmenjala ključ za simetrični algoritem - lahko s certifikatom v koraku Certificate. Klient delno preveri ime strežnika za certifikat tako, da vpraša imenski strežnik (DNS). Kaj več se zaenkrat ne da avtomatizirati, zato bi uporabniki morali imeti brkljalnike nastavljene tako, da vedno sami preverijo certifikat in imena strežnika ter overitvenih agencij.
Če overjanje strežnika ni bilo izbrano, mora tvoriti začasni par ključev, da lahko pošlje javni ključ (Server Key Exchange).
Ob konfiguriranju strežnika lahko določimo, da zahteva certifikat klienta. V Certificate Request navede tiste CA (ustanove za overjanje javnih ključev), ki jim zaupa. Zvezo bo vzpostavil samo s tistimi klienti, ki imajo certifikat izbranih CA.

III. Odgovor klienta
Klient pošlje svoj certifikat, če ga ima in če ga je strežnik zahteval.
V naslednjem koraku (Client Key Exchange) izračuna 48-bajtno osnovo za simetrični ključ (Pre-Master Secret - PMS) iz verzije SSL in 46 bajtov dolgega števila. Zašifrira jo s strežnikovim javnim ključem. Iz tega bosta oba na enak način izračunala Master Secret (MS):

MS = MD5(PMS + SHA('A' + PMS + Client Challenge + Server Challenge)) +
     MD5(PMS + SHA('BB' + PMS + Client Challenge + Server Challenge)) +
     MD5(PMS + SHA('CCC' + PMS + Client Challenge + Server Challenge)) 

Z znakom + označujemo spojitev (konkatenacijo) polj. A,B,C so konstante (A=0x41, B=0x42, C=0x43, ...). Na podoben način izračunata tako dolgo polje, kot ga potrebujeta, da iz njega izrežeta simetrična ključa in druge potrebne parametre, ki smo jih našteli na začetku:

     MD5(MS + SHA('A' + MS + Client Challenge + Server Challenge)) +
     MD5(MS + SHA('BB' + MS + Client Challenge + Server Challenge)) + ...

Tako sta dosegla, da znata samo onadva izračunati skupni skriti ključ, čeprav so bila doslej izmenjana sporočila vsa nezašifrirana.

Če mora klient poslati certifikat, bo zdaj poslal še potrdilo, da res pozna pripadajoči skriti ključ (Certificate Verify) - z njim zašifrira povzetek, dobljen iz Master Secret in vseh doslej izmenjanih sporočil v tej Handshake povezavi. Strežnik ga bo dešifriral s klientovim javnim ključem in tako overil klienta.

Sledi Change Cipher Spec, ki pove, da bodo vsa naslednja sporočila zašifrirana s pravkar izračunanimi parametri.

V zadnjem sporočilu (Client Finished) klient zašifrira povzetek doslej izmenjanih sporočil v tej Handshake povezavi. Strežnik izračuna isti povzetek in če nista enaka, pomeni, da so bila sporočila na poti spremenjena, in prekine povezavo.

IV. Zaključek

Strežnik pošlje sporočilo Change Cipher Spec. Zaključi na enak način kot klient - pošlje povzetek vseh izmenjanih sporočil in tako dokaže klientu, da pozna svoj skriti ključ ter PMS in MS. Tako je dogovarjanje končano in bo Record Protocol začel šifrirati sporočila.


Na tem nivoju sta definirana še protokola:

Change Cipher Spec Protocol

To je signal, ki ga klient in strežnik pošljeta drug drugemu kot potrditev, da se bo šifriranje nadaljevalo s pravkar dogovorjenimi parametri. Tako n.pr. na koncu Handshake protokola z izmenjavo tega signala dosežeta, da se nabor algoritmov SSL_NULL_WITH_NULL_NULL zamenja z dogovorjenim.

Alert Protocol

je namenjen obvestilu sogovornika, da je prišlo do napake. Ob usodnih napakah vedno zaključita povezavo. Take napake so n.pr. če nimata skupnih algoritmov, če je MAC napačen. Napake ob preverjanju certifikatov pa niso vedno usodne - odvisno od nastavitev.

 

 

SSL Record Protocol

 

poskrbi, da se sporočila prenašajo zašifrirana tako, kot je bilo dogovorjeno na višjem nivoju SSL. Podatke razbije na bloke, dolge do 214 bajtov (16 Kb). V verziji 3 je predvideno komprimiranje podatkov pred šifriranjem, vendar to zaenkrat povečini še ni implementirano. Bloku podatkov doda zaporedno številko sporočila, tip zapisa (ki loči dejanske podatke od kontrolnih sporočil SSL z višjega nivoja) ter dolžino bloka podatkov. Iz tega izračuna MAC, ki omogoča kontrolo nespremenjenosti podatkov in overovitev pošiljatelja:

 

MAC = hash(MAC-p + pad2 + hash(MAC-p + pad1 + zap.št. + tip + dolžina bloka podatkov + podatki))

 

MAC-p = overitveno število pošiljatelja, izračunano iz podatkov, izmenjanih na višjem nivoju SSL
pad1 = 48 znakov 0x36 pri MD5 ter 40 znakov 0x36 pri SHA
pad2 = 48 znakov 0x5c pri MD5 ter 40 znakov 0x5c pri SHA

 

Oboje skupaj, MAC in podatke, zašifrira z dogovorjenim ključem za to povezavo in zapis preda transportnemu nivoju pod seboj (oziroma pri sprejemu dešifrira, izračuna MAC in ga primerja s prejetim MAC ter zapis preda višjemu nivoju).

 

Protokoli IPSec

Gre za skupino protokolov, ki določajo šifriranje na nivoju IP (omrežni komunikacijski sloj). Do leta 2004 jih je razvijaladelovna skupina pri IETF kot del standarda IPV6 (RFC 2460). Ker bo do splošne uporabe opreme po tem standardu preteklo še nekaj let, je IPSec vgrajen v različne produkte, ki podpirajo današnjo verzijo IPV4. Zašifrirano je vse od glave omrežnega sloja naprej, torej vsi podatki, ki niso potrebni za usmerjanje paketov:

 

Paketov na vmesnih postajah ni treba dešifrirati, ker informacije, ki jih potrebujejo usmerjevalniki, niso zašifrirane.

IPSec sestavljajo:

  • dogovor o načinu šifriranja in izmenjava ključev (Key Management),
  • preverjanje nespremenjenosti podatkov in overjanje brez šifriranja (Authentication Header - AH)
  • šifriranje podatkov (Encapsulating Security Payload - ESP).

Dogovor o načinu šifriranja (Key Management)

Sodelujoči strani se dogovorita o:

  • algoritmu in ključu za šifriranje podatkov (za ESP),
  • algoritmu in ključu za overjanje (za AH),
  • času veljavnosti ključev,
  • IP naslovih pošiljatelja in naslovnika,
  • stopnji tajnosti (neobvezno),
  • oznaki uporabnika (neobvezno).

Ta dogovor imenujemo Security Association (SA). Vsaka stran določi svoj SA, v katerem je IP številka nasprotne strani, oznaka protokola (AH ali ESP) in pa 32-bitna oznaka Security parameters index (SPI), ki označuje vse potrebne algoritme in ključe za šifriranje oziroma dešifriranje, za katere sta se dogovorila. S SPI so na enostaven način ločili problem izmenjave ključev od overjanja in šifriranja paketov. Kako pride do dogovora, kakšen protokol bo tu uporabljen, še ni določeno. Vsi večji proizvajalci se trudijo, da bi bil izbran njihov predlog. Gre za postopek na višjem komunikacijskem sloju, zato ne spada med protokole IPV6.

Zaenkrat omenjajo naslednje načine:

  • ročna izmenjava podatkov o SA (na disketah, papirju, ...) je primerna za manjša okolja, nikakor pa ne za internet, kjer gre za stotine povezav;
  • Photuris (avtorja Phil Karn in William Simpson):
    Dogovor poteka z UPD paketi. Za izmenjavo začasnega skritega ključa uporabimo Diffie-Hellmanov algoritem, za overovitev obeh strani pa RSA DSS. Prejemnik pošlje svoj nabor algoritmov, pošiljatelj pa iz tega nabora izbere tiste, ki mu bolj ustrezajo. Ključ se ne hrani in postopek se ponovi ob vsaki novi povezavi.Tak način je varen, ker se iz predhodnega ključa ne da ugotoviti novega.
  • Simple Key Management Protocol (SKIP), ki ga je razvil Sun;
    SKIP daje prednost hitrosti pred varnostjo. Ob začetni povezavi se izmenja glavni skriti ključ po protokolu Diffie-Hellman. Ob naslednji povezavi pa pobudnik izračuna novi ključ kot naključno število, ga zašifrira s prej izmenjanim glavnim ključem in odpošlje. Če bi kdo izračunal glavni ključ, bi lahko dešifriral vse pakete. Možno je implemetirati SKIP tudi tako, da se ob vsaki povezavi izmenja nov glavni ključ.
  • Internet Security Association and Key Management Protocol (ISAKMP), ki ga podpira CISCO;
    V uporabi je predvsem verzija ISAKMP/Oakley- zadnjem času namesto te nerodne okrajšave uporabljajo IKE (Internet Key Exchange).

Pri določanju postopka šifriranja (SA in SPI) imamo možnost izbrati samo preverjanje nespremenjenosti podatkov v paketih, šifriranja paketov ali obojega hkrati.


Preverjanje nespremenjenosti podatkov

V paket dodamo "Authentication Header (AH)", ki vsebuje povzetek vsebine paketa, sami podatki pa niso zašifrirani (rfc2402). Dodano je naslednje:

  • številska oznaka glave, ki sledi AH (običajno oznaka za TCP glavo ali ESP glavo),
  • dolžina AH v 32-bitnih blokih,
  • SPI - Security parameters index - število, ki označuje, kateri kriptografski postopki in ključi so uporabljeni,
  • povzetek podatkov v paketu:
    Algoritem v protokolu ni fiksiran. Ena možnost je uporaba MD5 in to tako, da povzetek naredimo čez podatke, ki smo jim na začetku in koncu dodali skriti ključ, ki je določen s SPI (rfc1828). V zgostitev vključimo tudi tiste podatke iz glave omrežnega sloja, ki se med prenosom ne spremenijo. Spremeni se n.pr. TTL (time to live), ki ga v povzetku upoštevamo kot same ničle. Lahko pa s SPI določimo drugačen povzetek. 

    Protokol se še razvija. Dodan je 32-bitni števec, ki označuje zaporedje paketov, in je namenjen preprečevanju napadov s podvajanjem paketov (replay attack). Seveda pa je vprašanje, kako hitro proizvajalci sledijo razvoju protokola.


Šifriranje podatkov

določa protokol Encapsulating Security Payload (ESP) - rfc2406. V paket za IP glavo dodamo SPI. Temu lahko sledijo podatki, ki jih potrebuje šifrirni algoritem, določen s SPI (n.pr. začetni vektor za DES-CBC). Vse, kar sledi, je overjeno in/ali zašifrirano na način, ki ga določa SPI. ESP omogoča overjanje in šifriranje po izbiri.


Transportni in tunelski način šifriranja

Kadar vzpostavljata povezavo dva računalnika brez posrednikov (oba imata veljavni IP številki), imenujejo to transportni način uporabe bodisi AH bodisi ESP (transport-mode).

V internet so vključena tudi omrežja, kjer ima registrirano številko samo priključni računalnik (gateway, posrednik, zastopnik, proxy, ...), interna mreža za njim pa uporablja privatne IP številke (n.pr. 10.*.*.*). Če hočemo zagotoviti varno povezavo med računalnikom iz ene notranje mreže z računalnikom iz druge notranje mreže, uporabimo "tunelski način" - Tunnel-mode: pri ESP posrednik celotni paket, ki ga dobi od postaje iz notranje mreže, zašifrira in vključi v ESP paket, ki mu doda novo IP glavo. Tu kot izvor navede svojo IP številko, namesto dejanskega naslovnika pa navede njegovega posrednika. Oba sodelujoča posrednika imata tabelo, v kateri je vsaki postaji iz internih mrež določen posrednik. Ko paket pride do naslovnikovega posrednika, ga ta dešifrira, najde pravi naslov in paket pošlje pravemu naslovniku.

Zakaj pravzaprav protokol AH, saj ESP ravno tako omogoča overjanje? Eden od vzrokov so izvozne omejitve - za algoritme za overjanje ponavadi ne veljajo, ESP pa zahteva implementacijo šifrirnih algoritmov tudi, če ne bodo uporabljeni. Če potrebujemo samo overjanje, je uporaba protokola AH veliko bolj racionalna kot uporaba ESP.

Lahko se uporabljata AH in ESP istočasno in ni nujno, da se končni točki pri obeh pokrivata. Imamo več možnosti kombiniranja - odvisno od zaupnosti podatkov. Običajno je ESP vključen v AH

 

Protokol ISAKMP/Oakley oziroma IKE

Kratica ISAKMP pomeni Internet Security Association And Key Management Protocol in predstavlja okvir, v katerega se lahko vključijo različni postopki za dogovor o ključih - RFC 2408 . Oakley je eden od možnih načinov izmenjave ključev ( RFC 2412) in je podoben Photurisu. Uporablja UDP pakete.

RFC 2409 opisuje protokol ISAKMP z izmenjavo ključev po Oakley protokolu. Postopek je zasnovan fleksibilno: pobudnik in naslovnik si izmenjujeta informacije v več korakih, če dajeta prednost varnosti, in v manj korakih, kjer več podatkov izmenjata nezašifriranih, če gre za manj zaupne informacije in je pomembna hitrost.

Tudi overjanje obeh strani je možno na več načinov: s certifikati agencij za overjanje javnih ključev, s certifikati PGP, s prej razdeljenimi privatnimi ključi ali z javnimi ključi, ki bodo na voljo v domenskem sistemu (DNSSEC).

Da bi dodatno skrajšali postopek, protokol navaja vrednosti parametrov za štiri načine uporabe postopka Diffie-Hellman (Well-known group): običajni modularno eksponentni način (MODP) s 768 bitnim praštevilom, MODP s 1024-bitnim praštevilom ter še dva načina z uporabo eliptičnih funkcij. Če strani uporabita enega od teh načinov, jima ni treba izmenjati vrednosti parametrov, ampak samo oznako načina (grupe). Protokol predvideva tudi možnost dogovora za drugačne parametre (new group mode).

Izmenjava ima lahko najmanj tri korake:

  1. Pobudnik na začetku generira par ključev po postopku Diffie-Hellman in pošlje:
    • oznako grupe,
    • svoj javni ključ gx mod p,
    • seznam algoritmov za šifriranje, povzetke in overovljanje, ki jih podpira,
    • naključno število,
    • svojo oznako,
    • podpis vseh poslanih polj, narejen z algoritmom, ki je naštet kot prvi za overovljanje.
  2. Naslovnik odgovori na podoben način in pošlje:
    • oznako grupe,
    • svoj javni ključ gy mod p,
    • izbrane algoritme za šifriranje, povzetke in overovljanje (SA),
    • naključno število,
    • svojo oznako,
    • podpis vseh poslanih polj.
  3. V zadnjem koraku pa pobudnik s podpisom dogovorjenih polj potrdi vzpostavitev SA

    Skupni skriti ključ oba izračunata kot povzetek iz obeh oznak in gxy mod p.

Slabost tega načina je, da dogovarjanje ne skrije oznak obeh strani. Lahko pa izberemo način, kjer se najprej izmenjata javna ključa, naslednje dogovarjanje je zašifrirano, seveda pa je potrebnih več korakov. Vprašanje je, koliko od možnosti, ki jih navaja protokol, je vgrajenih v obstoječih implementacijah.

 

 

SSH (Secure Shell)

Administratorji smo za dostop do strežnikov s svojih delovnih postaj uporabljali protokole telnet, rlogin ali rsh, za nalaganje datotek pa ftp. Tu promet poteka nezašifrirano, torej je možno na vmesnih usmerjevalnikih prestreči gesla in druge podatke. Dokler je to potekalo v majhnih lokalnih omrežjih, ni bilo problematično. Da pa to za internetno okolje ni primerno, je postalo jasno že zelo zgodaj - Tatu Ylönen je že julija 1995 objavil prvo verzijo SSH, novembra istega leta pa internet-draft z naslovom "The SSH (Secure Shell) Remote Login Protocol". V nekem intervjuju je povedal, da ga je k temu spodbudil vdor hekerja v univerzitetno omrežje, ko si je le-ta nabral več tisoč uporabniških imen in pripadajočih gesel. Njegov sofver je bil na začetku na voljo zastonj, kmalu pa je ustanovil firmo, ki ga je začela tržiti, ker je bil preobremenjen z vprašanji o SSH. Skupina programerjev je na osnovi zadnje neplačljive verzije dodala podporo za SSH v OpenBSD leta 1999 in od takrat naprej ga razvijajo kot produkt OpenSSH, ki uporablja kriptografsko knjižnico OpenSSL. SSH je do danes skoraj v celoti izpodrinil telnet, rlogin, rsh in ftp. Glede na to, da je OpenSSH zastonj, danes njegova uporaba prevladuje.

Obstajata dve verziji protokola, ki med seboj nista kompatibilni: SSH1 in SSH2. Uporabljata različne kriptografske algoritme in šifrirata različne dele paketov. SSH2 popravlja napake v zasnovi SSH1, zato je varnejši. IETF je leta 2006 zaključila z delom za skupino standardov za SSH2. OpenSSH podpira obe verziji.

Sestavljata ga strežniški del (daemon) sshd in odjemalec ssh, ki se medsebojno overita in dogovorita za šifriran prenos podatkov. Daemon se običajno zažene od startu strežnika in posluša na vratih 22, lahko pa to spremenimo v konfiguracijski datoteki sshd_config.

Način overjanja se določi v konfiguracijski datoteki - najvarneje je izbrati overjanje s ključi RSA (RSAAuthentication yes) in obenem onemogočiti vse druge možnosti. V tem primeru strežnik in uporabnik ne potrebujeta digitalnih potrdil kot pri SSL, pač pa je treba na začetku skopirati javne ključe sogovornikov v posebne datoteke: na strežnik skopiramo javni ključ uporabnika, ki se bo nanj priključeval, uporabnik pa hrani javni ključ strežnika, da je ob priključitvi opozorjen, če se je ta spremenil. Po instalaciji OpenSSH najprej generiramo pare ključev za strežnik in odjemalce oziroma uporabnike z orodjem ssh-keygen.Lahko izberemo kreiranje ključa RSA (uporabljata obe verziji SSH) ali pa ključa DSA (za SSH2).

Primer: generiramo 1024-bitni ključ RSA za streznik1 in sicer naj se zapiše na datoteko ssh_host_key.
ssh-keygen -t rsa -b 1024 -C streznik1 -f ssh_host_key
Dobimo dve datoteki: v ssh_host_key je shranjen zasebni ključ strežnika, v ssh_host_key.pub pa javni ključ.

Podobno tvorimo ključ RSA za odjemalca:
ssh-keygen -t rsa -b 1024 -C admin1 -f $HOME/.ssh/identity
in na domači direktorij uporabnika admin1 dobimo datoteki identity (zasebni ključ) in identity.pub (javni ključ). V postopku kreiranja smo vnesli geslo, s katerim je zaščiten zasebni ključ odjemalca z imenom admin1. Zdaj javni ključ uporabnika admin1 (torej datoteko identity.pub) skopiramo na vse tiste računalnike, kamor naj bi se admin1 priključeval in sicer na datoteko $HOME/.ssh/authorized_keys. Tako imamo naslednje stanje:

 

Uporabnik admin1 bo začel postopek priključitve na streznik1 z ukazom:
ssh -l admin1 streznik1
Od strežnika bo dobil javni ključ in bo preveril, da je isti, kot ga ima shranjenega v datoteki known_hosts. Če se je ključ spremenil, bo uporabnik dobil obvestilo. Naslednji korak je dogovor o simetričnem algoritmu in ključu, ki ga bosta uporabljala v nadaljevanju, da bo povezava zašifrirana. Na koncu pa še strežnik preveri klienta po postopku, ki je določen v konfiguracijski datoteki. V zgornjem primeru bo strežnik dovolil priključitev klientu samo, če ima njegov javni ključ shranjen v datoteki authorized_keys. Uporabnik bo vnesel geslo za svoj zasebni ključ.

Za kopiranje datotek pa uporabimo ukaz scp.

Kot odjemalca na Windowsih najpogosteje uporabljamo programček Putty. V tem primeru je najlaže na strežniku tvoriti par ključev za odjemalca ter datoteko z zasebnim ključem skopirati na PC, v konfiguraciji za Putty pa povemo njeno lokacijo in ime.

Več o uporabi SSH bomo zvedeli na straneh OpenSSH in v prosojnicah Briana Hatcha.

Literatura in povezave

  • Douglas R. Stinson: Cryptography: Theory and Practice, CRC Press, 1995
  • Simson Garfinkel, Gene Spafford: Practical Unix & Internet Security (O'Reilly & Associates, 1996) - poglavje 6: Cryptography
  • Bruce Schneier: Applied Cryptography, John Wiley & Sons, 1996 (druga izdaja)
  • Richard E.Smith: Internet Cryptography, Addison-Wesley, 1997
  • Warwick Ford, Michael S.Baum: Secure Electronic Commerce, Prentice Hall, 1997
  • Stephen Thomas: SSL and TLS Essentials, John Wiley & Sons, 2000
  • Bruce Schneier: Secrets and Lies, John Wiley & Sons, 2000
  • Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone: Handbook of Applied Cryptography, CRC Press 2001 (po poglavjih dostopna na spletu)
  • Niels Ferguson, Bruce Schneier: Practical Cryptography, John Wiley & Sons, 2003
  • Simon Singh: Knjiga šifer (Umetnost šifriranja od starega Egipta do kvantne kriptografije), Učila

Pravni vidiki uporabe kriptografije

Na straneh proizvajalcev kriptografske opreme:

O infrastrukturi javnih ključev (PKI):