Hej Habr!
Danas ću govoriti o onome što moji kolege i ja radimo već nekoliko mjeseci: push obavijesti za mobilne instant messengere. Kao što sam već rekao, u našoj aplikaciji glavni naglasak je na sigurnosti. Stoga smo saznali imaju li push obavijesti “slabe točke” i, ako imaju, kako ih možemo izravnati kako bismo ovu korisnu opciju dodali našoj usluzi.
Objavljujem prijevod našeg
Pregledavamo materijal
U klasičnom modelu, push obavijesti čine glasnike ranjivima na MITM (Man-in-the-middle) napade. Na primjer, s Googleom, Microsoftom i starom verzijom iMessage-a, aplikacija šalje ključeve enkripcije Appleovim poslužiteljima – na poslužitelju se autentificiraju korisnici, a zaglavlje poruke (ili njezin sadržaj) se dekriptira.
Kao rezultat toga, postoji mogućnost čitanja korespondencije dobivanjem pristupa poslužitelju push obavijesti. To znači da je bilo kakva enkripcija dopisivanja beskorisna: push obavijesti će i dalje ostaviti mogućnost da ih pročitaju treće strane. Autori članka detaljnije su raspravljali o ovoj mogućnosti.
Ako mislite da su poslužitelji Applea i Googlea 100% sigurni od curenja korisničkih ključeva za šifriranje, uzmite u obzir činjenicu da im njihovi zaposlenici imaju pristup. I zaposlenici su ljudi.
Unatoč svim ranjivostima push obavijesti, mnogi "sigurni" instant messengeri, uključujući Signal i Telegram, koriste ih. U suprotnom, korisnici će morati “ručno” pratiti nove poruke stalnim prijavljivanjem u aplikaciju. Što je vrlo nezgodno, a konkurentski će glasnici dobiti prednost.
Paranoja i zdrav razum
U našem projektu pomno smo se pozabavili ovim pitanjem prije nekoliko mjeseci. Morali smo dodati opciju push obavijesti kako bismo bili konkurentni. Ali u isto vrijeme nemojte otvarati sigurnosnu rupu jer će svako curenje podataka potkopati povjerenje u projekt.
No, već sada imamo važnu prednost: naš je messenger decentraliziran (podaci se pohranjuju na blockchain), a zaposlenici nemaju pristup računima. Samo korisnici imaju ključeve za šifriranje, a javni ključevi sugovornika dostupni su na blockchainu radi zaštite od MITM napada.
U prvoj verziji push obavijesti odlučili smo igrati na sigurno što je više moguće i uopće ne prenositi tekst poruke. Push usluga nije primila tekst poruke od čvora, već samo signal o činjenici njenog primitka. Stoga je korisnik vidio obavijest "Nova poruka je stigla". Bilo ga je moguće pročitati samo u messengeru.
Nakon toga saznali smo da najnovija Appleova verzija obavijesti ima nove sigurnosne značajke. Oni
Sada smo razvili drugu verziju push obavijesti za iOS, koja vam omogućuje prikaz teksta poruke bez sigurnosnog rizika. U novom konceptu logika izgleda ovako:
- Push usluga šalje push obavijest s brojem transakcije (kriptirana poruka može biti vrlo velika, a veličina obavijesti je vrlo ograničena)
- Kada uređaj primi obavijest, pokreće našu NotificationServiceExtension - mikroaplikaciju koja od čvora traži transakciju prema ID-u, dekriptira je pomoću spremljene zaporke i šalje novu obavijest sustavu. Zaporka je pohranjena u sigurnoj pohrani.
- Sustav prikazuje obavijest s dekriptiranom porukom ili prijevodom.
- Ključevi ne idu nikamo, baš kao ni obična tekstualna poruka. Push usluga nema načina za dešifriranje poruke.
Prihvatili smo ovu verziju kao radnu i implementirali je u najnovijem ažuriranju iOS aplikacije.
Oni koje zanima tehnička strana mogu pogledati izvorni kod:
Izvor: www.habr.com