Notas de campo

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

  1. 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.

  2. 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ê.