Fase 4: Recuperação de Chaves por Herdeiros com Shamir's Secret Sharing
+2026-02-15
+O que acontece com suas memórias quando você morre? Até agora, Tesseras +conseguia preservar conteúdo ao longo de milênios — mas as chaves privadas e +seladas morriam com o dono. A Fase 4 continua com uma solução: Shamir's Secret +Sharing, um esquema criptográfico que permite dividir sua identidade em +fragmentos e distribuí-los para as pessoas em quem você mais confia.
+A matemática é elegante: você escolhe um limiar T e um total N. Qualquer T +fragmentos reconstroem o segredo completo; T-1 fragmentos não revelam +absolutamente nada. Isso não é "quase nada" — é informação-teoricamente seguro. +Um atacante com um fragmento a menos que o limiar tem exatamente zero bits de +informação sobre o segredo, independentemente do poder computacional que tenha.
+O que foi construído
+Aritmética de corpo finito GF(256) (tesseras-crypto/src/shamir/gf256.rs) —
+Shamir's Secret Sharing requer aritmética em um corpo finito. Implementamos
+GF(256) usando o mesmo polinômio irredutível do AES (x^8 + x^4 + x^3 + x + 1),
+com tabelas de lookup para logaritmo e exponenciação computadas em tempo de
+compilação. Todas as operações são em tempo constante via consulta a tabelas —
+sem ramificações baseadas em dados secretos. O módulo inclui o método de Horner
+para avaliação de polinômios e interpolação de Lagrange em x=0 para recuperação
+do segredo. 233 linhas, exaustivamente testado: todos os 256 elementos para
+propriedades de identidade/inverso, comutatividade e associatividade.
ShamirSplitter (tesseras-crypto/src/shamir/mod.rs) — A API principal de
+split/reconstruct. split() recebe uma fatia de bytes do segredo, uma
+configuração (limiar T, total N) e a chave pública Ed25519 do dono. Para cada
+byte do segredo, constrói um polinômio aleatório de grau T-1 sobre GF(256) com o
+byte do segredo como termo constante, e então o avalia em N pontos distintos.
+reconstruct() recebe T ou mais fragmentos e recupera o segredo via
+interpolação de Lagrange. Ambas as operações incluem validação extensiva:
+limites do limiar, consistência de sessão, correspondência de impressão digital
+do dono e verificação de checksum BLAKE3.
Formato HeirShare — Cada fragmento é um artefato autocontido e serializável +com:
+-
+
- Versão do formato (v1) para compatibilidade futura +
- Índice do fragmento (1..N) e metadados de limiar/total +
- ID de sessão (8 bytes aleatórios) — impede mistura de fragmentos de sessões +diferentes +
- Impressão digital do dono (primeiros 8 bytes do hash BLAKE3 da chave pública +Ed25519) +
- Dados do fragmento (os y-values de Shamir, mesmo comprimento do segredo) +
- Checksum BLAKE3 sobre todos os campos anteriores +
Os fragmentos são serializados em dois formatos: MessagePack (binário +compacto, para uso programático) e texto base64 (legível por humanos, para +impressão e armazenamento físico). O formato texto inclui um cabeçalho com +metadados e delimitadores:
+--- TESSERAS HEIR SHARE ---
+Format: v1
+Owner: a1b2c3d4e5f6a7b8 (fingerprint)
+Share: 1 of 3 (threshold: 2)
+Session: 9f8e7d6c5b4a3210
+Created: 2026-02-15
+
+<dados MessagePack codificados em base64>
+--- END HEIR SHARE ---
+
+Este formato é projetado para ser impresso em papel, armazenado em um cofre +bancário ou gravado em metal. O cabeçalho é informacional — apenas o payload +base64 é analisado durante a reconstrução.
+Integração com CLI (tesseras-cli/src/commands/heir.rs) — Três novos
+subcomandos:
-
+
tes heir create— divide sua identidade Ed25519 em fragmentos de herdeiros. +Solicita confirmação (sua identidade completa está em jogo), gera arquivos +.bine.txtpara cada fragmento e escreveheir_meta.jsonno diretório de +identidade.
+tes heir reconstruct— carrega arquivos de fragmentos (detecta +automaticamente formato binário vs texto), valida consistência, reconstrói o +segredo, deriva o par de chaves Ed25519 e opcionalmente o instala em +~/.tesseras/identity/(com backup automático da identidade existente).
+tes heir info— exibe metadados do fragmento e verifica o checksum sem expor +nenhum material secreto.
+
Formato do blob secreto — As chaves de identidade são serializadas em um +blob versionado antes da divisão: um byte de versão (0x01), um byte de flags +(0x00 para somente Ed25519), seguido da chave secreta Ed25519 de 32 bytes. Isso +deixa espaço para expansão futura quando as chaves privadas X25519 e ML-KEM-768 +forem integradas ao sistema de fragmentos de herdeiros.
+Testes — 20 testes unitários para ShamirSplitter (roundtrip, todas as +combinações de fragmentos, fragmentos insuficientes, dono errado, sessão errada, +limite threshold-1, segredos grandes até o tamanho de chave ML-KEM-768). 7 +testes unitários para aritmética GF(256) (propriedades de campo exaustivas). 3 +testes baseados em propriedades com proptest (segredos arbitrários até 5000 +bytes, configurações T-de-N arbitrárias, verificação de segurança +informação-teórica). Testes de roundtrip de serialização para ambos os formatos +MessagePack e texto base64. 2 testes de integração cobrindo o ciclo de vida +completo de herdeiros: gerar identidade, dividir em fragmentos, serializar, +desserializar, reconstruir, verificar par de chaves e assinar/verificar com +chaves reconstruídas.
+Decisões de arquitetura
+-
+
- GF(256) ao invés de GF(primo): usamos GF(256) ao invés de um corpo primo +porque ele mapeia naturalmente para bytes — cada elemento é um único byte, +cada fragmento tem o mesmo comprimento do segredo. Sem aritmética de inteiros +grandes, sem redução modular, sem padding. Esta é a mesma abordagem usada pela +maioria das implementações reais de Shamir, incluindo SSSS e Hashicorp Vault. +
- Tabelas de lookup em tempo de compilação: as tabelas LOG e EXP para
+GF(256) são computadas em tempo de compilação usando
const fn. Isso +significa zero custo de inicialização em tempo de execução e operações em +tempo constante via consulta a tabelas ao invés de loops.
+ - ID de sessão previne mistura entre sessões: cada chamada a
split()gera +um novo ID de sessão aleatório. Se um herdeiro acidentalmente usar fragmentos +de duas sessões diferentes de divisão (por exemplo, antes e depois de uma +rotação de chaves), a reconstrução falha de forma limpa com um erro de +validação ao invés de produzir dados corrompidos.
+ - Checksums BLAKE3 detectam corrupção: cada fragmento inclui um checksum +BLAKE3 sobre seu conteúdo. Isso captura degradação de bits, erros de +transmissão e truncamento acidental antes de qualquer tentativa de +reconstrução. Um fragmento impresso em papel e escaneado via OCR vai falhar no +checksum se um único caractere estiver errado. +
- Impressão digital do dono para identificação: os fragmentos incluem os +primeiros 8 bytes de BLAKE3(chave pública Ed25519) como impressão digital. +Isso permite aos herdeiros verificar a qual identidade um fragmento pertence +sem revelar a chave pública completa. Durante a reconstrução, a impressão +digital é verificada contra a chave recuperada. +
- Formato duplo para resiliência: ambos os formatos binário (MessagePack) e +texto (base64) são gerados porque mídias físicas têm modos de falha diferentes +de armazenamento digital. Um pendrive pode falhar; papel sobrevive. Um QR code +pode ficar ilegível; texto base64 pode ser digitado manualmente. +
- Versionamento do blob: o segredo é envolvido em um blob versionado +(versão + flags + material de chave) para que versões futuras possam incluir +chaves adicionais (X25519, ML-KEM-768) sem quebrar compatibilidade com +fragmentos existentes. +
O que vem a seguir
+-
+
- Fase 4 continuada: Resiliência e Escala — NAT traversal avançado +(STUN/TURN), ajuste de performance (pool de conexões, cache de fragmentos, +SQLite WAL), auditorias de segurança, integração de nós institucionais, +empacotamento para sistemas operacionais +
- Fase 5: Exploração e Cultura — navegador público de tesseras por +era/localização/tema/idioma, curadoria institucional, integração com +genealogia, exportação para mídia física (M-DISC, microfilme, papel livre de +ácido com QR) +
Com Shamir's Secret Sharing, Tesseras fecha a última lacuna crítica na +preservação a longo prazo. Suas memórias sobrevivem a falhas de infraestrutura +através de erasure coding. Sua privacidade sobrevive a computadores quânticos +através de criptografia híbrida. E agora, sua identidade sobrevive a você — +passada adiante para as pessoas que você escolheu, exigindo a cooperação delas +para desbloquear o que você deixou para trás.
+ +