在galois域gf(3^m)上定义的仿射坐标系中计算超奇异椭圆曲线e:y^2=x^3-x+1状态双线性对的库

tate_bilinear_pairing的Python项目详细描述


简介

这个包是一个用于计算状态双线性对的python库, 特别是在仿射中的超奇异椭圆曲线$e:y^2=x^3-x+1$ 在伽罗瓦域$gf(3^m)$上定义的坐标。最大订单 $G_1$是911位。

这个包还用于计算两个元素的相加 在椭圆曲线群中,加上$k$恒等元 在椭圆曲线群中。

计算状态双线性对的这个包的代码如下 Beuchat等人的论文[3]。这个计算包的代码 椭圆曲线群运算遵循kerins等人的论文[2]。

这个包是纯python的,使用python 2.7和3.2。

此程序包在3.26秒内计算一个状态双线性对 @Intel Core2 L7500 CPU(1.60GHz),如果$G_1$的顺序是151位。


什么是状态双线性对

一般来说,状态双线性配对算法是一种变换。 它取椭圆曲线上的两点并输出一个非零元素 在扩展字段$gf(3^{6m})$。最先进的计算方法 tate双线性对是由barreto等人[4]引入的eta对。 更多信息,请参考[1,2,3,4]。


用法1:计算状态双线性对

指定g1的顺序为151位:

>>> from tate_bilinear_pairing import eta
>>> eta.init(151)

给定两个这样的随机数:

>>> import random
>>> a = random.randint(0,1000)
>>> b = random.randint(0,1000)

计算两个元素$[inf1,x1,y1]$,和$[inf2,x2,y2]$in 椭圆曲线群:

>>> from tate_bilinear_pairing import ecc
>>> g = ecc.gen()
>>> inf1, x1, y1 = ecc.scalar_mult(a, g)
>>> inf2, x2, y2 = ecc.scalar_mult(b, g)

状态双线性配对通过:

>>> from tate_bilinear_pairing import eta
>>> t = eta.pairing(x1, y1, x2, y2)

用法2:计算椭圆曲线组中两个元素的加法

给定两个元素$p1=[inf1,x1,y1]$,和$p2=[inf2,x2,y2]$。 椭圆曲线组,加法通过:

>>> p1 = [inf1, x1, y1]
>>> p2 = [inf2, x2, y2]
>>> p3 = ecc.add(p1, p2)

用法3:计算$K$相同元素的加法

给定一个非负整数$k$和一个组元素$p1=[inf1,x1,y1]$, $K cdot p1$通过以下方式计算:

>>> k = random.randint(0,1000)
>>> p3 = ecc.scalar_mult(k, p1)

参考资料

[1]I.Duursma,H.S.Lee.
超椭圆曲线$y^2=x^p-x+d$的tate配对实现。 密码学进展。2003年,第111-123页。
[2]T.克林斯、W.P.马纳内、E.M.波波维奇和P.S.L.M.巴雷托。
特性3中状态配对计算的有效硬件。 密码硬件和嵌入式系统.proc.2005年,第412-426页。
[3]J.Beuchat、N.Brisebarre、J.Detrey、E.Okamoto、M.Shirase和T.Takagi。
计算特征3中的$eta_t$对的算法和算术运算符。 《计算机上的ieee交易》,密码学和密码分析专用硬件特别部分,第57卷第11期,第1454-1468页,2008年。
[4]P.S.L.M.Barreto、S.D.Galbraith、C.O Heigerataigh和M.Scott,
超奇异交换变种的有效配对计算。 《设计、代码和密码》,第42卷,第3期,第239-271页,2007年3月。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java jgrapht SimpleDirectedWeightedGraph规范化权重   java安卓使用CFB   java如何从javaclass警告浏览器?可能吗?   javagson结构难点   java使用jbossclient的最佳方式是什么。Wildfly 10应用程序中的jar?   JAVA:socket重写以使用CipherInputStream和CipherOutputStream   java Android UI测试长时间点击并拖动   java如何在Android中重置AtomicInteger唯一Id?   多线程客户端/服务器应用程序上的java客户端断开连接   GAE Memcache中的java损坏值   java如何使用变量作为资源的路径?   爪哇?(三向)操作员