- jak se tam ty klíče dostanou
- kdo tam ty klíče přenese
- a asi z toho vyplává, že ty klíče mohla na začátku znát i platforma
Jaké jsou předpoklady pro bezpečnou komunikaci?
1. Předání komunikačních klíčů out of band
Naopak, tohle se správně dělá tak, že si ty klíče vygeneruje ten uživatel / přímo na daném zařízení a nikdo další je nezná. Tak funguje asymetrická kryptografie. Není tak potřeba (soukromé) klíče někam přenášet nebo si je soukromě vyměňovat s lidmi se kterými chci komunikovat.
Problém je ale v tom, co správně uvádíš jako další - jak ověřit, že
veřejný klíč co mám u nějaké protistrany, je opravdu této protistrany (tj. nikdo nedělá MITM), a další důležitá vlastnost, pokud se klíč protistrany změní, tak zda na to klient opravdu nepřehlédnutelným způsobem upozorní. A tady je právě ten problém - WhatsApp standardně používá jen ověření telefonního čísla pomocí SMS + distribuci veřejných klíčů přes své servery, takže je můžou změnit oni, operátor, kdokoli. Další věc je změna klíče: měnil jsem systém na kterém jsem měl WhatsApp nainstalovaný (z Androidu ve virtuálu na fyzický iPhone), data jsem nepřenášel, tj. ani klíče se nemohly nijak přenést/podepsat jeden druhým, a nikomu s kým jsem komunikoval pokud vím žádné varování nevyskočilo.
Jestli WhatsApp umí i nějaký bezpečnější režim (populární je třeba že se zobrazí QR kód s veřejným klíčem na displeji a protistrana si ho oskenuje a tím se navzájem ověříte), který to řeší, a jak dobře je řešeno, aby uživatel omylem nepřešel zpátky na ten méně bezpečný (protože úplně vidím jak provozovatel má osypky z toho, že se BFU ověří, pak si vymění telefon a pak jim to nebude fungovat a nebudou rozumět tomu co se děje), to nevím.
No a pak je tu ještě důvěryhodnost platformy na které se to typicky provozuje: na iOS je to celkem dobré
pokud bezvýhradně věříš Applu, na Android-x86 na normálním počítači snad taky ale blbě se to používá, a na Androidu na fyzickém telefonu to bude tragédie, resp. záleží na výrobci a jaký zrovna adware, malware a díry tam přibalil a jestli vydal poslední bezpečnostní update před rokem nebo před pěti.