摘要:我们修改Kaliski给出的算法来计算一个质数的整数模的蒙哥马利逆。我们也给出了一个新的定义介绍了计算经典模逆、Kaliski-Montgomery逆和新的Montgomery逆的高效算法。所提出的算法适用于通用微处理器上的软件实现。
关键词:模算术;模逆;几乎逆;蒙哥马利乘法;密码学
1介绍
模一个素数p的基本算术运算(即加法、乘法和求逆)在密码学中有许多应用,例如RSA算法中的解密运算[9]、Diffie-Hellman密钥交换算法[1]、美国政府数字签名标准[8]以及最近推出的椭圆曲线密码[5]、[6]。模逆运算在公钥密码中起着重要的作用,特别是在利用所谓的加减链[2]、[4]加速求幂运算以及计算有限域GF(p)[5]、[6]。上定义的椭圆曲线上的点运算中。
以质数p取模的整数a∈[1,p-1]的模拟被定义为如ax=1(mod p)的整数x∈[1,p-1]。它通常写成x=a-1(mod p)。这是模逆[4]的经典定义。接下来我们会用到以下方法表示以p取模的数a的倒数:
模逆的定义最近被Kaliski扩展到包括所谓的基于蒙哥马利乘法算法[7]的蒙哥马利逆[3]中。在这篇文章中,我们引入了蒙哥马利逆的一个新定义,也给出了计算经典模逆、Kaliski-Montgomery逆和整数a模质数p的新Montgomery逆的有效算法。
2蒙哥马利逆
两个整数a,b∈[0,p-1]的蒙哥马利乘法被定义为c=ab2-n(mod p) 其中 n=[log2p]。我们使用下面符号表示该乘法运算,
其中p是素数,n是其位长。整数a∈[1,p-1]的蒙哥马利逆由Kaliski[3]定义为整数x=a-12n(mod p)。类似地,我们将使用下列符号来表示由Kaliski定义的Montgomery反演。
在[3]中引入的算法计算了a的蒙哥马利逆。我们给出了下面的算法。第一阶段的输出是整数r,使得r=a-12k(mod p),其中n<k≤2n。然后使用第二阶段对该结果进行校正,以获得蒙哥马利逆x=a-12n(mod p)。
3几乎蒙哥马利逆
如上所示,第一阶段计算整数r=a-12k(mod p),其中n<k≤2n。a的蒙哥马利逆被定义为x=a-12n(mod p),其中n=[log2p]。
接下来我们将第一阶段的输出称为a的几乎蒙哥马利逆,并表示为:
其中n<k≤2n。我们注意到一个类似的概念,伽罗瓦场GF(2m)中元素的几乎逆在文献[11]中引入,也在文章[10]中解决了一些实现问题。
由于k是阶段I的输出,我们将其作为输出值包含在AlmMonInv函数的定义中。我们还建议对几乎蒙哥马利逆算法的使用方式进行额外的改变。不是选择蒙哥马利基数作为R=2m(其中n=[log2p]),而是选择它作为R=2m,其中m是计算机字数w的整数倍,这就是说w=i*w(i为正整数)。蒙哥马利乘积算法适用于任何m,只要m≥n(其中n是质数p的位长)。为了提高效率,我们选择了使m大于n的最小i,换句话说就是iw=m≥n,但是(i-1)w<n。结果表明,almost Montgomery逆算法(阶段一)也适用于这种情况。此外,它甚至适用于输入a,只要它小于2m,它就可能大于p,如下面定理1所证明的。第二个问题是几乎Montgomery逆算法终止后k的值。我们在定理2中证明了n≤k≤m+n。
定理1:如果p>2是一个质数并且a≥1(a可能比p大),那么在almost Montgomery逆算法中,中间值r、s和u总是在区间[0,2p-1]上。
证明:如果a<p,那么在文献[3]中给出的证明可以用在这里。如果a>p且a不是p的整数倍,那么在while循环中只执行步骤5和步骤7,直到v小于u。在此之前,变量u、r和s保持其初始值。 当v < u时,它们开始变化,在这一点之后,算法继续处理a < p的情况。因此,a>p时中间值保持在区间[0,2p-1]内。
定理2: 如果p>2是一个质数并且a≥1,那么在almost Montgomery逆算法结束时产生的指标k取一个介于n和m+n之间的值,其中n=[log2p],m=sw(sw≥n且(s-1)w<n)。
证明:在每次循环(步骤4-7)的uv和(u+v)的减少如表1所示。注意,这些步骤是相互排斥的。也就是说,在一次迭代中,这四种情况只有一种发生。在每次迭代中,uv值至少减半,而u+v最多减半,而且在最后一次迭代之前u和v都等于1。因为uv和(u+v)的初始值分别是ap和a+p,索引值k(即迭代次数)满足:
因为2n-1< p < 2n并且0 < a < 2m,我们有:
因此,我们得到结果:n≤k≤m+n。此外,我们注意到 m-n≤ w-1,其中w是机器的字号。这意味着 m-w+1≤k≤m+n。
4使用几乎蒙哥马利逆
蒙哥马利逆算法计算x=a-12n(mod p)。Kaliski算法[3]使用了第二阶段的位级运算来实现它的目标。它在阶段II中使用(k-n)个步骤,在每个步骤中,执行一个位级右移操作。此外,如果r是奇数,则需要执行加法运算r+p。
如前所述,我们将使用这个定义x=a-12m(mod p)。此外,完全消除位级操作并使用Montgomery乘积算法得到相同的结果也是可能的。在我们的方法中,我们将这些位级操作替换为字级Montgomery乘积操作,这在微处理器上本质上更快,特别是当计算机的字大小很大时(16,32或64)。
新的第二阶段是基于预先计算的蒙哥马利基数R=2m(mod p),然而,我们只需要R2(mod p)。这个值可以预先计算、保存并在必要时使用。另一个问题是AlmMonInv和MonPro函数的输入变量范围。对于这两个函数,任何输入都不能超过2m-1。
4.1改进的Kaliski-Montgomery逆
该算法在给定整数a的情况下计算x=MonInv(a)=a-12m(mod p)。因此,它找到了整数a模p的逆,并将其转换为蒙哥马利域。修改后的Kaliski -蒙哥马利逆算法如下:
步骤2.1中MonPro函数的输入是r和R2,它们都在正确的范围内。步骤3中MonPro的输入22m-k也在正确的范围内,因为k≤m时,步骤2.2中k被调整为大于m,因此0 < 22m< 2m。
4.2经典模逆
在某些情况下,我们只对计算x=ModInv(a)=a-1(mod p)而不需要转换到Montgomery域感兴趣。实现此目的的一种方法是首先计算a的Kaliski- Montgomery逆来获得b=a-12m(mod p),依照下列式子使用Montgomery乘积,将结果重新转换回残留(非Montgomery)域:
另一种计算经典逆的方法是反转MonInv和MonPro运算的顺序,并使用常数R2=22m(mod p),具体如下:
但是,除了AlmMonInv函数之外,这些方法中的任何一种都需要两个或三个Montgomery乘积操作。取而代之的是,我们可以修改Kaliski-Montgomery逆算法,使其在一个或两个Montgomery乘积运算的AlmMonInv函数之后直接计算经典的模逆。
4.3新的蒙哥马利逆
我们提出了蒙哥马利逆的新定义:在给定输入a(mod p)的情况下, x=a-122m(mod p)。根据这个新的定义,我们计算一个已经在Montgomery域中的整数的Montgomery逆,得到同样在Montgomery域中的输出x。我们将用以下式子来表示新的蒙哥马利逆计算:
a的Kaliski-Montgomery逆定义为MonInv(a)=a-12m(mod p),其性质如下
换句话说,根据Kaliski-Montgomery逆,乘法恒等式等于1。如果我们在图像1为2m(mod p)的Montgomery域中操作,这是一个错误的假设。另一方面,新蒙哥马利逆具有如下性质:
这种逆的新定义更适合于使用Montgomery乘法计算表达式,因为它在Montgomery域中计算结果。
新的蒙哥马利逆不能直接用给定输入a2m(mod p)的MonInv算法来计算,因为我们会得到:
然而,这可以转换回蒙哥马利领域使用一个单一的蒙哥马利乘法R2(mod p)。因此,我们得到了一种计算新的Montgomery逆的方法:
同样,另一种获得相同结果的方法是颠倒操作顺序:
新算法使用预先计算的值R2(mod p),而且它的效率更高:在AlmMonInv函数之后,它只使用两三个Montgomery乘法操作。
5结论与应用
我们提出了Montgomery逆的新定义,并给出了计算经典模逆、Kaliski-Montgomery逆和新Montgomery逆的有效算法。新算法基于几乎蒙哥马利逆函数,之后需要两三个蒙哥马利乘积运算,而不是像[3]那样使用位级运算。
我们进行了一些实验,使用经典的(移位和加法)和新提出的基于Montgomery乘法的第二阶段步骤实现了所有三种反演算法。这些算法使用Microsoft Visual c++ 5.0开发系统进行编码。计时结果是在运行WindowsNT4.0操作系统的450MHz奔腾II处理器上获得的。在表2中,我们总结了计时结果。该表包含长度为160和192位的操作数(以微秒为单位)的新旧第二阶段计时(旧PhII和新PhII)。最后两列(PhII-Spd和All-Spd)只给出了第二阶段的加速和总体加速,这说明了所介绍算法的效率。
本文给出了新的蒙哥马利逆在eP计算中的一个应用,其中e是一个整数,P是在有限域GF(P)上定义的椭圆曲线上的一个点。这个计算要求我们执行椭圆曲线点的加法P+Q和加倍运算P+P=2P,每个点运算都需要一些模的加法和乘法以及一个模的反转。逆运算用于计算变量λ:=(y2-y1)(x2-x1)-1(mod p),这是计算椭圆曲线的点加法:P(x1,y1)和Q(x2,y2)是为了得到P+Q=(x3,y3)所需的。假设输入变量在Montgomery域中给定,我们希望得到Montgomery域中的结果。如果使用KaliskiMontgomery逆,它将计算经典逆,这是在留数(非Montgomery)域中的,并且不容易在后续操作中使用。为了转换回蒙哥马利域,我们需要用R2(mod p)执行一个蒙哥马利乘法。然而,借助于新的Montgomery逆,我们可以在一步内完成上述计算。由于这些运算是针对指数e的每一位执行的,因此新的Montgomery逆在这种情况下更有效和更有用。
by JFQ
原文地址:https://www.cnblogs.com/kingQ/p/12371248.html