Phase 4: Heir Key Recovery with Shamir's Secret Sharing
-2026-02-15
-What happens to your memories when you die? Until now, Tesseras could preserve -content across millennia — but the private and sealed keys died with their -owner. Phase 4 continues with a solution: Shamir's Secret Sharing, a -cryptographic scheme that lets you split your identity into shares and -distribute them to the people you trust most.
-The math is elegant: you choose a threshold T and a total N. Any T shares -reconstruct the full secret; T-1 shares reveal absolutely nothing. This is not -"almost nothing" — it is information-theoretically secure. An attacker with one -fewer share than the threshold has exactly zero bits of information about the -secret, no matter how much computing power they have.
-What was built
-GF(256) finite field arithmetic (tesseras-crypto/src/shamir/gf256.rs) —
-Shamir's Secret Sharing requires arithmetic in a finite field. We implement
-GF(256) using the same irreducible polynomial as AES (x^8 + x^4 + x^3 + x + 1),
-with compile-time lookup tables for logarithm and exponentiation. All operations
-are constant-time via table lookups — no branches on secret data. The module
-includes Horner's method for polynomial evaluation and Lagrange interpolation at
-x=0 for secret recovery. 233 lines, exhaustively tested: all 256 elements for
-identity/inverse properties, commutativity, and associativity.
ShamirSplitter (tesseras-crypto/src/shamir/mod.rs) — The core
-split/reconstruct API. split() takes a secret byte slice, a configuration
-(threshold T, total N), and the owner's Ed25519 public key. For each byte of the
-secret, it constructs a random polynomial of degree T-1 over GF(256) with the
-secret byte as the constant term, then evaluates it at N distinct points.
-reconstruct() takes T or more shares and recovers the secret via Lagrange
-interpolation. Both operations include extensive validation: threshold bounds,
-session consistency, owner fingerprint matching, and BLAKE3 checksum
-verification.
HeirShare format — Each share is a self-contained, serializable artifact -with:
--
-
- Format version (v1) for forward compatibility -
- Share index (1..N) and threshold/total metadata -
- Session ID (random 8 bytes) — prevents mixing shares from different split -sessions -
- Owner fingerprint (first 8 bytes of BLAKE3 hash of the Ed25519 public key) -
- Share data (the Shamir y-values, same length as the secret) -
- BLAKE3 checksum over all preceding fields -
Shares are serialized in two formats: MessagePack (compact binary, for -programmatic use) and base64 text (human-readable, for printing and physical -storage). The text format includes a header with metadata and delimiters:
---- TESSERAS HEIR SHARE ---
-Format: v1
-Owner: a1b2c3d4e5f6a7b8 (fingerprint)
-Share: 1 of 3 (threshold: 2)
-Session: 9f8e7d6c5b4a3210
-Created: 2026-02-15
-
-<base64-encoded MessagePack data>
---- END HEIR SHARE ---
-
-This format is designed to be printed on paper, stored in a safe deposit box, or -engraved on metal. The header is informational — only the base64 payload is -parsed during reconstruction.
-CLI integration (tesseras-cli/src/commands/heir.rs) — Three new
-subcommands:
-
-
tes heir create— splits your Ed25519 identity into heir shares. Prompts for -confirmation (your full identity is at stake), generates both.binand -.txtfiles for each share, and writesheir_meta.jsonto your identity -directory.
-tes heir reconstruct— loads share files (auto-detects binary vs text -format), validates consistency, reconstructs the secret, derives the Ed25519 -keypair, and optionally installs it to~/.tesseras/identity/(with automatic -backup of the existing identity).
-tes heir info— displays share metadata and verifies the checksum without -exposing any secret material.
-
Secret blob format — Identity keys are serialized into a versioned blob -before splitting: a version byte (0x01), a flags byte (0x00 for Ed25519-only), -followed by the 32-byte Ed25519 secret key. This leaves room for future -expansion when X25519 and ML-KEM-768 private keys are integrated into the heir -share system.
-Testing — 20 unit tests for ShamirSplitter (roundtrip, all share -combinations, insufficient shares, wrong owner, wrong session, threshold-1 -boundary, large secrets up to ML-KEM-768 key size). 7 unit tests for GF(256) -arithmetic (exhaustive field properties). 3 property-based tests with proptest -(arbitrary secrets up to 5000 bytes, arbitrary T-of-N configurations, -information-theoretic security verification). Serialization roundtrip tests for -both MessagePack and base64 text formats. 2 integration tests covering the -complete heir lifecycle: generate identity, split into shares, serialize, -deserialize, reconstruct, verify keypair, and sign/verify with reconstructed -keys.
-Architecture decisions
--
-
- GF(256) over GF(prime): we use GF(256) rather than a prime field because -it maps naturally to bytes — each element is a single byte, each share is the -same length as the secret. No big-integer arithmetic, no modular reduction, no -padding. This is the same approach used by most real-world Shamir -implementations including SSSS and Hashicorp Vault. -
- Compile-time lookup tables: the LOG and EXP tables for GF(256) are
-computed at compile time using
const fn. This means zero runtime -initialization cost and constant-time operations via table lookups rather than -loops.
- - Session ID prevents cross-session mixing: each call to
split()generates -a fresh random session ID. If an heir accidentally uses shares from two -different split sessions (e.g., before and after a key rotation), -reconstruction fails cleanly with a validation error rather than producing -garbage output.
- - BLAKE3 checksums detect corruption: each share includes a BLAKE3 checksum -over its contents. This catches bit rot, transmission errors, and accidental -truncation before any reconstruction attempt. A share printed on paper and -scanned back via OCR will fail the checksum if a single character is wrong. -
- Owner fingerprint for identification: shares include the first 8 bytes of -BLAKE3(Ed25519 public key) as a fingerprint. This lets heirs verify which -identity a share belongs to without revealing the full public key. During -reconstruction, the fingerprint is cross-checked against the recovered key. -
- Dual format for resilience: both binary (MessagePack) and text (base64) -formats are generated because physical media has different failure modes than -digital storage. A USB drive might fail; paper survives. A QR code might be -unreadable; base64 text can be manually typed. -
- Blob versioning: the secret is wrapped in a versioned blob (version + -flags + key material) so future versions can include additional keys (X25519, -ML-KEM-768) without breaking backward compatibility with existing shares. -
What comes next
--
-
- Phase 4 continued: Resilience and Scale — advanced NAT traversal -(STUN/TURN), performance tuning (connection pooling, fragment caching, SQLite -WAL), security audits, institutional node onboarding, OS packaging -
- Phase 5: Exploration and Culture — public tessera browser by -era/location/theme/language, institutional curation, genealogy integration, -physical media export (M-DISC, microfilm, acid-free paper with QR) -
With Shamir's Secret Sharing, Tesseras closes the last critical gap in long-term -preservation. Your memories survive infrastructure failures through erasure -coding. Your privacy survives quantum computers through hybrid encryption. And -now, your identity survives you — passed on to the people you chose, requiring -their cooperation to unlock what you left behind.
- -