JPBC实现非对称双线性配对:typeF型曲线



引言

    最近在做基于身份的签名算法仿真,涉及到椭圆曲线双线性配对,本人比较小白所以就用了JPBC库来实现。网上比较多教程的主要是使用TypeA曲线,但是TypeA曲线是对称的双线性对,搜索发现TypeF曲线是非对称的,本文简单分享下相关的内容。


一、对称与非对称双线性对

    简单来说:设q是大素数,G_{1}G_{2}均为阶为q的乘法循环群,其中g\in G_{1}是生成元。假设在群G_{1},G_{2}中离散对数问题难解,双线性映射e:G_{1}\times G_{2}\rightarrow G_{T}

     如果说G_{1}= G_{2},就认为是对称双线性对;否则就是非对称双线性对。在设计基于非对称双线性对的密码体制时,群G_{1},G_{2}中元素的长度往往是不同的,因此在两个群中计算效率也是不一样的。可以把主要的运算安排在元素短的群中,提高密码体制的效率。


二、TypeF简单使用


1.初始化pairing实例

    把jpbc库里下载的params文件里的f.properties复制到工程下,再开始写代码。这一步不会的可以搜一下网上有大把typeA的教程。

        import it.unisa.dia.gas.jpbc.Element;
        import it.unisa.dia.gas.jpbc.Field;
        import it.unisa.dia.gas.jpbc.Pairing;
        import it.unisa.dia.gas.plaf.jpbc.pairing.PairingFactory;
        //import相关的库

        Pairing bp = PairingFactory.getPairing("f.properties");
        //读取文件中的椭圆曲线参数 生成一个pairing实例
        //f曲线是非对称的
        PairingFactory.getInstance().setUsePBCWhenPossible(true);
        
        Field G1 = bp.getG1();
        Field G2 = bp.getG2();
        Field Zr = bp.getZr();
        //生成三个域 z是整数域 G1 G2是包含椭圆曲线上点的域


 


2.生成群元素与计算

   生成需要的群元素,在进行运算时要注意,不同群中的元素不能进行乘法等运算。

   在元素后加上.getImmutable(),保证在运算过程中元素值不会跟着改变。

        Element g1 = G1.newRandomElement().getImmutable();//G1生成元
        Element g2 = G2.newRandomElement().getImmutable();//G2生成元

        Element sk = Zr.newRandomElement().getImmutable();//个人私钥
        Element pk = g2.powZn(sk).getImmutable();//用私钥计算公钥       
        e1 = bp.pairing(Sig,g2).getImmutable();//e(s,g2)
  	    e2 = bp.pairing(hm,pk).getImmutable();//e(hm,pk)
  	     
  	    left=e1.getImmutable();
  	    right=e2.getImmutable();
  	        
  	     if(left.isEqual(right)) {
  	    		
  	    		System.out.println("签名合法");
  	     }



疑问与补充

①TypeF曲线两个群中的元素长度:

G_{1}中元素长度是40bytes,G_{2}中元素长度是80bytes。

②我用typeF实现的方案比typeA实现的效率要差好多,是曲线特性的原因吗?

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值