质数域的算数运算

“有限域算数运算”介绍了有限域的基本概念,进一步阐述了椭圆曲线系统的三种经典有限域(质数域,二元域和扩展域)以及其相应的算数运算方法(加法,减法,乘法和求逆运算)。本文重点阐述在质数域FpF_p中的算数运算执行算法,包括任意质数p的算法,当模数p具有特性形式时,该算法揭示约化步骤的执行效率能够获得提升;还提出了针对NIST质数的高效约化算法,对诸如p=21922641p=2^{192}-2^{64}-1形式的质数具有适用性。
以上算法适合软件执行:假设工作台通常为64位或32位,算法运行在WW-位(W-位,W是8的倍数)框架基础上。低位或更廉价的组件的W值更小,比如嵌入式系统一般是16位,智能卡一般是8位。W-位的位数词U从0到W-1编号,个位数约定为位0。
FpF_p的元素是从0到p1p-1的整数。用m=[log[2]p]m=[\log [2]{p} ]表示p的位数,t=[m/W]t=[m/W]表示字节长度。下图展示的例子是用二进制存储单元A=(A[t1],...,A[2],A[1],A[0])A=(A[t-1],...,A[2],A[1],A[0])表示字节长度t的元素a。其中,整数a表示为:a=2(t1)WA[t1]+...+22WA[2]+2WA[1]+A[0]a=2^{(t-1)^W}A[t-1]+...+2^{2W}A[2]+2^WA[1]+A[0]
质数域的算数运算

加法和减法

我们按照用多字节表示整数的方法来介绍有限域的加法和减法算法。以下是常用的术语定义,对于整数ω\omega(ε,z)ω”(\varepsilon ,z)\leftarrow \omega”有如下约定:
zωmod  2Wz\leftarrow \omega \mod 2^Wε0\varepsilon \leftarrow 0 如果ω[0,2W)\omega \in [0,2^W),否则ε1\varepsilon \leftarrow 1
对任意x,y[0,2W)x,y\in [0,2^W)如果ω=x+y+ε\omega = x+y+\varepsilon 'ε0,1\varepsilon '\in {0,1},于是ω=ε2W+z\omega =\varepsilon 2^W+z,且ε\varepsilon称为单字节加法的传送位(carry bit,ε=1\varepsilon =1当且仅当z<x+εz<x+\varepsilon ')。
多字节整数加法的算法描述如下。
质数域的算数运算需要指出的是,处理传送指令的处理器并不一定需要对传送处理进行事无巨细的检查。多字节减法与加法操作类似,只是将传送位改称为借位而已。
质数域的算数运算
加法模运算((x+y)mod  p)((x+y)\mod p)和减法模运算((xy)mod  p)((x-y)\mod p)都适用于以上的算法,只是将加法替换成减法并取模。
质数域的算数运算

整数乘法

a,bFpa,b\in F_p的有限域乘法能够通过aabb的乘积,得到一个整数值,然后采用约化模p来获得结果。以下算法展示了整数乘法的思路,包括基本的操作数乘法扫描方法。每种算法都是通过用WW-位连接将U和V连接起来,将(UV)(U V)表示成一个(2W)(2W)-位的量。
质数域的算数运算
在步骤2.2中,C[i+j]+A[i]B[j]+UC[i+j]+A[i]\cdot B[j]+U称为内积操作。操作数是W-位值,内积的界限是2(2W1)+(2W1)2=22W12(2^W-1)+(2^W-1)^2=2^{2W}-1,表示为(UV)(U V)。以下算法描述了内积c=abc=ab从右到左的计算方法。正如前述算法所示,W-位的(2W)(2W)-位内积的操作数是必须的,包括R0,R1,R2,UR_0,R_1,R_2,U和V。
质数域的算数运算