JPBC
JPBC 中,双线性群的使用都通过叫 Pairing 的对象来实现。双线性群的初始化在 JPBC 中就是对Pairing 对象的初始化。双线性群有两种初始化方法:通过代码动态产生双线性群;从文件中读取参数而产生群。
生成椭圆曲线和群
- 从文件中读取参数而产生群
1 | // a.properties文件jpbc库自带 |
- 动态产生
指定椭圆曲线的种类、产生椭圆曲线参数、初始化Pairing。Type A曲线需要两个参数:rBit是Zp中阶数为p的比特长度;qBit是G中阶数的比特长度。
1 | // 动态产生一般r为160,q取512 |
类型介绍
Field类型,群环域类型
取随机数:newRandomElement()
取单位元:newZeroElement()
群的阶:getOrder()等
Element类型,群环域上的元素,可以使用特定的有限域,椭圆曲线点群进行实例化Element可以进行加法、除法、乘法、指数运算、求逆元(inver函数)、判断是否为单位元、赋初值、用Element做生成元生成群等。
功能方法
TypeA(对称质数阶双线性群,此时G1=G2,记为G,即G1XG2->GT=GXG->GT)曲线产生堆积元素
1 | // 随机产生一个Zp群的元素 |
将任意元素哈希到双线性群上
jPBC 支持将 byte[] 哈希到双线性群的 Z、G、GT 中。但是,jPBC 说明文档中没有提到的是,byte[]数组长度不能太长,如果过长会抛出异常。因此,我建议首先将byte[]用一个SHA256(Java库自带)或者其他通用哈希函数哈希到固定长度,再用jPBC提供的函数哈希到双线性群上。将任意元素哈希到Z、G、GT群的代码:
1 | // 将byte[] bteArray_Zp哈希到群 |
群上的运算
- Java的运算结果都是产生一个新的Element来存储,所以需要把运算结果赋值给一个新的Element;
- Java在进行相关运算时,参与运算的Element值可能会发生改变。因此,若需要再运算过程中保留参与运算的Element值,在存储时要调用
getImmutable()。保险期间,防止Element运算的过程中被修改了Element原本的数值,可以使用Element.duplicate()方法。该方法返回一个与Element数值完全一样的Element,但是是个新的Element对象。eg:做G1XG1的运算,可以写成:Element
基本使用
- 创建项目,添加jar包依赖
- 引用库
- 生成Pairing实例
- 验证双线性$\mathrm{e(g^a,g^b)=e(g,g)^{ab}}$
1 | // 一、基于特定椭圆曲线类型生成Pairing实例 |




