Como funciona
Nenhuma invenção - apenas primitivas bem estudadas: BIP-39, X25519, HKDF-SHA256, XChaCha20-Poly1305. Este é o caminho completo, em linguagem simples.
12 palavras são toda a identidade
Um perfil começa com uma frase-semente BIP-39 - 12 palavras em inglês que carregam 128 bits de entropia. As palavras são expandidas em uma semente, e o HKDF deriva dela o par de chaves de cifragem. As mesmas palavras em qualquer dispositivo restauram as mesmas chaves: não existe uma “conta” a recuperar, apenas a frase.
O endereço é a chave pública
Sua chave pública X25519, codificada em bech32 com o prefixo sk, é o seu endereço - cerca de 60 caracteres começando com sk1. Compartilhe-o como texto ou código QR. Não há diretório onde se registrar nem servidor que associe nomes a pessoas.
sk1qsva3e52awafjvedj5ethvc5hs9j4t0ml26m83kn6kycsh9m46rejzha
A mensagem vira um envelope
O texto é cifrado uma única vez com uma chave de mensagem aleatória usando XChaCha20-Poly1305. Depois essa chave é embrulhada em um slot para cada destinatário - e sempre em mais um slot para você. Por isso as suas próprias mensagens enviadas continuam legíveis: decifrar o histórico é a mesma operação que ler as mensagens recebidas.
Os slots são anônimos e embaralhados: o envelope não carrega endereços, então um observador externo vê apenas tamanhos. A chave de cada slot é acordada por dois handshakes X25519 - um com uma chave efêmera gerada para este envelope (forward secrecy) e outro com a chave permanente do remetente (autenticação do remetente).
O envelope viaja como texto simples
O envelope binário é embrulhado em base64 num bloco blindado. Ele é autossuficiente: cole-o em um mensageiro, um e-mail, um post de fórum ou um arquivo - qualquer canal que entregue texto entrega mensagens do Secret Keeper.
-----BEGIN SECRET MESSAGE V1----- AlXhZ0Qq7bfPj…base64…M42kLBi6p4Jro -----END SECRET MESSAGE V1-----
Arquivos: o contêiner .skf
Os arquivos usam o mesmo esquema de slots, mas o corpo é cifrado em fragmentos, de modo que um vídeo de vários gigabytes passa em streaming sem ser carregado na memória. Os nonces dos fragmentos seguem a construção STREAM (como em age e Tink): um contador detecta reordenação e duplicação, e um byte final detecta truncamento. Até o nome do arquivo fica dentro do cabeçalho cifrado.
Backups
Um backup é um arquivo .skb: configurações, contatos e histórico em um único contêiner criptografado para você mesmo - o mesmo esquema dos arquivos criptografados, então de fora nada pode ser lido, nem mesmo os endereços dos contatos. A frase-semente nunca está no backup - o perfil é restaurado pelas 12 palavras, e o backup restaura tudo ao redor delas.
O que isso garante
- Forward secrecy
- uma chave efêmera nova para cada envelope
- O remetente consegue ler
- um slot seu em cada envelope que você envia
- Sem estado
- sem sessões par a par, nada armazenado em servidores
- Sem IDs de usuário
- o endereço é a própria chave pública
- Duas implementações
- Dart no aplicativo, @noble na extensão - verificadas entre si por vetores de teste compartilhados
Quer verificar?
A especificação completa, byte a byte, é pública - o mesmo documento contra o qual o aplicativo e a extensão são testados: