You keep saying "no protocol changes required", but then propose a bunch of protocol changes (yes, new tags and client recommendations count). I'm also confused by your use of "deterministic", are you using HD keys or adding a link? the latter isn't deterministic, and HD keys don't really work for this (blinded addresses can't be linked, and compromise of an unblinded private key compromises the root). Are you familiar with NIP 26? That was basically this, but was never adopted except by Minds because of the complexity it imposed on clients. This approach also only works for people who understand cold storage and how to safely derive keys, which is ultimately going to be a very small minority. It's also helpless against key material loss, or an attacker getting the root key. A few weeks ago a group of people were able to meet in person and talk through this problem (from admittedly a different angle). We came up with this: This allows for making your root identity disposable by advertising a migration event based on a precommit that an attacker can't get access to. It's better I think, but of course there is really no silver bullet in this domain. Everything comes with huge trade offs.

Replies (2)

Viktor's avatar
Viktor 2 months ago
yo hodlbod, good to see the old nip-26 ghost still haunting the halls 😂 cold root lineage is slick *in theory* , rotate epoch keys, keep root cold, profit , but you're spot-on: it's another "users must grok hardened derivation paths" adventure. same trap nip-26 fell into , devs love the elegance, mortals just want a big green "recover account" button. nip-2137's pre-commit migration looks more human-friendly: lose key → use pre-signed escape hatch. still not magic, but at least the ux burden is "store one backup code" instead of "never ever touch hot root or you're rekt". imo the real fix is making the *root disposable by default* so nobody treats it like a login in the first place. until then, we're all just arguing over which flavor of user pain tastes better 🫡 (btw if y'all ever want to test migration flows in a live client, vector's group-chat guinea pigs will happily break things for science.)
Appreciate the response. A few clarifications because I think we’re talking about different layers. 1. No protocol changes A lineage event is just a normal NIP 01 note with the current pubkey as the author. The root and sig tags are client semantics, not protocol extensions. The protocol doesn’t need to understand them. Relays don’t need to do anything. Clients can ignore them completely and nothing breaks. That’s what I mean by “no protocol changes required”. 2. Deterministic != HD chain. I’m not proposing BIP32 style unhardened chains or blinded address links. The derivation in the prototype uses HKDF(root_seed, “epoch:label”). No parent–child leakage. No public derivation path. No hardened/unhardened distinction. It’s just a reproducible function that stays entirely offline. The root never signs online. The root never publishes anything. Clients never derive keys. Only the user’s offline environment does. 3. This doesn’t try to solve the “lost root key” problem. Nothing does except backups or threshold schemes. The model is about containment, not availability. If the epoch key leaks, you lose that epoch. If the root leaks, you lose the lineage. Same as Bitcoin. Same as PGP. Different threat model than NIP-26. 4. NIP 26 solves a different class of problem. NIP 26 is about delegation. Giving another key permission to sign for you. It requires clients and relays to understand delegation. And, as you mentioned, it saw limited adoption because of complexity. Cold root identity isn’t delegation. It’s ancestry. Clients only need to verify: sig_root(epoch_pubkey) Everything else stays NIP-01. 5. Adoption burden on clients is intentionally tiny. A client only needs to add: - detect lineage tag - verify sig_root(epoch_pubkey) - follow the newer key If they don’t implement it, nothing breaks. If they do, users get survivable identity. It's completely optional for the clients. 6. Advanced users always adopt first. Just like PGP, Bitcoin cold wallets, miniscript, Lightning channels, etc. Power users adopt best practices early. Clients catch up as patterns stabilize. The purpose of this model is to demonstrate that survivable identity can exist without NIP changes, relay changes, or delegation semantics. Everything else can evolve around it. Happy to collaborate or cross compare with the key migration NIP. We’re all circling the same core problem with different threat models.