Ideas about social network
Things I care about
No ads, no data mining by third parties
Decentralized. Can be hosted on third party servers, on own server.
Data is encrypted and decrypted on the client. Servers do not have access to the data.
Trust is established using crypto. Use PGP to share keys.
Dead easy to implement. Use simple technologies like git, https, pgp. Prototype should work with curl, git and bash.
Should be usable by my mom and friends, so web ui should be as easy as your average social network
Should have some integration with email, so I can reply by email or get daily digest.
Things I don't care about
Scalability. Should work for me and my friends, don't care about large scale groups then.
Search, etc. I care about receiving some news about my friends and share some notes sometimes.
Friends and sharing
Friends group is represented by a set of public keys, where every public key represents user identity. If I wish to share the post with my friends, I will encrypt the post using their public keys. Every friend can decrypt the post with their private key.
Publishing
All my posts are in git in some folder (e.g. by date of publication):
network/posts//.md.gpg network/posts//.files.gpg
If I wish to publish the post to my group, for each user in the group:
network/friends/username/posts//timestamp_post_name_hash.md.gpg network/friends/username/posts//timestamp_post_name_hash.files.gpg
My friends can look into their feeds by checking their feeds for updates
network/feeds/sasha contains url of the web service hosting my posts:
https:///network/friends/anna/posts/
Anna can open and decrypt my feeds by syncing and decrypting the data with their private keys:
network/feeds/sasha/synced/posts/timestamp_post_name_hash.contents.gpg network/feeds/sasha/synced/posts/timestamp_post_name_hash_files.md.gpg
Note that synced files could be decrypted with Anna's private key.
network/friends//post_name_files.gpg
Things to sort out
How to rotate private keys
File naming and hashing. Use CAS to make it easy to sync data from peers. Do not expose metadata in file names.
How to decrypt on the client and post.
Encryption keys are encrypted and stored locally. Encrypted with password of the user, decrypted on the client. What if user looses password? Will they loose all their data? Should have option of unencrypted local cache or use services like tarsnap?
Last updated
Was this helpful?