V rámci naτeho seriálu o bezpeƒnosti se tentokrát zam╪²íme na zabezpeƒené p²ipojení a na protokol TLS, kter∞ umoºσuje bezpeƒné finanƒní transakce i zabezpeƒenou v∞m╪nu komerƒních dat v prost²edí internetu.
Θvod
V p²edchozích ƒástech seriálu v╪novaného zabezpeƒení p²enosu dat p²es internet jsme se dozv╪d╪li, ºe HTTP protokol neposkytuje pot²ebné bezpeƒí. Jak∞koliv programátor, kter∞ má pot²ebné znalosti v oblasti poƒítaƒov∞ch sítí a voln∞ p²ístup k t╪mto sítím, totiº màºe p²i troτe snahy prohlíºet ƒi modifikovat p²enáτená data vzájemn╪ komunikujících úƒastníkà spojení.
Jednou z reakcí na tuto nemilou vlastnost HTTP transakcí byl zrod n╪kolika bezpeƒnostních protokolà, jejichº cílem bylo zajistit bezpeƒnost takto ohroºen∞ch dat.
Minule jsme se seznámili se základními informacemi o protokolu S-HTTP - o protokolu, kter∞ na τirτí vyuºití a rozτí²ení teprve ƒeká. V dneτním dílu si naopak povíme o relativn╪ novém protokolu TLS (Transport Layer Security), kter∞ je podobn╪ jako protokol SSL (Secure Socket Layer) podporován v╪tτinou souƒasn∞ch prohlíºeƒà.
Co je TLS?
Primárním cílem TLS protokolu je umoºnit komunikujícím aplikacím soukromé spojení a integritu p²enáτen∞ch dat.
TLS ve verzi 1.0 a SSL ve verzi 3.0 jsou v podstat╪ shodné protokoly. Nov╪jτí TLS totiº vychází z protokolu SSL a obsahuje menτí zm╪ny, které do n╪j byly zakomponovány. Nyní, kdyº uº jsme získali obecné znalosti o TLS, tedy koneƒn╪ nahlédn╪me "pod pokr∞vku" v∞vojá²àm tohoto protokolu (IETF - viz infotipy) prozkoumáním jeho struktury.
Architektura TLS
Protokol TLS se skládá ze dvou odd╪len∞ch vrstev: TLS Record Protocol a TLS Handshake Protocol. Na niºτí úrovni, leºící na vhodném transportním protokolu - nap². na TCP (Transmission Control Protocolu) - se nachází TLS Record Protocol (viz obrázek).
Chceme-li se o t╪chto dvou vrstvách dozv╪d╪t více informací a pochopit jejich funkce, je vhodné se nejprve seznámit s jejich charakteristick∞mi vlastnostmi.
Veτkerá komunikace (vƒetn╪ TLS Handshake Protocolu a datov∞ch zpráv) probíhá pomocí niºτí vrstvy - TLS Record Protocolu - a je navrºena takov∞m zpàsobem, aby bylo navázané spojení spojením soukrom∞m. To je zajiτt╪no pomocí symetrického τifrování - data jsou zaτifrována nap²íklad pomocí DES. Poznámka: Existuje i moºnost nepouºít τifrování pro Record Protocol.
Spolehlivost spojení je zajiτt╪na kontrolou integrity zprávy pomocí MAC (Message Authentication Code), coº je v podstat╪ kontrolní souƒet (checksum), kter∞ je odvozen z aplikovaného ov╪²ovacího schématu a klíƒe na danou zprávu. Pro v∞poƒet MAC jsou v tomto p²ípad╪ vyuºívány bezpeƒné hashovací funkce, nap²íklad MD5.
Je tedy z²ejmé, ºe TLS Record Protocol je pouºíván pro zapouzd²ení ràzn∞ch v∞τe poloºen∞ch vrstev protokolà. Stejn╪ tak je pomocí TLS Record Protocolu zapouzd²ena i vyττí vrstva - TLS Handshake Protocol -, jejímº cílem je umoºnit klientu a serveru jak vzájemnou autentizaci, tak vzájemnou domluvu na pouºití τifrovacích mechanismà jeτt╪ p²edtím, neº jsou p²enáτeny první bajty dat.
Ustavení kaºdého nového sezení - "session" - prob╪hne nejd²íve pomocí úvodní v∞m╪ny informací - "handshake" (pot²esení rukou). Abychom si více objasnili poslání TLS Handshake Protocolu, vyjmenujeme si stejn╪ jako u p²edchozí vrstvy jeho charakteristické vlastnosti.
První vlastností je skuteƒnost, ºe identita uºivatelà (klientu a serveru) màºe b∞t ov╪²ena uºitím asymetrického τifrování, nap². RSA. Zjiτt╪ní identity màºe b∞t volitelné, ale obecn╪ je poºadováno alespoσ u jednoho úƒastníka spojení. Dalτí dàleºitou vlastností je, ºe ov╪²ené spojení nemàºe b∞t p²ivlastn╪no tzv. slídilem ani v p²ípad╪, ºe se nachází ve st²edu spojení.
Poslední v∞znamnou vlastností je skuteƒnost, ºe ov╪²ení je spolehlivé. Tato vlastnost je zajiτt╪na detekcí jakéhokoliv pokusu o modifikaci ov╪²ovacího spojení následn∞m upozorn╪ním úƒastníkà spojení.
Pràb╪h transakce
Jelikoº je navázání bezpeƒného spojení podobné jako u SSL (1. díl seriálu), je komunikace mezi klientem a serverem v následujícím textu popsána zjednoduτenou formou, která vτak obsahuje vτechny podstatné informace o pràb╪hu této úvodní transakce.
V p²ípad╪, ºe se prohlíºeƒ (= klient) snaºí p²ipojit k zabezpeƒenému serveru, nejd²íve mu poτle zprávu zvanou "ClientHello", coº je obdoba ºádosti na z²ízení HTTP spojení. V okamºiku, kdy server zprávu ClientHello p²ijme, zpracuje informace v ní obsaºené.
Pro lepτí pochopení obsahu zprávy ClientHello je v následujícím textu uvedena její programová struktura:
enum { null(0), (255) } CompressionMethod;
struct {
ProtocolVersion client_version;
Random random;
SessionID session_id;
CipherSuite cipher_suites<2..2^16-1>;
CompressionMethod compression_methods<1..2^8-1>;
} ClientHello;
Pokud je vτe v po²ádku, zaτle server klientu zprávu zvanou "ServerHello", která zpravidla obsahuje certifikát, údaje o klíƒích serveru a voliteln╪ poºadavek certifikace klientu.
Struktura zprávy ServerHello a certifikátu je následující:
struct {
ProtocolVersion server_version;
Random random;
SessionID session_id;
CipherSuite cipher_suite;
CompressionMethod compression_method;
} ServerHello;
opaque ASN.1Cert<1..2^24-1>;
struct {
ASN.1Cert certificate_list<0..2^24-1>;
} Certificate;
Poté, co klient obdrºí zprávu ServerHello, zaτle serveru údaje o sv∞ch klíƒích, ov╪²í pravost certifikátu serveru a v p²ípad╪ neshody ukonƒí spojení. Byl-li poºadován jeho certifikát, zaτle jej spolu s v∞b╪rem ƒíslic, pomocí n╪hoº je vytvo²en tzv. klíƒ relace. Po obdrºení této zprávy vytvo²í server ze seznamu ƒíslic klíƒ relace. Pak klient a server p²enáτejí data, která jsou zaτifrována pomocí tohoto klíƒe relace.
Poznámka: Tvorba klíƒe relace màºe prob╪hnout jak na stran╪ klientu, tak na stran╪ serveru.
A jak se dozvíme, zda jsme p²ipojeni na bezpeƒn∞ server? Staƒí se podívat na URL serveru, a pokud zaƒíná https:// (tedy stejn╪ jako v p²ípad╪ SSL), màºeme b∞t o n╪co klidn╪jτí, protoºe naτe komunikace p²es port 443 probíhá bezpeƒn╪.
Kompatibilita SSL a TLS
Jak jiº bylo zmín╪no, oba protokoly jsou si velice podobné. Z historick∞ch dàvodà, aby se zabránilo rozma²ilé spot²eb╪ rezervovan∞ch ƒísel portà, uºívají TLS 1.0, SSL 3.0 a SSL 2.0 stejn∞ spojovací port. Komunikace klientu a serveru uºívající protokoly ve verzích TLS 1.0 a SSL 3.0 je struƒn╪ popsána v následujícím textu.
Pokud se chce klient TLS 1.0 dohodnout se serverem SSL 3.0, poτle serveru zprávu ClientHello uºitím record formátu SSL 3.0. Pokud server podporuje pouze SSL 3.0, odpoví SSL 3.0 ServerHello. Podporuje-li navíc i TLS, odpoví pomocí TLS ServerHello.
Podobn╪ pokud TLS server komunikuje se SSL klientem, akceptuje ClientHello zprávu ve formátu SSL 3.0 a odpoví ServerHello také ve formátu SSL.
Cíle TLS
Po objasn╪ní funkcí TLS protokolu si jiº màºeme ²íci, proƒ byl vlastn╪ tento protokol navrºen a jaké jsou jeho hlavní cíle. Nejdàleºit╪jτím cílem je zajistit ustavení bezpeƒného spojení mezi úƒastníky komunikaƒního procesu. Dalτím cílem je umoºnit programátoràm vytvá²et aplikace vyuºívající vlastností TLS bez dalτí znalosti τifrovacích mechanismà.
Protokol TLS byl navrºen s ohledem na neustál∞ v∞voj metod zvyτujících bezpeƒnost (τifrovacích i jin∞ch). Umoºσuje tedy implementaci aktualizovan∞ch i zcela nov∞ch bezpeƒnostních knihoven. Dalτím cílem bylo vyuºít stále rostoucí v∞poƒetní v∞kon CPU zejména pro operace s ve²ejn∞mi klíƒi a urychlit tak proces v∞m╪ny informací obsaºen∞ch ve zprávách.
Záv╪r
TLS zahrnuje mechanismy pro zabezpeƒení finanƒních transakcí i pro bezpeƒnou v∞m╪nu komerƒních dat p²es web. Je tedy dalτím protokolem, jehoº pomocí se màºeme sv╪²it vτeobjímajícímu internetu bez pocitu strachu o bezpeƒnost privátních dat.
P²íτt╪ si povíme o dalτích zpàsobech, jak zv∞τit bezpeƒnost sv∞ch dat na internetu.