Tinklaraštis

Kaip techniškai veikia „Baby Monitor Timmy“

WebRTC, Firebase ir apsauga visame duomenų perdavimo kelyje – paaiškinta be miglotų madingų žodžių.

Trys pagrindiniai elementai, vienas tikslas

Timmy sukurtas gana pragmatiškai: Flutter programėlei, WebRTC garso ir vaizdo perdavimui realiuoju laiku bei Firebase koordinavimui. Nenorėjau kurti didžiulės platformos, kuri viską perduoda per debesiją. Kiekviena dalis turėtų žinoti kuo mažiau ir vis tiek patikimai veikti su kitomis.

WebRTC: tiesioginis ryšys ir numatytasis šifravimas

WebRTC („Web Real-Time Communication“) perduoda garsą ir vaizdą tarp kūdikio ir tėvų įrenginių. Geriausiu atveju duomenys keliauja tiesiogiai tarp abiejų įrenginių, lygiarangiu ryšiu, be tarpinio medijos serverio.

Kiekvienam WebRTC ryšiui pagal numatytuosius nustatymus naudojamas DTLS-SRTP. Jei kas nors perimtų tinklo paketus, iš jų negautų įskaitomo garso ar vaizdo. Šifravimas yra protokolo dalis, todėl WebRTC jo negalima tiesiog išjungti.

Man tai buvo svarbiausia: vaiko kambario garso ir vaizdo duomenys neturi patekti į mano serverį. Jie perduodami tik tarp jūsų įrenginių.

Signalizavimas per Firebase Firestore

Prieš pradedant veikti WebRTC, įrenginiai turi rasti vienas kitą ir susitarti, kaip galės prisijungti. Ši dalis vadinama signalizavimu. Tam Timmy naudoja „Google“ debesijos duomenų bazę Firebase Firestore.

Keičiamasi tik techniniais ryšio duomenimis:

Garsas ir vaizdas nepatenka į Firebase. Firestore perduoda tik techninius ryšio duomenis. Timmy taip pat šifruoja šį signalizavimo sluoksnį, todėl SDP ir ICE duomenys Firestore nėra laikomi nešifruotu pavidalu.

TURN serveriai: kai tiesioginis kelias neveikia

Kai kurie tinklai blokuoja tiesioginius ryšius, pavyzdžiui, griežtos užkardos ar tam tikri mobiliojo ryšio operatoriai. Tuomet WebRTC reikia TURN tarpinio serverio („Traversal Using Relays around NAT“).

Timmy pirmiausia bando naudoti vietinį TURN serverį, o jei jis nepasiekiamas arba perkrautas, kaip atsarginį variantą naudoja Cloudflare. Tarpinis serveris persiunčia šifruotus paketus. Jis negauna garso ar vaizdo šifravimo raktų, todėl WebRTC šifravimas išlieka nepažeistas.

TURN prisijungimo duomenys gaunami iš Firebase Cloud Function ir galioja tik 24 valandas. Nuolatiniai prisijungimo duomenys kūdikio stebėjimo programėlėje man atrodo pernelyg rizikingi.

Nearby Connections: įrenginiai vienas kitą randa automatiškai

Kad kūdikio ir tėvų įrenginius būtų galima sujungti be nepatogių nustatymo veiksmų, Timmy naudoja Nearby Connections. „Google“ šį aptikimo sluoksnį teikia per Bluetooth ir Wi‑Fi.

Automatinis susiejimas Timmy programėlėje veikia neįvedant kodo ranka: įrenginiai aptinka vienas kitą ir prisijungia prie to paties raktų mainų taško. Jei to padaryti nepavyksta, galite įvesti 4 simbolių kodą. Susiejimo kodas niekada nepalieka įrenginio; Firestore kaip dokumento identifikatorių mato tik kriptografinę maišos reikšmę (SHA-256).

Anoniminis autentifikavimas

Timmy naudoja Firebase anoniminį autentifikavimą. Pirmą kartą paleidus programėlę kiekvienas įrenginys gauna laikiną anoniminį ID. Nereikia paskyros, el. pašto adreso ar slaptažodžio. ID reikalingas tik Firestore taisyklėms taikyti: tik autentifikuoti įrenginiai gali skaityti ar rašyti sesijos duomenis.

Architektūra: kas siunčia, kas gauna

Timmy turi du režimus:

Valdikliai, tokie kaip „paspausk ir kalbėk“ ir kameros įjungimas ar išjungimas, naudoja DataChannel, kitą WebRTC kanalą, kuriuo maži šifruoti pranešimai siunčiami tiesiogiai tarp įrenginių.

Kodėl Flutter?

Flutter yra „Google“ programėlių kelioms platformoms kūrimo sistema. Timmy atveju tai reiškia, kad daug logikos galiu parašyti vieną kartą ir naudoti ją Android bei iOS. Timmy galima naudoti Android įrenginiuose, o iOS versija jau netrukus bus išleista. Mažiau pasikartojančio kodo reiškia mažiau vietų, kur gali atsirasti klaidų.

Santrauka

Techninė taisyklė paprasta: Timmy turėtų naudoti tik tuos duomenis, kurių jam iš tiesų reikia. WebRTC apsaugo mediją, Firebase koordinuoja ryšio nustatymą, TURN mato tik šifruotus paketus, o Nearby Connections supaprastina susiejimą.

Geros technologijos šiek tiek pranyksta kasdienybėje. Jos tiesiog veikia, nepaversdamos vaiko kambario debesijos projektu.


Daugiau straipsnių