Java密码学原型算法实现——双线性对

上传人:灯火****19 文档编号:122360313 上传时间:2020-03-04 格式:PDF 页数:7 大小:339.16KB
返回 下载 相关 举报
Java密码学原型算法实现——双线性对_第1页
第1页 / 共7页
Java密码学原型算法实现——双线性对_第2页
第2页 / 共7页
Java密码学原型算法实现——双线性对_第3页
第3页 / 共7页
Java密码学原型算法实现——双线性对_第4页
第4页 / 共7页
Java密码学原型算法实现——双线性对_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《Java密码学原型算法实现——双线性对》由会员分享,可在线阅读,更多相关《Java密码学原型算法实现——双线性对(7页珍藏版)》请在金锄头文库上搜索。

1、JavaJava 密码学原型算法实现密码学原型算法实现 双线性对双线性对 1 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

2、 的实现 也是正确的 有兴趣的朋友们可以自己研究 一下 我在这里就不详述了 如何使用 jPBC 2 0 0 的多线性对 Multilinear Maps 函 数库 这方面我自己一直没找时间测试一下多线性对函数库 实际上近期我也不太想测试 这个库 主要有两方面的原因 现在所构造出来的多线性对并非密码学中的理想多线性对 Ideal Multilinear Maps 而是候选多线性对 Candidate Multilinear Maps 后者在使用上有很多的限 制 jPBC 2 0 0 实现的多线性对是 CLT 14 的方案 但这个方案已经被证明是不安全的 了 2 2 双线性群简介双线性群简介 这里

3、我直接引用自己的二篇水文来介绍 都是凑数用的 选择密文安全的身份及广 播加密方案 密码学报 Experimental performance comparisons between H IBE schemes over composite order and prime order bilinear groups IBCAST 2014 3 3 质数阶双线性群 质数阶双线性群 PrimePrime Order Bilinear GroupsOrder Bilinear Groups 质数双线性群可以由五元组 12 T p G G G e来描述 五元组中p是一个与安全常数 相关的大质数 12 T

4、 G G G是阶为 p 的乘法循环群 e为双线性映射 12 T e GGG 它满足以下 3 个条件 1 双线性 Bilinear 对任意的 12 p gG hG a bZ 有 ab ab e ghe g h 2 非退化性 Non degeneracy 至少存在元素 1122 gG gG 满足 12 1e g g 3 可计算性 Efficiency 对于任意的 12 uG vG 存在一个与给定安全常数 相关的多项式时间算法 可以高效地计算 e u v 现在的密码学相关论文中 习惯将 12 G G设置为乘法循环群 但是 基于椭圆曲线的 双线性群构造中 12 G G是加法群 所以在大约 2005 年

5、以前的论文中 双线性群一般写成 加法群形式 jPBC 中将 12 G G表示称为了乘法循环群 因此在实现写成加法群形式的方案 时 要注意将加法群改成乘法群的写法再进行实现 如何修改呢 很简单 把加法群中的 加法运算写成乘法运算 把加法群中的乘法运算写成幂指数运算即可 4 4 合数阶双线性群 合数阶双线性群 CompositeComposite Order Bilinear GroupsOrder Bilinear Groups 合数阶双线性群和质数阶双线性群很类似 区别是 12 T G G G 的阶数是合数N 其中 N是一些大质数的乘积 如 12 n Np pp 同样 e为双线性映射 12 T

6、 e GGG 它 满足双线性性 非退化性以及可计算性 与质数阶双线性群不同 合数阶双线性群中 N G有阶数分别为 12 n p pp的子群 1 n pp GG 这些子群进一步满足正交特性 对于所有的 i ip hG 和 j jp hG 如果ij 那么 1 ij e h h 简单地说就是 子 群之间进行双线性运算的结果必为 1 5 5 一些说明一些说明 首先 由于双线性群现在的构造是基于椭圆曲线的 而椭圆曲线上的元素是由坐标 x y表示的 所以如果我们将 12 G G的结果输出到 Java 的控制台 我们得到的是一个坐 标 不过 T G 是一个普通的Z群 所以其元素的表示是一个数 其次 在密码学

7、中 如果 12 GG 我们称这个双线性群是对称双线性群 Symmetric Bilinear Group 否则称之为非对称双线性群 Asymmetric Bilinear Group 是否为对称双线性群由选取的椭圆曲线种类决定 一般认为 非对称双线性群要比对 称双线性群更安全 特别地 现在已经证明一些特定的对称双线性群是不安全的了 现在 jPBC 可以使用的曲线为如下几类 Type A Type A1 Type D Type E Type F Type G 现在密码学实现基本只使用 Type A 和 Type A1 的 前者为对称质数阶双线性群 后者 为合数阶对称双线性群 本博客也只在这两类曲

