我是靠谱客的博主 美好裙子,最近开发中收集的这篇文章主要介绍【JPBC】Type A1型:初始化、子群的生成和正交性,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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型:初始化、子群的生成和正交性所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部