COMPUTERWORLD
Specializovaný týdeník o výpočetní technice

Seriál
o bezpečnosti
a informačním soukromí

Část 47 - CW 16/98

Bezpečné komunikační protokoly

David Rohleder

Ačkoliv byly protokoly rodiny TCP/IP vyvíjeny pro Ministerstvo obrany USA, jejich hlavním cílem nebylo zajištění bezpečné komunikace, ale hlavně co největší odolnost proti výpadkům částí komunikačních sítí (v potenciální válce by byly totiž nejdříve zničeny hlavní komunikační uzly).

Ve veřejné síti je proto nutné provozovat bezpečnostní protokoly až na vrstvách vyšších než je vrstva IP (privátní sítě mohou používat i bezpečnostní protokoly na nižší úrovni než TCP/IP).

Bezpečnostní protokoly se musí vyrovnat v první řadě s následujícími úkoly:

- zajistit důvěrnost spojení,

- umožnit ověření identity komunikujících stran (autentizaci),

- zajistit integritu dat.

Secure Socket Layer (SSL verze 3.0)

SSL je bezpečnostní protokol navržený firmou Netscape. Tento protokol je možné zařadit do relační vrstvy modelu OSI. Je možné jej provozovat nad jakoukoliv spolehlivou spojovanou službou (např. TCP). SSL domlouvá bezpečnostní parametry během ustavování spojení. Když spolu klient a server začínají komunikovat, musí si dohodnout především kryptografické parametry, verzi protokolu, metodu předání tajných klíčů pomocí šifrovacího algoritmu s veřejným klíčem a volitelně se mohou autentizovat. Tato fáze se nazývá SSL Handshake protokol. Předávání zpráv mezi klientem a serverem je ve standardizované podobě na obrázku 1 a ve zjednodušené podobě na obrázku 2.

1. Klient pošle zprávu ClientHello. Zpráva obsahuje verzi protokolu, časové razítko, náhodné číslo (o velikosti 28 bytů), identifikaci relace a seznam podporovaných šifrovacích a kompresních metod. Server odpoví pomocí zprávy ServerHello, která obsahuje verzi protokolu, identifikaci relace a zvolenou metodu šifrování a komprese.

2. Server má možnost volitelně poslat 3 druhy zpráv:

· Certificate -- v případě, že má být server autentizován, pošle své certifikáty klientovi k ověření své identity.

· CertificateRequest -- neanonymní server může požadovat po klientovi certifikáty jeho identity, vydané různými certifikačními autoritami.

· ServerKeyExchange -- tuto zprávu server posílá v případě, že nemá žádný certifikát, nebo má certifikát použitelný pouze k podepisování. Obsahuje identifikátor kryptografického algoritmu, který bude použit pro výměnu tajných klíčů, a parametry tohoto algoritmu (veřejný klíč).

3. Server ukončí tuto fázi pomocí zprávy ServerHelloDone.

4. Klient vygeneruje tajný klíč relace a pošle zprávu ClientKeyExchange, která tento klíč obsahuje (zašifrovaný pomocí algoritmu veřejného klíče).

5. Pokud server požadoval certifikáty, pak je zašle (zpráva Certificate). Pokud má certifikát podepisovací schopnosti, pak pošle podepsaný obsah předcházejících zpráv (zpráva CertificateVerify).

6. Klient pošle zprávu ChangeCypherSpec a nastaví šifrovací a podpisovací algoritmy.

7. Klient pošle zprávu Finished již zašifrovanou tajným klíčem.

8. Server pošle zprávu ChangeCypherSpec a nastaví šifrovací a podpisovací algoritmy.

9. Server pošle zprávu Finished již zašifrovanou tajným klíčem.

V této chvíli již probíhá mezi oběma stranami bezpečná komunikace. Protokol umožňuje změnu způsobu šifrování a výměnu dalších certifikátů kdykoliv v průběhu komunikace. (Certifikát je většinou veřejný klíč majitele, spolu s dalšími informacemi identifikujícími vlastníka, podepsaný nějakou certifikační autoritou. Certifikáty se bude zabývat některý z dalších dílů tohoto seriálu). Protokol SSL neřeší ověřování platnosti certifikátů, tato záležitost může být implementačně závislá.

Jak je vidět, protokol definuje rámec, kterým probíhá bezpečná komunikace. Protokol nevyžaduje využití specifických šifrovacích a autentizačních metod. Jsou zde definovány některé základní typy:

- výměna klíčů: Diffie-Hellman a RSA v kombinaci s DSS (Digital Signature Standard) nebo Fortezza (neveřejný algoritmus);

