Pairing friendly curve
作者:互联网
作者:咕噜咕噜
链接:https://zhuanlan.zhihu.com/p/350346362
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Pairing在椭圆曲线密码中起着很大的作用,它是许多密码协议的基础。本文的目的是:介绍pairing的基本数学原理,以及实现时应注意的问题。为了方便,我们针对国密算法SM9所指定的曲线(BN曲线)来说明,有关SM9算法的具体描述,可参考SM9标准。首先,从宏观上来看双线性对,它就是这样的一个双线性映射:
,其中
是三个群,
是椭圆曲线上的两个子群,而
是有限域中的一个乘法子群。所谓“双线性”是指,对于
,有
,这里将
视为乘法群,当然也可以将其视为加法群,即
。
配对类型:
,但这两个群之间有着一个可以高效计算的同构映射
,不存在可以高效计算的同构映射
首先,我们先来介绍一个定理,它是搞清楚椭圆曲线群结构的基础:
定理:设 ,
,设
是一个素数,且
,定义
,易证
是
的阶为
的子群。假设
是满足
的最小的正整数(
称为是关于
的嵌入次数),令
,那么
是一个
的子群,而且它同构于两个
阶循环群的直积。
这个定理说明了,在基域上所有 阶点和
构成
阶循环群,然后将域扩张到满足定理中的
这个条件,那么这时在扩域上,所有
阶点和
构成了一个
阶的群。而且这个
阶群是两个循环群的直积,进一步,由于这个群中所有元素的阶(除单位元)都是
,我们在这个群中随意找一个
阶元
,由它可生成一个
阶子群,然后在这个子群之外再随意找一个
阶元
,那么显然
也生成了一个
阶子群,而且
各自生成的子群的交就是单位元,因此,我们按照这个方法继续找
,这样,我们把
阶群写成了
个
阶子群的并集,这些
阶群的交集是单位元。
A toy example:设 ,
,这时可以计算出
,令
,那么显然
是7阶循环群。由于
,因此嵌入次数
,我们利用
上的不可约多项式
,将基域扩张为
,根据上面的定理,
,而且它可以分成8个7阶循环群的并集,如下图:
![](https://pic4.zhimg.com/80/v2-e327a1a42604f96ad84e7d57a6216fa3_720w.jpg?source=3af55fa1)
在上图中,我们观察,左上角的那个子群中的点的坐标都是在基域上的,而其他子群的点的坐标都是在扩域上的,实际上这个群就是我们在pairing中的 ,但是
是哪个群呢?到目前为止还无法说清楚,见后续哟。
![椭圆曲线-双线性对II](https://pic4.zhimg.com/v2-41496403f1b2209269c858d529a6969e_720w.jpg?source=3af55fa1)
续接上文,本节的主要目的是搞清楚pairing中 群 是哪个群,上文中说到,
就是在坐标在基域上的点构成的
阶循环子群。
首先,我们先对 中的元素定义以下三个映射:
- Frobenius map
:
- Trace
:
- anti-Trace
:
,其中
表示点乘运算。
现在,我们来看 中的点在这些映射下是怎样变化的,首先由于
中的点的坐标都是基域
上的,因此,在Frobenius映射
下,其中的点都是不动的,即
在
上是恒同变换。对于
,
,由于
,这说明
在
的作用下是不动的,因此,
。又因为
,因此,
将
中所有的点都映射到
。到此,我们可以将
写为:
上面定义的Frobenius map在 上是恒同映射,但在
中的另一个
阶子群上,有
(暂不证明),我们记这个子群为
,因此类比于
的写法,我们可以将
写为:
而且可以证明,对于 。因此在
的
个“花瓣”中,我们找到了两个比较特殊的:
,它们的特殊性体现在上述映射下的性质。上面的讨论可以总结为下图:
![](https://pic1.zhimg.com/80/v2-20a24f47503d4a9d711a102f72224244_720w.jpg?source=3af55fa1)
其中还有关于anti-Trace的性质,可参考上图,这里先不证明。
到此,我们已经找到了 中两个特殊的群,其实这两个群就是pairing所基于的两个群,但我们发现,
中的点的坐标是在扩域
上的,在实际应用中,往往取
,这个扩域是非常大的,其上的计算也比较低效。因此,我们去找另一条曲线
,使得它与原曲线
同构,既然同构,我们就可以将
上的
转化为
上某个点坐标在一个较小域上的子群,这样便可以提高计算效率,
上的这个子群就是我们真正的
。在下一节中,我们来介绍
和
的关系。
![椭圆曲线-双线性对III](https://pic4.zhimg.com/v2-7ae6970cfb827ee14e61a82147470a31_720w.jpg?source=3af55fa1)
上节中,我们找到了 的
个花瓣中两个较为特殊的,即
:
而且我们说明了 上述群写成 而非
的原因:因为
中点的坐标都是在扩域
中,其上的计算量大,导致pairing计算的效率也比较低,因此我们想找另一条曲线
,使得它与原曲线
同构,利用这个同构关系,将
上的
转化为
上的与之同构的子群,这个子群中点的坐标在一个较小的域
上,因此,其上的计算会更快。我们称这样的曲线
为
的孪生曲线(twist curve),或者叫扭曲线。
设 ,定义
,其中
,则
同构(这个可以参考介绍椭圆曲线理论的相关教材)。同构映射为:
,所谓两条曲线在 上同构,是指这两条曲线的群结构是同构的,即
,既然
具有“花瓣”结构,因此
同样具有“花瓣”结构,因此,利用这个同构映射,便可将
上的
转化为
上的某个子群。我们希望的是转化到某个点坐标在较小域
上的子群,然而,我们并不能使
任意小,我们当然希望
,但有定理保证,
的取值只可能为
这几个值,显然最好的情况是
。下面我们通过一个简单的例子来说明:
Example:设 ,
,则
,我们令
,计算其嵌入次数
,因此我们将域扩充至
,利用不可约多项式
,计算其孪生曲线
,利用
之间的同构关系,我们有下图所示的转化:
![](https://pic4.zhimg.com/80/v2-07b9cd7bba81968f5455967e9d3e528e_720w.jpg?source=3af55fa1)
图中左侧表示 对应的群, 右侧表示
对应的群,左侧“花瓣”的左上角就是
,右上角就是
,利用同构映射,将
转化到了
上的子群,这个子群就是真正的
。我们将
转化到了一个点坐标在
上的子群,因此我们对应的是
的情况。
在国密算法SM9中所指定的曲线就是对应 的情况,其中
,这条曲线属于BN曲线,BN曲线是一族曲线,其曲线参数都可以写成是关于某个变量的函数,这个变量取定一个值时,便生成一条曲线。
Pairing friendly curve:回忆之前的内容,我们每次都是选择一个素数 ,然后计算其嵌入次数
,它是满足
的最小的正整数,之后就要将域扩张到
,然后利用孪生曲线,最多可以将域降至
,这里就有了这样的问题,如果
太大,即使除以6仍然会较大,这时pairing计算的效率也会很低,因此我们希望
一般较小,这样的曲线称为配对友好的曲线。我们将
可以写成
,因此
是
在
中的阶,如果随机选择一条曲线的话,求出的
往往很大,故配对友好曲线需要用特殊的方法来寻找,而非随机生成一条曲线。
标签:同构,曲线,映射,Pairing,curve,我们,坐标,子群,friendly 来源: https://www.cnblogs.com/Janly/p/14661877.html