TLS/SSL (Transport Layer Security/Secure Socket Layer)
Sergej Rožman,
5. 3. 2008
Uvod
TLS (Transport Layer Security) je standardizirana verzija protokola SSL (Secure Socket Layer), ki je bil razvit pri korporaciji Netscape Communications za izmenjavo zasebnih dokumentov preko povezav skozi nevarna omrežja (npr. Internet).
SSL protokol je bil predstavljen leta 1994. 1999 leta je bil izdelan standard za TLS protokol verzije 1.0, ki je interno predstavljen kot SSL verzije 3.1. To je danes aktualna verzija.
TLS protokol uporablja šifriranje, ki temelji na kombinaciji asimentričnih in simetričnih postopkov ter uporablja pretočni ali blokovni način šifriranja. TLS in SSL imajo vgrajeni vsi danes prisotni spletni brkljalniki in zaradi tega je najbolj razširjen protokol za varno komuniciranje. Veliko spletnih strani uporablja TLS ali SSL protokol pri vpogledu v zaupne informacije, npr. številke kreditnih kartic.
Značilnosti in standardi
TLS protokol v verziji 1.0 je standardiziran s strani IETF (The Internet Engineering Task Force) v standardu RFC 2246. Njegov predhodnik SSL nima internetnega standarda, ampak je opisan le v publikaciji izdani od korporacije Netscape Communications [SSL].
Netscape je rezerviral naslednje številke za vrata aplikacijskih protokolov nad SSL:
aplikacijski protokol | številka TCP vrat |
---|---|
https | 443 |
ssmtp | 465 |
nntps | 563 |
SSLshell | 614 |
ssl-ldap | 636 |
ftps-podatki (ftps-data) | 989 |
ftp-kontrolni (ftps) | 990 |
telnets | 992 |
imap4 (imaps) | 993 |
pop4 (pops) | 995 |
Pri snovanju TLS protokola so imeli v mislih naslednje lastnosti:
Zaupnost
TLS protokol mora zagotavljati zaupnost in celovitost prenosa podatkov med dvema sistemoma.
Medsebojna združljivost
TLS protokol je standardiziran. Skladnost s standardom v splošnem zagotavlja medsebojno komunikacijo naprav različnih proizvajalcev, ki jim ni treba poznati natančne implementacije protokolov na drugi strani.
Kljub skladnosti s standardom je možno, da različne implementacije med sabo v nekaterih primerih ne morejo vzpostaviti komunikacije. Standard namreč omogoča uporabo več vrst overjanja in šifrirnih postopkov, vendar ne predpisuje, da morajo vsi sistemi imeti vgrajene vse vrste. Če se klient in strežnik ne moreta uskladiti o uporabi skupnih varnostnih parametrov, potem seje med njima ni mogoče vzpostaviti.
Razširljivost
TLS protokol je zasnovan tako, da je možno brez večjih predelav dodajati nove šifrirne postopke brez vpliva na združljivost s trenutnimi verzijami. Protokol trenutno pozna približno trideset kombinacij overjanja, šifriranja in zaščite podatkov (MAC).
Učinkovitost
Šifrirne operacije, še posebno asimetrične, so računsko zelo zahtevne. Iz optimizacijskih razlogov ima TLS protokol možnost začasnega pomnenja končanih sej. Standard priporoča možnost pomnenja sej najdlje do 24 ur.
V kolikor pride v tem času do nove zahteve po komunikaciji z istim klientom, se lahko uporabi stara shranjena seja, ki že vsebuje vse potrebne varnostne parametre. S tem se izognemo potratnemu začetnemu usklajevalnemu postopku in izberemo poenostavljen usklajevalni postopek.
O vsaki seji si strežnik shrani sledeče parametre:
- identifikator seje, ki nedvoumno določa sejo,
- certifikat nasprotne strani,
- varnostne parametre,
- metodo stiskanja podatkov,
- glavni ključ,
- oznako – zastavico, ki označuje, če je sejo mogoče ponovno uporabiti.
Iste parametre mora poznati tudi klient, da je sposoben nadaljevati sejo.
Posamezna seja lahko vsebuje tudi več sočasnih povezav, ki uporabljajo iste parametre. Tudi v tem primeru pri vzpostavljanju uporabimo poenostavljen usklajevalni postopek.
Protokolni sklad
TLS protokol je sloj med transportnim in aplikativnimi sloji. Preverjanje vrstnega reda prihajajočih paketov in sprememb ter napak v paketih prepušča nižje ležečemu protokolu, zato mora biti ta zanesljiv (TCP, ne UDP).
Osi | TCP/IP | TCP/IP s TLS |
---|---|---|
aplikacijski sloj | aplikacijski sloj | aplikacijski sloj |
predstavitveni sloj | ||
sejni sloj | TLS | |
transportni sloj | TCP, UDP | TCP |
omrežni sloj | IP | IP |
povezavni sloj | omrežje | omrežje |
fizični sloj |
Težko presodimo ali TLS sodi med aplikativne ali k transportnemu sloju.
Glede na dejstvo, da je ponavadi TLS sloj integralni del aplikacij, npr. spletnih strežnikov in spletnih brkljalnikov, bi presodili, da bolj sodi k aplikativnim slojem.
Vendar obstajajo tudi produkti, ki jih neodvisno od aplikacij namestimo na sistem in tako v protokolni sklad neodvisno od aplikativnih slojev namestimo TLS sloj. Ta zagotavlja komunikacijo preko TLS protokola različnim aplikacijam (POP3, IMAP, LDAP, SMTP…) brez posegov v samo aplikacijo. Primer produkta te vrste je stunnel (http://www.stunnel.org/).
Nad TLS sloj lahko namestimo celo nekatere nižje ležeče omrežne sloje, npr. PPP, in tako dobimo funkcionalnost tuneliranja. S povezovanjem omrežij na ta način lahko zgradimo navidezno zasebno omrežje (VPN).
Pri izdelavi nove aplikacije, ki ima vgrajen TLS protokol, nam ni treba od začetka pisati vseh procedur in funkcij za overjanje, šifriranje, delo s certifikati ipd. V ta namen že obstajajo izgotovljene knjižnice (npr. http://www.openssl.org/). S tem zmanjšamo možnost varnostnih napak v implementaciji, saj veliko število uporabnikov ves čas testira izgotovljene procedure in razvijalci sproti odpravljajo ugotovljene nepravilnosti.
Sestava protokola TLS
Sestava TLS protokolnega sloja
usklajevalni protokol |
alarmirni protokol | protokol sprememba šifritanja |
TLS transportni protokol |
Naloge TLS transportnega protokola pri pošiljanju:
- prevzame sporočilo od zgornjega aplikativnega sloja ali od enega kontrolnih slojev TLS protokola in ga razdeli na kose po 16 k-oktetov,
- podatkovne pakete stisne (opcijsko),
- izračuna in na koncu doda zaščitno MAC polje,
- dobljene pakete šifrira in preda nižje ležečemu transportnemu sloju.
Naloge TLS transportnega protokola pri sprejemanju:
- od transportnega sloja prejme paket in ga odšifrira,
- nad podatki izračuna MAC vrednost in jo primerja s sprejeto na koncu paketa,
- podatkovne pakete razširi (opcijsko),
- pakete sestavi in jih preda zgornjemu aplikativnemu ali kontrolnemu TLS sloju.
Vsebina TLS paketa
upoštevano pri izračunu MAC | ||||
tip 1 oktet |
verzija 2 okteta |
dolžina 2 okteta |
podatki do 18 oktetov |
MAC+polnilo+dolžina_polnila do 276 oktetov |
šifrirano |
Polje tip določa vrsto TLS protokola:
- vrednost 20: protokol sprememba šifriranja,
- vrednost 21: alarmirni protokol,
- vrednost 22: usklajevalni protokol,
- vrednost 23: podatki aplikativnega sloja.
Le v primeru uporabe blokovnega šifrirnega algoritma, je na koncu paketa dodano polnilo. Namen polnila je, da je dolžina paketa enaka večkratniku šifrirnega bloka in za težjo ugotovljivost velikosti šifrirnega bloka in šifrirnega postopka.
Izračun zaščitnega MAC polja
Zaščitno MAC polje izračunamo kot:
MAC = HMAC_hash(MAC_ključ + zap_št + prva_štiri_polja_TLS_paketa)
kjer "+" pomeni združevanje nizov.
MAC_ključ ključ izračunan iz varnostnih parametrov dogovorjenih z usklajevalnim protokolom. Klient in strežnik uporabljata različen ključ za tvorjenje zaščitnega MAC polja. zap_št zaporedna številka paketa. Paketi so oštevilčeni, da je mogoče odkriti vsako izgubo ali vrivanje dodatnega paketa. Številka paketa ni nikjer eksplicitno zapisana v paketu. Klient in strežnik morata šteti pakete in po preračunu MAC vrednosti se mora ta ujemati z vrednostjo v zaščitnem MAC polju. Po vsakem usklajevalnem postopku se pričnejo paketi šteti ponovno od nič. HMAC_hash zaščitni algoritem dogovorjen v usklajevalnem protokolu. Trenutno sta v protokolu predvideni dve možnosti: MD5 in SHA-1.
Zaščitno MAC polje se izračuna pred šifriranjem [CRYPT str 366]. Šifrira se celotni blok vključno z zaščitnim MAC poljem.
Šifriranje
TLS protokol uporablja simetričen šifrirni postopek za šifriranje podatkov, blokovni ali pretočni. Uporablja različen šifrirni ključ za vsako smer podatkov, zato morata klient in strežnik poznati vsak po dva šifrirna ključa. Ker se pri blokovnem, kot npr. RC2 ali DES, šifriranju uporablja CBC verižno šifriranje [CRYPT str. 228], morata poznati tudi dva začetna inicializacijska vektorja.
Določitev funkcije za psevdo generiranje naključnih nizov – PRF()
Najprej določimo iteracijsko razširitveno funkcijo:
P_hash(ključ, seme) = HMAC_hash(ključ, A(1) + seme) + HMAC_hash(ključ, A(2) + seme)
+ HMAC_hash(ključ, A(3) + seme) + ...
kjer je funkcija A() določena kot:
A(0) = seme
A(i) = HMAC_hash(ključ, A(i-1))
Potrebno je toliko iteracij, da dobimo potrebno količino izhodnih podatkov – HMACMD5 : 16 oktetov/iteracijo, HMACSHA-1 : 20 oktetov na interacijo.
Izhodni niz iz razširitvene funkcije razpolovimo na S1 in S2. Če je število oktetov liho, podvojimo zadnji oktet niza S1 kot prvi oktet niza S2.
Na koncu določimo funkcijo PRF() kot XOR kombinacijo dveh nizov:
PRF(ključ, oznaka, seme) = P_MD5(S1, oznaka + seme) XOR P_SHA-1(S2, oznaka + seme)
Glavni ključ
Obe strani izračunata glavni ključ po formuli:
glavni_ključ = PRF(pomožni_ključ, »master secret«, klientov_naključni_niz + strežnikov_naključni_niz)
- glavni ključ: je vedno dolg 48 oktetov. Po izračunu glavnega ključa morata obe strani izbrisati pomožni ključ.
- pomožni ključ: tvori klient pri usklajevalnem sporočilu »klientova izmenjava ključa« in asimetrično šifriranega pošlje strežniku.
- klientovnaključniniz: psevdo naključni niz, ki ga tvori klient v klientovem pozdravnem sporočilu.
- strežnikovnaključniniz: psevdo naključni niz, ki ga tvori strežnik v strežnikovem pozdravnem sporočilu.
Ostali parametri
TLS transportni protokol uporabi varnostne parametre dogovorjene z usklajevalnim protokolom za tvorjenje naslednjih parametrov:
- klientov MAC ključ,
- strežnikov MAC ključ,
- klientov simetrični šifrirni ključ,
- strežnikov simetrični šifrirni ključ,
- klientov inicializacijski vektor IV (samo za blokovni šifrirani postopek),
- strežnikov inicializacijski vektor IV (samo za blokovni šifrirni postopek).
Postopek generiranja parametrov se precej razlikuje glede na izvozne omejitve šifrirnih postopkov. Iz varnostnih parametrov dogovorjenih v usklajevalnem postopku tvorimo podatkovni niz:
blok = PRF(glavni_ključ, »key expansion«, strežnikov_naključni_niz + klientov_naključni_niz)
Uporabiti je treba toliko iteracij, da dobimo zadostno dolžino niza za dogovorjen šifrirni postopek. Izhodni niz se potem razseka po vrsti na zgoraj naštete parametre (klientov in strežnikov MAC ključ, klientov in strežnikov simetrični šifrirni ključ, klientov in strežnikov inicializacijski vektror IV (v kolikor gre za blokovni šifrirni postopek). Končni ostanek niza se zavrže.
Če je v uporabi izvozni šifrirni postopek, se vsi parametri nadalje še nekoliko obdelajo.
Dobljene vrednosti parametrov so končne vrednosti ključev za šifriranje aplikativnih podatkov.
Specifikacije protokolov
TLS protokol sestavljajo štiri vrste protokolov:
- TLS transportni protokol,
- protokol »sprememba šifriranja«,
- alarmirni protokol,
- usklajevalni protokol.
Protokol »sprememba šifriranja«
sprememba šifriranja = 1 1 oktet |
Protokol »sprememba šifriranja« se uporablja za obveščanje nasprotne strani o spremembi strategije šifriranja.
Protokol »sprememba šifriranja« je samostojno sporočilo dolgo natanko en oktet z vsebino 1, ki je tudi stisnjeno in šifrirano, vendar z uporabo do tega trenutka veljavnimi parametri in ne z na novo dogovorjenimi.
Sporočilo pošljeta oba. To je indikator, s katerim klient in strežnik drug drugega obvestita, da bodo od tega trenutka naprej vsa sporočila šifrirana na novo dogovorjen način.
Pred tem sporočilom se morata klient in strežnik z usklajevalnim protokolom dogovoriti o novih varnostnih parametrih.
Nepričakovan sprejem brez dogovora o novih varnostnih parametrih sproži usodno napako »nepričakovano sporočilo«.
V primeru nove komunikacije po shranjeni seji si strani izmenjata to sporočilo po začetnih pozdravnih sporočilih.
Alarmirni protokol
alarmna stopnja 1 oktet |
opis 1 oktet |
Alarmirni protokol je namenjen obveščanju nasprotne strani o napakah in drugih pomembnih dogodkih. Obravnava napak pri TLS protokolu je zelo enostavna. Stran, ki odkrije napako, pošlje alarmirno sporočilo s specifikacijo napake nasprotni strani.
Kot vsa sporočila je tudi alarmnirno sporočilo stisnjeno in šifrirano.
Alarmirno sporočilo je sestavljeno iz dveh polj po en oktet. Prvo polje označuje alarmno stopnjo in je lahko:
- vrednost 1: opozorilo;
- vrednost 2: usodna napaka.
Po usodni napaki obe strani takoj končata povezavo. Ostale povezave te seje se lahko nadaljujejo, toda seja se invalidira. V tem primeru se seja ne shrani in se ne more več uporabiti za vzpostavljanje novih povezav. Po zaključku seje sta obe strani dolžni izbrisati vse parametre, ki so bili uporabljeni pri taki seji.
Drugo polje označuje tip napake ali dogodka:
- vrednost 0 - zaključek povezave
To sporočilo ne označuje napake, ampak obvešča nasprotno stran o končanju povezave. Obe strani morata biti obveščeni o koncu povezave. Tako onemogočimo vrsto napada »truncation attack«, ko bi napadalec lahko »odrezal« sejo, tako da bi regularno zaključil TCP povezavo in to ne bi bilo ugotovljivo.
Katerakoli stran lahko kadarkoli zaključi povezavo. Podatki sprejeti po zaključku povezave se zavržejo. Nasprotna stran mora poslati enako sporočilo o zaključku povezave, vendar za dejanski zaključek ni potrebno čakati na potrditev sprejema tega sporočila poslanega z druge strani.
Po zaključku seje se ta shrani za morebitno naslednjo povezavo, vendar samo v primeru, če je bila trenutna povezava pravilno zaključena z alarmno stopnjo 1 (opozorilo) in opisom 0 (zaključek povezave).
Ostale vrednosti pomenijo sporočilo o napaki:
- vrednost 10 - nepričakovano sporočilo
Sprejet je bil nepričakovan tip sporočila. To je vedno usodna napaka in mora brez obravnave končati povezavo. - vrednost 20 - napačna MAC vrednost
Sprejeto sporočilo je imelo nepravilno MAC vrednost. To je vedno usodna napaka. - vrednost 21 - neuspešno odšifriranje
Zapis je napačno odšifriran. Dolžina ni večkratnik šifrirnega bloka ali polnilo na koncu zapisa je napačno. To je vedno usodna napaka. - vrednost 22 - predolg zapis
Sprejeti zapis je daljši od 18 k-oktetov ali odšifriran zapis je daljši od 17 k-oktetov. To je vedno usodna napaka. - vrednost 30 - napaka pri razširjanju
Razširitvena funkcija je zaznala nepravilnost v vhodnih podatkih ali razširjeni niz je predolg. To je vedno usodna napaka. - vrednost 40 - napaka pri usklajevanju
Komunicirajoči strani se nista mogli dogovoriti o rabi skupnih varnostnih parametrov. To je vedno usodna napaka. - vrednost 42 - pokvarjen certifikat
Sprejeti certifikat je pokvarjen, vsebovan podpis ni pravilen. - vrednost 43 - neustrezen tip certifikata
- vrednost 44 - preklican certifikat
- vrednost 45 - pretečen certifikat
Veljavnost certifikatu je potekla ali certifikat trenutno ni veljaven. - vrednost 46 - nepoznan certifikat
Ostale napake v zvezi s certifikatom. - vrednost 47 - neustrezen parameter
Vrednost polja pri dogovarjanju o varnostnih parametrih ni ustrezna. To je vedno usodna napaka. - vrednost 48 - nepoznan izdajatelj
Sprejeta je bila pravilna veriga certifikatov, vendar izdajateljev certifikat ni poznan. To je vedno usodna napaka. - vrednost 49 - dostop zavrnjen
Sprejeti certifikat je bil ustrezen, vendar po kontroli dostopa pošiljatelj noče nadaljevati z usklajevalnim postopkom. To je vedno usodna napaka. - vrednost 50 - dekodirna napaka
Sporočila ni bilo mogoče odkodirati zaradi neustrezne vrednosti nekaterih polj ali nepravilne dolžine sporočila. To je vedno usodna napaka. - vrednost 51 - napaka pri odšifriranju
Usklajevanje je spodletelo zaradi napake pri preverjanju podpisa, odšifriranja ključa ali preverjanja zaključnega sporočila. - vrednost 60 - izvozna omejitev
Usklajevanje ni v skladu z izvozno omejitvijo šifrirnih postopkov. To je vedno usodna napaka. - vrednost 70 - verzija protokola
Klientova ponujena verzija protokola ni ustrezna. Npr., če zaradi varnostnih razlogov ne dovolimo uporabe stare verzije protokola. To je vedno usodna napaka. - vrednost 71 - nezadostna varnost
Signalizirano namesto napake pri usklajevanju (40), kadar strežnik zahteva bolj varne šifrirne postopke, kot jih je ponudil klient. To je vedno usodna napaka. - vrednost 80 - interna napaka
Interna napaka, ki ni neposredno povezana s pravilnostjo protokola, npr. nezadostna količina pomnilnika. To je vedno usodna napaka. - vrednost 90 - uporabnikov preklic
Med usklajevalnim postopkom je bila povezava preklicana. Slediti mora sporočilo zaključek povezave (0). To je ponavadi opozorilo. - vrednost 100 - ponovno usklajevanje ni primerno
To sporočilo pošlje klient na zahtevo po usklajevanju ali strežnik na klientovo pozdravno sporočilo. Slediti bi moral ponoven usklajevalni postopek. Če nasprotna stran tega ne želi, pošlje to sporočilo. Od pobudnika ponovnega usklajevanja je potem odvisno, ali bo dovolil nadaljevati povezavo. To je vedno opozorilo.
Pri napakah, kjer alarmna stopnja ni navedena, je ta lahko odvisna od implementacije. Če je alarmna stopnja opozorilo, je od implementacije odvisno, kakšna bo obravnava napake.
Usklajevalni protokol
tip usklajevalnega sporočila 1 oktet |
dolžina 3 oktete |
vsebina do 16 M-oktetov |
Tipi usklajevalnih sporočil:
- ponovno usklajevanje,
- klientovo pozdravno sporočilo,
- strežnikovo pozdravno sporočilo,
- certifikat,
- izmenjava ključa,
- zahteva certifikata,
- strežnikov konec pozdrava,
- certifikatsko preverjanje,
- zaključno sporočilo.
Usklajevalni protokol služi dogovoru o varnostnih parametrih in medsebojnemu overjanju komunicirajočih strani.
Z usklajevalnim protokolom se stani dogovorita o:
- verziji TLS (SSL) protokola,
- izbiri šifrirnega algoritma,
- medsebojnem overjanju.
Overjanje je opcijsko. Običajno se overja samo strežnik. Klient se overja samo v primeru, če preko povezave potekajo zaupne transakcije, kjer klient aktivno sodeluje (npr. bančne transakcije). O tem odloča strežnik. Protokol ne predpisuje overjanja in možne so tudi popolnoma anonimne zveze. uporabi tehnike asimetričnega šifriranja za tvorjenje in izmenjavo ključev za simetrično šifriranje.
Opis poteka popolnega usklajevalnega postopka
Popolni usklajevalni postopek se uporabi pri kreiranju nove seje ali ob sprožitvi zahteve po spremembi varnostnih parametrov s strani klienta ali strežnika.
faza I – klient
- klient pošlje pozdravno sporočilo.
faza II – strežnik
- strežnik odgovori s strežnikovim pozdravnim sporočilom.
Izmenjava pozdravnih sporočil vzpostavi sledeče atribute povezave:- verzijo TLS (SSL) protokola,
- identifikator seje,
- izbiro varnostnih parametrov,
- metodo stiskanja,
- izmenjavo dveh generiranih psevdo–naključnih nizov.
- strežnikov cerifikat (opcijsko).
Če je iz izbranih šifrirnih algoritmov potrebno overjanje strežnika, potem strežnik pošlje svoj certifikat. - strežnikova izmenjava ključev (opcijsko).
Če overjanje strežnika ni potrebno in strežnik nima certifikata, ali če je strežniški certifikat primeren samo za podpisovanje (overjanje) in ne za šifriranje, potem strežnik tvori par začasnih ključev in javni ključ pošlje klientu. - zahteva certifikata (opcijsko).
Če je poleg overjanja strežnika zahtevano tudi overjanje klienta, strežnik pošlje sporočilo »zahteva certifikata«. - strežnikov konec pozdrava.
faza III – klient
- klientov certifikat (opcijsko).
Klient pošlje svoj certifikat samo na zahtevo strežnika. - klientova izmenjava ključev.
Klient tvori in pošlje strežniku pomožni ključ iz katerega obe strani izračunata glavni ključ. - certifikatsko preverjanje (opcijsko).
Klient podpiše sporočila usklajevalnega postopka. - sprememba šifriranja.
Od tega trenutka naprej klient uporablja nov šifrirni postopek. To je samostojni protokol in ni del usklajevalnega protokola. - zaključno sporočilo.
faza IV – strežnik
- sprememba šifriranja.
Od tega trenutka naprej tudi strežnik uporablja nov šifrirni postopek. To je samostojni protokol in ni del usklajevalnega protokola. - zaključno sporočilo.
V tem trenutku je usklajevanje končano in lahko se začne izmenjava aplikativnih podatkov.
KLIENT | STREŽNIK | |
I. klientovo pozdravno sporočilo |
||
II. strežnikovo pozdravno sporočilo strežnikov certifikat (opc.) strežnikova izmenjava ključa (opc.) zahteva certifikata (opc.) strežnikov konec pozdrava |
||
III. klientov certifikat (opc.) klientova izmenjava ključa certifikatsko preverjanje (opc.) [sprememba šifriranja] zaključno sporočilo |
IV. [sprememba šifriranja] zaključno sporočilo |
|
V. izmenjava aplikativnih podatkov |
V. izmenjava aplikativnih podatkov |
Opis poteka poenostavljenega usklajevalnega postopka
Poenostavljeni usklajevalni postopek se uporabi, kadar klient in strežnik vzpostavljata povezavo v obstoječi shranjeni ali aktivni seji.
faza I – klient
- klient pošlje pozdravno sporočilo.
faza II – strežnik
- strežnik odgovori s strežnikovim pozdravnim sporočilom.
Izmenjava pozdravnih sporočil vzpostavi sledeče atribute povezave:- verzija TLS (SSL) protokola mora ustrezati obstoječi seji,
- identifikator že obstoječe seje,
- varnostni parametri morajo ustrezati obstoječi seji,
- metoda stiskanja mora ustrezati obstoječi seji.
- sprememba šifriranja.
Od tega trenutka naprej strežnik zamenja šifrirni postopek, ki ustreza obstoječi seji. To je samostojni protokol in ni del usklajevalnega protokola. - zaključno sporočilo.
faza III – klient
- sprememba šifriranja.
Od tega trenutka naprej tudi klient zamenja šifrirni postopek, ki ustreza obstoječi seji. To je samostojni protokol in ni del usklajevalnega protokola. - zaključno sporočilo.
V tem trenutku je skrajšano usklajevanje končano in lahko se začne izmenjava aplikativnih podatkov.
KLIENT | STREŽNIK | |
I. klientovo pozdravno sporočilo |
||
II. strežnikovo pozdravno sporočilo [sprememba šifriranja] zaključno sporočilo |
||
III. [sprememba šifriranja] zaključno sporočilo |
||
IV. izmenjava aplikativnih podatkov |
IV. izmenjava aplikativnih podatkov |
Sporočila usklajevalnega protokola
S pozdravnimi sporočili si klient in strežnik izmenjata možne vrednosti parametrov, ki jih podpirata. Med pozdravna sporočila štejemo: sporočilo »zahteva po usklajevanju«, klientovo in strežnikovo pozdravno sporočilo.
Sporočilo »zahteva po usklajevanju«
Sporočilo »zahteva po usklajevanju« lahko pošlje strežnik kadarkoli, če želi zamenjavo varnostnih parametrov. Klient mora ob tem sporočilu pričeti usklajevalni proces z pozdravnim sporočilom. Če je usklajevanje že v teku, sporočilo klient prezre. Če klient ne želi ponovnega usklajevanja, sporočilo prezre ali pošlje napako »ponovno usklajevanje ni primerno« (100). Od implementacije strežnika je odvisna reakcija. Možno je nadaljevanje ali prekinitev povezave.
Klientovo pozdravno sporočilo
To je prvo sporočilo, ki ga pošlje klient pri vzpostavljanju povezave. Lahko ga pošlje tudi kasneje, če želi ponoviti usklajevalni postopek zaradi spremembe varnostnih parametrov ali kot odgovor na strežnikovo zahtevo po usklajevanju.
verzija 2 okteta |
random 32 oktetov |
ID seje 32 oktetov |
šifrirni postopki 2-65535 oktetov |
postopki stiskanja 1-255 oktetov |
- verzija;
Ponujena verzija TLS (SSL) protokola, s katero želi komunicirati klient. Polje je dolgo dva okteta za številko verzije in podverzije – npr. 3 in 1 pri TLS V1.0. - random;
Psevdo naključni niz, ki ga tvori klient. Uporabi se kasneje pri tvorjenju ključev. - id_seje;
Identifikator seje. Če vzpostavljamo novo sejo, mora biti prazno. Če hočemo uporabiti obstoječo sejo, mora vsebovati prejšnji identifikator. - šifrirni_postopki;
Seznam postopkov šifriranja in podpisovanja, ki jih podpira klient, v želenem prioritetnem vrstnem redu. Vsak postopek je označen z dvema oktetoma. Možnosti so:
varnostni parametri povezave | vsebina polja |
TLS_NULL_WITH_NULL_NULL | 0x00,0x00 |
TLS_RSA_WITH_NULL_MD5 | 0x00,0x01 |
TLS_RSA_WITH_NULL_SHA | 0x00,0x02 |
TLS_RSA_EXPORT_WITH_RC4_40_MD5 | 0x00,0x03 |
TLS_RSA_WITH_RC4_128_MD5 | 0x00,0x04 |
TLS_RSA_WITH_RC4_128_SHA | 0x00,0x05 |
TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 | 0x00,0x06 |
TLS_RSA_WITH_IDEA_CBC_SHA | 0x00,0x07 |
TLS_RSA_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x08 |
TLS_RSA_WITH_DES_CBC_SHA | 0x00,0x09 |
TLS_RSA_WITH_3DES_EDE_CBC_SHA | 0x00,0x0A |
TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x0B |
TLS_DH_DSS_WITH_DES_CBC_SHA | 0x00,0x0C |
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA | 0x00,0x0D |
TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x0E |
TLS_DH_RSA_WITH_DES_CBC_SHA | 0x00,0x0F |
TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA | 0x00,0x10 |
TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x11 |
TLS_DHE_DSS_WITH_DES_CBC_SHA | 0x00,0x12 |
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA | 0x00,0x13 |
TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x14 |
TLS_DHE_RSA_WITH_DES_CBC_SHA | 0x00,0x15 |
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA | 0x00,0x16 |
TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 | 0x00,0x17 |
TLS_DH_anon_WITH_RC4_128_MD5 | 0x00,0x18 |
TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA | 0x00,0x19 |
TLS_DH_anon_WITH_DES_CBC_SHA | 0x00,0x1A |
TLS_DH_anon_WITH_3DES_EDE_CBC_SHA | 0x00,0x1B |
- postopki stiskanja;
Seznam metod stiskanja, ki jih podpira klient v želenem prioritetnem vrstnem redu. Posebna je metoda z vrednostjo 0, kar pomeni brez stiskanja.
Strežnikovo pozdravno sporočilo
Pošlje strežnik kot odgovor na klientovo pozdravno sporočilo.
verzija 2 okteta |
random 32 oktetov |
id_seje 32 oktetov |
šifrirni postopek 2 okteta |
postopek stiskanja 1 oktet |
- verzija;
Verzija TLS (SSL) protokola, s katero se strežnik strinja. Lahko je enaka ali nižja od zahtevane s strani klienta. - random;
Psevdo naključni niz, ki ga tvori strežnik. Uporabi se kasneje pri tvorjenju ključev. - id_seje;
Identifikator seje. V primeru nove seje jo strežnik tvori in ji dodeli nov naključni niz kot identifikator. V tem sporočilu identifikator sporoči klientu. Če se strežnik strinja z nadaljevanjem obstoječe seje, pusti v tem polju identifikator, ki ga je predlagal klient. Če strežnik tvori sejo, ki je po zaključku v nobenem primeru ne bo možno nadaljevati, strežnik pusti to polje prazno. - šifrirni_postopek;
Šifrirni postopek, ki ga strežnik izbere iz klientovega seznama. Pri uporabi shranjene seje mora ustrezati shranjeni seji. - postopek stiskanja;
Postopek stiskanja, ki ga strežnik izbere iz klientovega seznama. Pri uporabi shranjene seje mora ustrezati shranjeni seji.
Strežnikov certifikat
Če se mora strežnik overiti, kar je razvidno iz polja šifrirni_postopek v pozdravnem sporočilu, potem strežnik takoj po strežnikovem pozdravnem sporočilu pošlje svoj certifikat skupaj z nadrejenimi certifikati izdajateljev. Certifikat mora biti ustrezen za izbrano šifriranje in overjanje. Ponavadi je X.509v3 certifikat.
Strežnikova izmenjava ključa
Če strežnik nima certifikata ali ta ni primeren za ustrezno šifriranje, potem strežnik tvori par začasnih ključev za asimetrično šifriranje.
Zahteva certifikata
Na sporočilo »zahteva certifikata« overjenega strežnika mora svoj certifikat v naslednjem koraku poslati tudi klient. V zahtevi strežnik določi vrsto certifikata in sprejemljive izdajatelje.
Anonimni strežnik ne more zahtevati klientovega certifikata. To sproži usodno napako pri usklajevanju (40).
Strežnikov konec pozdrava
Strežnik zaključi svojo stran usklajevalnega postopka s sporočilom »strežnikov konec pozdrava«. Pred klientovim nadaljevanjem mora klient najprej preveriti ustreznost strežnikovih parametrov in certifikatov.
Klientov certifikat
To je prvo sporočilo, ki ga pošlje klient po zaključku strežnikovega usklajevalnega postopka. Pošlje se, če ga je zahteval strežnik s sporočilom »zahteva certifikata«. Pošiljanje klientovega certifikata je po strukturi popolnoma enako kot pošiljanje strežnikovega certifikata pred tem. Če klient nima certifikata, pošlje to sporočilo prazno. V tem primeru je od strežnika odvisno, ali bo dovolil nadaljevati usklajevalni postopek in povezavo.
Klientova izmenjava ključa
Struktura sporočila je odvisna od asimetričnega šifrirnega postopka določenega s pozdravnimi sporočili.
Primer, če gre za RSA algoritem:
- klient tvori psevdo naključni pomožni ključ dolžine 48 oktetov, ga šifrira s sprejetim strežnikovim certifikatom ali strežnikovim začasnim javnim ključem. Pomožni ključ se uporabi kasneje pri tvorjenju glavnega ključa.
Certifikatsko preverjanje
S tem sporočilom klient potrdi – podpiše ves usklajevalni promet do tega sporočila. Sporočilo certifikatsko preverjanje pošlje klient samo v primeru, če je predhodno poslal svoj certifikat, ki je ustrezen za podpisovanje.
Vsebina sporočila je sestavljena iz kombinacije MD5 in SHA-1 algoritmov nad celotnim usklajevalnim prometom do vključno sporočila pred tem in podpisano s klientovim zasebnim ključem. To sporočilo »certifikatsko preverjanje« ni vključeno v izračun.
Zaključno sporočilo
Zaključno sporočilo je vedno poslano takoj po protokolu »sprememba šifriranja«. »Sprememba šifriranja« je sicer samostojni protokol in ne sodi med sporočila usklajevalnega protokola. Kljub temu se protokol »sprememba šifriranja« uporablja med usklajevalnimi sporočili.
Zaključno sporočilo je prvo, ki je šifrirano z novo dogovorjenimi varnostnimi parametri. Obe strani morata preveriti vsebino zaključnega sporočila sprejetega od druge strani. Če je vse v redu, se lahko začne aplikativni promet.
Sporočilo je sestavljeno kot kombinacija MD5 in SHA-1 algoritmov nad šifrirnim ključem in vsemi sporočili usklajevalnega postopka.
vsebina_sporočila = PRF(šifrirni ključ, končni_znakovni_niz, MD5(vsa_usklajevalna_sporočila) + SHA-1(vsa_usklajevalna_sporočila))
- končni_znakovni_niz;
znakovni niz »client finished« ali »server finished«, odvisno od pošiljatelja.
Pomanjkljivosti
Protokol TLS je sicer dobro zasnovan, vsake toliko pa se kljub temu še pokažejo pomanjkljivosti:
- napake v implementacijah.
Te so najbolj pogoste. Redno je treba spremljati obvestila o napakah v implementaciji in ustrezno dograjevati programe. - prešibki ključi v ameriških produktih zaradi ameriških izvoznih omejitev.
Do januarja 2000 so bili simetrični ključi omejeni na 40 bitov in asimetrični na 512 bitov. Zdaj so te omejitve delno odpravljene, vendar je dobro preveriti, kakšne ključe podpira programska oprema, ki jo nameravamo uporabljati. - občutek lažne varnosti.
TLS protokol zaščiti zgolj povezavo med dvema sistemoma, podatki na njima pa niso šifrirani. Za njuno varnost pred vdori in za zaščito datotek na postajah mora biti dodatno poskrbljeno. - lažno predstavljanje, lažni certifikati.
Ko se povezujemo preko Interneta, imamo na začetku povezave s strežnikom možnost preveriti njegovo digitalno potrdilo. Kdo ga je izdal in komu? Kaj, če je bilo vmes preklicano, ali je veljavnost potekla?
Sorodne tehnologije
Poleg TLS protokola obstajajo še druge tehnologije za zagotavljanje zaupnosti pri komuniciranju preko nevarnih omrežij. Nekatere od teh so:
- WTLS protokol.
Obstaja tudi različica protokola TLS. To je WTLS namenjen za mobilne kliente. - S-http protokol.
To je varnostna nadgradnja običajnega http protokola. Zagotavlja zaupnost v spletu. Poglavitna razlika med s-http in TLS protokolom je v tem, da s-http protokol ne vzpostavlja seje. S-http protokol šifrira vsako sporočilo posebej.
S-HTTP protokol je razvila organizacija Enterprise Integration Technologies (EIT). - IPsec protokol
IPsec (IP Security) je standardiziran (IETF) in zelo dodelan protokol za varno komuniciranje. Z razliko od zgoraj naštetih deluje na nižjem, omrežnem IP nivoju. Podpira dve vrsti delovanja:- transportni, kjer se šifrira samo vsebina posameznih paketov;
- tunelski, kjer se vzpostavljajo komunikacijski tuneli, skozi katere poteka ves omrežni promet.
Prednost pred TLS je zelo dodelan mehanizem izmenjave ključev. Časovna veljavnost posameznih ključev je natančno predpisana, za periodično izmenjavo skrbijo dodatni protokoli. Uporaba IPsec je za vse storitve popolnoma transparentna in uporabniku ni potrebno skrbeti za šifriranje pri uporabi posameznih ali novih aplikacij. Omogoča tudi povezovanje celih omrežij (VPN – virtual private network) in ne le povezave klient – strežnik.
Pomanjkljivost pred TLS in zaradi tega tudi manjši obseg uporabe je v tem, da za komuniciranje potrebujemo vnaprej pripravljeno infrastrukturo: tunele, ustrezno nastavljene usmerjevalnike, usklajene začetne ključe ali certifikate.
Ves promet je šifriran na omrežnem nivoju, zato vsebina vsebovanih aplikativnih protokolov ni vidna. To je prednost z varnostnega vidika. Slabost pa je, ker omrežni elementi ne morejo različno obravnavati prometa glede na aplikativno naravo (QoS – kvaliteta storitev).
- SSH storitev in protokol
SSH protokol je bil razvit v podjetju SSH Communications. Prvenstveno je bil namenjen za varne interaktivne prijave na oddaljene sisteme (zamenjava za storitev telnet) in za izmenjavo datotek na različicah UNIX operacijskih sistemov.
SSH je možno uporabiti tudi v tunelskem načinu in tako povezati dva sistema ali omrežji. Potem deluje precej podobno kot zgoraj opisani IPsec protokol. SSH obstaja za vse aktualne operacijske sisteme. - PPTP z MPPE in MPPC
PPTP (Point to Point Tunneling Protokol) z MPPE (Microsoft Point to Point Encription) in MPPC (Microsoft Point to Point Compression) je tunelski protokol, ki je bil razvit pod okriljem korporacije Microsoft. Namenjen je varnemu tunelskemu povezovanju oddaljenih klientov v omrežje. Protokol je standardiziran: - PGP
PGP (Pretty Good Privacy) je en najstarejših postopkov za šifriranje, ki ga je razvil Philip Zimmerman. Delovanje temelji na uporabi asimentričnih šifrirnih postopkov. Največ se uporablja za šifriranje in podpisovanje datotek in sporočil elektronske pošte.
PGP še ni podpiral infrastrukture javnih ključev (PKI), ki se je razvila kasneje. Zato je glavna pomanjkljivost PGP v zaupanju javnim ključem.
Viri
- [TLS] IETF; standard RFC 2246, The TLS Protocol Version 1.0: http://www.ietf.org/rfc/rfc2246.txt?number=2246
- [SSL] Alan O. Freier, Philip L. Karlton, Paul C. Kocher Netscape Communications;
The SSL Protocol Version 3.0 <draft-freier-ssl-version3-02.txt>: http://wp.netscape.com/eng/ssl3/draft302.txt - [CRYPT] Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone; Handbook of Applied Cryptography: http://www.cacr.math.uwaterloo.ca/hac/
- Center vlade RS za informatiko: http://www.gov.si/tecaj/kripto/kr-ssl.htm
- Spletna enciklopedija: http://www.webopedia.com/
- Spletna stran projekta Stunnel: http://www.stunnel.org/
- Spletna stran projekta OpenSSL: http://www.openssl.org/