Whisper protocol on the VIZ
The amazing is near. People want to hear you. Everyone does. Or what if you whisper the meme "Heil Hydra!" in the ear of someone you know in the park! Wrong!
The reality is that whispering in the park will not be heard by anyone but your conversation partner.
And in the kitchen, your conversations remain yours.
But on the Internet, suddenly, everyone needs to know what kind of data goes from Node A to Node B, and even in plain sight.
Whisper protocol allows to realize hidden messages from node A. With one detail. It is not known to node B.
To everyone, it will be noise with an unprovable meaning.
Until node B tries to parse this noise, what if it is meant for it.
Message encryption via shared key has been around for a long time (relatively). The same transfer notes in the BitShares network are implemented via aes-256-cbc, using a shared key between two nodes as the password.
There is an important difference in the proposed VIZ Whisper protocol. There is no specific recipient in the operation. Moreover, the sender can be TOO hidden, and someone will use an intermediate account, possibly a service/common/anonymous account, to deliver the whisper to the network.
Algorithm of operation for the sender:
- Getting the shared key from the memo private key and the recipient's public key.
- Encrypt the message and retrieve a standard dataset that can be converted into a base58 string.
- Creation of a Whisper private key from the string: "VIZ Whisper" + (unixtime / 10 | 0).
- Obtain a whisper shared key from the received whisper private key and the recipient's public key.
- A new encryption of the message, using the whisper shared key as the password, can be added at this point to the sender's data set to make it easier to decrypt the nested message.
- Upload the message to the network via a custom operation with the protocol name W (abbreviate Whisper to save bandwidth).
Work algorithm for the recipient:
- Monitor blocks, look for custom operation with W protocol.
- In loop compute private key VIZ Whisper" + (block_unixtime / 10 | 0) and try to decrypt message with shared key. If unsuccessful, deduct 10 seconds from unixtime for each attempt (about 3 or 6 is enough to avoid large lag at the sender).
- If successful, decrypt the message internally over the shared key with the sender of the transaction OR if the dataset contains an indication of another account - with the specified account.
- We decrypt the message and display it on the screen.
This protocol successfully hides the recipient (which doesn't preclude guessing who is communicating with whom if there are multiple participants in the protocol) and potentially the sender.
I invite VIZ members to join in the discussion about the protocol, maybe someone would like to develop an experimental version of the dapp for testing in an existing network. In the meantime... Let's remember the Marvel Universe :D
For the future: it is not necessary to use the blockchain itself to record a whisper into blocks. For this, VIZ Hub is suitable with support for this feature.
Added: for greater anonymity and the impossibility of revealing the sender or recipient by brute-force to the public keys of all users in the blockchain - adding to the protocol a proposal to use a mixer string to generate a whisper key in the first message with a proposal to start a conversation. After that, the recipient of the message becomes hidden (and the sender in the case of using a third-party transaction provider to the network).