一种数论变换素数下的模乘运算方法与流程

文档序号:31330405发布日期:2022-08-31 06:52阅读:57来源:国知局
conference.2019。
9.对于现有的格密码实现而言,为了利用快速数论变换算法进行加速,在选取方案参数时,要求素数域模数p满足p的比特表示形式的尾部包含若干个连续的0。目前现有的格密码方案实现和应用成果中,仅考虑了快速数论变换层面的高性能实现,而没有考虑到素数域模数的特殊形式对底层模乘运算本身所提供的优化可能性。
10.因此,现有技术存在缺陷,需要改进。


技术实现要素:

11.本发明所要解决的技术问题是:提供一种运算复杂度降低、可以节约一定的计算资源,同时一定程度上提升模乘速度的数论变换素数下的模乘运算方法。
12.本发明的技术方案如下:一种数论变换素数下的模乘运算方法,模乘算法输入:模数p为一素数,模数的比特长度k,模数比特表示下尾数0

01的比特长度w,模乘操作数a,b;模乘算法输出:模乘结果r=a
×b×
d mod p;并且,其满足关系:0≤a<p,0≤b<p;2
k-1
<p<2k;2w整除p-1;其中,表示向上取整;并且,采用karatsuba分治算法和多步montgomery约减算法进行素数域上的模乘运算ab mod p。
13.应用于上述技术方案,所述的数论变换素数下的模乘运算方法中,karatsuba分治算法和多步montgomery约减算法互相分开为两个独立的计算部分。
14.应用于各个上述技术方案,所述的数论变换素数下的模乘运算方法中,karatsuba分治算法的步骤包括:步骤a1:记计算满足:a=a1×2h
+a0,b=b1×2h
+b0的a0,a1,b0,b1;步骤a2:根据步骤a1的a0,a1,b0,b1的分别计算:
15.l=a0×
b0,h=a1×
b1,m=(a0+a1)
×
(b0+b1)-l-h;步骤a3:根据步骤a2得到的l、h和m,计算d=h
×22h
+m
×2h
+l。
16.应用于各个上述技术方案,所述的数论变换素数下的模乘运算方法中,多步montgomery约减算法的步骤包括:步骤b1:记e=d;步骤b2:计算[e+(2
w-e mod 2w)
×
p]/2w并将结果重新赋值给e;步骤b3:判断e的大小,将其中多余的p的倍数减去,返回最终结果。
[0017]
应用于各个上述技术方案,所述的数论变换素数下的模乘运算方法中,当参数额外满足w≤h时,在karatsuba分治算法中步骤a2完成l的计算之后,立刻开始进行多步montgomery约减算法中的首次约减运算。
[0018]
本发明的有益效果为:
[0019]
本发明通过使用了karatsuba分治技巧之后,原本的k比特乘k比特的数乘运算被转化为三个h+1比特乘h+1比特的数乘运算加上一些相较于数乘而言成本极低的加减运算,由于数乘的复杂度为乘数比特长度的平方级别,因此分治的使用使得数乘的运算复杂度降低为原来的四分之三左右。
[0020]
montgomery约减算法的核心算法思想是“以乘代除”,通过在原数e的基础上加上模数p的某一个倍数k
×
p,使其在模意义下不变的前提下转化为一个比特表示尾部全为0的数,然后直接通过舍弃尾端的0来实现数值的约减。对于一般的模数p而言,确定k的过程是:k=e
×
p

mod 2w,这里的p

为一满足p
′×
p+1能被2w整除的常数,即确定k的过程需要乘法运
算,然而对于可以使用快速数论变换算法的素数p而言,因为满足2w整除p-1,便有p

=2
w-1成立,那么确定k的过程便不需要乘法,这对于约减算法而言可以节约一定的计算资源,同时有望一定程度上提升模乘速度。
具体实施方式
[0021]
以下具体实施例,对本发明进行详细说明。
[0022]
本实施例提供了一种数论变换素数下的模乘运算方法,模乘运算方法的核心优化思想是采用karatsuba分治算法和多步montgomery约减算法相结合的方式来进行素数域上的模乘运算ab mod p。这里为了便于描述,我们这里先只进行算法上的方法描述,将karatsuba分治算法和多步montgomery约减算法互相分开为两个较为独立的部分,在后续内容中再对二者相结合的情况进行进一步的讨论。
[0023]
模乘算法输入:模数p为一素数,模数的比特长度k,模数比特表示下尾数0

01的比特长度w,模乘操作数a,b;其中,0

01表示为前导0不定长度的“1”,可以是01,001,0001,00001,0000000001,

