Consider a network of trust, where each user
u specifies some other set of users whom
u "trusts". This forms a graph with users as nodes and declarations of trust as directed edges.
Each user may push encrypted data out to the network along with a maximum "degree of decryption", e.g. if the degree is 2, only direct friends (degree 1) and friends of friends (degree 2) should be able to decrypt the message.
Ideally this restriction could be implemented in the encryption scheme itself. The scheme would have the following properties:
- Ability to encrypt a message
M = c || d
cis the message content and
dis the max degree
- The ability to generate a new key from another private key which can still decipher
M(this corresponds to an edge on the graph of trust)
- A generated key can only decipher
Mif it is less than
dlevels of derivation away from the original key used to create
- No key can be easily derived from a generated key
To spell it out more plainly, when user A trusts user B, A derives a new key from her private key and shares it with B, so B can now decrypt her messages of
d >= 1. B does the same and generates a new key from A's shared key, which B shares with C. Now C can read messages from A of degree
d >= 2. And so on. (Actually, when B decides he trusts C, he would pass on to C generated keys for every person B trusts.)
I'm wondering if anything like this exists, or if anyone can point me in that direction, or can provide intuitions as to whether this is even feasible. I am new to cryptography and can't even tell whether this is likely to be already done, doable, or impossible.