java密码学原型算法实现——双线性对
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)
质数双线性群可以由五元组 p ,G ,G ,G ,e 来描述。五元组中 是一个与安全常数
1 2 T p
G , G , G e e :G G G
相关的大质数, 1 2 T 是阶为p 的乘法循环群, 为双线性映射 1 2 T ,
它满足以下3 个条件:
(1)双线性(Bilinear):对任意的g G ,h G ,a,b Z ,有
1 2 p
a b ab
e g , h e g, h ;
(2)非退化性(Non-degeneracy)至少存在元素g G ,g G ,满足
1 1 2 2
e g , g 1;
1 2
(3)可计算性(Efficiency):对于任意的u G ,v G ,存在一个与给定安全常数
1 2
相关的多项式时间算法,可以高效地计算e u,v ;
现在的密码学相关论文中,习惯将G , G 设置为乘法循环群。但是,基于椭圆曲线的
1 2
双线性群构造中,G , G 是加法群。所以在大约2005 年以前的论文中,双线性群一般写成
1 2
加法群形式。jPBC 中将G , G 表示称为了乘法循环群,因此在实现写成加法群形式的方案