Skip to content
Dusty Wilson edited this page May 30, 2016 · 7 revisions

== Bumble Overview ==

Bumble is a WebSocket-based, federated message router that passes signed and encrypted JSON messages from the sender, through one or more routers, to the destination. Due to the design of the system, it behaves as a cluster simply by starting additional nodes, without additional configuration. The routers and clients make extensive use of DNS for federation, router-selection, and message routing decisions.

The intent is for the system to distrust a grand amount of the rest of the system and to reduce the disruption or harm caused by any particular node in the system due to an attacker, a malicious client, or otherwise.

Users authenticate with the system simply by encrypting a specially-formatted message using the router's RSA public key and then signing that payload with their (the user's) RSA private key. In that transaction, the client also provides their UserID, which is used to retrieve their public key from a publicly-accessible key store. None of the routers are required to maintain a user database, but only an in-memory map of currently-connected users. That information is also published in DNS as a UserID-to-router map. The DNS servers themselves can be implemented in any means preferred, but we use our own internally-created DNS servers written in Go which act as an eventually-consistent database of SRV and CNAME records, among other things.

== Goals ==

See the Goals Document.

== Use Cases ==

See the Use Cases Document.

== Specification ==

== Discussion / Support ==

http://bumble-users.bumbleserver.org/ for Bumble User Discussion and Support http://bumble-dev.bumbleserver.org/ for Bumble Development Discussion

== References ==

See the References Section.

See also the proposed Long-term Unidirectional Messaging Session Protocol. See also Version 2.