Pairing friendly curve

 

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

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

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

Pairing friendly curve ,这里将 Pairing friendly curve 视为乘法群,当然也可以将其视为加法群,即 Pairing friendly curve

配对类型:

  • Pairing friendly curve
  • Pairing friendly curve ,但这两个群之间有着一个可以高效计算的同构映射
  • Pairing friendly curve ,不存在可以高效计算的同构映射

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

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

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

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

Pairing friendly curve

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

          Pairing friendly curve

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

首先,我们先对 Pairing friendly curve 中的元素定义以下三个映射:

  1. Frobenius map Pairing friendly curve : Pairing friendly curve
  2. Trace Pairing friendly curve : Pairing friendly curve
  3. anti-Trace Pairing friendly curve : Pairing friendly curve ,其中 Pairing friendly curve 表示点乘运算。

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

Pairing friendly curve

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

Pairing friendly curve

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

Pairing friendly curve

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

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

 

 

 

 

Pairing friendly curve

上节中,我们找到了 Pairing friendly curve 的 Pairing friendly curve 个花瓣中两个较为特殊的,即 Pairing friendly curve :

Pairing friendly curve

Pairing friendly curve

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

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

Pairing friendly curve

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

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

Pairing friendly curve

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

 

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

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

上一篇:篇5-sva中序列的构建(2)


下一篇:【优化求解】基于柯西变异和自适应权重优化的蝴蝶算法求解单目标优化问题matlab代码