Uma chave depois do #: como os links compartilhados deixam o servidor de fora
Uma conversa compartilhada fica armazenada no nosso servidor, e nós não conseguimos abri-la. Como isso funciona, onde entra a senha e o que um link não consegue proteger.
Compartilhar normalmente significa entregar suas palavras a quem quer que armazene o link. Os links compartilhados do Undergrove são construídos para que o servidor guarde uma cópia que não consegue ler. O truque é antigo e simples, e tem limites que vale a pena conhecer.
A parte depois do #
Quando você compartilha uma conversa, seu navegador gera uma nova chave aleatória, criptografa uma cópia com AES-GCM e envia só o texto cifrado. A chave vai no link, depois do #. Os navegadores não enviam essa parte de um endereço ao servidor quando carregam uma página, então a chave chega à pessoa para quem você manda o link, e nunca a nós.
Guardamos o texto cifrado por 1, 7 ou 30 dias. Vemos o id dele, o tamanho e quando foi criado e aberto. A página que o abre busca o texto cifrado, lê a chave na barra de endereço e o descriptografa na aba.
Também uma senha
Um link também pode exigir uma senha. Nesse caso, a chave que abre a cópia vem das duas coisas: a senha passa por PBKDF2-SHA256 com 600.000 iterações e é combinada com a chave do link por meio de HKDF. Nem o link nem a senha abrem a cópia sozinhos, e a senha é conferida na aba contra a cópia que já está lá, então nunca a vemos.
Uso único e data de abertura
Um link pode abrir uma única vez. O servidor exclui a cópia assim que ela é lida pela primeira vez e guarda só o horário em que foi aberta, para que o link possa dizer que já foi usado, e não que nunca existiu. Antes de buscar a cópia, a página pede que você confirme, para que a prévia de link de um app de chat não o gaste.
Um link também pode abrir só a partir de uma data. Até lá, o servidor se recusa a entregar o texto cifrado. Isso é o servidor cumprindo a palavra, não criptografia: a cópia já está armazenada, e a chave dela já está no link.
O que um link não consegue proteger
- Qualquer pessoa com o link inteiro pode ler a cópia. Trate-o como a própria conversa.
- Apps de chat e de e-mail armazenam as mensagens que você envia, links incluídos, com # e tudo.
- A página que descriptografa a cópia é código que nós servimos. /verify compara esse código com o manifesto publicado da build.
A página de privacidade lista o que é armazenado para cada link, e o modelo de ameaças, quem poderia ver o quê.
Mais notas de campo
O que uma atestação prova, e o que não prova
Seu navegador verifica o enclave da Tinfoil antes de enviar uma palavra sequer. O que essa verificação estabelece, onde ela para e o que ainda não pode ser verificado em um navegador.
O que um retransmissor que não consegue ler ainda vê
Nosso retransmissor repassa texto cifrado que não consegue abrir. Isso não é o mesmo que não ver nada. Um inventário do que ele vê, e por quê.