MIP: 4
Title: Private messages
Author: Jason Chavannes <[email protected]>
Status: Draft
Created: 2018-09-14
Create private messages with two or more memo users. Also obscure communicating parties.
Sending private messages is a basic feature of a social network. Using Bitcoin Cash, direct and group messages can be sent in an uncensorable, anonymous, and asynchronous way.
Best-in-class encrypted messaging apps like Signal still rely on a central server to relay and store the encrypted messages. This creates a centralized place for people to be censored, for instance Signal has been blocked in many places including China and Iran.
Even though internet traffic can be recorded and played back later (which the NSA has done), data on the blockchain has a much higher likelihood of being accessible in the future.
Quantum computers may one day be able to easily decrypt data encrypted today, users should be aware of these limitations.
Action | Prefix | Values |
---|---|---|
Private message handshake | 0x6d30 | address(35), encrypted_handshake_message(179) |
Private message | No prefix | personal_key_hash(30), encrypted_private_message(184) |
ECIES is used for handshake encryption key. A randomly generated key is used for regular messages.
The personal key hash is a hash of the encryption key, the user public key, and a counter. Counter can be increased with each message or periodically so each message looks like a new room. Recipients can easily check which messages are for group since the hash is deterministic.
No prefix is used for private messages. There is a separate prefix encrypted in the message for different actions.
Name | Code (First byte) | Fields |
---|---|---|
New key | 1 | encryption_key(50) |
Other members | 2 | address(35) x 6 |
Message | 3 | message(219) |
- Initiator sends handshake to recipient main address
- Handshake includes symmetric encryption key (see spec)
- Can also post an initial message using the encryption key
- Recipient responds when they post a message using the encryption key
- Can include multiple recipients, people can be added to the conversation at any time
- Any participant can publicly or privately invite others
- Once handshake with coordinator, can read chat history to find messages that include other members
Participants only need to bloom filter on their pk_hash to detect handshakes. Once handshake detected, can add bloom filter for personal_key_hashes of other users.
Planned