Princip zabezpečení protokolem ZRTP
ZRTP protokol byl navržen v roce 2006. Rozšiřuje protokol SRTP tím, že k němu přidává mechanismy pro
počáteční výměnu symetrického klíče master key. Konkrétně pro výměnu symetrického klíče používá
algoritmus Diffie-Hellmana. Tento algoritmus je založený ta tom, že si obě strany komunikace vygenerují
svůj soukromý a veřejný klíč. Veřejný klíč pak pošlou druhému uživateli, který z něho pomocí
matematických operací odvodí symetrický klíč, kterým bude šifrovat a dešifrovat posílaná data.
Následující popis objasňuje podstatu algoritmu Diffie-Hellmanama mezi uživatelem A a uživatelem B:
- Oba uživatelé se dohodnou na dvou veřejných parametrech M a N, kde M je prvočíslo.
- Uživatel A si vygeneruje náhodný soukromý klíč x a vypočítá veřejný klíč X = Nx mod M, který odešle uživateli B.
- Uživatel B si vygeneruje náhodný soukromý klíč y a vypočítá veřejný klíč Y = Ny mod M, který odešle uživateli A.
- Uživatel B obdrží od uživatele A jeho veřejný klíč Y, ze které vypočte symetrický klíč KYX = Yx mod M,
- Uživatel A obdrží od uživatele B jeho veřejný klíč X, ze které vypočte symetrický klíč KXY = Xy mod M,
- protože platí KYX = KXY = K, mohou uživatelé A a B další vzájemnou komunikaci šifrovat pravě tímto klíčem.
ZRTP prakticky
X-Lite 2.0 s použitím protokolu ZRTP(Zfone)
Komunikace probíhala mezi dvěma klienty X-Lite 2.0. K zabezpečení přenosu RTP paketů byl použit
program Zfone. Zfone sám osobě neslouží ke komunikaci, ale stará se pouze o zabezpečení přenášených
dat, které zabezpečuje pomocí protokolu ZTRP. Podmínkou pro zašifrování komunikace je samozřejmě
nainstalovaný Zfone na obou počítačích, mezi kterými komunikace probíhá. Na obrázku 1
je zobrazeno, jaké možnosti zabezpečení Zfone nabízí. Přenášená data lze šifrovat symetrickou šifrou
AES-128 nebo AES-256. Program umožňuje zvolit velikost pole auhentication tag, tj. délku kontrolního
součtu hlavičky, která je standardně nastavena na 32 bitů. Pro počáteční výměnu symetrického klíče
si lze zvolit mezi Diffie-Hellmannovými algoritmy DH-3072 a DH-4096.
Obr. 1: Nastavení parametrů zabezpečení programu Zfone
Princip algoritmu Diffie-Hellmana byl již vysvětlen výše. Jak je vidět z obrázku 2 původní
Diffie-Hellmannův algoritmus je náchylný na útok typu Man in the middle.
Z toho důvodu používá ZRTP mechanismus SAS (Short Authentication String), který tuto zranitelnost
napravuje. Při první komunikaci je SAS vypočten jako hash sdíleného symetrického klíče.
Každá strana si spočítá hodnotu SAS na své straně komunikačního řetězce a pak si navzájem vypočtenou
hodnotu sdělí. Pokud jsou vypočtené hodnoty SAS stejné, tak s velkou pravděpodobností není kanál
předmětem útoku.
Obr. 2: Útok typu Man in the Middle
Dalším prvkem zvyšujícím odolnost proti MitM útokům je tzv. kontinuita klíčů. Obě strany si
uchovávají hashe z klíčů použitých v daném hovoru a v příštím hovoru vypočítají nový hash
z předchozího hashe a z nového sdíleného symetrického klíče. Tento postup zajistí,
že pokud nebyl MitM útok vedený v prvním hovoru, nemůže být úspěšný ani v žádném dalším.
Čím větší je délka SAS, tím těžší je pro útočníka SAS odhalit a útočník může pouze odhadovat jaké
SAS má odeslat. Zfone nabízí nastavení velikosti SAS na 32 bitů nebo 256 bitů a k vytvoření hashe
používá funkci SHA-256.
Obr. 3: Princip výměny symetrického klíče mezi uživateli a ověření hodnoty SAS
Pomocí programu Wireshark byla zachycena multimediální komunikace, která je zobrazena na
obrázcích 4 a 5. Jak je vidět na obrázku 5, program Zfone zabezpečuje pouze vlastní
multimediální komunikaci. Signalizace protokolu SIP byla sítí přenášena v otevřené podobě a nebyla
nijak zabezpečena.
Obr. 4: Zachycené pakety ZRTP
Obr. 5: Zachycená komunikace klientů X-Lite při použití protokolu ZRTP
Po navázání komunikace mezi klienty bylo několik prvních RTP paketů přeneseno bez zabezpečení.
Během této doby se obě komunikující strany dohodly na použitých šifrovacích algoritmech, vyměnily
si veřejné klíče pomocí algoritmu Diffie-Hellmana a došlo k ověření hodnoty SAS.
Nejdříve se uskutečnila výměna Hello paketů (obr. 6), ve kterých byly přenášeny informace
o nastavených bezpečnostních parametrech v programu Zfone. Příjem Hello paketů byl potvrzen druhou
stranou komunikace paketem HelloACK. Následovala výměna několika Commit paketů (obr. 7), ve kterých
došlo k ujednání použitých bezpečnostních algoritmů pro zabezpečený přenos RTP paketů. Z obrázku
lze vyčíst, že se komunikující strany dohodly, že pro šifrování multimediálních dat použijí
algoritmus AES-128, k výměně symetrického hesla algoritmus DH-4096, velikost SAS bude 256 bitů a
jako hashovací funkce k výpočtu SAS bude použita SHA-256.
Poté, co se komunikující strany dohodly na bezpečnostních parametrech, došlo k výměně paketů DH,
které obsahovaly veřejné klíče uživatelů. Když měly obě strany k dispozici veřejné klíče druhých
stran, vypočítaly si tajný symetrický klíč a hodnotu SAS, kterou pak ve formě hashe poslaly druhé
straně ve zprávě Confirm. Skutečnost, že se obě hodnoty SAS shodovaly, si obě strany sdělily ve
zprávě Conf2ACK.Po úspěšné výměně symetrického klíče byly všechny následující RTP pakety šifrovány
jako ZRTP.
Obr. 6: Zachycený Hello ZRTP paket programu Zfone
Obr. 7: Zachycený Commit ZRTP paket programu Zfone
Twinkle 1.0.1
Twinkle umožňuje zabezpečit přenášená mediální data protokolem ZRTP. Jak je vidět na obrázku 8,
uživatel může pouze zapnout nebo vypnout použití protokolu ZRTP, ale už mu není dovoleno nastavit
jednotlivé bezpečnostní parametry (např. zvolit použitou šifrovací metodu), jak tomu bylo možné
u programu Zfone.
Obr. 8: Nastavení použití protokolu ZRTP v programu Twinkle
Jaké bezpečnostní mechanismy Twinkle používá lze zjistit ze zachyceného Commit ZRTP paketu (obr 9).
Šifrování RTP paketů je prováděno algoritmem AES-256, k výměně symetrického klíče je použit algoritmus
DH-4096, velikost SAS je 32 bitů a jako hashovací funkce k ověření SAS je použita SHA-256. Princip
výměny symetrického klíče je stejný, jako byl popsaný u programu Zfone. Informace, že klienti mají
použít k zabezpečení dat protokol ZRTP, je obsažena při navazování komunikace v protokolu SDP, který
je přenášen ve zprávě SIP INVITE (obr. 10).
Obr. 9: Zachycený Commit ZRTP paket programu Twinkle
Obr. 10: Zachycený paket zprávy SIP INVITE klienta Twinkle