Blogue

Como funciona tecnicamente o Baby Monitor Timmy

WebRTC, Firebase e proteção de ponta a ponta, explicados sem palavreado técnico desnecessário.

Três pilares, um objetivo

Nos bastidores, o Timmy foi desenvolvido de forma bastante pragmática: Flutter para a app, WebRTC para áudio e vídeo em tempo real, e Firebase para a coordenação. Não queria criar uma plataforma enorme que fizesse passar tudo pela nuvem. Cada parte deve saber o mínimo possível e, ainda assim, funcionar de forma fiável com as outras.

WebRTC: ligação direta, encriptada por predefinição

O WebRTC (Web Real-Time Communication) transmite áudio e vídeo entre o dispositivo do bebé e o dos pais. No melhor cenário, os dados fluem diretamente entre os dois dispositivos, ponto a ponto, sem qualquer servidor multimédia pelo meio.

Todas as ligações WebRTC usam DTLS-SRTP por predefinição. Se alguém intercetar pacotes de rede, não conseguirá obter áudio ou vídeo legíveis. Esta encriptação faz parte do protocolo e não pode simplesmente ser desativada no WebRTC.

Para mim, este era o ponto importante: os conteúdos multimédia do quarto do bebé não devem passar pelo meu servidor. Mantêm-se entre os seus dispositivos.

Sinalização através do Firebase Firestore

Antes de o WebRTC poder começar, os dispositivos têm de se encontrar e negociar a forma como se podem ligar. Esta parte chama-se sinalização. O Timmy usa o Firebase Firestore, a base de dados na nuvem da Google, para esse efeito.

Só são trocados dados técnicos da ligação:

O áudio e o vídeo não são enviados para o Firebase. O Firestore apenas transporta os dados técnicos da ligação. O Timmy também encripta esta camada de sinalização, para que o Firestore não se torne num ponto de encontro com dados SDP e ICE não encriptados.

Servidores TURN: quando a ligação direta não funciona

Algumas redes bloqueiam ligações diretas, por exemplo, firewalls rigorosas ou certas operadoras móveis. Nesse caso, o WebRTC precisa de um servidor de retransmissão TURN (Traversal Using Relays around NAT).

O Timmy tenta primeiro o servidor TURN local e usa a Cloudflare como alternativa quando esse servidor de retransmissão não está disponível ou está sobrecarregado. O servidor reencaminha pacotes encriptados. Não recebe as chaves do áudio nem do vídeo; a encriptação do WebRTC mantém-se intacta.

As credenciais TURN são fornecidas por uma Firebase Cloud Function e só são válidas durante 24 horas. Para mim, seria demasiado arriscado incluir credenciais permanentes numa app de monitorização de bebés.

Nearby Connections: os dispositivos encontram-se automaticamente

Para evitar passos de configuração complicados entre o dispositivo do bebé e o dos pais, o Timmy usa Nearby Connections. A Google disponibiliza esta camada de descoberta através de Bluetooth e Wi-Fi.

O emparelhamento automático no Timmy funciona sem ser necessário introduzir códigos manualmente: os dispositivos detetam-se e encontram o mesmo ponto de encontro para a troca de chaves. Se isso falhar, pode introduzir um código de 4 caracteres. O código de emparelhamento nunca sai do dispositivo; o Firestore só vê um hash criptográfico (SHA-256) como identificador do documento.

Autenticação anónima

O Timmy usa a autenticação anónima do Firebase. No primeiro arranque, cada dispositivo recebe um ID temporário e anónimo. Não existe conta, endereço de e-mail nem palavra-passe. O ID serve apenas para aplicar as regras do Firestore: só os dispositivos autenticados podem ler ou escrever dados da sessão.

A arquitetura: quem envia, quem recebe

O Timmy tem dois modos:

Os controlos, como a função de premir para falar e a ativação ou desativação da câmara, usam um DataChannel, outro canal WebRTC que envia pequenas mensagens encriptadas diretamente entre os dispositivos.

Porquê Flutter?

O Flutter é a framework da Google para criar apps em várias plataformas. Para o Timmy, isto significa que posso escrever grande parte da lógica uma só vez e usá-la no Android e no iOS. O Timmy está disponível para Android e a versão para iOS está prestes a ser lançada. Menos código duplicado significa menos pontos onde podem surgir erros.

Resumo

A regra técnica é simples: o Timmy só deve aceder aos dados de que realmente precisa. O WebRTC protege os conteúdos multimédia, o Firebase coordena o estabelecimento da ligação, o TURN vê apenas pacotes encriptados e o Nearby Connections simplifica o emparelhamento.

A boa tecnologia passa um pouco despercebida no dia a dia. Funciona sem transformar o quarto do bebé num projeto alojado na nuvem.


Mais artigos