See Jerome Solinas' slides for a brief summary of various identity-based cryptosystems.
Let be a bilinear map, where each group has prime order .
- Master secret: pick
- System parameters: choose , also output .
- Extract: hash ID to , private key is
Key Agreement [SOK]
- Suppose . Let be the hashes of the IDs of Alice and Bob respectively. Then Alice can compute , while Bob can compute .
Public-Key Encryption [BF]
- Encrypt: suppose Alice wishes to send a message to Bob. Alice picks random , computes and derives a key from this (where is the hash of Bob's ID). She sends to Bob.
- Decrypt: Bob can compute K from .
Hierarchical [GS]
- Suppose Alice now wishes to start her own IBE system (running under the one she is already part of) and Bob becomes a user of Alice's system. For this part, rename as and as .
- Extract: Alice picks a secret . Suppose Bob's ID hashes to . Then she gives the private key along with the public value to Bob.
- Encrypt: Suppose someone wants to encrypt a message to Bob. First pick a random and derive a key K from . Then send
- Decrypt: Bob can compute K from .
- Now suppose Bob wants to start his own IBE system underneath Alice's, and say Carol wants to become a user of Bob's system.
- Extract: Bob picks a secret . Let Carol's ID hash to . Then Bob gives Carol along with .
- Encrypt: to encrypt a message to Carol, pick a random and derive a key K from . Then send
- Decrypt: Carol can compute K from .
- We can continue this process and build an arbitrarily deep hierarchical identity-based encryption system.
Signatures [CC]
- Sign: given a message , private key (and ID that hashes to ), pick random and compute where is some hash function. Output
- Verify: given a tuple compute and check that
Signatures [SKS]
- Sign: given a message , private key (and ID that hashes to ), pick random and compute Compute where is some hash function and output
- Verify: given a tuple compute and check that