Memo Server Specification

priestc

Member
Nov 19, 2015
94
191
https://github.com/priestc/MultiExplorer/blob/master/memo_server_spec.md

This is what I've been working on for the past few weeks. It's a system for saving memos encrypted so that only the private key holder can decrypt what the memo says.

I have a few questions:

1. Is AES the right algorithm to use here? Would HMAC be better?
2. I've noticed that all of the encrypted memos start with the chars "U2FsdGVkX1". I assume this is because all memos are prefixed with "BIPXXX" before AES encrypting. Is there a way to have the prefix to be something so that the resulting encrypted text starts with "BIPXXX" instead? BTW "BIPXXX" is just a place holder, once the specification gets added to some BIP/BUIP repo, that tag will change to reflect the actual BIP number.

A fully working implementation is live at http://multiexplorer.com/wallet. Also there is a mirror located at https://me.flightlogg.in. Those two memo servers are configured to pull from each other, so if multiexplorer happens to go down for whatever reason (such as a DDOS attack), your memo is backed up on another memo server and can always be retrieved. Hopefully more people will run more memo servers to add to the overall redundancy.

By the way, I don't really like the name "memo server". The system can be used for many other things, such as storing wallet settings. Maybe your have your wallet configured to show the balance converted to USD, and the crypto balance shown in mBTC units. Your wallet can write these preferences to the memo server. When you import your master seed into another wallet the importing wallet can get those preferences from the memo server network. Also, imported addresses (not derived from the master seed) can be encrypted and stored to this network as well. Maybe even smart contracts can read/write data to this network...

I've thought of calling it something like the "Public Blockchain Parallel Small Data Network" or PBPSDN (which doesn't really have any ring to it). Maybe other people can bikeshed over a better name?
 

kyuupichan

Member
Oct 3, 2015
95
348
Interesting. I've been thinking of something like this for ElectrumX servers. At present, Electrum has a plugin called labels that saves all your tags and descriptions. It's similarly encrypted and stored on a remote server. However there is just one remote server and it went offline for a long time recently.

The idea is if you run electrum from two machines, your labels etc. are synchronised between the two automatically.

Would be better to store on the peer-to-peer network of electrum servers. But how do you a) synchronize between servers so the user isn't dependent on any one server, and b) prevent the freerider problem of it being used for replicated redundant storage?
 

priestc

Member
Nov 19, 2015
94
191
>But how do you a) synchronize between servers so the user isn't dependent on any one server
Each memo server has a "push servers" and "pull servers" settings. On a fixed schedule, the server will either pull or push from other defined servers. You can also run your own memo server that neither pushes or pulls from other servers.


> and b) prevent the freerider problem of it being used for replicated redundant storage?

In order for a memo server to accept a memo, it has to be associated with a TXID. In order to spam the memo server, you must first spam the blockchain.