jPBC 2.0.0配置与测试(补充版)

这篇博客详细介绍了如何配置和使用jPBC 2.0.0,一个基于Pairing-Based Cryptography的Java库。内容包括jPBC在Windows平台的便捷配置,不再需要本地编译PBC库,以及在Eclipse中引入jar包的步骤。此外,作者还展示了在任意平台配置jPBC的流程,并给出了Boneh-Boyen-Goh HIBE的实例代码,对于理解Pairing-Based Cryptography和应用在密码学中的价值提供了帮助。
摘要由CSDN通过智能技术生成

题注

随着技术博客中的文章越写越多,越写越有经验,我也越来越喜欢把各种各样自己做的有意思的东西公开给大家了~通过技术博客也认识了全国各地的朋友们,他们涉及到的领域真是包罗万象:有做设计的,有做算法的,有做密码学的,还有很多很多好玩的,有趣的人。这也是我希望看到的:大家把自己的技术,自己的心得与其他人分享,一起努力一起进步!

这一篇博客实际上是一位技术朋友希望我能撰写的。他和他团队的小伙伴们在使用jPBC这个Library的时候遇到了很多的问题,希望如果有可能的话,能得到我的帮助。帮助倒是谈不上,能互相交流一下,玩一玩技术也是不错的~ jPBC我以前也配置过,不过那个时候其稳定版本是1.2.1,还并不是特别好用。这次再配置一遍,发现2.0.0的使用比1.2.1方便得多啊,而且竟然可以在Windows下面配置了!所以我赶快做了几个测试,并把我配置的全部过程分享给大家,希望能对大家的配置和开发有所帮助。

背景

Pairing-Based Cryptography

只要是最近10年做密码学的人,就不可能不知道传说中的Pairing-Based Cryptograhphy(PBC)。在现代密码学中,人们常常用两种群来构造安全的密码学算法,即类似RSA的\phi (N)群,以及离散对数群。因为各种各样的原因(具体原因太理论了,在此我不详细展开,有兴趣的朋友们可以单独联系我,我们可以讨论一下~),类似RSA的\phi (N)群基本已经淘汰不用,而离散对数群得到了广泛的应用。

大家可能有所了解,\phi (N)群安全的最大基础是,N=p*q,其中p和q是两个大质数,且给定N,很难分解为p*q。这也就是我们常说的大合数分解问题。在离散对数群中,也有类似的一个难题,成为离散对数难题。给定群的生成元g,和某一个群中的元素g^x,求解x本身很困难。有的人要问了,这个挺简单的啊,求log不就行了吗?需要注意的是,在连续域上面,确实有求log的快速算法(比如用数学分析中的Taylor展示求法,或者各种数值分析中的逼近算法等等),但是这些算法都是逼近算法,并不能求出准确解。当然了,一般数的log结果也是一个无线不循环小数,只能用逼近算法求。但是,在离散对数群中,我们是在用整数和整数做解,根本没有逼近算法这么回事…有兴趣的同学,可以了解一下离散对数群,并且设置一个生成元g,来尝试求一求一个数的离散对数,就会发现只能用枚举的算法来求。

但是,在密码学中,这个计算困难假设不太好用,因此密码学家扩充了离散对数难题,提出了很多别的困难假设,以用于安全性证明。其中,最直接也是最简单的扩展,为计算Diffie-Hellman问题(Computataional Diffie-Hellman Problem,CDH),以及确定Diffie-Hellman问题(Decision Diffie-Hellman Problem,DDH)。

CDH问题是说,给定生成元g,两个群中的元素g^x,g^y,再不给定x,y的情况下,求g^{xy}。DDH问题是:同样给定生成元g,两个群中的元素g^x,g^y,再给定群的一个元素g^z,确定是否满足g^z = g^{xy}。CDH问题和DDH问题是很多加密方案和签名方案的安全基础,如著名的El Gamal加密方案。

但是,Bilinear Pairing的出现,使得DDH问题在某些特定群上面并不是一个困难问题了。Bilinear Pairing最早也是为了解决DDH问题,从而破解密码学方案而提出来的。Bilinear Pairing是一个函数e,其以两个群元素g^x,g^y为输入,求出e(g,g)^{xy}。这样一来,DDH问题就可以用Bilinear Pairing求解了:给定g,g^x,g^y,g^z,我们分别求e(g,g^z)和e(g^x,g^y),看看他们是不是相等即可。

那么,Bilinear Pairing在密码学方面有什么正面的用途吗?即:不用于破解密码学方案,而是来构建密码学方案的正面用途。在,2001年,Boneh和Franklin在论文《Identity-Based Encryption from the Weil Pairing》,提出了一个非常高效的Identity-Based Encryption方案。这也被认为是Bilinear Pairing的第一个实际应用。自此以后,Bilinear Pairing在密码学中有了越来越多的应用,这一类使用Bilinear Pairing的密码学方案被称为Pairing-Based Cryptography。在现代密码中,越来越多的公钥密码学方案都基于Bilinear Pairing做,如Hierarchical Identity-Based Encryption,Attribute-Based Encryption,Fully Secure Signature等等。可以这么说,Bilinear Pairing为公钥密码学进一步发展打开了一扇大门。

PBC与jPBC

Pairing虽然好用,在实际中到底如何使用呢?Boneh的一个学生,Ben Lynn,在Boneh的指导下开发了Pairing-Based Cryptography Library,完全实现了Bilinear Pairing。这一个Library现在成为了测试和使用Pairing-Based Cryptography的必备函数库,估计已经被用了上百万次了吧… 这个库是用Linux C开发的,非常好用!感兴趣的朋友们可以到PBC的官方网址:http://crypto.stanford.edu/pbc/ 对这个函数库做进一步的了解。

jPBC的全称是java Pairing-Based Cryptography Library,是PBC的一个Java封装,其官方网址为http://gas.dia.unisa.it/projects/jpbc/。要知道,并不是所有开发人员都能够熟练使用C的,在现在计算机的大潮中,广泛使用的语言基本已经是C++,Java,Python等面向对象语言了。因此,PBC面向其他语言的封装就显得十分重要。据我所知,除了jPBC以外,现在也出现了很多其他语言的PBC封装,如Python的封装,C++的封装等等。

作为一个Java的忠实用户,我个人当然最喜欢用Java啦,而且Java本身还有一个好处:开发的程序仅需要做很小的修改就可以移植到Android上面,做终端应用了。jPBC也具有这样的功能。具体如何在Android上使用jPBC,我还需要进一步的研究和配置。朋友们需要耐心等待我下面的博客了…

系统配置

在最新版本的jPBC 2.0.0中,PBC库已经被封装在了jar包中。也就是说,我们已经不需要再本地再编译PBC库,然后通过设定Native Library的形式使用jPBC了,只需要将jar包放置在工程下即可进行调用。这也就意味着,jPBC已经可以在Windows下面使用了!

我的系统配置截图如下:


jPBC 2.0.0在任意平台下的配置

首先,我们需要在官方网站上面留意,什么情况下才需要本地编译PBC后才能够使用,什么情况下可以直接使用jPBC。jPBC官方网站上面有如下的说法:

To use JPBC, add to your classpath the following jars:

  1. jpbc_2.0.0-api.jar and
  2. jpbc_2.0.0-plaf.jar.
  • 43
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值