Pairing friendly curve

 https://zhuanlan.zhihu.com/p/104531745

 

 

作者:咕噜咕噜
链接:https://zhuanlan.zhihu.com/p/350346362
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Pairing在椭圆曲线密码中起着很大的作用,它是许多密码协议的基础。本文的目的是:介绍pairing的基本数学原理,以及实现时应注意的问题。为了方便,我们针对国密算法SM9所指定的曲线(BN曲线)来说明,有关SM9算法的具体描述,可参考SM9标准。首先,从宏观上来看双线性对,它就是这样的一个双线性映射:

[公式] ,其中 [公式] 是三个群, [公式] 是椭圆曲线上的两个子群,而 [公式] 是有限域中的一个乘法子群。所谓“双线性”是指,对于 [公式] ,有

[公式] ,这里将 [公式] 视为乘法群,当然也可以将其视为加法群,即 [公式]

配对类型:

  • [公式]
  • [公式] ,但这两个群之间有着一个可以高效计算的同构映射
  • [公式] ,不存在可以高效计算的同构映射

首先,我们先来介绍一个定理,它是搞清楚椭圆曲线群结构的基础:

定理:设 [公式][公式] ,设 [公式] 是一个素数,且 [公式] ,定义 [公式] ,易证 [公式][公式] 的阶为 [公式] 的子群。假设 [公式] 是满足 [公式] 的最小的正整数( [公式] 称为是关于 [公式] 的嵌入次数),令 [公式] ,那么 [公式] 是一个 [公式] 的子群,而且它同构于两个 [公式] 阶循环群的直积。

这个定理说明了,在基域上所有 [公式] 阶点和 [公式] 构成 [公式] 阶循环群,然后将域扩张到满足定理中的 [公式] 这个条件,那么这时在扩域上,所有 [公式] 阶点和 [公式] 构成了一个 [公式] 阶的群。而且这个 [公式] 阶群是两个循环群的直积,进一步,由于这个群中所有元素的阶(除单位元)都是 [公式] ,我们在这个群中随意找一个 [公式] 阶元 [公式] ,由它可生成一个 [公式] 阶子群,然后在这个子群之外再随意找一个 [公式] 阶元 [公式] ,那么显然 [公式] 也生成了一个 [公式] 阶子群,而且 [公式] 各自生成的子群的交就是单位元,因此,我们按照这个方法继续找 [公式] ,这样,我们把 [公式] 阶群写成了 [公式][公式] 阶子群的并集,这些 [公式] 阶群的交集是单位元。

A toy example:设 [公式][公式] ,这时可以计算出 [公式] ,令 [公式] ,那么显然 [公式] 是7阶循环群。由于 [公式] ,因此嵌入次数 [公式] ,我们利用 [公式] 上的不可约多项式 [公式] ,将基域扩张为 [公式] ,根据上面的定理, [公式] ,而且它可以分成8个7阶循环群的并集,如下图:

在上图中,我们观察,左上角的那个子群中的点的坐标都是在基域上的,而其他子群的点的坐标都是在扩域上的,实际上这个群就是我们在pairing中的 [公式] ,但是 [公式] 是哪个群呢?到目前为止还无法说清楚,见后续哟。

 
 
 
 
 
椭圆曲线-双线性对II

续接上文,本节的主要目的是搞清楚pairing中 群[公式] 是哪个群,上文中说到, [公式] 就是在坐标在基域上的点构成的 [公式] 阶循环子群。

首先,我们先对 [公式] 中的元素定义以下三个映射:

  1. Frobenius map [公式] : [公式]
  2. Trace [公式] : [公式]
  3. anti-Trace [公式] : [公式] ,其中 [公式] 表示点乘运算。

现在,我们来看 [公式] 中的点在这些映射下是怎样变化的,首先由于 [公式] 中的点的坐标都是基域 [公式] 上的,因此,在Frobenius映射 [公式] 下,其中的点都是不动的,即 [公式] 在 [公式] 上是恒同变换。对于 [公式] , [公式] ,由于 [公式] ,这说明 [公式] 在 [公式] 的作用下是不动的,因此, [公式] 。又因为 [公式] ,因此, [公式] 将 [公式] 中所有的点都映射到 [公式] 。到此,我们可以将 [公式] 写为:

[公式]

上面定义的Frobenius map在 [公式] 上是恒同映射,但在 [公式] 中的另一个 [公式] 阶子群上,有 [公式] (暂不证明),我们记这个子群为 [公式] ,因此类比于 [公式] 的写法,我们可以将 [公式] 写为:

