Social account recovery can work more-or-less reliably, if peers contact the user in some means _other_ than Nostr, to verify that the identity of the user. I think the protocol should enforce this someohow, otherwise the sceme is easy to trick (peers will just press on the green button wanting to help, without real check).
The flow I imagine:
- User realizes that he lost his key, or someone else is posting shit in his name (key compromise), or potential key compromise (not yet misused)
- User initializes Emergency Recovery in a supporting client. A new identity is created.
- User identifies a few trusted nostr user peers who can verify his identity and have other real-life non-nostr means of contacting the user
- Posts a event about the key rotation, with the list of the peers, and a min. threshold.
- Tagged peers should:
- contact the user through some non-nostr means, make sure it is indeed the real person
- generate a unique secret code (details tbd, e.g. by signing the event ID of the rotation event)
- if not in doubt about the user, send the secret code to him through non-nostr channel
- The user, once collecting enough 'ack' codes, posts an event closing the key rotation.
Any client can verify the integrity: that it is posted by the same account, and that each ack indeed comes from the mentioned peer (verify cryptographically), and the number is sufficient.
A malicious attacker can misuse a scheme to steal an account, if he can convience a few users that he is the impersonated user. To alleviate this, the real user can launch a similar counter recovery process, which takes over provided that it is backed by _more_ peers. This way the real user can win as long as more peers attest this.
This scheme is basically what fiatjaf has described in NIP37, with the enhancment to capture the proof that peers have contacted the user. What do you think fiatjaf (npub180c…h6w6) ?