My proposal for a distributed social networking protocol
dlo.github.com
dlo.github.com
Right now you could easily create an export system using the e-mail addresses of your connections. But once you do that you can't interact with Facebook members.
That's the problem with Facebook and it's root is in a business reality not a technical issue. Facebook and other social networks realize they lose their greatest (and maybe only) customer retaining mechanism if they become inter-operable. Once that happens they become a cheap commodity (much like e-mail servers are today).
So becoming inter-operable means the end of companies like Facebook being major players in the industry and they aren't going to do that willingly. THAT is the problem.
Strictly speaking, that is true. But with a brute force dictionary attack all you do is generate likely email addresses (and these are often very easy to predict) and apply the same hashing process (which has to be public) and look it up in your local copy of the database.
I guess the hash is just to fool spammers? It seems to add a fair amount of complication to the protocol to address just that one use case.
How do you define privacy? How does your protocol protect it?
edit: clarify clumsy wording
Yeah, that's the primary use of the hash. It does add a bit of complication, but I think it's necessary for widespread adoption.
Privacy is provider-specific, therefore it's not up to the protocol to say what and what shouldn't be private. It's up to the provider.
(note that a partial email validity oracle isn't necessarily a deal killer; PGP/GPG keyservers, for example, are partial email validity oracles, and have not only existed for years but have also gained acceptance amongst (some of) the security conscious and the paranoid)
(also note that a hash would be a safeguard (whose effectiveness is dependent on how resistant the hash function is to first preimage attacks and other factors) against disclosure following a compromise of the central database/authority, in addition to its questionable utility at fighting spam in normal situations)
What if the DNS model were taken in order to find which social provider a given user was on? That combined with a trust metric (automatically gleaned?) between providers would go a long way, I think...
So I guess you could give your email provider the ability to publish your social networking provider - but not sure what problem that solves...
External nodes/users can decide how much they want to share with external providers, on a provider-by-provider basis.
Each provider, thus, would have a record of how each of its hosted nodes perceives each external provider, trust-wise.
In order for a node to find a new external node, they would use their contact's email address. The provider would send a request to all providers it has on record. Depending on how the requestee perceives the requester, he can either ignore or answer the query. If he "knows" the email hash, he can prompt that node/user for permission to send data to the requester - and what level of data to send. If the requestee does not know the hash, the request recursively travels throughout the social platform providers.
One of the necessary requirements to being a part of this kind of distributed social network, of course, would be the ability for a user to download their social graph (nodes of email hashes connected to them) and easily port it to another provider. Sort of like exporting your email box contents to bring to another provider.
If we throw out the idea of users having unique IDs other than their email address, it would be possible to have different social networks on different providers - e.g., business from one provider and family on another. If a user deemed it, they could potentially also link several email addresses to the same account on one provider.
This kind of scheme would have the qualities of being:
* Robust: any platform which follows the protocol can participate; Potentially, if a platform goes AWOL, and the nodes within it had sufficient transparency to nodes outside of it, any given provider could rebuild their social graph for them.
* Trust: Based on how the nodes on a given provider dole out their social graph / user information to other providers, that provider can perceive the general level of trust its users have about that provider. It can pass this metric on to other providers who request it.
* Portability: need I say more? :)