Hei Habr!
Astăzi voi vorbi despre ceea ce facem eu și colegii mei de câteva luni: notificări push pentru mesageria instantanee mobile. După cum am spus deja, în aplicația noastră accentul principal este pus pe securitate. Prin urmare, am aflat dacă notificările push au „puncte slabe” și, dacă da, cum le putem nivela pentru a adăuga această opțiune utilă serviciului nostru.
Public o traducere a noastră
Examinăm materialul
În modelul clasic, notificările push fac mesagerii vulnerabili la atacurile MITM (Man-in-the-middle). De exemplu, cu Google, Microsoft și versiunea veche a iMessage, aplicația trimite chei de criptare către serverele Apple - pe server, utilizatorii sunt autentificați și antetul mesajului (sau conținutul acestuia) este decriptat.
Ca urmare, există șansa de a citi corespondența prin obținerea accesului la serverul de notificare push. Aceasta înseamnă că orice criptare a corespondenței este inutilă: notificările push vor lăsa în continuare posibilitatea de a fi citite de terți. Autorii articolului au discutat mai detaliat această posibilitate.
Dacă credeți că serverele Apple și Google sunt 100% sigure împotriva scurgerii cheilor de criptare ale utilizatorilor, luați în considerare faptul că angajații lor au acces la ele. Și angajații sunt oameni.
În ciuda tuturor vulnerabilităților notificărilor push, multe mesagerie instant „securizate”, inclusiv Signal și Telegram, le folosesc. În caz contrar, utilizatorii vor trebui să monitorizeze „manual” mesajele noi, conectându-se constant la aplicație. Ceea ce este foarte incomod, iar mesagerii concurenți vor obține un avantaj.
Paranoia și bunul simț
În proiectul nostru, am abordat cu atenție această problemă în urmă cu câteva luni. Trebuia să adăugăm o opțiune de notificare push pentru a fi competitivi. Dar, în același timp, nu deschideți o gaură de securitate, deoarece orice scurgere de date va submina încrederea în proiect.
Cu toate acestea, avem deja un avantaj important: messengerul nostru este descentralizat (datele sunt stocate pe blockchain), iar angajații nu au acces la conturi. Doar utilizatorii au chei de criptare, iar cheile publice ale interlocutorilor sunt disponibile pe blockchain pentru a se proteja împotriva atacurilor MITM.
În prima versiune a notificărilor push, am decis să jucăm în siguranță cât mai mult posibil și să nu transmitem deloc textul mesajului. Serviciul push nu a primit textul mesajului de la nod, ci doar un semnal despre faptul primirii acestuia. Prin urmare, utilizatorul a văzut notificarea „Mesaj nou a sosit”. Era posibil să-l citească doar în messenger.
După aceea, am aflat că cea mai recentă versiune a notificărilor Apple are noi funcții de securitate. ei
Am dezvoltat acum cea de-a doua versiune a notificărilor push pentru iOS, care vă permite să afișați textul mesajului fără un risc de securitate. În noul concept, logica arată astfel:
- Serviciul push trimite o notificare push cu numărul tranzacției (mesajul criptat poate fi foarte mare, iar dimensiunea notificărilor este foarte limitată)
- Când dispozitivul primește o notificare, lansează NotificationServiceExtension - o microaplicație care solicită o tranzacție de la nod prin ID, o decriptează folosind fraza de acces salvată și trimite o nouă notificare către sistem. Fraza de acces este stocată într-un spațiu de stocare securizat.
- Sistemul afișează o notificare cu un mesaj decriptat sau o traducere.
- Cheile nu merg nicăieri, la fel ca mesajul text simplu. Serviciul push nu are nicio modalitate de a decripta mesajul.
Am acceptat această versiune ca funcțională și am implementat-o în cea mai recentă actualizare a aplicației iOS.
Cei interesați de partea tehnică pot vizualiza codul sursă:
Sursa: www.habr.com