[公式]

而且可以证明,对于 [公式] 。因此在 [公式] 的 [公式] 个“花瓣”中,我们找到了两个比较特殊的: [公式] ,它们的特殊性体现在上述映射下的性质。上面的讨论可以总结为下图:

其中还有关于anti-Trace的性质,可参考上图,这里先不证明。

到此,我们已经找到了 [公式] 中两个特殊的群,其实这两个群就是pairing所基于的两个群,但我们发现, [公式] 中的点的坐标是在扩域 [公式] 上的,在实际应用中,往往取 [公式] ,这个扩域是非常大的,其上的计算也比较低效。因此,我们去找另一条曲线 [公式] ,使得它与原曲线 [公式] 同构,既然同构,我们就可以将 [公式] 上的 [公式] 转化为 [公式] 上某个点坐标在一个较小域上的子群,这样便可以提高计算效率, [公式] 上的这个子群就是我们真正的 [公式] 。在下一节中,我们来介绍 [公式] 和 [公式] 的关系。

 

 

 

 

椭圆曲线-双线性对III

上节中,我们找到了 [公式] 的 [公式] 个花瓣中两个较为特殊的,即 [公式] :

[公式]

[公式]

而且我们说明了 上述群写成[公式] 而非 [公式] 的原因:因为 [公式] 中点的坐标都是在扩域 [公式] 中,其上的计算量大,导致pairing计算的效率也比较低,因此我们想找另一条曲线 [公式] ,使得它与原曲线 [公式] 同构,利用这个同构关系,将 [公式] 上的 [公式] 转化为 [公式] 上的与之同构的子群,这个子群中点的坐标在一个较小的域 [公式] 上,因此,其上的计算会更快。我们称这样的曲线 [公式] 为 [公式] 的孪生曲线(twist curve),或者叫扭曲线。

设 [公式] ,定义 [公式] ,其中 [公式] ,则 [公式] 同构(这个可以参考介绍椭圆曲线理论的相关教材)。同构映射为:

[公式]

,所谓两条曲线在 [公式] 上同构,是指这两条曲线的群结构是同构的,即 [公式] ,既然 [公式] 具有“花瓣”结构,因此 [公式] 同样具有“花瓣”结构,因此,利用这个同构映射,便可将 [公式] 上的[公式]转化为 [公式] 上的某个子群。我们希望的是转化到某个点坐标在较小域 [公式] 上的子群,然而,我们并不能使 [公式] 任意小,我们当然希望 [公式] ,但有定理保证, [公式] 的取值只可能为 [公式] 这几个值,显然最好的情况是 [公式] 。下面我们通过一个简单的例子来说明:

Example:设 [公式] , [公式] ,则 [公式] ,我们令 [公式] ,计算其嵌入次数 [公式] ,因此我们将域扩充至 [公式] ,利用不可约多项式 [公式] ,计算其孪生曲线 [公式] ,利用 [公式] 之间的同构关系,我们有下图所示的转化:

图中左侧表示 [公式] 对应的群, 右侧表示[公式] 对应的群,左侧“花瓣”的左上角就是 [公式] ,右上角就是 [公式] ,利用同构映射,将 [公式] 转化到了 [公式] 上的子群,这个子群就是真正的 [公式] 。我们将 [公式] 转化到了一个点坐标在 [公式] 上的子群,因此我们对应的是 [公式] 的情况。

 

在国密算法SM9中所指定的曲线就是对应 [公式] 的情况,其中 [公式] ,这条曲线属于BN曲线,BN曲线是一族曲线,其曲线参数都可以写成是关于某个变量的函数,这个变量取定一个值时,便生成一条曲线。

Pairing friendly curve:回忆之前的内容,我们每次都是选择一个素数 [公式] ,然后计算其嵌入次数 [公式] ,它是满足[公式] 的最小的正整数,之后就要将域扩张到 [公式] ,然后利用孪生曲线,最多可以将域降至 [公式] ,这里就有了这样的问题,如果 [公式] 太大,即使除以6仍然会较大,这时pairing计算的效率也会很低,因此我们希望 [公式] 一般较小,这样的曲线称为配对友好的曲线。我们将 [公式] 可以写成 [公式] ,因此 [公式] 是 [公式] 在 [公式] 中的阶,如果随机选择一条曲线的话,求出的 [公式] 往往很大,故配对友好曲线需要用特殊的方法来寻找,而非随机生成一条曲线。

posted @ 2021-04-15 12:01  zJanly  阅读(607)  评论(0编辑  收藏  举报