Phase 1 prototype of recover.fluid.ng: split a BIP39 seed into 2-of-4 Shamir shards, encrypt each shard with its own password, and recover the seed from any 2 shards. 100% client-side. No server calls. Works from file:// offline.
This is unaudited prototype crypto built to prove the recovery flow. Do never use it with a wallet that holds real money. Test it, break it, and only trust a future audited release.
Honest design notes (fixes to the original spec):
• Secure Enclave / StrongBox cannot store a BIP39 seed — they hold non-exportable P-256 keys only. In the real app the seed exists in memory only during split/recovery (then zeroized), and a key-encryption-key stays in the enclave.
• Cloud and email shards use different passwords here — one shared password would let anyone with your cloud + inbox rebuild your wallet.
• This prototype derives keys with PBKDF2-SHA256 (600,000 rounds, WebCrypto) + AES-256-GCM because Argon2id needs a large WASM library. The production spec calls for Argon2id (libsodium) — treat that swap as required before any real use.
Minimum 8 characters each. Fluid never sees any of these. Losing a password loses that shard — any other 2 shards still recover you.
Where each file goes: device.enc stays on the phone · cloud.enc → your iCloud/Google Drive /Fluid/Backup/ · guardian.enc → send to your guardian · email.enc → email it to your recovery address.
f(x) = byte + a·x. Shards are the points x = 1, 2, 3, 4. Any 2 points rebuild the line; 1 point reveals nothing.Fluid Phase 1 · Built 2026-11-05 · Prototype — not audited, not for real funds.