Blog

Kako tehnično deluje Baby Monitor Timmy

WebRTC, Firebase in zaščita od konca do konca, razloženi brez marketinške megle.

Trije gradniki, en cilj

V ozadju je Timmy zgrajen precej pragmatično: Flutter za aplikacijo, WebRTC za zvok in sliko v realnem času ter Firebase za usklajevanje. Nisem želel zgraditi ogromne platforme, ki bi vse pošiljala skozi oblak. Vsak del naj ve čim manj, hkrati pa naj z drugimi zanesljivo deluje.

WebRTC: neposredna povezava, privzeto šifrirana

WebRTC (Web Real-Time Communication) prenaša zvok in sliko med napravo pri otroku in napravo starša. V najboljšem primeru podatki potujejo neposredno med napravama, po načelu enakovrednih naprav (peer-to-peer), brez vmesnega medijskega strežnika.

Vsaka povezava WebRTC privzeto uporablja DTLS-SRTP. Če nekdo prestreže omrežne pakete, iz njih ne more razbrati zvoka ali slike. To šifriranje je del protokola in ga v WebRTC ni mogoče kar izklopiti.

To je bilo zame ključno: zvok in slika iz otroške sobe ne sodita na moj strežnik. Ostajata med vašima napravama.

Signalizacija prek Firebase Firestore

Preden se lahko WebRTC zažene, se morata napravi najti in dogovoriti, kako se bosta povezali. Ta del se imenuje signalizacija. Timmy za to uporablja Firebase Firestore, Googlovo podatkovno zbirko v oblaku.

Izmenjajo se samo tehnični podatki o povezavi:

Zvok in slika ne končata v storitvi Firebase. Firestore prenaša samo tehnične podatke o povezavi. Timmy šifrira tudi to signalizacijsko plast, zato Firestore ne postane stičišče za nešifrirane podatke SDP in ICE.

Strežniki TURN: ko neposredna pot ne deluje

Nekatera omrežja blokirajo neposredne povezave, na primer strogi požarni zidovi ali nekateri mobilni operaterji. Takrat WebRTC potrebuje posredovalni strežnik TURN (Traversal Using Relays around NAT).

Timmy najprej poskusi z lokalnim strežnikom TURN, kadar ta ni dosegljiv ali je preobremenjen, pa kot rezervno možnost uporabi Cloudflare. Posredovalni strežnik posreduje šifrirane pakete. Ne prejme ključev za zvok ali sliko; šifriranje WebRTC ostane nedotaknjeno.

Poverilnice TURN se pridobijo prek funkcije Firebase Cloud Function in veljajo samo 24 ur. Stalne poverilnice v aplikaciji za elektronsko varuško bi bile zame preveč tvegane.

Nearby Connections: napravi se najdeta samodejno

Da bi se izognili nerodnim korakom pri nastavitvi med napravo pri otroku in napravo starša, Timmy uporablja Nearby Connections. Google zagotavlja to plast za odkrivanje prek povezav Bluetooth in Wi‑Fi.

Samodejno seznanjanje v Timmyju deluje brez ročnega vnosa kode: napravi se samodejno zaznata in poiščeta isto stičišče za izmenjavo ključev. Če to ne uspe, lahko vnesete 4-znakovno kodo. Koda za seznanjanje nikoli ne zapusti naprave; Firestore kot identifikator dokumenta vidi samo kriptografsko zgoščeno vrednost (SHA-256).

Anonimna avtentikacija

Timmy uporablja Firebase Anonymous Authentication. Ob prvem zagonu vsaka naprava dobi začasni anonimni ID. Ni računa, e-poštnega naslova niti gesla. ID obstaja le zato, da se uveljavijo pravila Firestore: podatke seje lahko berejo ali zapisujejo samo avtenticirane naprave.

Arhitektura: kdo pošilja, kdo prejema

Timmy ima dva načina:

Funkciji »pritisni za govor« in vklop/izklop kamere uporabljata DataChannel, še en kanal WebRTC, ki neposredno med napravama pošilja majhna šifrirana sporočila.

Zakaj Flutter?

Flutter je Googlovo ogrodje za razvoj aplikacij za več platform. Za Timmy to pomeni, da lahko velik del programske logike napišem enkrat in ga uporabim za Android in iOS. Timmy je na voljo za Android, različica za iOS pa je tik pred izidom. Manj podvojene kode pomeni manj mest, kjer se lahko prikradejo napake.

Povzetek

Tehnično pravilo je preprosto: Timmy naj obdeluje samo podatke, ki jih zares potrebuje. WebRTC varuje medijske podatke, Firebase usklajuje vzpostavitev povezave, TURN vidi le šifrirane pakete, Nearby Connections pa poenostavi seznanjanje.

Dobra tehnologija se nekoliko zlije z vsakdanom. Deluje, ne da bi otroško sobo spremenila v projekt v oblaku.


Več člankov