All users are in stream 0 which is the 'discovery stream'.
When you 'friend someone' you share with them your stream ID.
You can switch stream IDs at any time and notify your friends that you moved.
Thus dynamic load balancing is possible.
How is that different to Bitmessage? Users can change and move to new addresses if they wish, it just requires the hassle of telling your contacts that you have moved to a new address
Also with a global broadcast channel, will there not be a scalability issue when there are 12 gazillion users needing to 'discover' each other?
Anyway, it would be nice if the hiding_in_the_crowd mechanism could be somehow decoupled from a user's address.
Here is a less than well thought out proposal...
We assume that the set of users' addresses (public keys) are uniformly distributed.
We can define a 'crowd-specifier' as being an address prefix such as '1ab'
- Any address with that prefix can be considered part of the crowd
When Alice sends to Bob, instead of attaching the 'stream_id' value to the message, she will attach a small prefix of Bob's public key address.
- The size of the prefix is chosen s.t it encompasses a minimum 'crowd-size' to prevent observers from inferring the true recipient
When connecting to the network, Bob, then provides his peers with a crowd specifier prefix, according to his particular needs at that moment.
- He may want to be part of a bigger crowd and give a shorter prefix
- He may lengthen the prefix if the messaging system starts to demand too much HDD space or bandwidth
Perhaps there is a less naive way to perform the partitioning, with the use of some hash functions.
If you follow some of my old posts on the BitMessage forum I had an idea of hierarchal streams based upon bits in the address. The problem is this opens up a new kind of attack where your address can be isolated and forced into a stream with only messages for you and the attacker. I also don't want people to have to change their 'address' just to change channels.