背景介绍
技术博客已经好久没更新了。倒不是因为没得写,是因为实在是太忙了,而且研究也到了一个瓶颈期,需要大量阅读文献。
本来打算很长一段时间都不更新博客了,甚至打算等我毕业工作后再更新一些有价值的博客,但是最近在CSDN私信上和知乎上经常收到求救帖子,希望我能写一个jPBC使用方法的博客。甚至实验室的硕士生们也在各种咨询我相关的问题。于是,我打算一劳永逸,写一篇有关jPBC使用的博客。希望这个博客出来后,能解决绝大多数人的问题吧…
本篇博客期望解决的问题:
- 如何使用jPBC库进行双线性群初始化,包括:
- 质数阶双线性群(Prime-Order Bilinear Groups);
- 合数阶双线性群(Composite-Order Bilinear Groups);
- 如何使用jPBC库执行双线性群运算,包括:
- 指数群 Z 的加法和乘法;
- 双线性群 G 的乘法和指数幂;
- 目标群 GT 的乘法和指数幂
- 双线性群 G 映射到目标群 GT 的对(Pairing)运算;
- 使用jPBC库的一些注意事项。
本篇博客不会涉及到的问题:
- 如何配置jPBC库到Eclipse中;这方面的内容请参考我的另一篇博客:jPBC 2.0.0配置与测试(补充版);
- 有关双线性对的数学知识;这方面我在第二章会稍微介绍一下,但是不会详谈,因为内容太多了。
- 对偶双线性群向量空间群(Dual Pairing Vector Space,DPVS);这个群在理论上被用于替代合数阶双线性群。其可以在保证同等安全性的条件下,使双线性对运算时间较短,而代价是存储开销会变大。这个工具在2012年得到了广泛的应用。但是这两年普遍认为这个工具的进一步应用场景有限,而且表示并不直观,还不如和合数阶双线性群好用。jPBC 2.0.0实际上提供了DPVS的实现,也是正确的。有兴趣的朋友们可以自己研究一下,我在这里就不详述了。
- 如何使用jPBC 2.0.0的多线性对(Multilinear Maps)函数库;这方面我自己一直没找时间测试一下多线性对函数库,实际上近期我也不太想测试这个库,主要有两方面的原因。
- 现在所构造出来的多线性对并非密码学中的理想多线性对(Ideal Multilinear Maps),而是候选多线性对(Candidate Multilinear Maps),后者在使用上有很多的限制。
- jPBC 2.0.0实现的多线性对是[CLT-14]的方案,但这个方案已经被证明是不安全的了。
双线性群简介
这里我直接引用自己的二篇水文来介绍(都是凑数用的…)选择密文安全的身份及广播加密方案,密码学报,Experimental performance comparisons between (H) IBE schemes over composite-order and prime-order bilinear groups,IBCAST 2014。
质数阶双线性群(Prime-Order Bilinear Groups)
质数双线性群可以由五元组 (p,G1,G2,GT,e) 来描述。五元组中 p 是一个与给定安全常数
- 双线性(Bilinearity):对于任意的 g∈G1 , h∈G2 , a,b∈Zp ,有 e(ga,hb)