Group: GNU Social P2P/Keys
Keys and Identity in GNU Social
User Keys
The fundamental unit of user identity in GNU Social will be a standard OpenPGP public key. Identity will be proved by correctly signing challenges with the key, and privacy can be guaranteed by using these keys for end-to-end encryption.
Specifically, any user wishing to use GNU Social must configure their UI with the public key ID from their user keyring they would like to use as their personal key. If they do not have a key, the UI should generate one for them.
To set a privacy constraint on a given user object, that object should be encrypted to the user keys of all users to whom the *owner* of that object wishes to share the data. This ensures that only those users have access to those objects, presuming that the owner's trust in those users is well-placed.
Core keys
Core keys are RSA keys used to identify a core in the long term. These should be verified through the Web of Trust to determine authenticity.
In a GNU Social packet, inter-core routing information is encrypted to the Core key.
Transport Keys
Some transports may use their own keys. These must be rotated at least once every 24 hours, and presented to each connection signed with the Core key. The key type and method of presentation is left entirely to the transport.
Resources
- http://www.openpgp.org/technical/ - OpenPGP specs
- http://openpgp.rubyforge.org/ - Ruby OpenPGP implementation
- http://bouncycastle.org/java.html - Java OpenPGP implementation