Bitmessage Protocol https://bitmessage.org/bitmessage.pdf
Bitmessage is a P2P communications protocol used to send encrypted messages to another person or to many subscribers. It is decentralized and trustless, meaning that you need-not inherently trust any entities like root certificate authorities. It uses strong authentication which means that the sender of a message cannot be spoofed, and it aims to hide "non-content" data, like the sender and receiver of messages, from passive eavesdroppers like those running warrantless wiretapping programs.
The authentication mechanism is a system where users exchange a hash of a public key that also functions as the user’s address. If the public key can be obtained by the underlying protocol, then it can easily be hashed to verify that it belongs to the intended recipient. The data exchanged by the user can also include a version number for forwards capability, a stream number (the purpose of which will be discussed later), and a checksum. Encoded with base58 and prepended with recognizable characters (like BM for Bitmessage), an example address would be: BM‐2nTX1KchxgnmHvy9ntCN9r7sgKTraxczzyE. While certainly more cumbersome than an email address, it is not too much to type manually or it can be made into a QR‐code. Users have already demonstrated this to be acceptable as Bitcoin addresses are similar in format and length. This address format is superior to email in that it guarantees that a message from a particular user or organization did, in fact, come from them. The sender of a message cannot be spoofed.
Message transfer happens through a mechanism similar to Bitcoin’s transaction and block transfer system but with a proof‐of‐work for each message. Users form a peer‐to‐peer network by each running a Bitmessage client and forward messages on a best‐effort basis. In order to send a message through the network, a proof‐of‐work must be completed in the form of a partial hash collision. The difficulty of the proof‐of‐work should be proportional to the size of the message and should be set such that an average computer must expend an average of four minutes of work in order to send a typical message. With the release of new software, the difficulty of the proof‐of‐work can be adjusted. Each message must also include the time in order to prevent the network from being flooded by a malicious user rebroadcasting old messages. If the time in a message is too old, peers will not relay it. If the sender of a message did not receive an acknowledgement and wishes to rebroadcast his message, he must update the time and recompute the proof‐of‐work.
Just like Bitcoin transactions and blocks, all users would receive all messages. They would be responsible for attempting to decode each message with each of their private keys to see whether the message is bound for them.
• Sending protocol-compliant messages
• Receiving protocol-compliant messages
• QR codes for addresses
• UI design for Address Book
• Import addresses
• Export addresses
• Servers setup and removal (including your own)
• Local databases encryption (using SQLCipher)
• Lite client message retrieval using prefix filters (credit to Peter Todd for suggesting this)
• SSL for connections between clients and servers
• POW implemented in C or C++ via the Android NDK
• Support for broadcasts
• UI refreshal
• "Panic wipe" secure deletion of all local data
• List scrolling is not optimized while catching up with the network
• Bandwidth management
Bitseal is licensed under GPLv3 (https://github.com/JonathanCoe/bitseal/blob/master/LICENSE).