mirror of
https://github.com/nostr-protocol/nips.git
synced 2024-12-23 08:55:52 -05:00
31 lines
1.6 KiB
Markdown
31 lines
1.6 KiB
Markdown
NIP-704
|
|
======
|
|
|
|
Key derivation for Encrypted Direct Messages
|
|
-----------------------------------
|
|
|
|
`draft` `optional` `author:motorina0`
|
|
|
|
This NIP defines a way for two clients to derive `one-use-only` keys for sending and recieving `kind:4` events.
|
|
|
|
## Motivation
|
|
The content of `Direct Messages` [NIP-04](https://github.com/nostr-protocol/nips/blob/master/04.md) is encrypted, but everyone can see who is chatting with whom. This is far from ideal from a privacy perspective.
|
|
|
|
This NIP describes a way to obfuscate DM communications from the "general public", it does not deal with the relay tracking of clients (for that see [NIP XXX](xxx)).
|
|
|
|
## Suggestion
|
|
For the maximum of privacy the two participants of a `Direct Message` exchange SHOULD use a different public key for **each** `kind:4` event.
|
|
This means that each participant has to:
|
|
- build a `direct message parent key` from which it will derive keys to send and keys to recieve (listen for) `kind:4` events
|
|
- share this `direct message parent key` with its DM peer
|
|
|
|
Each client has a `master` key (denoted with `m`). This key can be the profile `nsec...`, but it is not mandatory.
|
|
|
|
## Deriving the direct message parent key
|
|
[BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki) is used to derive the paths. A client can generate multiple `direct message parent keys`, one for each peer that it is communicating with.
|
|
|
|
Nostr `coin_type'` is `1237'` (see [NIP-06](https://github.com/nostr-protocol/nips/blob/master/06.md)). This NIP defines purpose `25709'` (`dm` -> `0x646d` -> `25709`) for deriving `Direct Messages` related keys.
|
|
|
|
|
|
`m/25709'/1237'/[<account>']`
|