Ιστολόγιο

Πώς λειτουργεί τεχνικά το Baby Monitor Timmy

WebRTC, Firebase και προστασία από άκρο σε άκρο, εξηγημένα χωρίς τεχνολογική φλυαρία.

Τρία δομικά στοιχεία, ένας στόχος

Στο παρασκήνιο, το Timmy είναι φτιαγμένο με αρκετά πρακτικό τρόπο: Flutter για την εφαρμογή, WebRTC για ήχο και βίντεο σε πραγματικό χρόνο, και Firebase για τον συντονισμό. Δεν ήθελα να φτιάξω μια τεράστια πλατφόρμα που περνάει τα πάντα από το cloud. Κάθε μέρος πρέπει να γνωρίζει όσο το δυνατόν λιγότερα και παρ’ όλα αυτά να συνεργάζεται αξιόπιστα με τα υπόλοιπα.

WebRTC: Άμεση σύνδεση, κρυπτογραφημένη από προεπιλογή

Το WebRTC (Web Real-Time Communication) μεταφέρει ήχο και βίντεο ανάμεσα στη συσκευή του μωρού και τη συσκευή του γονέα. Στην καλύτερη περίπτωση, τα δεδομένα μεταφέρονται απευθείας μεταξύ των δύο συσκευών, από συσκευή σε συσκευή, χωρίς ενδιάμεσο διακομιστή πολυμέσων.

Κάθε σύνδεση WebRTC χρησιμοποιεί από προεπιλογή DTLS-SRTP. Αν κάποιος υποκλέψει πακέτα δικτύου, δεν θα μπορεί να διαβάσει τον ήχο ή το βίντεο. Αυτή η κρυπτογράφηση είναι μέρος του πρωτοκόλλου και δεν μπορεί απλώς να απενεργοποιηθεί στο WebRTC.

Αυτό ήταν το σημαντικό για μένα: οι ροές ήχου και βίντεο από το παιδικό δωμάτιο δεν έχουν θέση στον διακομιστή μου. Παραμένουν μεταξύ των συσκευών σας.

Σηματοδότηση μέσω Firebase Firestore

Πριν ξεκινήσει το WebRTC, οι συσκευές πρέπει να εντοπίσουν η μία την άλλη και να συμφωνήσουν πώς μπορούν να συνδεθούν. Αυτό το μέρος λέγεται σηματοδότηση. Το Timmy χρησιμοποιεί για αυτό το Firebase Firestore, τη βάση δεδομένων cloud της Google.

Ανταλλάσσονται μόνο τεχνικά δεδομένα σύνδεσης:

Ο ήχος και το βίντεο δεν καταλήγουν στο Firebase. Το Firestore μεταφέρει μόνο τα τεχνικά δεδομένα σύνδεσης. Το Timmy κρυπτογραφεί επίσης αυτό το επίπεδο σηματοδότησης, ώστε τα δεδομένα SDP και ICE να μην εκτίθενται στο Firestore σε μη κρυπτογραφημένη μορφή.

Διακομιστές TURN: Όταν η άμεση διαδρομή δεν λειτουργεί

Ορισμένα δίκτυα μπλοκάρουν τις άμεσες συνδέσεις, για παράδειγμα αυστηρά τείχη προστασίας ή κάποιοι πάροχοι κινητής τηλεφωνίας. Τότε το WebRTC χρειάζεται έναν αναμεταδότη TURN (Traversal Using Relays around NAT).

Το Timmy δοκιμάζει πρώτα τον τοπικό διακομιστή TURN και χρησιμοποιεί την Cloudflare ως εναλλακτική όταν ο τοπικός αναμεταδότης δεν είναι διαθέσιμος ή έχει υπερφορτωθεί. Ο αναμεταδότης προωθεί κρυπτογραφημένα πακέτα. Δεν λαμβάνει κλειδιά για τον ήχο ή το βίντεο· η κρυπτογράφηση WebRTC παραμένει ανέπαφη.

Τα διαπιστευτήρια TURN προέρχονται από μια Firebase Cloud Function και ισχύουν μόνο για 24 ώρες. Τα μόνιμα διαπιστευτήρια σε μια εφαρμογή βρεφικής παρακολούθησης θα ήταν, για μένα, υπερβολικά ριψοκίνδυνα.

Nearby Connections: Οι συσκευές βρίσκουν η μία την άλλη αυτόματα

Για να αποφευχθούν άβολα βήματα ρύθμισης ανάμεσα στη συσκευή του μωρού και τη συσκευή του γονέα, το Timmy χρησιμοποιεί Nearby Connections. Η Google παρέχει αυτό το επίπεδο εντοπισμού μέσω Bluetooth και WiFi.

Η αυτόματη σύζευξη στο Timmy λειτουργεί χωρίς χειροκίνητη εισαγωγή κωδικού: οι συσκευές εντοπίζουν η μία την άλλη και βρίσκουν το ίδιο σημείο συνάντησης για την ανταλλαγή κλειδιών. Αν αυτό αποτύχει, μπορείτε να πληκτρολογήσετε έναν κωδικό 4 χαρακτήρων. Ο κωδικός σύζευξης δεν φεύγει ποτέ από τη συσκευή· το Firestore βλέπει μόνο ένα κρυπτογραφικό αποτύπωμα (hash) SHA-256 ως αναγνωριστικό εγγράφου.

Ανώνυμος έλεγχος ταυτότητας

Το Timmy χρησιμοποιεί τον Ανώνυμο έλεγχο ταυτότητας του Firebase. Κατά την πρώτη εκκίνηση, κάθε συσκευή λαμβάνει ένα προσωρινό, ανώνυμο αναγνωριστικό. Δεν υπάρχει λογαριασμός, διεύθυνση email ή κωδικός πρόσβασης. Το αναγνωριστικό χρησιμεύει μόνο για την εφαρμογή των κανόνων του Firestore: μόνο συσκευές που έχουν υποβληθεί σε έλεγχο ταυτότητας μπορούν να διαβάζουν ή να γράφουν δεδομένα συνεδρίας.

Η αρχιτεκτονική: ποιος στέλνει, ποιος λαμβάνει

Το Timmy έχει δύο λειτουργίες:

Τα χειριστήρια, όπως το push-to-talk και η ενεργοποίηση/απενεργοποίηση της κάμερας, χρησιμοποιούν ένα DataChannel, ένα ακόμη κανάλι WebRTC που στέλνει μικρά κρυπτογραφημένα μηνύματα απευθείας μεταξύ των συσκευών.

Γιατί Flutter;

Το Flutter είναι το πλαίσιο ανάπτυξης εφαρμογών πολλαπλών πλατφορμών της Google. Για το Timmy, αυτό σημαίνει ότι μπορώ να γράψω μεγάλο μέρος της λογικής μία φορά και να το χρησιμοποιήσω σε Android και iOS. Το Timmy είναι διαθέσιμο για Android και η έκδοση για iOS πλησιάζει στην κυκλοφορία. Λιγότερος διπλότυπος κώδικας σημαίνει λιγότερα σημεία στα οποία μπορούν να παρεισφρήσουν σφάλματα.

Σύνοψη

Ο τεχνικός κανόνας είναι απλός: το Timmy πρέπει να αγγίζει μόνο τα δεδομένα που πραγματικά χρειάζεται. Το WebRTC προστατεύει τα πολυμέσα, το Firebase συντονίζει τη ρύθμιση της σύνδεσης, το TURN βλέπει μόνο κρυπτογραφημένα πακέτα και το Nearby Connections κάνει τη σύζευξη πιο εύκολη.

Η καλή τεχνολογία περνά κάπως απαρατήρητη στην καθημερινότητα. Λειτουργεί χωρίς να μετατρέπει το παιδικό δωμάτιο σε έργο υποδομής cloud.


Περισσότερα άρθρα