System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于密码,具体涉及一种基于cuda的椭圆曲线多标量乘法加速方法、系统及存储介质。
技术介绍
1、椭圆曲线多标量乘法(msm),指n个点做标量乘并累加,可表示为它在密码学领域中有着广泛的应用,例如零知识证明、数字签名等。由于多标量乘法在实际场景下的规模(n)一般很大,传统cpu上的朴素算法耗时无法满足低延迟的需求,可利用gpu的并行计算能力,降低整体耗时。
2、cuda是由nvidia开发的并行计算平台和编程模型,它允许开发者使用标准的c/c++编程语言在nvidiagpu上进行高性能计算。
3、pippenger算法被广泛应用于高效计算椭圆曲线多标量乘法,如图1所示。pippenger算法分为轮,每轮的(2s-1)个桶被初始化为无穷远点对于每轮分割出的s比特子标量ki,j,将对应椭圆曲线点pi填入下标为ki,j的桶中(若桶中已有值,则更新为点加结果)。填入完成后,当轮结果(其中)。最后再将每轮的结果规约回
4、目前,椭圆曲线多标量乘法的大部分gpu加速方案都基于pippenger算法,但只是针对个子任务,或是将规模n的msm分割为多个小规模的msm,以此来实现并行计算,并没有对pippenger算法中每轮的细节进行优化。
技术实现思路
1、本专利技术提出一种新的基于cuda的椭圆曲线多标量乘法加速方法,通过标量预处理和特殊点预计算,大幅减少桶的数量,并对这一串行阶段,以分层规约的形式实现并行,提升了整体性能。
2、为解决上述
3、一种基于cuda的椭圆曲线多标量乘法加速方法,包括以下步骤:
4、步骤1,根据cpu硬件信息动态调整线程总数t;
5、步骤2,将原始运算任务切分:将大规模椭圆曲线多标量乘法的原始运算任务依据标量切分多个子运算任务gj,将λ比特的标量ki切分为个s比特的子标量ki,j,
6、步骤3,根据已硬编码的特殊点以及标量映射规则分别建立硬编码特殊点预计算表和映射规则预计算表;
7、步骤4,分别计算每个子任务结果,其中每个轮次分别进行子标量处理、桶点累加和桶点聚合,以分层规约的形式并行计算桶点聚合的中间量并且对其进行并行累加得到当前轮次j的子运算任务结果gj;
8、步骤5,判断步骤4中当前轮次是否为最后一轮,若是则执行步骤6,若否则返回步骤4;
9、步骤6,令结果q初始化为无穷远点,j初始化为计算q=2sq+gi,令j=j-1,并执行上述相同任务,更新q,循环直到j=-1,最终结果可满足椭圆曲线多标量乘法计算结束。
10、进一步地,所述步骤3中硬编码特殊点的预计算表为:21pi,22pi,…,2ypi
11、其中,y为常量,且y≤15,0≤i<n,n表示椭圆曲线多标量乘的点数,pi表示第i个曲线点。
12、进一步地,所述步骤3中根据标量映射规则建立映射规则预计算表包括:
13、设定预计算表的输入k′∈[0,216],计算符号标志sign=(k′>>15)|(k′>>16),当sign=1时,绝对值kabs=2s-k′,当sign=0时,绝对值kabs=k′;
14、分解kabs为2x·kodd,其中kodd%2=1,即为奇数;若x>y,幂次power_of_2=y,额外倍点数dbl_time=x-y,否则power_of_2=x,dbl_time=0;
15、得到输入k′转换后的32比特的k″=(kodd||dbl_time||power_of_2||sign),其中||表示拼接。
16、进一步地,所述步骤4包括如下子步骤:
17、步骤4.1设定容量为n的第一数组k_tuple,并初始化其为全0;
18、步骤4.2在轮次中计算个子任务的结果,其中每个轮次分别进行子标量处理、桶点累加和桶点聚合。
19、进一步地,所述子标量处理包括:
20、1)并行t个线程,其中第tida个线程负责索引号为i的数据,到将第一数组k_tuple中第i个元素k_tuple[i]更新为根据映射规则预计算表中查询到的值scalar_map[ki,j+k_tuple[i]%2],
21、2)建立第二数组p_index并初始化其中第i个元素p_index[i]=i,p_index也是容量为n的数组,表示椭圆曲线点的索引;
22、3)基于第一数组k_tuple和第二数组p_index建立二元组数组(k_tuple,p_index)按第一数组k_tuple中的元素进行升序排序,但排序后的结果输出到新的两个数组k_tupleout和p_indexout。
23、进一步地,所述桶点累加包括:
24、1)初始化2s-2个桶为无穷远点
25、2)并行t个线程,对于第tidb个线程,分配起始位置结束位置将b调整为b′,b′满足(k_tupleout[b′]>>16)≠(k_tupleout[b]>>16)的最小值,将e调整为e′,e′为满足(k_tupleout[e′]>>16)=(k_tupleout[e]>>16)的最大值,在线程0中,若k_tupleout[0]>>16≠0,则不需要调整b,其中,k_tupleout[b′]为数组k_tupleout中第b′个元素的值,k_tupleout[b]为数组k_tupleout中第b个元素的值,k_tupleout[e′]为数组k_tupleout中第e′个元素的值,k_tupleout[e]为数组k_tupleout中第e个元素的值;
26、3)若b′≤e′,对解析出k_tupleout[m]的(kodd,dbl_time,power_of_2,sign),计算点p′:初始化p′为预计算好的并做dbl_time次倍点运算,最后,若sign=1,令p′=-p′,将点p′填入下标为((k_tupleout[m]>>16)-1)>>1的桶中。
27、进一步地,所述桶点聚合包括:
28、1)选择每个线程负责的桶数量size,并行个线程,每个线程tidc,负责:逆序更新下标范围(2s-2-1-size·(tidc+1),2s-2-1-size·tidc)对应的桶,递推公式为bi=bi+bi+1;
29、2)并行2s-3个gpu线程,每个线程tidd负责:更新下标对应的桶,更新规则为加上
30、3)令size=2.size,若size≥2s-2,进入步骤(4),否则重复步骤(2);
31、4)此时的2s-2个桶已更新为所需的桶点聚合中间量,记作并行累加得到当前轮次j的结果gj。
32、另一方面,本专利技术提供一种基于cuda的椭圆曲线多标量乘法加速系统,包括:
33、线程调整模块,其用于根据cpu硬件信息动态调整线程总数t;
34、任务切分模本文档来自技高网...
【技术保护点】
1.一种基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤3中硬编码特殊点的预计算表为:21Pi,22Pi,…,2yPi
3.根据权利要求2所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤3中根据标量映射规则建立映射规则预计算表包括:
4.根据权利要求1所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤4包括如下子步骤:
5.根据权利要求4所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述子标量处理包括:
6.根据权利要求4所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述桶点累加包括:
7.根据权利要求4所述的基于CUDA的椭圆曲线多标量乘法加速方法,其特征在于,所述桶点聚合包括:
8.一种基于CUDA的椭圆曲线多标量乘法加速系统,其特征在于,包括:
9.一种计算机存储介质,其特征在于,其存储电子设备执行的计算机程
...【技术特征摘要】
1.一种基于cuda的椭圆曲线多标量乘法加速方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的基于cuda的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤3中硬编码特殊点的预计算表为:21pi,22pi,…,2ypi
3.根据权利要求2所述的基于cuda的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤3中根据标量映射规则建立映射规则预计算表包括:
4.根据权利要求1所述的基于cuda的椭圆曲线多标量乘法加速方法,其特征在于,所述步骤4包括如下子步骤:
5.根据权利要求4所述的基于c...
【专利技术属性】
技术研发人员:陈宇田,彭聪,罗敏,冯琦,郭勇立,何德彪,
申请(专利权)人:武汉大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。