1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fase 4: Recuperação de Chaves por Herdeiros com Shamir's Secret Sharing — Tesseras</title>
<meta name="description" content="Tesseras agora permite dividir sua identidade criptográfica em fragmentos distribuídos a herdeiros de confiança — qualquer limiar deles pode reconstruir suas chaves, mas menos que isso não revela nada.">
<!-- Open Graph -->
<meta property="og:type" content="article">
<meta property="og:title" content="Fase 4: Recuperação de Chaves por Herdeiros com Shamir's Secret Sharing">
<meta property="og:description" content="Tesseras agora permite dividir sua identidade criptográfica em fragmentos distribuídos a herdeiros de confiança — qualquer limiar deles pode reconstruir suas chaves, mas menos que isso não revela nada.">
<meta property="og:image" content="https://tesseras.net/images/social.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:site_name" content="Tesseras">
<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Fase 4: Recuperação de Chaves por Herdeiros com Shamir's Secret Sharing">
<meta name="twitter:description" content="Tesseras agora permite dividir sua identidade criptográfica em fragmentos distribuídos a herdeiros de confiança — qualquer limiar deles pode reconstruir suas chaves, mas menos que isso não revela nada.">
<meta name="twitter:image" content="https://tesseras.net/images/social.jpg">
<link rel="stylesheet" href="https://tesseras.net/style.css?h=21f0f32121928ee5c690">
<link rel="alternate" type="application/atom+xml" title="Tesseras" href="https://tesseras.net/atom.xml">
<link rel="icon" type="image/png" sizes="32x32" href="https://tesseras.net/images/favicon.png?h=be4e123a23393b1a027d">
</head>
<body>
<header>
<h1>
<a href="https://tesseras.net/pt-br/">
<img src="https://tesseras.net/images/logo-64.png?h=c1b8d0c4c5f93b49d40b" alt="Tesseras" width="40" height="40" class="logo">
Tesseras
</a>
</h1>
<nav>
<a href="https://tesseras.net/pt-br/about/">Sobre</a>
<a href="https://tesseras.net/pt-br/news/">Notícias</a>
<a href="https://tesseras.net/pt-br/releases/">Lançamentos</a>
<a href="https://tesseras.net/pt-br/faq/">FAQ</a>
<a href="https://tesseras.net/pt-br/subscriptions/">Inscrições</a>
<a href="https://tesseras.net/pt-br/contact/">Contato</a>
</nav>
<nav class="lang-switch">
<a href="https://tesseras.net/news/phase4-shamir-heir-recovery/">English</a> | <strong>Português</strong>
</nav>
</header>
<main>
<article>
<h2>Fase 4: Recuperação de Chaves por Herdeiros com Shamir's Secret Sharing</h2>
<p class="news-date">2026-02-15</p>
<p>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.</p>
<p>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.</p>
<h2 id="o-que-foi-construido">O que foi construído</h2>
<p><strong>Aritmética de corpo finito GF(256)</strong> (<code>tesseras-crypto/src/shamir/gf256.rs</code>) —
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.</p>
<p><strong>ShamirSplitter</strong> (<code>tesseras-crypto/src/shamir/mod.rs</code>) — A API principal de
split/reconstruct. <code>split()</code> 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.
<code>reconstruct()</code> 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.</p>
<p><strong>Formato HeirShare</strong> — Cada fragmento é um artefato autocontido e serializável
com:</p>
<ul>
<li>Versão do formato (v1) para compatibilidade futura</li>
<li>Índice do fragmento (1..N) e metadados de limiar/total</li>
<li>ID de sessão (8 bytes aleatórios) — impede mistura de fragmentos de sessões
diferentes</li>
<li>Impressão digital do dono (primeiros 8 bytes do hash BLAKE3 da chave pública
Ed25519)</li>
<li>Dados do fragmento (os y-values de Shamir, mesmo comprimento do segredo)</li>
<li>Checksum BLAKE3 sobre todos os campos anteriores</li>
</ul>
<p>Os fragmentos são serializados em dois formatos: <strong>MessagePack</strong> (binário
compacto, para uso programático) e <strong>texto base64</strong> (legível por humanos, para
impressão e armazenamento físico). O formato texto inclui um cabeçalho com
metadados e delimitadores:</p>
<pre><code>--- 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 ---
</code></pre>
<p>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.</p>
<p><strong>Integração com CLI</strong> (<code>tesseras-cli/src/commands/heir.rs</code>) — Três novos
subcomandos:</p>
<ul>
<li><code>tes heir create</code> — divide sua identidade Ed25519 em fragmentos de herdeiros.
Solicita confirmação (sua identidade completa está em jogo), gera arquivos
<code>.bin</code> e <code>.txt</code> para cada fragmento e escreve <code>heir_meta.json</code> no diretório de
identidade.</li>
<li><code>tes heir reconstruct</code> — 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
<code>~/.tesseras/identity/</code> (com backup automático da identidade existente).</li>
<li><code>tes heir info</code> — exibe metadados do fragmento e verifica o checksum sem expor
nenhum material secreto.</li>
</ul>
<p><strong>Formato do blob secreto</strong> — 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.</p>
<p><strong>Testes</strong> — 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.</p>
<h2 id="decisoes-de-arquitetura">Decisões de arquitetura</h2>
<ul>
<li><strong>GF(256) ao invés de GF(primo)</strong>: 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.</li>
<li><strong>Tabelas de lookup em tempo de compilação</strong>: as tabelas LOG e EXP para
GF(256) são computadas em tempo de compilação usando <code>const fn</code>. 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.</li>
<li><strong>ID de sessão previne mistura entre sessões</strong>: cada chamada a <code>split()</code> 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.</li>
<li><strong>Checksums BLAKE3 detectam corrupção</strong>: 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.</li>
<li><strong>Impressão digital do dono para identificação</strong>: 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.</li>
<li><strong>Formato duplo para resiliência</strong>: 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.</li>
<li><strong>Versionamento do blob</strong>: 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.</li>
</ul>
<h2 id="o-que-vem-a-seguir">O que vem a seguir</h2>
<ul>
<li><strong>Fase 4 continuada: Resiliência e Escala</strong> — 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</li>
<li><strong>Fase 5: Exploração e Cultura</strong> — 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)</li>
</ul>
<p>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.</p>
</article>
</main>
<footer>
<p>© 2026 Tesseras Project. <a href="/atom.xml">News Feed</a> · <a href="https://git.sr.ht/~ijanc/tesseras">Source</a></p>
</footer>
</body>
</html>
|