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

versão 1 B chave do remetente 32 B chave efêmera 32 B slots 48 B cada nonce 24 B texto cifrado + tag carga útil
Estrutura do envelope (versão 2)

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:

Ler a especificação do protocolo