概述
JPBC中选用Type A1进行合数阶双线性群的初始化,Type A1的效率较Type A低但利用子群的正交性可以实现更复杂的功能。
Type A1中的G1=G2,是对称双线性群,G1,G2,GT的阶都是合数N,是一些大质数的乘积。除双线性映射的双线性、非退化性、可计算性外,G_N的子群满足正交特性,即子群之间的双线性运算结果必为1。
子群正交特性的计算:
设g是群G的生成元,G1、G2、G3是G的三个子群,阶分别为p1、p2、p3,则gp2p3是G1的生成元,gp1p3是G1的生成元,gp1p2是G1的生成元,故G1中的元素为(gp2p3)x,G2中的元素为(gp1p3)y,G3中的元素为(gp1p2)z。那么,e(gp2p3x, gp1p2z)=e(g, g)p2p3xp1p2z=(e(g, g)p1p2p3)xz=(e(g, g)N)xz=1
测试时,我首先用文件读取的方式进行初始化:
PairingParameters pairingParameters = PairingFactory.getPairingParameters("params/curves/a1.properties");
Pairing pairing = PairingFactory.getPairing(pairingParameters);
再根据 Java密码学原型算法实现——第三部分:双线性对中介绍的Type A1中产生随机数的方法,假定产生的Type A1有3个子群,阶分别为p1,p2,p3,产生随机数:
TypeA1CurveGenerator pg = new TypeA1CurveGenerator(3, 517);
PairingParameters typeA1Params = pg.generate();
Pairing pairing = PairingFactory.getPairing(typeA1Params);
//随机产生一个Gq中的元素
gp = ElementUtils.getGenerator(pairing, g.duplicate(), typeA1Params, 0, 3).getImmutable();
//随机产生一个Gq中的元素
gq = ElementUtils.getGenerator(pairing, g.duplicate(), typeA1Params, 1, 3).getImmutable();
//随机产生一个Gr中的元素
gr = ElementUtils.getGenerator(pairing, g.duplicate(), typeA1Params, 2, 3).getImmutable();
得到的随机数不满足子群正交性质,经过各种尝试,发现需要去掉上一个代码块的文件读取,直接使用第二个代码块进行子群初始化即可。
测试结果:
-
参数生成:
-
测试得到G1,G2,GT的阶都是同一个合数
-
双线性性质:
-
子群正交性质:
最后
以上就是美好裙子为你收集整理的【JPBC】Type A1型:初始化、子群的生成和正交性的全部内容,希望文章能够帮你解决【JPBC】Type A1型:初始化、子群的生成和正交性所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复