JPBC简介

JPBC库是ABE加密以及椭圆曲线加密等常用的加密库。下载地址:http://gas.dia.unisa.it/projects/jpbc/index.html#.VTDrLSOl_Cw

1. 主要参数

a. 主要使用的椭圆曲线为TypeA型素数阶椭圆曲线,y² = x³ + x 参数如下:

public static String curveParams = "type a\n"+ "q 87807107996633125224377819847540498158068831994142082"+ "1102865339926647563088022295707862517942266222142315585"+ "8769582317459277713367317481324925129998224791\n"+ "h 12016012264891146079388821366740534204802954401251311"+ "822919615131047207289359704531102844802183906537786776\n"+ "r 730750818665451621361119245571504901405976559617\n"+ "exp2 159\n" + "exp1 107\n" + "sign1 1\n" + "sign0 1\n";

TypeA1型为合数阶椭圆曲线,使用较少。

b.一般随机选择元素为从G1,G2,Gt以及Zp域选择,具体选择如下。

public Cpabe(String param){this.pp = new PP();this.mk = new MK();PairingParameters params = new PropertiesParameters().load(new ByteArrayInputStream(param.getBytes()));this.pp.p = PairingFactory.getPairing(params);this.pp.g = this.pp.p.getG1().newRandomElement();//从G1域随机选取元素//构造主密钥参数this.mk.beta = this.pp.p.getZr().newRandomElement();this.mk.g_alpha = this.pp.g.duplicate().powZn(this.pp.p.getZr().newRandomElement());//构造公钥参数this.pp.h = this.pp.g.duplicate().powZn(this.mk.beta);this.pp.y = this.pp.p.pairing(this.pp.g, this.mk.g_alpha);//双线性配对操作
}

c. JPBC库的基本元素为Element,有newElement方法,可以从byte构造Element元素。

2. 双线性配对

双线性配对基于DBDH假设,在密码学有很广泛的应用,与基于离散对数难解性的指数运算加密相比,具有更高的效率。在我的实验过程中,双线性配对操作为1ms,进行一次底数为1024为G1域上的元素,指数为160为Zp域的指数运算用时为13ms左右,双线性配对效率更高。

双线性配对操作主要代码

this.pp.y = this.pp.p.pairing(this.pp.g, this.mk.g_alpha);//双线性配对操作,通过pairing来进行

在ABE中,一般设定G1域和G2域为相等的域,将G1域和G2域的元素映射到Gt域。

3. ECC加密

ECC安全基础为一般群模型,即在计算K=kG过程中,知道k和G很容易计算K,但是在知道K的情况下很难得到k。(这一小节使用的椭圆曲线为y² = x³ + x)
椭圆曲线加密一般使用的为GF§域上的安全椭圆曲线y² = x³ + ax + b,设定好椭圆曲线参数,直接进行运算
  现在我们描述一个利用椭圆曲线进行加密通信的过程:
  
1、ALice选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G,G是系统公开参数
  在设定好安全椭圆曲线的前提下,随机选取元素作为生成元即可。

     Element G = cpabe.pp.p.getGT().newRandomElement(); //基点

2、Alice选择一个私有密钥k,并生成公开密钥K=kG。
  这里为使用大整数作为私钥

       Random random1=new Random();BigInteger SK1= new BigInteger(160, random1);//大整数作为私钥1//Element SK1 = cpabe.pp.p.getZr().newRandomElement(); //以Zp域随机元素作为私钥//System.out.println(SK1);//Date d1 = new Date();Element PK1=G.duplicate().mul(SK1);//公钥1

3、Alice将Ep(a,b)和点K,G传给用户B。公开参数
  4、Bob接到信息后 ,将待传输的明文m进行加密。这里m为随机选取的一个Element

Element encRc1 = m.duplicate().add(PK1.duplicate.mu.(r));//加密
Element encRc2 = G.duplicate().mul(r);

5、Bob将encRc1,encRc2传给用户A。
6、用户A接到信息后,计算encRc1-kencRc2,结果就是点m。
因为encRc1-kencRc2=m+rK-k(rG)=m+rK-r(kG)=m 。

4. 注意事项

         **在所有的代码过程中需要注意Element.duplicate()方法**


如上图所示,可以看到无论是乘法运算,还是指数运算,最终结果均为同一点。

如果加入Element.duplicate()方法,则结果为正确结果。这是因为Element本身的因素,加入duplicate()方法之后,相当于对Element本身加入一个复制,在计算时不会覆盖本身。

