JPBC库的使用--双线性配对,ECC加密

Jpbc库使用指南 jpbc的安装 jpbc库封装成了jar包形式,只需要在新建的Java项目之中引用jar包即可使用,引用jar可以根据如下经验: eclipse导入jar包 IDEA导入jar包 Jpbc库下载 基本概念 jpbc库是使用Java语言对双线性映射进行实现的一种方式,使用过程之中主要需要了解域(Field)、元素(Element)、元素所属于的域、元素之间的操作及元素之间运算结果所在的域。在编写程序之前,需要了解清楚方案之中每个元素的所属的域,简单理解,域规定了元素的类型,如果元素类型不正确,运算将会无意. 阅读详情

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库(基于配对的密码学)入门和避坑指南 1. JPBC简介 Java Pairing-Based Cryptography Library 对PBC库(C语言)的Java封装 常用于基于配对的密码学算法仿真(身份基加密、属性基加密等) 2. JPBC环境 JPBC: http://gas.dia.unisa.it/projects/jpbc/download.html JDK: https://www.oracle.com/java/technologies/javase-jdk14-downloads.html IntelliJ IDEA: h 阅读详情

相关推荐

Java密码学原型算法实现——第三部分:双线性对

最近在CSDN私信上和知乎上经常收到求救帖子,希望我能写一个jPBC使用方法的博客。甚至实验室的硕士生们也在各种咨询我相关的问题。于是,我打算一劳永逸,写一篇有关jPBC使用的博客。希望这个博客出来后能帮助大家解决有关jPBC的问题。

Weiran Liu的渣技术小专栏 1万+

JPBC密码库学习

这段时间由于竞赛需要学习了JPBC库的使用, 不得不说,虽然此库极其强大,然而由于毕竟这块没有像那些大规模商用的东西那样流行,所以网上无论是英文还是中文的资料都极为稀少,官方文档也语焉不详。折腾了快半个月才把它大致搞懂,所以想把过程写下来,方便他人学习使用,如有错误,望指出。G1​G2​GT​G1​G2​GT​给定一个大质数p,G1​G2​GT​均是阶为p的乘法循环群,e 为双线性映射 e :G1​xG2​->GT​对称双线性映射:G。

qq_46341621的博客 2571

Java密码学实战:JPBC库环境配置与双线性配对应用指南

椭圆曲线密码学(ECC)作为现代密码学的核心分支,通过将密钥定义在椭圆曲线构成的有限循环群上,实现了比RSA更短的密钥长度和更高的安全强度。其数学基础依赖于椭圆曲线离散对数问题的困难性,而双线性配对作为ECC领域的关键工具,能够实现群元素间的特殊映射,催生了基于身份的加密、短签名等高级密码学方案。在Java生态中,JPBC库为基于配对的密码学提供了工程实现支持,使得开发者能够在Java应用中便捷地进行椭圆曲线群运算和配对计算。本文聚焦于JPBC库的实战部署,涵盖从PBC依赖库编译、Maven项目配置到双线性

dilv4062的博客 375

java实现ABAC

去下面这个网站下载jar包 bouncycastle.org 然后,复制这段代码到idea里面,参考路径: JPBC - Java Pairing-Based Cryptography Library : Schemes - Unbounded HIBE and Attribute-Based Encryptionhttp://gas.dia.unisa.it/projects/jpbc/schemes/uhibe_lw11.html#.YcAxGL1Bw2x import it.uni..

weixin_39304739的博客 1609

Java实现JPBC密码库的实验

前言 由于自己的密码学实验需要,决定先到CSDN上找一些关于使用JAVA语言在Eclipse上通过JPBC密码库对实验中相关的密码运算进行模拟。但是找了很久发现写JPBC的博客少之又少,如果是使用Java语言实现的就几乎没有。于是自己决定在完成试验之后写一篇自己配置实验环境的心得。   注意 1.首先建立一个Java项目,如TestScheme 2.在项目下创建一个jars文件夹,把...

Lebron_yan的博客 1万+

JPBC库基于椭圆曲线的Elgamal算法实现(java)

1.算法原理 (原理图片直接截的知乎ID徐摆渡) 2.代码实现 package csdn; import java.math.BigInteger; 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.jpbc.PairingParameters; import it.unisa.dia

qq_41359358的博客 535

Windows下JPBC库的使用

window10下jpbc库的使用

Frinklin_wang的博客 3092

Java平台椭圆曲线密码学库JPBC安装与实战

JPBC(Java Pairing-Based Cryptography Library)是一个开源项目,它专注于基于配对的密码学研究和应用开发。配对密码学是公钥密码学的一个分支,它依赖于双线性配对这一数学工具,可以构建出多种新的密码学应用,例如身份基加密(IBE)、短签名和广播加密系统等。JPBC支持多种双线性映射构造,比如Weil配对和Tate配对,并且提供了多个参数的预设,使得开发者可以轻松地选择合适的参数集,从而实现安全的密码学操作。

weixin_28939623的博客 1403

Java-JPBC-SM9(GBT 38635)实现与测试

基于JPBC的SM9实现,验证了《GBT 38635-2020 信息安全技术 SM9标识密码算法》。

yaoyuanyylyy的专栏 7479

CPABE源码解析:属性加密与云存储细粒度访问控制

属性加密(Attribute-Based Encryption)是公钥密码体制中的重要分支,它将访问策略直接嵌入密文或用户密钥,使数据拥有者能够自主定义“谁能解密”。其核心技术基于双线性配对与Shamir门限秘密共享,通过属性集合与策略树的匹配实现细粒度访问控制。在云存储、企业网盘、物联网等场景中,这种“加密者可控”的模型能有效替代传统的中心化访问控制列表,降低服务端信任要求。本文围绕CPABE的Java实现,从Maven多模块源码结构、Setup/Keygen/Enc/Dec核心流程、策略解析与常见排错方

weixin_42539414的博客 199

Elliptic-Curve-Cryptography:JPBC 2.0.0双线性配对实现

椭圆曲线密码学 使用JPBC 2.0.0库的基于对密码的安全数据共享框架的实现。 我正在密苏里科技大学的2015年夏季REU上从事该项目的工作。 该存储库不再使用。 未来的工作将致力于: : 和 。 正在工作: -数据所有者和用户密钥生成-代理重新加密密钥生成-由oracle代理重新加密整数并由用户解密-文件加密(仍然可以解决一些潜在的错误) 待办事项清单: -增加了对多线程的支持-授权令牌生成-清洁代码,单独的类,并添加更好的注释 使用的库: :

如何在Linux(Ubuntu 22)服务器上运行jpbc库

使用Linux云服务器运行jpbc库

Hinsc6189的博客 1761

jPBC-开源

jPBC是PBC库的Java移植,PBC库是用C编写的基于配对的密码学库。它支持对称和非对称配对。 使用jPBC,使用如此强大的加密原语确实非常容易。

java中jPBC库使用,合数阶双线性群介绍

jPBC库的使用 转载 https://www.cnblogs.com/yanspecial/p/5613342.html 介绍了常见的双线性群、对参数的产生等过程有代码介绍

星光不负赶路人 1358

JPBC_jpbc_JPBC使用实例_

JPBC简单的使用实例,让你了解JPBC的简单用法

STM32 无线充电接收端硬件设计:从 LC 谐振到 PWM 控制的 5 大关键电路解析

本文深入解析了基于STM32的无线充电接收端硬件设计,重点探讨了LC谐振倍压整流、INA282电流采样、IR2104S半桥驱动、超级电容保护及STM32最小系统等5大关键电路。针对超级电容的恒功率充电需求,详细介绍了PID控制算法优化及PCB设计实战要点,帮助工程师提升无线充电系统的效率和可靠性。

weixin_31774841的博客 380

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

文章目录 引言 一、对称与非对称双线性对 二、TypeF简单使用 1.初始化实例 2.生成群元素与计算 疑问与总结 引言 最近在做基于身份的签名算法仿真,涉及到椭圆曲线双线性配对,本人比较小白所以就用了JPBC库来实现。网上比较多教程的主要是使用TypeA曲线,但是TypeA曲线是对称的双线性对,搜索发现TypeF曲线是非对称的,本文简单分享下相关的内容。 一、对称与非对称双线性对 简单来说:设是大素数,,均为阶为的乘法循环群,其中是生成元。假设...

m0_37172511的博客 2660

告别手动输入!用Access批量导入307种土壤数据到SWAT模型(附完整MDB操作流程)

本文详细介绍了如何利用Microsoft Access批量导入307种土壤数据到SWAT模型,显著提升数据录入效率。通过解析usersoil表结构、提供Access操作指南和VBA自动化脚本,帮助环境工程师避免手动输入错误,实现高效数据管理。文章还包含性能优化技巧和常见错误解决方案,是SWAT模型用户的实用指南。

weixin_28366053的博客 320

密码学使用双线性对运算遇到的问题小结(java JPBC)

在进行对运算的时候,g1,g2必须要进行赋值,如果只是声明一个双线性群中的元素Element g1= pairing.getG1().newElement(),那么对计算结果会一直为{x=0,y=1},在JPBC中, G1,G2群中的元素都是一个个点坐标(基于椭圆曲线)。在进行指数运算时,g1.powZn(a),会直接将指数运算后的值保存到g1中(即g1 = g1.powZn(a),当我们在后续得计算中,需要用原来的g1进行计算时,会发现g1的值被修改了,为了避免这种情况,不要直接用g1参与计算。

qq_43924438的博客 920

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

帝企鹅优化器(EPO)详解:从基础原理到代码实战

帝企鹅优化器(EPO)是受帝企鹅群体在极寒环境中抱团取暖行为启发,于2018年提出的一种群体智能优化算法。其核心机制是模拟帝企鹅种群通过动态调整位置来维持体温的过程,主要包括确定集群边界、计算温度分布、衡量个体间距离以及更新位置四个步骤,从而在求解复杂优化问题时有效平衡全局探索与局部开发。该算法具有参数少、结构清晰、易于实现等优点,在工程优化、图像处理、机器学习特征选择以及冷链物流车辆路径规划等领域展现出良好的应用潜力。

qq_42212808的博客 132

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

JPBC库实现基于身份的签名体制---Hess体制 Hess算法: 代码: Hess类: 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 java.lang.reflect.Proxy; public

kangege21的博客 1268

信息传输仿真:卫星通信系统仿真_(12).基于SystemVue的卫星通信仿真

SystemVue是Cadence公司开发的一款用于系统级设计和仿真的软件工具。它主要用于无线通信系统的设计和验证,特别是在卫星通信、雷达、射频和微波通信等领域。SystemVue提供了一个集成的环境,用户可以通过拖拽和连接各种预定义的模块来构建复杂的通信系统模型,从而进行性能分析和优化。

2401_87715305的博客 1362
上一篇: AES加密-JAVA实现
下一篇: AES加密--JAVA实现
YangPotatoes
博客等级 码龄10年 200粉丝 43原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值