SM2算法快速实现研究
【摘要】:SM2椭圆曲线密码算法是我国于2010年公布的国家商用密码标准之一。它包括数字签名、密钥协商、加密等三部分。SM2算法中选取的椭圆曲线参数为256bit长度整数,使得SM2算法中的标量乘运算的计算复杂度较高,因此SM2密码算法的软硬件快速实现对于该标准的普及具有重要意义。本文围绕椭圆曲线上的标量乘的快速计算,对SM2算法的快速实现进行研究,研究工作主要包括以下三个方面:(1)本文在滑动窗法的基础上,提出了一种改进的标量乘算法。改进算法对标量k的展开系数采用窗口宽度为w的非邻接形式展开,当窗口宽度为w时,k的展开系数最大为2w-1,滑动窗法需要预计算奇数倍点并存储才能完成标量乘法的计算。本文采用预计算并存储素数倍点的方式,相比滑动窗法,减少了预计算阶段的计算量。当k的长度为256 bit时,本文改进的标量乘算法相比滑动窗法减少了14.52%的计算量。(2)在大整数的模乘计算方面,本文对二进制Montgomery模乘算法进行优化改进,在模乘算法的核心循环计算中使用两个二进制的变量α0=(s0+aj·b0)mod 2和α1=aj作为标志位。对每次循环输入的aj,只需进行且运算、模2运算和移位计算即可完成原算法3次的乘法。同时,改进算法中还避免了Montgomery模乘算法中最后一步的减法计算。二进制的标志位也更易于在FPGA等硬件上的实现。(3)本文基于GmSSL开源库中的SM2算法,对提出的两种优化算法进行了编程实现,对使用本文两种改进算法的SM2加密算法与原始的SM2加密算法分别进行签名、验签及加解密验证。SM2算法的签名、验签的效率提高了 39%以上,加解密效率提高超过了 15%。