-
Notifications
You must be signed in to change notification settings - Fork 612
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NIP 404 - Ghost Events #1676
base: master
Are you sure you want to change the base?
NIP 404 - Ghost Events #1676
Conversation
An interactive example (edit: from here https://github.com/gu1p/nip404_demo/blob/master/main.py): Alice: Today is a good day to post wild picture of me on Nostr! Maybe I will regret it later... {
"id": "f9d32cace9ead9457d121041c4c17a779ab84cecf90f08d90ccacd9673f1bab4",
"pubkey": "npub1r587vuykqhf8k7x4e06380edc7mr7pkz59r44tausmlwq970wkyqv9dh85",
"created_at": 1736350383,
"kind": 1,
"tags": [
[
"ghost",
"block-hash",
"00000000000000000000c75dc9d3296751a8bb62b2463fbc49035ee75ab45f39"
],
[
"ghost",
"block-hash-timestamp",
1736264059
]
],
"content": "Hi! This is Alice... Here is a picture of me drinking a beer!",
"sig": "..."
} Bob: Wow! There is an event from Alice! |
For compatibility, it's probably wiser to sign the event with a random one-time-use key and include the ring signature inside a tag resembling the delegated signing described in NIP-26 |
I don't think you are going to get a lot of feedback on this because AFAIK none of us are cryptographers. But if it gets implemented in two places it should be merged so others can be compatible. |
@mikedilger I tried to use common and well-stablished cryptography building-blocks. Nothing's new. Anyway, I'm hopeful of some constructive feedback. What do you personally think? I tried to address the concerns you guys had in my previous proposal.
|
This is a follow-up of a previous proposal I did in last November.
I tried to tackle most of issues that @Semisol, @pablof7z and @mikedilger have raised.
There is a "working" example (I'm not a cryptographer, have mercy on me): https://github.com/gu1p/nip404_demo
TL;DR;
NIP-404: Ghost Events
This NIP introduces Ghost Events—a protocol for creating events that are plausibly deniable with a ephemeral
nature, providing a weak binding to the author's identity. It leverages ring signatures, elliptic curve point-hashing, and a distance-based proof-of-work that references Bitcoin block hashes for chronological anchoring.
High-Level Mechanics
2. Detailed Protocol
2.1. Reference a Bitcoin Block
Pick a Bitcoin block$B$ with hash $H_B$ and timestamp $t_B$ . This block anchors the event in time.
2.2. Derive a Challenge Point
Anyone can verify this point by performing the same steps.
2.3. Pick a “Mined Key”$P_{\mathrm{mined}}$
2.4. Create a Ring Signature
Form a ring of two public keys:${P_A, P_{\mathrm{mined}}}$ .$\mathrm{sk}_A$ or $\mathrm{sk_mined}$ ) signed—but not which one.
Use your real private key to sign, producing a ring signature that proves one of the private keys (either
2.5. Publish the Ghost Event
Publish a standard Nostr event (
kind
,content
, etc.) plus tags:["ghost", "block-hash", "<H_B>"]
["ghost", "block-hash-timestamp", "<t_B>"]
The event’s
sig
field is the ring signature. Verifiers can: