首页 专利交易 科技果 科技人才 科技服务 国际服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

一种基于NEON指令集的国密SM2底层模乘优化方法 

买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!

申请/专利权人:南京邮电大学

摘要:本发明属于密码加速技术领域,公开了一种基于NEON指令集的国密SM2底层模乘优化方法,采用分治算法,将大整数分解为小字节数组,使用NEON指令并行化地对这些更小的字节数组进行模乘计算。相比串行运算,本发明采用向量并行计算可以使得运算效率提高数倍甚至更多;与其他需要增加专用硬件的算法优化方法相比,本发明所述方法成本更低,仅仅依赖现有CPU的向量计算单元,无需添加新的硬件组件,可大幅降低系统实施难度与部署成本。

主权项:1.一种基于NEON指令集的国密SM2底层模乘优化方法,其特征在于,包括以下步骤:步骤1、基于NEON指令集,将SM2中大整数a和b拆分为8组32位的数据,将各组数据使用16进制表示,按照位数从低到高的排列顺序分别存储在数组a[16]和数组b[16]中;步骤2、模拟乘法手算步骤,将大整数的乘法拆成两个部分,使用r[16]数组来存储高位计算中间结果,使用t[16]数组来存储低位计算中间结果;步骤3、对低位数据采用对应乘法累加方式进行计算,不做进位处理,并将计算结果储存在数组t[16]中;步骤4、对高位数据采用对应乘法累加方式进行计算,再对每个部分做进位处理,并将计算结果储存在数组r[16]中;步骤5、对得到的高位以及低位两部分的处理结果通过等效模运算进行快速约减,使结果在有限域范围内;具体为:通过模操作进行数据x的快速约简,x代表处于高位结果r[0]~r[7]中的值,,,模数p为: ,即当前需要做,对于x,表示为: ,x对应的公式表达形式为: , ,使用表示低位数组t中存储的对应数据,使用表示高位数组r中存储的对应数据;首先,保留低位部分暂时不做处理,只进行高位部分的快速约简工作,即: ,对于高位,统一进行模p处理,使其全部归化到2256范围之内;Cimodp,,i取整数,为: ,通过以上计算,将原本在高位的Ci拆分到了低位的位上;若拆分后的结果为,对其进行二次拆分,进一步快速约简: ;若二次拆分之后仍存在高位,继续进行拆分操作,直到没有高位数据存在;最后,将原本处于高位的数据通过快速约简拆分到了低位的位,对应于使用C表示的位;将处于高位的数据全部拆分归化到低位对应的位置,从而最终的计算结果将由低位数据以及规化之后的高位数据一起表示;步骤6、将各高位拆分规划之后对应的数据与原本的低位数据进行相加进位,得到最终的计算结果;具体为: ,通过NEON指令对进行计算:步骤6-1、声明两个64位寄存器用于存放各个数组内的值,声明中间值寄存器regd存放上一步骤中的进位结果accu[16],accu数组用于存放每一部分的进位结果:uint64x2_trega,regb;uint64x2_tregd,rege;步骤6-2、依次加载各个以及计算的进位值accu:rega=vld1_u32Cj;regb=vld1_u32Ck;regd=vld1q_u64accu;步骤6-3、加法操作:rege=vst1q_u64rege,vaddq_u64rega,regb;按照上面的步骤继续累加后面的值,将计算结果放进寄存器rege中;步骤6-4、加上计算上一步骤中的进位值,再取计算结果高于32位的部分重新存入进位数组accu中:regd=vaddq_u64regd,rege;rege=vshrq_n_u64regd,32;vst1q_u64accu,rege;步骤6-5、将计算结果的低32位存储回:rege=vdupq_n_u64uint64_t132-1;rege=vandq_u64regd,rege;vst1q_u64REi,rege;步骤7、重复步骤1-6,在最后数组进行计算时,进行快速约减,将最终的进位再次规化至32位,将规划后的值加到低位的对应位置得到最终结果;具体为:在最后进行计算RE7时,进一步快速约简,将最终的这个进位再一次归化到低32位: ,将规划后的accu值加到低位的对应位置上得到最终结果,如果还有超过2256位的高位进位值出现,对其继续进行快速约简操作,直到所得的数据都在2256之内。

全文数据:

权利要求:

百度查询: 南京邮电大学 一种基于NEON指令集的国密SM2底层模乘优化方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。