I have this idea about building a social network that stores all its data encrypted. The idea is that a member's data is stored on multiple 'base servers' (of the member's choice). Each member has 3 datasets and 3 encryptionkeys.
- keyP for his own private data and settings
- keyF for his profile (posts, photos, friendlist), he gives this key to all his friends
- keyA for his public info (name, city, etc.), also given to friends. Friends can share this one with their friends (this allows people to find friends of friends)
A friendlist would contain the ID, serverlocation and keyA of all your friends.
Members can switch baseservers whenever they want to. When they do, their encrypted data will be completely removed from the server. When a baseserver is added the encrypted data will be copied to the new server and that location will be sent to all friends so they know where to find him. If a member wants to 'remove himself' from the only server he has left there should be some extra confirmation.
I've added a rough sequencediagram to give a visual impression what it could look like.
Question:
Do you think this concept is realizable without big performance issues and do you think the security can be maintained?
Update: maybe "Social network" is not really a proper name for it, I want it to be a platform with a security-first mentality and try to outsmart even NSA-like organizations from decrypting the data (which would require to be very careful with the keys instead of sharing it with all your friends).