8、线上实验 其他类曲线的实现类似 由于 是对称双线性群 本文中 12 G G统一写为G 6 6 双线性群初始化双线性群初始化 在 jPBC 中 双线性群的使用都是通过叫做 Pairing 的对象来实现的 双线性群的初始 化在 jPBC 中就是对 Pairing 对象的初始化 双线性群有两种初始化的方法 第一种是通过 代码动态产生一个双线性群 第二种是从文件中读取参数而产生群 7 7 通过代码动态产生通过代码动态产生 动态产生的方法非常简单 大概有如下步骤 指定椭圆曲线的种类 产生椭圆曲线参 数 初始化 Pairing Type A 曲线需要两个参数 rBit 是 Zp 中阶数 p 的比特长度 q

9、Bit 是 G 中阶数的比特长度 代码为 TypeACurveGenerator pg new TypeACurveGenerator rBit qBit PairingParameters typeAParams pg generate Pairing pairing PairingFactory getPairing typeAParams Type A1 曲线需要二个参数 numPrime 是阶数 N 中有几个质数因子 qBit 是每个质数 因子的比特长度 注意 Type A1 涉及到的阶数很大 其参数产生的时间也比较长 代码 为 TypeA1CurveGenerator pg new

10、TypeA1CurveGenerator numPrime qBit PairingParameters typeA1Params pg generate Pairing pairing PairingFactory getPairing typeA1Params 8 通过文件读取产生通过文件读取产生 我们也可以选择事先产生好参数 存放在文件中 以后再初始化的时候 直接从文件 中读取参数 就可以非常快速的初始化双线性群 PairingParameters 支持 toString 函 数 实际上 我们可以直接将 PairingParametersd 的 toString 存放在文件中 读取的 时

11、候 通过读取文件就可以直接初始化双线性群了 Type AType A 曲线从文件中读取参数初始化的代码为 曲线从文件中读取参数初始化的代码为 TypeACurveGenerator pg new TypeACurveGenerator rBit qBit PairingParameters typeAParams pg generate 将参数写入文件 a properties 中 我用了 Princeton 大学封装的文件输出库 Out out new Out a properties out println typeAParams 从文件 a properties 中读取参数初始化双线性群

12、 Pairing pairing PairingFactory getPairing a properties Type A1Type A1 曲线从文件中读取参数初始化的代码为 曲线从文件中读取参数初始化的代码为 TypeA1CurveGenerator pg new TypeA1CurveGenerator numPrimes qBit PairingParameters typeA1Params pg generate 将参数写入文件 a1 properties 中 同样使用了 Princeton 大学封装的文件 输出库 Out out new Out a1 properties out

13、println typeA1Params 从文件 a1 properties 中读取参数初始化双线性群 Pairing pairing PairingFactory getPairing a1 properties 9 产生双线性群中的随机数产生双线性群中的随机数 Type A 中产生随机数的方法很简单 代码为 随机产生一个 Z p 群的元素 Element Z p pairing getZr newRandomElement getImmutable 随机产生一个 G 1 群的元素 Element G 1 pairing getG1 newRandomElement getImmutable

14、 随机产生一个 G 2 群的元素 Element G 2 pairing getG2 newRandomElement getImmutable 随机产生一个 G T 群的元素 Element G T pairing getGT newRandomElement getImmutable Type A1 中产生随机数的方法稍微有点麻烦 对于 ZN 和 GT 方法和 Type A 一样 代码为 随机产生一个 Z N 群的元素 Element Z N pairing getZr newRandomElement getImmutable 随机产生一个 G T 群的元素 Element G T pa

15、iring getGT newRandomElement getImmutable 但是对于 G 就不同了 因为 G 有子群 Gpi Type A1 产生随机数时需要指定生成元 椭 圆曲线的参数 产生哪个子群的元素 以及 Type A1 一共有多少个子群 假定我们产生的 Type A1 共有 n 个子群 这 n 个子群的阶分别为 p1 pn 产生随机 数的代码如下 TypeA1CurveGenerator pg new TypeA1CurveGenerator numPrimes qBit PairingParameters typeA1Params pg generate Pairing p

16、airing PairingFactory getPairing typeA1Params 设定并存储一个生成元 由于椭圆曲线是加法群 所以 G 群中任意一个元素 都可以作为生成元 Element generator pairing getG1 newRandomElement getImmutable 随机产生一个 G p 1 中的元素 Element G p 1 ElementUtils getGenerator pairing generator typeA1Params 0 numPrimes getImmutable 随机产生一个 G p 2 中的元素 Element G p 2 ElementUtils getGenerator pairing generator typeA1Params 1 numPrimes getImmutable 随机产生一个 G p n 中的元素 Element G p n ElementUtils getGenerator pairing generator typeA1Params 1 numPrimes getImmutable 10 将指

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号