David Naccache based Identity-Based Encryption

From: “David Naccache Secure and Practical Identity-Based Encryption Section 4”
  • type: encryption (identity-based)
  • setting: bilinear groups (asymmetric)
Authors:Gary Belvin
Improved by:Fan Zhang(, supported by GWU computer science department
  1. e(g1,g2) is pre-calculated as part of public parameters.

2. g1 and g2 have been swapped. In the original scheme, signature happens in G2 but now, it happens in G1. 3. I stored U_z and u as part of mk. This will speed up the sign() a lot. The trick is that, instead of doing exponential operation and then multiply all together, I compute the exponent first and then do one exponential operation

class pksig_waters05.IBE_N04_Sig(groupObj)[source]

Bases: charm.toolbox.PKSig.PKSig

>>> from charm.toolbox.pairinggroup import PairingGroup
>>> group = PairingGroup('SS512')
>>> waters = Waters(group)
>>> ibe = IBE_N04_Sig(group)
>>> (public_key, secret_key) = ibe.keygen()
>>> ID = ""
>>> msg = waters.hash("This is a test.")    
>>> signature = ibe.sign(public_key, secret_key, msg)
>>> ibe.verify(public_key, msg, signature)

l is the security parameter with l = 32, and the hash function at 256 bits = n * l with n = 8

sign(pk, sk, m)[source]

v = (v1, .., vn) is an identity

verify(pk, msg, sig)[source]