等等。
[0024]
模乘算法输出:模乘结果r=a
×b×
d mod p;这里常数d的具体值见下;以上参数满足如下关系:
[0025]
0≤a《p,0≤b<p;2
k-1
<p<2k;2w整除p-1;
[0026]
这里表示向上取整,例如
[0027]
子算法a,即karatsuba分治算法步骤:
[0028]
1)记计算满足:a=a1×2h
+a0,b=b1×2h
+b0的a0,a1,b0,b1;
[0029]
2)计算l=a0×
b0,h=a1×
b1,m=(a0+a1)
×
(b0+b1)-l-h;
[0030]
3)计算d=h
×22h
+m
×2h
+l;
[0031]
子算法b,即多步montgomery约减算法步骤:
[0032]
4)记e=d;
[0033]
5)计算[e+(2
w-e mod 2w)
×
p]/2w并将结果重新赋值给e;
[0034]
6)判断百的大小,将其中多余的p的倍数减去,返回最终结果;
[0035]
下面对以上方法进行适当的分析与解释。
[0036]
使用了karatsuba分治技巧之后,原本的k比特乘k比特的数乘运算被转化为三个h+1比特乘h+1比特的数乘运算加上一些相较于数乘而言成本极低的加减运算,由于数乘的复杂度为乘数比特长度的平方级别,因此分治的使用使得数乘的运算复杂度降低为原来的四分之三左右。
[0037]
montgomery约减算法的核心算法思想是“以乘代除”,通过在原数e的基础上加上模数p的某一个倍数k
×
p,使其在模意义下不变的前提下转化为一个比特表示尾部全为0的数,然后直接通过舍弃尾端的0来实现数值的约减。对于一般的模数p而言,确定k的过程是:k=e
×
p

mod 2w,这里的p

为一满足p
′×
p+1能被2w整除的常数,即确定k的过程需要乘法运算,然而对于可以使用快速数论变换算法的素数p而言,因为满足2w整除p-1,便有p

=2
w-1成立,那么确定k的过程便不需要乘法,这对于约减算法而言可以节约一定的计算资源,同
时有望一定程度上提升模乘速度。
[0038]
以上两个子过程从算法本身的层面出发,是相互独立没有太多紧密联系的,然而在具体实现时,有时可以起到相互辅助的效果。以硬件实现为例,若是采用一般的方法,数乘和约减必须按照顺序执行,总的时钟周期消耗数量便是两者的加和;然而若是采用如上所述的方法,首先可以节省乘法器资源的使用量(因为确定k的过程不再需要乘法),其次如果参数额外满足w≤h时,在2)中完成l的计算之后便可以立刻开始进行5)中的首次约减运算(因为在mod2w意义下仅需d的低比特位),即可以一定程度上缩短硬件流水线的长度。
[0039]
下面给出一个本技术中所介绍的数论变换素数下的模乘运算方法的具体应用实例。
[0040]
我们针对如下数据进行实例化:p=4293836801(二进制表示为11111111111011101100000000000001共32比特),k=32,w=14,a=4111111111,b=2333333333,此时d的值为3050289822,正确的模乘输出a
×b×
d mod p的值理应为4111111111
×
2333333333
×
3050289822mod 4293836801=3464401978。
[0041][0042]
子算法a,即karatsuba分治算法步骤:
[0043]
1)记根据a=a1×2h
+a0,b=b1×2h
+b0分别计算出a0=37831,a1=62730,b0=55125,b1=35603;
[0044]
2)再计算得l=a0×
b0=2085433875,h=a1×
b1=2233376190,m=(a0+a1)
×
(b0+b1)-l-h=4804888343;
[0045][0046]
3)然后计算d=h
×22h
+m
×2h
+l=9592592590962962963;
[0047]
子算法b,即多步montgomery约减算法步骤:
[0048]
4)记e=d=9592592590962962963;
[0049]
5)计算[e+(2
w-emod 2w)
×
p]/2w并将结果重新赋值给e,重复执行次;第一次为585486321929392,第二次为39177866342,第三次为3464401978,
[0050]
6)判断e的大小,可知e=3464401978并不大于p=4293836801,最终返回结果3464401978;
[0051]
对比可知,我们的方法下运算得出的结果与正确结果相同,均为3464401978。
[0052]
以上具体方法,充分探究了模乘的结构,采用了karatsuba分治和多步montgemory约减相互结合的方式,一定程度上降低快速数论变换素数上的模乘运算算法的复杂度,进而节约了一定计算资源。
[0053]
以上仅为本发明的较佳实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1