Blog

Hogyan működik műszakilag a Baby Monitor Timmy

WebRTC, Firebase és végpontok közötti védelem, közérthetően, marketinges ködösítés nélkül.

Három építőelem, egy cél

A háttérben Timmy meglehetősen gyakorlatiasan épül fel: Flutter az alkalmazáshoz, WebRTC a valós idejű hanghoz és videóhoz, valamint Firebase az összehangoláshoz. Nem akartam egy hatalmas platformot építeni, amely mindent a felhőn keresztül továbbít. Minden résznek a lehető legkevesebbet kell tudnia, miközben megbízhatóan együttműködik a többivel.

WebRTC: közvetlen kapcsolat, alapértelmezett titkosítással

A WebRTC (Web Real-Time Communication) továbbítja a hangot és a videót a baba és a szülő készüléke között. Ideális esetben az adatok közvetlenül a két készülék között, peer-to-peer módon áramlanak, köztes médiaszerver nélkül.

Minden WebRTC-kapcsolat alapértelmezetten DTLS-SRTP-t használ. Ha valaki elfogja a hálózati csomagokat, nem kap olvasható hang- vagy videóadatot. Ez a titkosítás a protokoll része, és a WebRTC-ben nem lehet egyszerűen kikapcsolni.

Számomra ez volt a lényeg: a gyerekszobából érkező médiaadatoknak nincs helyük az én szerveremen. A készülékeid között maradnak.

Jelzésátvitel a Firebase Firestore-on keresztül

Mielőtt a WebRTC elindulhat, a készülékeknek meg kell találniuk egymást, és egyeztetniük kell, hogyan tudnak kapcsolódni. Ezt a részt jelzésátvitelnek nevezik. Timmy ehhez a Firebase Firestore-t, a Google felhőalapú adatbázisát használja.

Csak technikai kapcsolati adatok cserélődnek:

A hang és a videó nem kerül a Firebase-be. A Firestore csak a technikai kapcsolati adatokat továbbítja. Timmy ezt a jelzésátviteli réteget is titkosítja, így a Firestore nem válik az SDP és az ICE titkosítás nélküli találkozóhelyévé.

TURN-szerverek: amikor a közvetlen útvonal nem működik

Egyes hálózatok blokkolják a közvetlen kapcsolatokat, például a szigorú tűzfalak vagy bizonyos mobilszolgáltatók. Ilyenkor a WebRTC-nek szüksége van egy TURN-relére (Traversal Using Relays around NAT).

Timmy először a helyi TURN-szervert próbálja használni, és ha a helyi relé nem elérhető vagy túlterhelt, a Cloudflare szolgál tartalékként. A relé titkosított csomagokat továbbít. Nem kap kulcsot a hanghoz vagy a videóhoz; a WebRTC-titkosítás változatlanul megmarad.

A TURN-hitelesítő adatok egy Firebase Cloud Functionből érkeznek, és csak 24 óráig érvényesek. Egy bébiőralkalmazásban az állandó hitelesítő adatok számomra túl kockázatosak lennének.

Közeli kapcsolatok: a készülékek automatikusan megtalálják egymást

A baba- és a szülői készülék közötti körülményes beállítás elkerülésére Timmy a Nearby Connections technológiát használja. A Google ezt a felderítési réteget Bluetoothon és Wi-Fi-n keresztül biztosítja.

Automatikus párosítás a Timmyben kézi kódbevitel nélkül működik: a készülékek felfedezik egymást, és ugyanazt a találkozási pontot találják meg a kulcscseréhez. Ha ez nem sikerül, beírhatsz egy 4 karakteres kódot. A párosítási kód soha nem hagyja el a készüléket; a Firestore csak egy kriptográfiai kivonatot (SHA-256) lát dokumentumazonosítóként.

Névtelen hitelesítés

Timmy a Firebase Anonymous Authenticationt használja. Első indításkor minden készülék ideiglenes, névtelen azonosítót kap. Nincs fiók, e-mail-cím vagy jelszó. Az azonosító csak a Firestore-szabályok érvényesítésére szolgál: csak hitelesített készülékek olvashatják vagy írhatják a munkamenet adatait.

Az architektúra: ki küld, ki fogad

Timmynek két üzemmódja van:

Az olyan vezérlők, mint az adóvevő és a kamera be-/kikapcsolása, egy DataChannelt használnak, vagyis egy másik WebRTC-csatornát, amely kis méretű, titkosított üzeneteket küld közvetlenül a készülékek között.

Miért Flutter?

A Flutter a Google többplatformos alkalmazásfejlesztő keretrendszere. Timmy esetében ez azt jelenti, hogy a logika nagy részét egyszer írhatom meg, és Androidon, valamint iOS-en is használhatom. Timmy Androidon már elérhető, az iOS-verzió pedig hamarosan megjelenik. A kevesebb ismétlődő kód kevesebb olyan helyet jelent, ahol hibák csúszhatnak be.

Összefoglalás

A műszaki alapelv egyszerű: Timmynek csak azokhoz az adatokhoz szabad hozzáférnie, amelyekre valóban szüksége van. A WebRTC védi a médiaadatokat, a Firebase összehangolja a kapcsolat beállítását, a TURN csak titkosított csomagokat lát, a Nearby Connections pedig egyszerűbbé teszi a párosítást.

A jó technológia kicsit beleolvad a mindennapokba. Működik anélkül, hogy a gyerekszobából felhőprojektet csinálna.


További cikkek