JPBC库的使用--双线性配对,ECC加密
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加密相关推荐
- JPBC实现非对称双线性配对:typeF型曲线
文章目录 引言 一.对称与非对称双线性对 二.TypeF简单使用 1.初始化实例 2.生成群元素与计算 疑问与补充 引言 最近在做基于身份的签名算法仿真,涉及到椭圆曲线双线性配对,本人比较小白所以就用 ...
- JPBC库只使用椭圆曲线群,不使用双线性性质。找单位元,逆元等
JPBC库是一个功能很强大的数学库,用于生成椭圆曲线,双线性等,但网上参考资料很少,重复度极高,该分栏用于安装,JPBC参数解释,生成椭圆曲线群,整数群(不用双线性性质),双线性映射教学.内容原创,禁 ...
- java ecc 加密_java-信息安全(十一)-非对称加密算法002-ECC,签名003-ECDSA签名
一.概述 ECC算法(Elliptic curve cryptography,椭圆曲线密码学) 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学 ...
- JPBC库的使用实例——BLS签名
这里展示了一个简单的对JPBC库的调用的实例. 可以参考JPBC库的官方文档进行学习: http://gas.dia.unisa.it/projects/jpbc/docs/ecpg.html#Typ ...
- JPBC库应用之BLS签名
JPBC库应用之BLS签名 视频地址 https://www.bilibili.com/video/BV1jA41147vt/ BLS签名简单介绍 Initialization 生成pairing参数 ...
- Windows下JPBC库的使用
在windows 10系统下,JPBC库的导入过程简介: 1.首先去JPBC官网下载库压缩包: 附上网址:JPBC - Java Pairing-Based Cryptography Library ...
- JPBC库实现基于身份的签名体制
JPBC库实现基于身份的签名体制---Hess体制 Hess算法: 代码: Hess类: import it.unisa.dia.gas.jpbc.Element; import it.unisa.d ...
- 一种基于随机数组so库的Android数据资源硬加密方法 草稿
一种基于随机数组so库的Android数据资源硬加密方法 作者:AniO软件咨询服务,天涯来客-Leemboy 摘要:本文提供一种简洁的Android数据资源硬加密方案,利用随机数组so静态库,对An ...
- 猿人学题库第一题——无混淆js加密
猿人学题库第一题--无混淆js加密 1. 首先 进入 浏览器的开发者工具, 进入后直接 查看请求,可以找到 一个 json?page=1&count=14 的网址,查看response 就是 ...
- 猿人学题库第二题——简易动态js加密解析
猿人学题库第二题--简易动态js加密解析 1. 首先 进入 浏览器的开发者工具, 进入后会有个无线debugger,过掉无线debugger模式,鼠标右击 选择 never pause here,过 ...
最新文章
- 算法(4)数据结构:堆
- 除了缺少点创意,GPT-3写出了及格的大学毕业论文,只需20分钟
- python【蓝桥杯vip练习题库】ALGO-232找零钱(贪心 模拟)
- 批处理文件检测windows系统是32位还是64位
- 【渝粤教育】国家开放大学2018年秋季 0690-21T化工原理及实验 参考试题
- Django中的class Meta知识点
- vue和java实现页面增删改_SpringBoot-Vue实现增删改查及分页小DEMO
- golang交叉编译
- django基础篇05-Form验证组件
- 【博客话题】技术之路上的人和事
- 创业失败的内因分析及避免办法
- 《游戏设计艺术(第二版)》读书笔记
- Vuex 的简单模拟、了解Vuex
- LOL各大服务器所在位置,LOL各大服务器所在地,8个大区全都在广东,是其他省的两倍...
- 1000款水墨墨迹毛笔素材
- java实验目的_Java实验报告(实验一)
- ps入门第11天_ps渐变映射 案例:战争之殇
- 桌面任务栏不见了解决办法
- 软件需求分析(以美团外卖为例)
- [趣味分享]纯手工机械的无碳小车