moneysocket
Moneysocket Beacons
Explain It Like I'm 5

A Moneysocket "beacon" is a string of data that looks like this:

moneysocket1lcqqzqdm8hlqqqgph5gwpkvy0epv3elllvnq7ts870p8llsqqyquzg07qqqsr0cpq8lqqqgpcv2qqynjv4kxz7fwwdhkx6m9wshx6mmwv4usrcpum3

It contains information for two devices or programs to find each other and open a communication channel.

It also contains secret information so that the two devices or programs can communicate in secret.

Encode A Beacon
Shared Seed:
Use TLS:
True
Host:
Port:
Decode A Beacon
Paste Beacon:
Explain It Like I'm 20

A Moneysocket "beacon" encodes a rendezvous location at a websocket relay server (eg. wss://relay.socket.money). If two devices or programs make an outgoing websocket connection to a relay, they can find eachother if they provide a matching Rendezvous ID values to the relay. This value is derived from a value shared in the beacon string

Additionally, it can point directly to a Moneysocket-enabled websocket server without using a relay. However, that requires that the users ensure that the specificed network location is reachable (wheras relays such as wss://relay.socket.money are available on the open internet).

The end result is an easy way to "pair" to applications or devices for socket connection. The string is bech32-encoded which optimizes for both manual copy-pasting and also efficiently displaying in a QR code.

Source Code

This page which uses the js-moneysocket library to encode and decode the beacons is available here.

The relay that peforms the rendezvous between two connections and forwards messages is available here.

Appendix A: Shared Seed

The Beacon contains a 128-bit shared seed value that is randomly generated. This ennsures that anyone connecting to the rendezvous location has observed the shared seed value. It also is the basis for the end-to-end encryption of protocol messages after the link has been established

During an initial handshake of a connection, a 256-bit Rendezvous ID is provided. This is the quadruple-SHA256 derivation of the Shared Seed value. At the relay, two connections that provide the same Rendezvous ID are paired together and subsequent messages are forwarded to eachother.

After that establishment of the connection, the connection between the two clients proceeds encrypted. The double-SHA256 derivation of the Shared Seed value is used as the AES256 key. This defication scheme of the AES256 key and Rendezvous ID coming from the Shared Seed ensures that the relay cannot know the key and makes this an end-to-end encrypted link.

Appendix B: Other Sockets

To limit the scope while under development, websockets are the initial means by which Moneysocket connections are made. However there are some downsides to websockets, such as relying on the relay. In the long run, there is no reasy why Moneysocket can't use other interconnect protocols since all that is needed is the full-duplex socket primitive

Standards like WebRTC and Bluetooth work as better peer-to-peer technologies depending on the particular setup. Also, Near-field Communication and OS domain sockets might make sense in the future.

The limiting factor in rolling these things out are development resources that would allow us to prioritize their inclusion. If you are interested in contributing to this open-source protocol in that way, please drop in our Telegram group and say hello.