- symetrické šifrovací algoritmy: IDEA, RC2, RC4, DES, 3-DES, Fortezza;

- hašovací funkce (použité pro kontrolu integrity dat): MD5, SHA nebo kombinace obou.

V současnosti se SSL používá hlavně pro bezpečné http (https), je možné také používat bezpečné SMTP (ssmtp) nebo NNTP (snntp). SSL však není omezen jen na tyto služby.

Některé nedostatky

Bezpečnost tohoto protokolu záleží na tom, jaké parametry si spolu klient se serverem dohodnou. V případě, že je umožněna neautentizovaná komunikace, je bezpečnost ohrožena pomocí útoku typu man-in-the-middle. Navíc některé šifrovací algoritmy používají pouze 40bitové klíče, což může vést ke snadnému prolomení klíče.

Protokol také umožňuje přejít ke komunikaci pomocí starší verze (SSL 2.0). Verze 2.0 umožňovala útočníkovi (man-in-the-middle) modifikovat některé zprávy tak, aby si komunikující strany dohodly šifru s co nejmenším klíčem. Záleží tedy pouze na aplikaci, zda povolí přechod k verzi 2.0 nebo ne. Výzva k rozlomení SSL verze 2.0 byla úspěšně dokončena po 8 dnech rozlomením zprávy hned dvěma týmy (v rozmezí 2 hodin). (http://pauillac.inria.fr/~doligez/ssl/).

Tento protokol také obsahuje patentované algoritmy (RSA), což může způsobit problémy při implementaci. Platnost patentu pro algoritmus Diffie-Hellman však již vypršela.

PCT (Private Communication Technology)

Je to velmi podobný protokol od firmy Microsoft. Používá stejný základní formát jako SSL, takže server může rozlišit mezi těmito dvěma protokoly, pokud jsou používány současně. Hlavní rozdíly jsou především ve výměně zpráv při handshake protokolu a oddělení autentizačních klíčů od šifrovacích.

SHTTP (verze 1.4)

Jedná se o protokol, kterým je možné zabezpečit komunikaci pomocí HTTP. Byl vytvořen tak, aby byl snadno integrovatelný s HTTP a je s ním kompatibilní. SHTTP je protokol na aplikační úrovni a je na rozdíl od SSL, který po celou dobu komunikace udržuje spojení mezi stranami, protokol typu dotaz-odpověď (což může být výhodné).

SHTTP zprávy jsou syntakticky stejné jako zprávy HTTP a skládají se z požadavku nebo stavového řádku, následovaným hlavičkami a tělem zprávy.

SHTTP poskytuje pro zabezpečení zprávy 3 základní možnosti: digitální podpis, autentizaci a šifrování. Protokol SHTTP není závislý na určitém druhu algoritmů a umožňuje používat různé metody předávání klíčů a certifikátů.

Podepisování se dosahuje pomocí certifikátů, které mohou být součástí zprávy, nebo mohou být doručeny nezávisle na zprávě. Agenti musí podporovat algoritmus DSS (Digital Signature Standard).

Autentizace a integrita zprávy je zajištěna pomocí hašovací funkce (MAC). Agenti musí podporovat algoritmus MD5 a RSA-MD5-HMAC (HMAC je bezpečnější hašovací funkce).

Šifrování zprávy je zajištěno symetrickými šiframi. Použitelné jsou jak proudové, tak blokové šifry. Blokové šifry se většinou používají v režimu CBC (Cipher Block Chaining). Agenti musí podporovat DES-CBC.

Výměna klíčů může být zajištěna buď přímo pomocí algoritmů veřejného klíče, nebo je možné tajný šifrovací klíč vyměnit jinými metodami nezávislými na SHTTP. Jako algoritmy veřejného klíče se používají Diffie-Hellman a RSA.

Výhodou protokolu SHTTP je to, že protokol je navržen tak, aby bylo možno použít proxy. Nevýhodou naopak zůstává, že tento protokol je svázán s protokolem HTTP a nelze jej použít pro jiný druh přenosu.

Závěrem

Ačkoliv existují i další protokoly pro bezpečnou komunikaci, je zejména SSL hojně používán a podporován hlavně ve webových aplikacích a zatím má podstatný náskok před ostatními protokoly na své úrovni. Výraznější změny může v budoucnu přinést protokol TLS (Transport Layer Security) připravovaný WWW konzorciem. My se ale v příští části seriálu podíváme na specializovaný protokol SET pro elektronické platby na bázi platebních karet.


| COMPUTERWORLD - seriál o bezpečnosti | COMPUTERWORLD | IDG CZ homepage |