Como funciona o Clavenzo
Em traços gerais, em linguagem simples e sem deixar de fora nada de importante. Em versão curta: o seu telemóvel ou computador cria uma chave, a chave é a sua morada, e tudo o que passa entre dois dispositivos vai cifrado com chaves que só esses dois chegam a ter.
A sua identidade é uma chave, não uma conta
Quase todas as aplicações de mensagens começam por pedir um número de telefone. Esse número é emitido por uma operadora, está ligado a um nome legal, pode ser transferido por quem consiga convencer um empregado de loja, e é consultável por quem o tiver. É um mau alicerce para uma conversa privada.
O Clavenzo começa de outra maneira. Da primeira vez que o abre, a aplicação gera um par de chaves criptográficas no dispositivo. A metade pública passa a ser a sua morada. A privada fica no dispositivo. Nunca é copiada para uma nuvem e nunca é detida por nós. Só sai do dispositivo se a exportar você mesmo, selada com um código de uso único.
A sua morada é mostrada de duas formas: um código de 16 caracteres que pode ditar ou colar, e um código QR que alguém pode ler. Há ainda um código mais curto usado apenas para confirmar que está a falar com a pessoa certa: curto demais para adicionar alguém, longo o suficiente para comparar em voz alta.
O que acontece quando faz uma chamada
Dois telemóveis têm de se encontrar e depois acordar uma chave. O Clavenzo faz a segunda parte de um modo que torna a primeira desinteressante para quem estiver a escutar.
- Encontrarem-se. Se ligar a alguém que aparece em Por perto na mesma rede Wi-Fi, os telemóveis ligam-se diretamente e não há servidor nenhum envolvido. Caso contrário, um pequeno serviço de encontro entrega uma oferta selada e os dois telemóveis tentam construir um caminho direto entre si. Para isso, cada telemóvel indica ao outro os seus endereços de rede, por isso a aplicação da outra pessoa fica a saber o seu endereço IP.
- Combinar uma chave. Os dois dispositivos fazem uma troca X25519 efémera e assinada e, um instante depois de ligar, acrescentam por cima uma troca de chaves pós-quântica, ML-KEM-768. «Efémera» é a palavra importante: as chaves são criadas para esta única chamada e destruídas quando ela acaba.
- Falar. A voz é codificada em 33 bytes a cada 20 milissegundos, e cada um desses pacotes é cifrado e autenticado separadamente. Para quem observe a rede, o conteúdo parece ruído aleatório, embora o ritmo dos pacotes ainda possa mostrar quando alguém está a falar.
- Verificar. Os dois telemóveis derivam quatro palavras da chave realmente acordada. Leiam-nas em voz alta. Se coincidirem nos dois ecrãs, não há um terceiro pelo meio.
Esse último passo é o que as pessoas saltam e o que mais importa. A cifra garante que quem tiver a outra chave o consegue ler. Não consegue, por si só, dizer-lhe quem é. As quatro palavras são como o descobre.
Porque uma gravação da chamada de hoje continua ilegível
Há um ataque comum e realista que consiste em ter paciência: gravar agora o tráfego cifrado, obter a chave mais tarde (por ordem judicial, por roubo, entrando num dispositivo anos depois) e decifrar a gravação com calma.
As chaves efémeras derrotam-no. A chave que realmente cifrou a sua chamada existiu o tempo da chamada, em dois dispositivos, e foi destruída no fim. A sua chave de identidade de longa duração apenas assina a troca; não cifra um único segundo de áudio. Comprometê-la amanhã permite fazer-se passar por si amanhã. Não permite abrir o que foi gravado ontem.
Esta propriedade chama-se sigilo futuro, e é a coisa mais valiosa que uma chamada cifrada pode ter.
Cada chamada volta também a gerar as chaves com ML-KEM-768, um algoritmo pós-quântico, uma fração de segundo depois de ligar, quando as duas aplicações o suportam. Responde ao mesmo atacante paciente com uma ferramenta melhor: tráfego gravado agora e aberto mais tarde por um computador quântico. Com as mensagens e os ficheiros, por agora, é diferente. São selados com RSA e ML-KEM-768 em conjunto, mas hoje a chave ML-KEM é derivada da chave RSA, por isso ainda não lhes chamamos pós-quânticos. E uma mensagem que espera no servidor por um telemóvel desligado não tem sigilo futuro: quem a tiver gravado e mais tarde obtiver a chave de identidade do destinatário pode abri-la.
O que o servidor faz e o que não consegue fazer
Há um trabalho que uma aplicação ponto a ponto genuinamente não consegue fazer sozinha: acordar um telemóvel com a aplicação fechada. Para isso existe um serviço de encontro, construído para saber o menos possível sem deixar de o fazer.
- Nunca vê o conteúdo. As ofertas e as mensagens fora de linha são seladas com a chave do destinatário antes de saírem do seu telemóvel. O serviço guarda bytes que não consegue abrir.
- Não sabe o seu nome. O seu diretório guarda a morada, as chaves públicas e a plataforma de cada dispositivo e, no caso de um telemóvel, o token de notificações. Não tem nomes, nem números de telefone, nem endereços de e-mail, porque a aplicação nunca os pede. Quem tiver uma morada pode perguntar se ela está registada.
- As notificações não levam remetente nem conteúdo. O aviso que acorda o seu telemóvel diz apenas se é uma chamada ou uma mensagem. No iPhone, a notificação de uma mensagem diz «New message» e «Tap to read». A Apple e a Google veem que algo foi enviado, e quando, mas não o quê nem de quem.
- Esquece depressa. Um convite de chamada vive 60 segundos. Uma mensagem selada fora de linha, no máximo 72 horas. Um registo de dispositivo expira ao fim de 30 dias sem renovação.
- Vê quem liga a quem, enquanto dura a espera. Um convite de chamada ou uma mensagem offline tem de nomear a chave a que se destina e a chave de onde vem, por isso o servidor vê as duas passar. Não guarda nenhum registo do par depois de o convite ou a mensagem desaparecer: um convite é esquecido ao fim de 60 segundos e uma mensagem ao fim de 72 horas, no máximo. Esconder também o remetente (remetente selado) está na nossa lista. Os nossos servidores estão atrás da Cloudflare, que vê os mesmos dados, e nunca o conteúdo.
Quando uma chamada não pode ir direta (normalmente porque as duas redes o recusam, o que acontece em algumas operadoras móveis) um retransmissor reencaminha os pacotes cifrados: o nosso próprio retransmissor por UDP, depois por TCP, e depois os retransmissores da Cloudflare. O retransmissor só passa os dados adiante. Não tem chave e não a consegue obter. Vê, isso sim, os endereços IP dos dois dispositivos. Hoje não há nenhuma definição que envie todas as chamadas por um retransmissor, e em todas as chamadas, retransmitidas ou não, cada dispositivo fica a saber o endereço IP do outro.
Chamadas na mesma Wi-Fi
Dois dispositivos na mesma rede Wi-Fi, ou ligados ao mesmo ponto de acesso, conseguem encontrar-se e manter uma chamada cifrada completa sem ligação à Internet e sem servidor. Hoje isso funciona no Android depois de o telemóvel que recebe a chamada ter tocado em Pronto para receber, no iPhone enquanto o Clavenzo estiver aberto nele, e num computador sempre que o Clavenzo estiver a funcionar; o iPhone pode pedir autorização para usar a rede local. As mensagens e os ficheiros viajam da mesma forma, cifrados, enquanto a aplicação estiver aberta nos dois dispositivos.
Não é um modo de recurso com menos segurança. É a mesma cifra e as mesmas palavras de segurança, com o passo do encontro substituído por uma deteção local. É útil num avião, num edifício sem rede, num local com rede privada, e onde quer que a Internet não seja fiável nem bem-vinda.
Quando as coisas se partem
O Clavenzo foi desenhado à volta de uma pergunta difícil: o que continua a funcionar quando tudo corre mal? Uma tempestade deita abaixo um centro de dados. Um país estrangula as ligações. Um fornecedor desaparece. As antenas falham e só resta uma rede local. Cada um destes casos tem resposta aqui em baixo.
- Sem internet nenhuma. Os telefones na mesma Wi-Fi ou hotspot podem ligar-se diretamente, dentro dos limites descritos acima. Sem servidor, sem nada fora da sala.
- Os servidores são pequenos, e há vários. Só apresentam dois telefones e guardam mensagens seladas. O áudio e o vídeo nunca passam por eles, a não ser que seja preciso um retransmissor, por isso todo o serviço corre num punhado de máquinas pequenas de fornecedores diferentes em sítios diferentes.
- Nenhum deles é indispensável. O seu telefone regista-se em todos os servidores e recolhe de todos. Se um cair, os outros continuam, e uma chamada é atendida através do servidor que a entregou.
- A lista de servidores é assinada. Os telefones vão buscá-la aos próprios servidores e verificam-na com uma chave que nunca toca num servidor. Novos servidores podem juntar-se sem atualizar a aplicação, e uma lista antiga nunca pode ser reutilizada para mandar os telefones para onde não devem ir.
- Sem DNS, sem problema. A lista inclui endereços de rede diretos com certificados fixados, por isso os telefones conseguem chegar a um servidor quando um servidor de nomes está em baixo ou mente, ou quando falha uma rede de distribuição de conteúdos, sem confiar em nenhuma autoridade de certificação.
- Dois retransmissores, uma escada. Quando duas redes recusam um caminho direto, um retransmissor leva a chamada cifrada: o nosso próprio retransmissor por UDP, depois por TCP, e depois os retransmissores da Cloudflare. Se algum falhar, perde-se um degrau, não a chamada.
- Ligações fracas e instáveis. A voz precisa de 13,2 kbit/s. O buffer de jitter mede a rede e adapta-se, os pacotes perdidos são disfarçados em vez de estalarem, e os ficheiros grandes pausam e retomam sozinhos.
- Redes que interferem. Há proxies SOCKS5 e HTTP CONNECT incorporados, para redes que obrigam a usar um ou em que o resolvedor local está bloqueado ou adulterado.
Mensagens, fotos, ficheiros e mensagens de voz
As mensagens usam a mesma cifra. O texto, as fotos, os ficheiros e as mensagens de voz são cifrados para o destinatário, e a conversa é guardada no armazenamento privado da aplicação no seu telemóvel: protegida pela cifra e pelo bloqueio de ecrã do próprio telefone, e excluída das cópias de segurança da Google e do iCloud. Num computador, as conversas ficam guardadas na pasta própria da aplicação, dentro da sua conta de utilizador.
Uma mensagem para alguém com o telemóvel desligado é selada com a chave dessa pessoa e deixada no serviço de encontro, que a guarda no máximo 72 horas sem conseguir ler um único byte.
Os ficheiros com mais de 1 MB são uma exceção deliberada: viajam apenas de telemóvel para telemóvel, nunca por um servidor. Se ainda não houver um caminho direto, a transferência espera e retoma sozinha, em vez de encaminhar discretamente o seu ficheiro grande pela máquina de outra pessoa.
Há também mensagens temporárias, por conversa, a contar desde que as envia e desde que as leem; confirmações de leitura que pode desligar nos dois sentidos ao mesmo tempo; e um estado de pedido de mensagem, para que alguém que não esteja nos seus contactos não consiga saber se a mensagem chegou ou foi lida até o aceitar.
O que pode ligar
- Bloqueio da aplicação: o bloqueio de ecrã do telemóvel (PIN, padrão, impressão digital ou rosto) ao voltar ao Clavenzo, e o Windows Hello no Windows. As chamadas continuam a tocar; as notificações deixam de mostrar o texto das mensagens. Ainda não está disponível no Linux.
- Segurança de tela: no Android, bloqueia capturas e gravações de ecrã da aplicação e esconde o conteúdo na lista de aplicações recentes. No iPhone, onde nenhuma aplicação consegue bloquear uma captura de ecrã, esconde a aplicação no seletor de aplicações. No Windows, mantém a janela fora das capturas de ecrã, das gravações de ecrã e da partilha de ecrã; no Linux, não pode ser imposto. Os códigos de cópia e de transferência estão sempre protegidos, diga o que disser esta definição.
- Teclado incógnito (só Android): pede ao teclado que não aprenda com o que escreve. É apenas um pedido, e alguns teclados ignoram-no, e por isso a aplicação o diz. O iPhone não dá às aplicações forma de fazer esse pedido.
- Suporte de proxy: SOCKS5 ou HTTP CONNECT, para redes que o exigem ou onde o resolvedor local está bloqueado ou mente.
- Silenciar chamadas de pessoas não guardadas: não tocam. Continuam a aparecer como chamadas não atendidas que pode devolver.
Mudar de telemóvel
Duas exportações distintas, deliberadamente separadas, porque transportam coisas diferentes.
Uma cópia de segurança cifrada guarda as suas conversas, fotos, histórico de chamadas e contactos num único ficheiro que fica onde quiser. Abre-se apenas com um código mostrado uma vez na exportação e guardado em lado nenhum. Importar acrescenta o que falta e nunca substitui o que já lá está.
Uma exportação de identidade move a chave que é a sua morada. Vai selada com o seu próprio código de transferência de uso único, fica por trás do bloqueio de ecrã do telemóvel e é a única forma de essa chave sair de um dispositivo. Importá-la faz o telemóvel novo responder como essa identidade.
Onde este desenho pára
Todo o desenho tem limites. Estes são os nossos.
- Quem fala com quem. Um convite de chamada ou uma mensagem offline nomeia as duas moradas entre as quais passa, por isso o servidor, e a Cloudflare à frente dele, veem esse par enquanto está guardado. O aperto de mão inicial de uma chamada direta também leva as duas chaves de identidade sem cifra, por isso quem observa essa rede consegue saber que duas identidades estão a falar. Nenhuma das duas revela uma palavra do que se diz. Ambas são metadados, e ambas estão na lista para corrigir.
- Tempos e metadados. O servidor vê necessariamente quando o seu dispositivo se apresenta. O ritmo dos pacotes durante uma chamada pode revelar quando alguém fala, ainda que nada do que é dito escape à cifra.
- O seu endereço IP. Em todas as chamadas, mesmo numa que acabe por passar por um retransmissor, a aplicação da outra pessoa fica a saber o seu endereço IP, porque os dois dispositivos trocam endereços de rede para procurar um caminho direto. Pode mostrar aproximadamente onde está. Um retransmissor também vê os dois endereços IP.
- O seu dispositivo é o ponto fraco. Quem tiver o seu telemóvel desbloqueado tem as suas mensagens. Um programa malicioso no telemóvel lê o que escreve antes de chegar a ser cifrado. Isto é verdade para todas as aplicações de mensagens alguma vez escritas.
- Não foi auditado de forma independente. É feito com cuidado e testado a fundo. Não é a mesma coisa e não vamos fingir que é.
Se o seu modelo de ameaça incluir um adversário capaz de vigiar uma rede inteira, perceba estes limites, use o suporte de proxy e não aposte numa única ferramenta (esta incluída) nada que não possa dar-se ao luxo de perder.