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

题注

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

这一篇博客实际上是一位技术朋友希望我能撰写的。他和他团队的小伙伴们在使用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
    评论
Android studio 配置 jPBC 2.0.0 1、在压缩包的jars文件夹下找到下面两个文件:jpbc-api-2.0.0.jar    和   jpbc-plaf-2.0.0.jar 2、将上述两个jar包导入工程依赖包!!不会的百度一下Android studio怎么导入jar包!!! 3、在压缩包的jpbc-android文件夹下的assets文件夹下有4个用于测试的椭圆曲线常数Properties:a.properties、d159.properties、d201.properties,以及d224.properties,应该挪到Android 工程的assets文件夹下(当然也不一定非是这4个,只要是.properties参数文件都可以放进去,以供调用!!!),重点来了,Android studio 中并没有assets文件夹(assets文件夹是基于Eclipse进行android开发时专门存放资源文件的地方),怎么办呢?(android  studio老鸟勿喷)。实际上Android studio 也有存放资源文件的地方,那就是res文件夹!!!所以在Android strudio中我们可以新建一个与res文件夹并列的assets文件夹,具体步骤为:          点击main文件夹,然后右键---->New---->Folder---->Assets Folder---->点击完成      然后就可以发现main文件夹下多了一个assets资源文件夹!!!然后再把上述4个文件放进去就好了!!! 注意在加密中经常用到.properties文件,所以可以采用如下方式调用:                 Pairing pairing = PairingFactory.getPairing("assets/e_181_1024.properties");                 Field G = pairing.getG1();                 Field GT = pairing.getGT();                 Field Zq = pairing.getZr(); 之后就可以在工程里正常调用jpbc相关库函数并进行加密了!!!
fastjson 2.0.0本提供了多种反序列化配置,可以通过配置来控制反序列化的行为,以增强安全性和灵活性。以下是常见的反序列化配置: 1. AutoType:开启该配置后,fastjson将支持反序列化任何Java类,包括未知的、不在白名单中的类。这个配置存在安全隐患,因为攻击者可以通过构造恶意的JSON字符串来执行任意代码。因此,建议仅在必要时才开启该配置,并通过白名单过滤掉非法类。 2. ParserConfig:该配置用于管理反序列化时的解析器配置,包括白名单、黑名单、自定义反序列化器等。通过ParserConfig可以实现更精细的反序列化控制。 3. Feature:该配置用于开启或关闭fastjson的一些特性,如自动类型匹配、允许注释、允许单引号等。通过Feature可以灵活地控制反序列化的行为。 4. ASM:该配置用于开启或关闭fastjson的ASM字节码增强功能,以提高反序列化性能。默认情况下,fastjson会尝试使用ASM来优化反序列化代码,但在某些环境下可能会造成兼容性问题。 5. SerializeConfig:该配置用于序列化时的配置管理,包括白名单、黑名单、自定义序列化器等。通过SerializeConfig可以实现更精细的序列化控制。 这些配置可以通过调用JSON类的静态方法来设置,例如: ``` JSON.DEFAULT_PARSER_FEATURE |= Feature.AutoCloseSource.getMask(); JSON.DEFAULT_PARSER_FEATURE &= ~Feature.UseBigDecimal.getMask(); ``` 注意,反序列化配置应该根据具体情况进行选择和设置,以确保安全和性能。建议仔细阅读fastjson的官方文档,并参考相关的安全规范和最佳实践。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值