ABE仿真-JPBC的安装与实验


JPBC下载与安装

JPBC是对PBC的java语言封装版本,适合有Java基础的人。做密码学的人可能知道的比较多点,最近要仿真一篇属性加密(ABE)论文,正好顺手研究下怎么实现。

安装&运行

首先从官网下载jar。注意有1.2.1和2.0.0的版本,其中2.0.0抛弃了1.2.1版本中的某些内容,例如从字符串初始化配对,还有官网的某些案例在2.0.0版本中也没了,根据自己的功能选择就行。

image

下载完解压后,直接导入jar就行,我这里用的是Idea

image

接下来编写一个双线性映射测试类,顺便解释下用法

双线性映射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));
    }
}

上面的代码实现了如下的一个双线性映射:
image

代码解释

参照官网文档,Pairing可以从椭圆曲线参数文件中生成一个G1xG2->GT的映射,关于a.properties文件可以在解压后的params文件中找到。G1、G2、GT都是椭圆曲线群上的元素,Zr是整数域Zp上的元素。
其中a.properties是一个对称的映射,即G1和G2是对等的,a1.properties是非对称映射,G1和G2不等。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM