JPBC下载与安装
JPBC是对PBC的java语言封装版本,适合有Java基础的人。做密码学的人可能知道的比较多点,最近要仿真一篇属性加密(ABE)论文,正好顺手研究下怎么实现。
安装&运行
首先从官网下载jar。注意有1.2.1和2.0.0的版本,其中2.0.0抛弃了1.2.1版本中的某些内容,例如从字符串初始化配对,还有官网的某些案例在2.0.0版本中也没了,根据自己的功能选择就行。
下载完解压后,直接导入jar就行,我这里用的是Idea
接下来编写一个双线性映射测试类,顺便解释下用法
双线性映射Demo
import it.unisa.dia.gas.jpbc.Element;
import it.unisa.dia.gas.jpbc.Pairing;
import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
public class Demo {
public static void main(String[] args) {
// 使用a.properties文件内容初始化配对参数
Pairing pairing = PairingFactory.getPairing("a.properties");
// 随机选择G1群上的一个元素e1
Element e1 = pairing.getG1().newRandomElement();
// e1设置为随机值
e1.setToRandom();
// 随机选择G2群上的一个元素e1
Element e2 = pairing.getG2().newRandomElement();
// e2设置为随机值
e2.setToRandom();
// 随机选择Zr群上的一个元素x
Element x = pairing.getZr().newRandomElement();
// x设置为随机值
x.setToRandom();
// 复制一份e1
Element e1_copy = e1.duplicate();
// 计算e1^x
e1_copy.mulZn(x);
// 计算e(e1^x,e2)
Element mp1 = pairing.pairing(e1_copy, e2);
// 计算e(e1, e2)^x
Element mp2 = pairing.pairing(e1, e2);
mp2.mulZn(x);
System.out.println(mp1.isEqual(mp2));
}
}
上面的代码实现了如下的一个双线性映射:
代码解释
参照官网文档,Pairing可以从椭圆曲线参数文件中生成一个G1xG2->GT的映射,关于a.properties文件可以在解压后的params文件中找到。G1、G2、GT都是椭圆曲线群上的元素,Zr是整数域Zp上的元素。
其中a.properties是一个对称的映射,即G1和G2是对等的,a1.properties是非对称映射,G1和G2不等。