JPBC库的使用--双线性配对,ECC加密相关推荐

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

    文章目录 引言 一.对称与非对称双线性对 二.TypeF简单使用 1.初始化实例 2.生成群元素与计算 疑问与补充 引言 最近在做基于身份的签名算法仿真,涉及到椭圆曲线双线性配对,本人比较小白所以就用 ...

  2. JPBC库只使用椭圆曲线群,不使用双线性性质。找单位元,逆元等

    JPBC库是一个功能很强大的数学库,用于生成椭圆曲线,双线性等,但网上参考资料很少,重复度极高,该分栏用于安装,JPBC参数解释,生成椭圆曲线群,整数群(不用双线性性质),双线性映射教学.内容原创,禁 ...

  3. java ecc 加密_java-信息安全(十一)-非对称加密算法002-ECC,签名003-ECDSA签名

    一.概述 ECC算法(Elliptic curve cryptography,椭圆曲线密码学) 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学 ...

  4. JPBC库的使用实例——BLS签名

    这里展示了一个简单的对JPBC库的调用的实例. 可以参考JPBC库的官方文档进行学习: http://gas.dia.unisa.it/projects/jpbc/docs/ecpg.html#Typ ...

  5. JPBC库应用之BLS签名

    JPBC库应用之BLS签名 视频地址 https://www.bilibili.com/video/BV1jA41147vt/ BLS签名简单介绍 Initialization 生成pairing参数 ...

  6. Windows下JPBC库的使用

    在windows 10系统下,JPBC库的导入过程简介: 1.首先去JPBC官网下载库压缩包: 附上网址:JPBC - Java Pairing-Based Cryptography Library ...

  7. JPBC库实现基于身份的签名体制

    JPBC库实现基于身份的签名体制---Hess体制 Hess算法: 代码: Hess类: import it.unisa.dia.gas.jpbc.Element; import it.unisa.d ...

  8. 一种基于随机数组so库的Android数据资源硬加密方法 草稿

    一种基于随机数组so库的Android数据资源硬加密方法 作者:AniO软件咨询服务,天涯来客-Leemboy 摘要:本文提供一种简洁的Android数据资源硬加密方案,利用随机数组so静态库,对An ...

  9. 猿人学题库第一题——无混淆js加密

    猿人学题库第一题--无混淆js加密 1.  首先 进入 浏览器的开发者工具, 进入后直接 查看请求,可以找到 一个 json?page=1&count=14 的网址,查看response 就是 ...

  10. 猿人学题库第二题——简易动态js加密解析

    猿人学题库第二题--简易动态js加密解析 1.  首先 进入 浏览器的开发者工具, 进入后会有个无线debugger,过掉无线debugger模式,鼠标右击 选择 never pause here,过 ...

最新文章

  1. 算法(4)数据结构:堆
  2. 除了缺少点创意,GPT-3写出了及格的大学毕业论文,只需20分钟
  3. python【蓝桥杯vip练习题库】ALGO-232找零钱(贪心 模拟)
  4. 批处理文件检测windows系统是32位还是64位
  5. 【渝粤教育】国家开放大学2018年秋季 0690-21T化工原理及实验 参考试题
  6. Django中的class Meta知识点
  7. vue和java实现页面增删改_SpringBoot-Vue实现增删改查及分页小DEMO
  8. golang交叉编译
  9. django基础篇05-Form验证组件
  10. 【博客话题】技术之路上的人和事
  11. 创业失败的内因分析及避免办法
  12. 《游戏设计艺术(第二版)》读书笔记
  13. Vuex 的简单模拟、了解Vuex
  14. LOL各大服务器所在位置,LOL各大服务器所在地,8个大区全都在广东,是其他省的两倍...
  15. 1000款水墨墨迹毛笔素材
  16. java实验目的_Java实验报告(实验一)
  17. ps入门第11天_ps渐变映射 案例:战争之殇
  18. 桌面任务栏不见了解决办法
  19. 软件需求分析(以美团外卖为例)
  20. [趣味分享]纯手工机械的无碳小车

热门文章

  1. matlab 等字符数 输出,Matlab 输入输出函数整理
  2. LACP链路聚合控制协议
  3. 华为荣耀手机指令代码大全_华为手机测试指令代码大全,华为手机的朋友快来测试一下吧...
  4. uniapp封装request
  5. 25款实用的桌面版博客编辑器
  6. 发现一个很好用的 SVG 在线编辑器-Method Draw
  7. WinRAR_5.40 绿色!!!无广告
  8. 高等数学 下册 第九章 多元函数的概念 笔记
  9. 3dmax如何使阴天灯光设置更加自然
  10. KSZ9897 switch 交换机