Skip to content

Latest commit

 

History

History
80 lines (57 loc) · 2.68 KB

mip-0004.md

File metadata and controls

80 lines (57 loc) · 2.68 KB
MIP: 4
Title: Private messages
Author: Jason Chavannes <jason@memo.cash>
Status: Draft
Created: 2018-09-14

Abstract

Create private messages with two or more memo users. Also obscure communicating parties.

Motivation

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.

Security Concerns

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.

Specification

Two new protocol actions

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.

Format of encrypted private message

Name Code (First byte) Fields
New key 1 encryption_key(50)
Other members 2 address(35) x 6
Message 3 message(219)

Example Flow

  1. Initiator sends handshake to recipient main address
    • Handshake includes symmetric encryption key (see spec)
    • Can also post an initial message using the encryption key
  2. 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
  3. Any participant can publicly or privately invite others
    • Once handshake with coordinator, can read chat history to find messages that include other members

Bloom Filter Support

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.

Reference Implementation

Planned

See Also