Vamos ao lado técnico.
Tudo o que a primeira página diz, escrito como aquilo de que foi feito. A base de dados real, como um contacto é mesmo criado, e quem mais toca numa chamada.
Não precisas desta página para usar o Rilo, e nada aqui contradiz a versão mais simples. É o mesmo produto, descrito ao pormenor.
A base de dados inteira
Tudo o que o nosso servidor sabe sobre a tua família.
Isto não é um resumo. São as dezassete tabelas que o servidor tem, com as colunas que têm. Quatro são a tua família: quem são, quem pode agir por uma criança, os telemóveis de onde falam e para onde lhes tocar. Quatro guardam alguma coisa para um telemóvel que estava desligado, e as quatro apagam-se sozinhas. Três dizem respeito a quem pode agir por uma criança e a que telemóvel deixou de ser de confiança. Duas são registos assinados de um fim, um contacto cortado ou alguém que se foi embora. Ficam guardadas para que um telemóvel que esteve sem ligação as possa verificar em vez de acreditar em nós. Uma são números de uso único já gastos, varridos assim que expiram. Uma é a subscrição, e não guarda nada que dê nome a ninguém. Uma é uma denúncia que um adulto nos enviou, e é a única tabela aqui que existe para fazer acontecer alguma coisa. A última não é sobre a tua família de todo.
- idum hash da chave pública, não um nome
- public_keya chave do aparelho, que é a conta
- typeadulto ou criança
- type_certa assinatura que o prova. Uma conta de criança é assinada por um pai ou uma mãe, por isso não há nenhum sinal para virar
- created_at
- last_activea última vez que um dos teus telemóveis disse olá
- dormant_warned_atvazio
- consent_sealedo e-mail com que te inscreveste, selado com uma chave que vive em papel com o fundador. Nenhum servidor o consegue ler
- uncovered_sincevazio, a menos que a tua subscrição tenha deixado de cobrir esta criança — nesse caso o dia em que reparámos, para que o mês antes de algo parar comece aí
- keyo que está a ser lembrado
- valuee o que diz
- account_id
- guardian_keyuma chave autorizada a agir por esta criança
- added_at
- removed_at
- account_id
- device_keya chave do próprio telemóvel. Uma pessoa pode falar a partir de mais do que um
- agreement_keya chave com que uma mensagem é selada, para que só esse telemóvel a consiga abrir
- certa assinatura que deixou entrar este telemóvel, guardada palavra por palavra para que o teu telemóvel a possa verificar em vez de acreditar em nós
- kindum telemóvel, ou a folha de recuperação impressa
- added_at
- removed_at
- account_id
- device_keyqual dos teus telemóveis é que este faz tocar
- platformapns ou fcm
- tokenum identificador opaco da Apple ou da Google
- updated_at
- nonce
- expires_at
- edge_hashum hash do par, não das duas pessoas
- denied_at
- expires_at
- edge_hashum hash do par, não das duas pessoas
- grant_recorda permissão que está a ser decidida, e as assinaturas reunidas até agora
- waiting_keyque assinatura ainda falta
- requested_byo telemóvel que pediu, para que um telemóvel não possa inundar uma família de perguntas
- originlido em pessoa, ou um adulto a agir pelo seu filho
- delivered_toque telemóveis já a têm
- declaredo nome declarado por quem pergunta, selado para que só a família que ele leu o consiga ler
- created_at
- expires_at
- id
- recipient_ido encaminhamento precisa deste em claro
- recipient_devicepara qual dos telemóveis dela a caixa está selada. Cada telemóvel tem a sua chave, por isso cada um recebe a sua caixa
- sender_idpara que o telemóvel saiba que chave a abre
- sender_devicequal dos telemóveis dele a selou, para que a cópia certa encontre a fechadura certa
- edge_hasho par, em hash, para que isto não possa ser lido como um mapa de quem fala com quem
- sealedtexto cifrado. Não há coluna de texto e nunca haverá
- sent_at
- expires_at
- edge_hasho par, em hash
- revoked_at
- recordo registo assinado, para que um telemóvel que esteve sem ligação possa verificar o corte por si mesmo em vez de acreditar na nossa palavra
- id
- account_idde quem é a lista de telemóveis e de adultos que está a mudar
- kinda entrar, ou a ser retirado
- subject_keyo telemóvel ou o adulto de que se trata
- subject_kindqual dos dois
- agreement_keya segunda chave de que um telemóvel precisa, vazia para o papel
- recorda própria assinatura, guardada palavra por palavra para que um telemóvel a possa verificar em vez de acreditar em nós
- signed_byque chave a assinou
- by_authorityse foi uma folha de recuperação a assinar, que é o que a põe à espera
- issued_ato momento que quem assina afirma, nunca o nosso relógio
- reasonvazio, a não ser que quem assina tenha escrito uma
- proposed_at
- effective_atquando se torna verdade, duas noites depois de ter sido proposta
- contested_at
- contested_byquem se opôs, e a assinatura com que se opôs
- contest_record
- resolved_at
- resolutionaplicada ou cancelada, assim que se resolve
- change_idque alteração à espera
- voter_keyque adulto
- decisiondeixar passar, ou travar
- recorda assinatura dele
- at
- account_idde quem era o telemóvel
- device_keya chave que foi roubada
- revoked_at
- recorda prova assinada, para que um telemóvel a possa verificar sem nos perguntar
- account_ida conta que já não está cá
- retired_at
- recorda prova assinada, feita com a chave da própria conta antes de a chave ser destruída
- account_id
- storeapple, google, ou por conta da casa
- store_refum identificador opaco da loja. É a única coisa que nos deixa fazer-lhe uma pergunta mais tarde
- store_ref_hashuma impressão digital do identificador acima. É o que impede um recibo de cobrir duas contas
- environment
- stateactive, grace, lapsed, lapsed_trial ou disabled
- seatsquantas crianças cobre. Um número, nunca os nomes delas
- expires_at
- acts_at
- updated_at
- device_keyo telemóvel a quem ainda não foi dito
- change_idde que alteração se trata
- whatproposta, contestada ou resolvida
- account_idde quem é a lista de telemóveis que mudou. Quando se avisa um adulto sobre o seu filho, aqui vai o filho
- subject_keyo telemóvel que foi acrescentado ou retirado
- effective_at
- created_at
- expires_at
- delivered_atquando conseguimos dizê-lo, ou vazio porque ainda não conseguimos
- id
- about_keysobre quem é a denúncia. Legível, para que alguém possa agir
- reasonqual das seis coisas aconteceu, tal como o adulto que denuncia a escolheu
- csa
- sealedo que foi escrito, selado no telemóvel que a enviou com uma chave que está em papel com o fundador. Nenhum servidor o consegue ler
- sealed_digestuma impressão digital da parte selada, para que o que for aberto mais tarde seja comprovadamente o que chegou
- received_at
- edge_snapshotquem tinha autorização para chegar a quem, e que adulto o permitiu, tal como estava naquele momento. Isto não pode ser reconstruído depois
- reporter_keyquem a enviou, ou nada de nada quando foi enviada sem nome
- source
- sealed_key
- receipta referência que quem envia fica a guardar. É a única maneira de podermos responder a alguém sobre uma denúncia que não conseguimos abrir
- acknowledged_at
- decided_at
- actioned_at
- escalated_at
- decided_by
- outcome
Colunas que não existem
- nome
- idade
- foto
- texto das mensagens
- conteúdo das chamadas
- histórico de chamadas
- lista de contactos
- localização
- modelo do aparelho
O teu e-mail é verificado uma vez quando te inscreves e selado no mesmo gesto, com uma chave que vive em papel com o fundador e que nunca tocou num servidor. A lei pede-nos que consigamos provar que um adulto concordou. Nós próprios não o conseguiríamos voltar a ler. Os nomes e as fotos são definidos em cada telemóvel e entregues diretamente ao outro telemóvel. Nunca chegam até nós, que é também por isso que podes mudar o nome do avô para “Vô” e nós nunca saberemos. Não conseguiríamos mostrar nada disto a ninguém mesmo que quiséssemos, e também não nos podem obrigar.
Esta secção é gerada a partir do próprio esquema do servidor, em accounts.ts e roster-changes.ts, os dois ficheiros que criam a base de dados. Se alguma vez discordarem, os ficheiros é que estão certos e esta página é que tem um erro.
Contactos
Como é que um contacto é mesmo criado.
O telemóvel de alguém faz um convite de uso único. O outro telemóvel lê-o, de um ecrã na mesma sala ou abrindo um link que esse adulto enviou. Lê-lo começa a apresentação e, no mesmo momento, regista a chave pública do outro telemóvel, para que os dois telemóveis saibam exatamente que chave pertence a que pessoa daí em diante. É essa a parte que torna impossível alguém sentar-se no meio de uma chamada mais tarde, nós incluídos. Nada disto se liga enquanto um adulto do outro lado não disser que sim.
Continua a não ser um contacto. Um adulto responsável tem de assinar o contacto no seu próprio telemóvel, atrás de uma verificação biométrica feita nesse momento. O que ele assina é a coisa toda. Quem, com quem e em que direção. É a assinatura dele que o servidor verifica antes de encaminhar seja o que for. O servidor não guarda nenhuma chave capaz de assinar, por isso não consegue criar um contacto, e quem roubar a base de dados também não.
Quando os dois telemóveis têm o contacto terminado, a linha é apagada e o contacto passa a existir só nos dois aparelhos. Cortá-lo mais tarde escreve uma revogação assinada, que é o único registo guardado indefinidamente. Fica gravada como um hash do par, por isso diz que um contacto acabou sem dizer quem conhecia quem.
Quem mais está envolvido
Três empresas tocam numa chamada. Nenhuma delas a consegue ouvir.
Outras seis empresas tocam no serviço, e estão todas na política de privacidade. Três delas ajudam a fazer tocar uma chamada, e isto é o que cada uma dessas três consegue e não consegue ver.
-
Apple & Google
As notificações push, para que uma chamada faça tocar um telemóvel adormecido. Inevitáveis nas duas plataformas. Levam um identificador opaco e mais nada. Sem nome, sem número, sem conteúdo.
-
Cloudflare
Mais ou menos uma chamada em cada seis não consegue ligar os dois telemóveis diretamente, no Wi-Fi de um hotel ou em algumas redes móveis, e é desviada por um retransmissor. O retransmissor reencaminha pacotes cifrados que não consegue abrir, mas vê que dois identificadores anónimos estiveram ligados, quando, durante quanto tempo e a partir de que endereços. São metadados que não guardamos, na mão de outra pessoa.
-
Nós
A tabela acima. Um servidor pequeno nos Países Baixos que apresenta dois telemóveis um ao outro e depois sai da frente.