Here's my idea in a nutshell: A distributed network that models identity and reputation as a graph, where different kinds of user identifiers are nodes and user-created relations are links between them. The relations can be evaluated with various algorithms and criteria, such as social network based web of trust to make it
sybil-proof.
The network allows users to check the reputation and other connections of a previously unknown identity. For example, you could decide to borrow 20 bucks to a stranger in a pub after finding out he's your 3rd degree connection on FB and has mostly positive ratings. Or you could write reviews of policemen, teachers, judges or other public servants with whom you can't choose not to interact.
Reputation that is instantly visible to everyone is a big incentive to not be a butthead. Maybe even bigger than threat of imprisonment, and definitely more cost-efficient and p2p.
1. Data model
1.1 IdentifierUnique or non-unique identifier of a user. Examples:
- Name
- Phone number
- Email address
- GPG key
- Facebook username
- Date of birth
- Photograph
Fields: type, value.
1.2 RelationA link between two or more identifiers. Relations are GPG-signed by their creator. Examples:
- ID1 says: "I traded with ID2 and it went smoothly"
- ID1 says: ID2, ID3 and ID4 belong to the same owner
- ID1 says: ID2 and ID3 are Friends on Facebook
- ID1 borrowed $100 to ID2 (signed by both parties)
Fields: Type, value, timestamp, target IDs, signatures.
2. Distributed data storage and indexThis is more of an open question and I'm asking for your ideas on it. The network must be resistant to censorship and political pressure. In addition to storing the static identifiers and relations, for searching we need a dynamic inverted index that links identifiers to the relations they're involved in.
Freenet would be a solution for the static part but it doesn't solve the indexing problem. Distributed indexing could be done with a distributed hash table structure, for which there are existing libraries like
Kademlia. Bootstrapping would be easier if we could use an existing indexing network like
YaCy, but it doesn't support Freenet atm.
3. Use caseWeb site where users can rate their experience with public servants.
1. Alice logs on to the site with her FB account
2. The site creates an ID with type "
[email protected]" and Alice's username as value.
3. Alice writes a review of Bob the policeman.
4. Alice adds Bob's full name, phone number, email and FB username to the review.
5. The site creates a relation that connects Alice's ID with all the Bob's IDs she entered. The relation content is Alice's review and it's signed with the site's GPG key (because the site verifed Alice's FB identity).
6. The newly created relation is published to the network.
Now the review can be found by any of the Bob's IDs entered by Alice. Changes or additions to Bob's details can be added later with new relations. Bob could write a reply to the review and sign it with his WoT-verified GPG key, for instance.
Ideas and suggestions welcome!