Novidades · Segurança no Blackbear
O que não conseguimos ler
O Blackbear é local-first. Todos os recursos funcionam no seu dispositivo e, por padrão, seus dados vivem só ali, sem nenhum servidor no meio.
Quando você ativa a sincronização na nuvem, nossos servidores passam a levar seus dados entre os seus dispositivos e as suas pessoas. Esta série explica o que isso significa para a sua privacidade. A parte 1 trata da criptografia: o que sai do seu dispositivo e por que não conseguimos ler. A parte 2 é um inventário honesto dos metadados que nossos servidores guardam, sim. A parte 3 trata do compartilhamento e da colaboração.
Tudo o que vem a seguir descreve código que já está no ar, não intenções. Quando citamos um algoritmo ou um número, é o que está rodando em produção hoje.
A criptografia acontece no seu dispositivo
Cada mudança que você sincroniza é criptografada antes de tocar a rede. Notas, documentos, tarefas, eventos, entradas do diário, planilhas, canvas, áudio, histórico de versões. Cada um é lacrado com XChaCha20-Poly1305, uma cifra autenticada, usando uma chave que nunca sai do seu dispositivo sem proteção. Nossos servidores recebem texto cifrado e guardam texto cifrado.
Imagens e arquivos de áudio recebem o mesmo tratamento: criptografados no seu dispositivo e enviados como blocos opacos.
O código que faz tudo isso é uma única implementação em Rust construída sobre o ecossistema RustCrypto e compilada para WebAssembly. O app e a CLI do Blackbear usam o mesmo código, byte por byte, e o testamos com casos de teste compartilhados entre linguagens para que nenhuma segunda implementação possa se desviar sem ninguém perceber.
O que isso protege, e o que não protege
A criptografia é uma ferramenta específica, não um campo de força. Antes dos detalhes, os limites.
Este projeto protege você de:
- Uma invasão passiva dos nossos servidores ou do nosso banco de dados, com roubo dos dados armazenados. O que vaza é texto cifrado e chaves embrulhadas.
- Nós. Os nossos sistemas em produção nunca recebem as suas chaves de conteúdo nem o texto em claro, então uma ordem judicial pedindo o seu conteúdo obtém o que realmente temos: metadados (parte 2) e blocos lacrados.
Ele não protege você de:
- Um dispositivo comprometido, roubado ou desbloqueado. O seu dispositivo guarda as suas chaves; a segurança dele é o chão em que todo o resto se apoia.
- Qualquer pessoa que tenha a sua frase secreta ou as suas doze palavras de recuperação.
- O que os destinatários autorizados fazem com o que você compartilha. Compartilhar é confiar em pessoas, não só em matemática.
- Os metadados do tráfego: quem, quando, quanto. Esse é o assunto inteiro da parte 2.
- O próprio app. Na web, o app chega dos nossos servidores a cada carregamento; no desktop, por versões assinadas. Nenhum esquema de criptografia sobrevive a um app malicioso, seja quem for que o distribua.
- Os momentos em que você escolhe enviar dados sem criptografia: pedir ao Pax para usar um modelo na nuvem, conectar uma agenda externa, exportar arquivos, mandar um convite por e-mail. Esses dados vão, de propósito, para quem você escolheu, sob as regras dessa outra parte, não sob a nossa criptografia.
A hierarquia de chaves
A sua frase secreta nunca sai do seu dispositivo. Tudo nasce dela:
- A sua frase secreta passa pelo Argon2id, uma função de derivação de chaves que exige muita memória, ajustada para 64 MiB de memória, três passagens e quatro faixas. Dali sai a sua Chave da Conta.
- A sua Chave da Conta embrulha a sua Chave do Cofre: uma chave aleatória de 256 bits gerada no seu dispositivo. É a Chave do Cofre que de fato criptografa os seus dados.
- Nossos servidores guardam a Chave do Cofre embrulhada, o salt e os parâmetros de ajuste. A chave embrulhada é, ela mesma, texto cifrado. Sem a sua frase secreta, é ruído.
O servidor guarda só as cópias embrulhadas: texto cifrado protegendo texto cifrado.
Por que esse desvio? Ele permite trocar a frase secreta sem criptografar de novo a sua vida inteira, e permite que a recuperação exista sem enfraquecer a porta da frente.
Um alerta que merece ficar registrado: o Argon2id torna caro adivinhar; ele não consegue tornar forte uma frase secreta fraca. A Chave do Cofre embrulhada é exatamente tão forte quanto a frase secreta que a embrulha. Escolha uma longa.
A recuperação são doze palavras
Quando você configura a sincronização, o Blackbear entrega uma frase de recuperação: doze palavras (BIP39) que codificam 128 bits de entropia. Delas sai uma chave independente que embrulha a sua Chave do Cofre uma segunda vez.
Perdeu a frase secreta? As doze palavras trazem você de volta. Perdeu as duas? Os seus dados sincronizados se foram. Não conseguimos redefini-los, e nenhum chamado de suporte vai nos convencer a fazer isso, porque não existe nada do nosso lado para redefinir. Isso não é uma falha do nosso suporte. É o projeto funcionando.
Adicionar um dispositivo
Num dispositivo novo, você digita a sua frase secreta. Ela gera a sua Chave da Conta localmente e desembrulha a Chave do Cofre a partir da cópia embrulhada que o nosso servidor guarda. O servidor nunca vê a frase secreta, e nunca vê o resultado.
Um dispositivo que você já usa e que está desbloqueado também pode passar a chave diretamente. Ele lacra a Chave do Cofre para a chave pública X25519 do dispositivo novo e a deixa num espaço de transferência que se autodestrói depois de cinco minutos, tendo sido usado ou não. Um limite honesto aqui: o seu dispositivo atual fica sabendo a chave pública do novo pela sua conta conectada, então esse caminho assistido confia no nosso servidor para repassar a chave certa do dispositivo que você escolheu. O caminho pela frase secreta não exige essa confiança.
Como esse vocabulário é exatamente o que um golpista tomaria emprestado, uma regra que vale deixar por escrito: nunca vamos pedir a sua frase secreta nem as suas palavras de recuperação, e nunca vamos pedir que você aprove uma transferência de dispositivo. Esses pedidos só aparecem dentro de um app que você mesmo abriu. Qualquer outra pessoa pedindo isso é um ataque.
Mensagens
As mensagens usam chaves próprias, separadas da sincronização. Cada conta tem uma identidade de mensagens X25519, e cada mensagem deriva uma chave única a partir de um salt novo, só dela, via HKDF-SHA256. As mensagens viajam como envelopes lacrados. O servidor as repassa; ele não consegue abri-las. A parte 2 mostra o que o lado de fora do envelope revela.
Uma observação de projeto, dita com todas as letras: chaves únicas por mensagem não são o modelo de catraca rotativa que alguns mensageiros usam. Se a chave de mensagens de longo prazo de um dispositivo fosse comprometida um dia, as mensagens lacradas para ela estariam em risco. Chaves por mensagem limitam o estrago; elas não são sigilo futuro (forward secrecy), e preferimos que você saiba a diferença.
Histórico sem impressões digitais do conteúdo
O histórico de versões sincroniza como cópias criptografadas, identificadas por IDs que só valem dentro do seu cofre. Se você e um desconhecido salvarem um arquivo idêntico, o servidor vê dois IDs sem relação entre si: conteúdos idênticos não podem ser cruzados entre contas. O tamanho e o momento continuam visíveis, como em todo tráfego de sincronização. Isso é metadado, e esse assunto é da parte 2.
Provar sem revelar
As operações destrutivas na conta exigem uma prova do cofre: uma assinatura de uma chave Ed25519 derivada da sua Chave do Cofre. Você prova que tem o cofre sem que o cofre jamais viaje. E quando as chaves terminam o trabalho na memória, elas são zeradas.
Nada disso é exótico. XChaCha20-Poly1305, Argon2id, X25519, Ed25519, HKDF-SHA256: primitivas padrão, sem graça e muito revisadas. A parte interessante é a disciplina de aplicá-las em todo lugar, e de dizer em voz alta o que elas não cobrem. Essa disciplina é o assunto do resto desta série.
Para saber mais
- Local-first software — o ensaio da Ink & Switch por trás da filosofia
- RFC 9106 — a especificação do Argon2
- XChaCha20-Poly1305 — o rascunho de especificação da IETF
- RFC 7748 — as curvas elípticas por trás do X25519
- RFC 8032 — as assinaturas Ed25519
- The Password Hashing Competition — onde o Argon2 venceu
Segurança no Blackbear
- 1. O que não conseguimos ler (você está aqui)
- 2. O que nossos servidores veem
- 3. Como o compartilhamento continua lacrado