Java 密码学原型算法实现——双线性对
1、背景介绍
如何使用jPBC 库进行双线性群初始化,包括:
(1)质数阶双线性群(Prime-Order Bilinear Groups );
(2)合数阶双线性群(Composite-Order Bilinear Groups );
如何使用jPBC 库执行双线性群运算,包括:
(1) 指数群Z 的加法和乘法;
(2) 双线性群G 的乘法和指数幂;
(3) 目标群GT 的乘法和指数幂
(4) 双线性群G 映射到目标群GT 的对(Pairing )运算;
(5) 使用jPBC 库的一些注意事项。
jPBC 2.0.0实际上提供了DPVS 的实现,也是正确的。有兴趣的朋友们可以自己研究一下,我在这里就不详述了。 如何使用jPBC 2.0.0的多线性对(Multilinear Maps )函数库;这方面我自己一直没找时间测试一下多线性对函数库,实际上近期我也不太想测试这个库,主要有两方面的原因。
现在所构造出来的多线性对并非密码学中的理想多线性对(Ideal Multilinear Maps ),而是候选多线性对(Candidate Multilinear Maps ),后者在使用上有很多的限制。 jPBC 2.0.0实现的多线性对是[CLT-14]的方案,但这个方案已经被证明是不安全的了。
2、双线性群简介
这里我直接引用自己的二篇水文来介绍(都是凑数用的…)选择密文安全的身份及广播加密方案,密码学报,Experimental performance comparisons between (H) IBE schemes over composite-order and prime-order bilinear groups ,IBCAST 2014。
3、质数阶双线性群(Prime-Order Bilinear Groups ) 质数双线性群可以由五元组()12,,,,T p G G G e 来描述。五元组中p 是一个与安全常数λ相关的大质数,12,,T G G G 是阶为p 的乘法循环群,e 为双线性映射12:T e G G G ⨯→,它满足以下3个条件:
(1) 双线性(Bilinear ):对任意的12,,,p g G h G a b Z ∈∈∈,有
()(),,ab
a b e g h e g h =; (2)非退化性(Non-degeneracy )至少存在元素1122,g G g G ∈∈,满足()12,1e g g ≠;