CN108418687B - 一种适合sm2算法的快速模约减方法和介质 - Google Patents

一种适合sm2算法的快速模约减方法和介质 Download PDF

Info

Publication number
CN108418687B
CN108418687B CN201711383428.9A CN201711383428A CN108418687B CN 108418687 B CN108418687 B CN 108418687B CN 201711383428 A CN201711383428 A CN 201711383428A CN 108418687 B CN108418687 B CN 108418687B
Authority
CN
China
Prior art keywords
modp
mod
conversion
data
subjected
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711383428.9A
Other languages
English (en)
Other versions
CN108418687A (zh
Inventor
何德彪
陈泌文
谢翔
李升林
孙立林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Juzix Technology Shenzhen Co ltd
Wuhan University WHU
Original Assignee
Juzix Technology Shenzhen Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Juzix Technology Shenzhen Co ltd filed Critical Juzix Technology Shenzhen Co ltd
Priority to CN201711383428.9A priority Critical patent/CN108418687B/zh
Publication of CN108418687A publication Critical patent/CN108418687A/zh
Priority to PCT/CN2018/118868 priority patent/WO2019120066A1/zh
Application granted granted Critical
Publication of CN108418687B publication Critical patent/CN108418687B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3066Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving algebraic varieties, e.g. elliptic or hyper-elliptic curves

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Organic Low-Molecular-Weight Compounds And Preparation Thereof (AREA)
  • Error Detection And Correction (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)

Abstract

本发明公开了一种适合SM2算法的快速模约减方法和介质,针对SM2椭圆曲线公钥算法推荐参数计算模约减,可用于SM2算法的快速实现,既可提高了性能,又降低存储空间,更易于硬件实现。其技术方案为:通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数问题转化为计算若干个256比特数的线性组合;通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示;通过重组整合拆分数据,降低加法或减法个数;通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算。

Description

一种适合SM2算法的快速模约减方法和介质
技术领域
本发明涉及信息安全技术领域,尤其涉及一种针对SM2椭圆曲线公钥算法推荐参数计算模约减的快速方法和介质。
背景技术
在现代应用密码学中,循环群、多项式环、有限域等代数结构占有重要地位,如有限域中椭圆曲线上点构成的群,在实际密码学应用中受到广泛的关注。基于上述代数结构的密码方案实现效率通常受到多种因素影响,如参数、代数运算、环境(软件/硬件)和数学算法。其中,模约减作为一种基本代数运算(包括加、减、乘等),其实现效率的高低直接影响着整个密码方案的运行效果。
模约减在许多公钥加密、数字签名和密钥协商等方案中被应用,如RSA、ElGamal、SM2等都需要进行模约减运算,是一种类似加法操作、乘法操作的一种基本运算。由于广泛的应用密码方案依赖模约减运算,因此,设计并实现一种计算模约减的快速方法是非常有意义的。
当前模约减的实现有多种算法,如Montgoemery模约减和Barrett模约减等。不同环境下,每种算法有各自的特点。如Montgomery模约减在非固定模数和空间足够的情况下,计算效率较好。与之比较,Barrett模约减需要部分预计算参数参与,对于模数固定和空间足够的情况,具有较高的时间效率。然而在某些特定环境下,存储空间和预计算的值可能都是有限的(如芯片卡),需要空间高效的前提下保证时间高效。因此,设计模约减算法需要确保空间和时间均具有高效性。
SM2椭圆曲线公钥密码算法是一种基于椭圆曲线的公钥密码算法,该算法在安全性、性能上都比RSA算法有优势,如相同安全强度下,使用密钥的长度更短。该算法于2010年发布为国家商用密码体系标准(GM/T0003.1-2012)。在SM2算法标准操作中有数模SM2椭圆曲线推荐参数(p256)问题,这个推荐参数是国密局对SM2椭圆曲线公钥密码算法推荐使用的系统参数,目前对其的模约减方法的效率偏低,有进一步优化的空间。
发明内容
以下给出一个或多个方面的简要概述以提供对这些方面的基本理解。此概述不是所有构想到的方面的详尽综览,并且既非旨在指认出所有方面的关键性或决定性要素亦非试图界定任何或所有方面的范围。其唯一的目的是要以简化形式给出一个或多个方面的一些概念以为稍后给出的更加详细的描述之序。
本发明的目的在于解决上述问题,提供了一种适合SM2算法的快速模约减方法和介质,针对SM2椭圆曲线公钥算法推荐参数计算模约减,可用于信息安全加解密相关的SM2公钥算法的快速实现,既可提高了信息安全的处理性能,又降低实现高性能所需的存储空间,更易于硬件实现。
本发明的技术方案为:本发明揭示了一种适合SM2算法的快速模约减方法,包括:
通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数问题转化为计算若干个256比特数的线性组合;
通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示;
通过重组整合拆分数据,降低加法或减法个数;
通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算。
根据本发明的适合SM2算法的快速模约减方法的一实施例,数据转换的步骤进一步包括:
步骤1.1,将c mod p256进行转化,
Figure GDA0003158747100000031
其中
p256=2256-2224-296+264-1,输入整数
Figure GDA0003158747100000032
且可表示为c=(c2t-1,...,c2,c1,c0);
步骤1.2,将步骤1.1中的I2mod p256进行转化,
I2mod p256=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,0,c8,0,0,0,0,0,0,0,0)]mod p256-c8p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(c8,0,0,0,c8,-c8,0,c8)]mod p256)mod p256
=(I3mod p256+R2mod p256)mod p256
步骤1.3,将步骤1.2中的I3 mod p256进行转化,
I3mod p256=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,c9,0,0,0,0,0,0,0,0,0)]mod p256-232c9p256mod p256-c9p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c9,0,0,c9,0,-c9,c9,c9)]mod p256)mod p256
=(I4mod p256+R3mod p256)mod p256
步骤1.4,将步骤1.3中的I4mod p256进行转化,
I4mod p256=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,c10,0,0,0,0,0,0,0,0,0,0)]mod p256-264c10p256mod p256-232c10p256mod p256-c10p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c10,0,c10,0,0,0,c10,c10)]mod p256)mod p256
=(I5mod p256+R4mod p256)mod p256
步骤1.5,将步骤1.4中的I5 mod p256进行转化,
I5mod p256=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256-296c11p256mod p256-264c11p256mod p256-232c11p256mod p256-c11p256mod p256)mod p256
=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c11,c11,0,0,c11,0,c11,c11)]mod p256)mod p256
=(I6mod p256+R5mod p256)mod p256
步骤1.6,将步骤1.5中的I6mod p256进行转化,
I6mod p256=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2128c12p256mod p256-296c12p256mod p256-264c12p256mod p256-232c12p256mod p256-c12p256mod p256)mod p256
=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c12,0,0,c12,c12,0,c12,c12)]mod p256)mod p256
=(I7mod p256+R6mod p256)mod p256
步骤1.7,将步骤1.6中的I7mod p256进行转化,
I7mod p256=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2160c13p256mod p256-2128c13p256mod p256-296c3p256modp256-264c13p256mod p256-232c13p256mod p256-c13p256mod p256)mod p256
=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c13,0,c13,c13,2c13,-c13,c13,2c13)]mod p256)mod p256
=(I8mod p256+R7mod p256)mod p256
步骤1.8,将步骤1.7中的I8mod p256进行转化,
I8mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2192c14p256mod p256-2160c14p256mod p256-2128c14p256modp256-296c14p256mod p256-264c14p256mod p256-232c14p256mod p256-c14p256mod p256)mod p256)mod p256
=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)]mod p256)mod p256
=(I9mod p256+R8mod p256)mod p256
步骤1.9,将步骤1.8中的I9mod p256进行转化,
I9mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2224c15p256modp256-2192c15p256mod p256-2160c15p256mod p256-2128c15p256mod p256-296c15p256mod p256-264c15p256mod p256-232c15p256mod p256-c15p256mod p256)mod p256
=[(3c15,c15,2c15,c15,c15,0,2c15,2c15)]mod p256
=R9mod p256
根据上述转换过程,最后用转换数据(R1,R2,...,R9)表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
根据本发明的适合SM2算法的快速模约减方法的一实施例,将转换数据(R1,R2,...,R9)拆分的步骤进一步包括:
步骤2.1,拆分Ri中负数项,其中i=2,3,7,8,
R2=(c8,0,0,0,c8,-c8,0,c8)mod p256
=[(c8,0,0,0,c8,0,0,c8)-(0,0,0,0,0,c8,0,0)]mod p256
=(t2-s2)mod p256
R3=(c9,0,0,c9,0,-c9,c9,c9)mod p256
=[(c9,0,0,c9,0,0,c9,c9)-(0,0,0,0,0,c9,0,0)]mod p256
=(t3-s3)mod p256
R7=(2c13,0,c13,c13,2c13,-c13,c13,2c13)mod p256
=[(2c13,0,c13,c13,2c13,0,c13,2c13)-(0,0,0,0,0,c13,0,0)]mod p256
=(t7-s7)mod p256
R8=(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)mod p256
=[(2c14,c14,c14,2c14,c14,0,2c14,2c14)-(0,0,0,0,0,c14,0,0)]mod p256
=(t8-s8)mod p256
步骤2.2,拆分t7,t8,R6,R9中多倍项,
(R6+t7+t8+R9)mod p256=((2c12,0,0,c12,c12,0,c12,c12)mod p256+(2c13,0,c13,c13,2c13,0,c13,2c13)mod p256+(2c14,c14,c14,2c14,c14,0,2c14,2c14)mod p256+(3c15,c15,2c15,c15,c15,0,2c15,2c15)mod p256)mod p256
=[2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c12,0,c12,c12)+(0,0,c13,c13,0,0,c13,0)+(0,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)]mod p256
=(T1+T2+T3+T4+T5+T6+T7+T8)mod p256
根据上述拆分过程,最后用拆分数据表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
根据本发明的适合SM2算法的快速模约减方法的一实施例,重组整合拆分数据的过程中确保对应位置相的和不发生变化,其步骤进一步包括:
c mod p256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c15,c14,c13,c12,c11,0,c9,c8)+(c15,c15,c14,c13,c12,0,c10,c9)+(c15,0,0,0,0,0,0,0)+2(c14,0,c15,c14,c13,0,c15,c14)+(c13,0,0,c15,c14,0,c12,c11)+(c13,0,0,0,c15,0,c13,c12)+2(c12,0,0,0,0,0,c14,c13)+(c11,c11,c10,c9,c8,0,0,0)+(c10,0,0,0,0,0,0,c15,)+(c9,0,0,0,0,0,c11,c10)+(c8,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]mod p256
=[s0+s1+s4+s5+2s6+s9+s10+2s11+s12+s13-s2-s3-s7-s8]mod p256
根据上述拆分过程,最后用重组整合数据表示c mod p256
c mod p256=[s0+s1+s4+s5+2s6+s9+s10+2s11+s12+s13-s2-s3-s7-s8]mod p256
根据本发明的适合SM2算法的快速模约减方法的一实施例,计算重组整合数据的和的步骤进一步包括:
计算重组整合数据的和T,即
T=[s0+s1+s4+s5+2s6+s9+s10+2s11+s12+s13-s2-s3-s7-s8]
如果T大于p256,返回c mod p256=T-p256;否则,返回c mod p256=T。
本发明还揭示了一种计算机可读存储介质,存储一计算机程序,所述计算机程序在处理器中运行以执行以下的步骤:
通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数问题转化为计算若干个256比特数的线性组合;
通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示;
通过重组整合拆分数据,降低加法或减法个数;
通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算。
根据本发明的计算机可读存储介质的一实施例,计算机程序在处理器中运行所执行的数据转换的步骤进一步包括:
步骤1.1,将c mod p256进行转化,
Figure GDA0003158747100000071
其中
p256=2256-2224-296+264-1,输入整数
Figure GDA0003158747100000072
且可表示为c=(c2t-1,...,c2,c1,c0);
步骤1.2,将步骤1.1中的I2mod p256进行转化,
I2mod p256=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,0,c8,0,0,0,0,0,0,0,0)]mod p256-c8p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(c8,0,0,0,c8,-c8,0,c8)]mod p256)mod p256
=(I3mod p256+R2mod p256)mod p256
步骤1.3,将步骤1.2中的I3mod p256进行转化,
I3mod p256=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,c9,0,0,0,0,0,0,0,0,0)]mod p256-232c9p256mod p256-c9p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c9,0,0,c9,0,-c9,c9,c9)]mod p256)mod p256
=(I4mod p256+R3mod p256)mod p256
步骤1.4,将步骤1.3中的I4mod p256进行转化,
I4mod p256=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,c10,0,0,0,0,0,0,0,0,0,0)]mod p256-264c10p256mod p256-232c10p256mod p256-c10p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c10,0,c10,0,0,0,c10,c10)]mod p256)mod p256
=(I5mod p256+R4mod p256)mod p256
步骤1.5,将步骤1.4中的I5mod p256进行转化,
I5mod p256=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256-296c11p256mod p256-264c11p256mod p256-232c11p256mod p256-c11p256mod p256)mod p256
=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c11,c11,0,0,c11,0,c11,c11)]mod p256)mod p256
=(I6mod p256+R5mod p256)mod p256
步骤1.6,将步骤1.5中的I6mod p256进行转化,
I6mod p256=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2128c12p256mod p256-296c12p256mod p256-264c12p256mod p256-232c12p256mod p256-c12p256mod p256)mod p256
=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c12,0,0,c12,c12,0,c12,c12)]mod p256)mod p256
=(I7mod p256+R6mod p256)mod p256
步骤1.7,将步骤1.6中的I7mod p256进行转化,
I7mod p256=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2160c13p256 mod p256-2128c13p256 mod p256-296c3p256mod p256-264c13p256mod p256-232c13p256mod p256-c13p256mod p256)mod p256
=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c13,0,c13,c13,2c13,-c13,c13,2c13)]mod p256)mod p256
=(I8mod p256+R7mod p256)mod p256
步骤1.8,将步骤1.7中的I8mod p256进行转化,
I8mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2192c14p256 mod p256-2160c14p256 mod p256-2128c14p256mod p256-296c14p256 mod p256-264c14p256mod p256-232c14p256mod p256-c14p256mod p256)mod p256
=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)]mod p256)mod p256
=(I9mod p256+R8mod p256)mod p256
步骤1.9,将步骤1.8中的I9mod p256进行转化,
I9mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2224c15p256 modp256-2192c15p256 mod p256-2160c15p256 mod p256-2128c15p256 mod p256-296c15p256 mod p256-264c15p256mod p256-232c15p256mod p256-c15p256mod p256)mod p256
=[(3c15,c15,2c15,c15,c15,0,2c15,2c15)]mod p256
=R9mod p256
根据上述转换过程,最后用转换数据(R1,R2,...,R9)表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
根据本发明的计算机可读存储介质的一实施例,计算机程序在处理器中运行所执行的将转换数据(R1,R2,...,R9)拆分的步骤进一步包括:
步骤2.1,拆分Ri中负数项,其中i=2,3,7,8,
R2=(c8,0,0,0,c8,-c8,0,c8)mod p256
=[(c8,0,0,0,c8,0,0,c8)-(0,0,0,0,0,c8,0,0)]mod p256
=(t2-s2)mod p256
R3=(c9,0,0,c9,0,-c9,c9,c9)mod p256
=[(c9,0,0,c9,0,0,c9,c9)-(0,0,0,0,0,c9,0,0)]mod p256
=(t3-s3)mod p256
R7=(2c13,0,c13,c13,2c13,-c13,c13,2c13)mod p256
=[(2c13,0,c13,c13,2c13,0,c13,2c13)-(0,0,0,0,0,c13,0,0)]mod p256
=(t7-s7)mod p256
R8=(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)mod p256
=[(2c14,c14,c14,2c14,c14,0,2c14,2c14)-(0,0,0,0,0,c14,0,0)]mod p256
=(t8-s8)mod p256
步骤2.2,拆分t7,t8,R6,R9中多倍项,
(R6+t7+t8+R9)mod p256=((2c12,0,0,C12,c12,0,c12,c12)mod p256+(2c13,0,c13,c13,2c13,0,c13,2c13)mod p256+(2c14,c14,c14,2c14,c14,0,2c14,2c14)mod p256+(3c15,c15,2c15,c15,c15,0,2c15,2c15)mod p256)mod p256
=[2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c12,0,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)]mod p256
=(T1+T2+T3+T4+T5+T6+T7+T8)mod256
根据上述拆分过程,最后用拆分数据表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
根据本发明的计算机可读存储介质的一实施例,计算机程序在处理器中运行所执行的重组整合拆分数据的过程中确保对应位置相的和不发生变化,其步骤进一步包括:
c mod p256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c8,0,0,0,c8,0,0,c8)+(c9,0,0,c9,0,0,c9,c9)+(c10,0,c100,0,0,c10,c10)+(c11,c11,0,0,c11,0,c11,c11)++2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c120,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]mod p256
=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]mod p256
根据上述拆分过程,最后用重组整合数据表示c mod p256
c mod p256=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]mod p256
根据本发明的计算机可读存储介质的一实施例,计算机程序在处理器中运行所执行的计算重组整合数据的和的步骤进一步包括:
计算重组整合数据的和T,即
T=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]
如果T大于p256,返回c mod p256=T-p256;否则,返回c mod p256=T。
本发明对比现有技术有如下的有益效果:本发明的方法主要包括数据转换、转换数据拆分、拆分数据重组整合、模约减结果计算。相较于现有技术,本发明针对使用SM2椭圆曲线公钥密码算法推荐参数的密码方案,提高模约减的计算速度,降低运算过程中对空间需求,更适应于硬件环境的实现。具体体现在以下方面:
1、已有的模约减算法无法同时满足空间有效的条件,如Barrett模约减需要预计算若干参数作为算法输入以及Barret算法运行过程需要执行乘法和除法操作,因此算法的空间开销和时间开销较高。与Barrett模约减相比,本发明的方案无需预计算参数作为辅助输入以及方案运算过程中无需乘法和除法操作,提高了计算模约减的空间效率。
2、已有的模约减算法在硬件实现中复杂度较高,例如算法中存在大量乘或除法操作等。本发明的方案避免乘法和除法运算,使得方案易于软件和硬件的实现,提高了计算模约减的时间效率,因此具有效率高、使用空间小、易实现(软、硬件实现)等特点。
附图说明
在结合以下附图阅读本公开的实施例的详细描述之后,能够更好地理解本发明的上述特征和优点。在附图中,各组件不一定是按比例绘制,并且具有类似的相关特性或特征的组件可能具有相同或相近的附图标记。
图1示出了本发明的适合SM2算法的快速模约减方法的实施例的流程图。
具体实施方式
以下结合附图和具体实施例对本发明作详细描述。注意,以下结合附图和具体实施例描述的诸方面仅是示例性的,而不应被理解为对本发明的保护范围进行任何限制。
图1示出了本发明的适合SM2算法的快速模约减方法的实施例的流程。请参见图1,下面是对本实施例的方法的各实施步骤的详细描述。
在本实施例中,用
Figure GDA0003158747100000122
表示SM2椭圆曲线公钥算法推荐参数,其中p256=2256-2224-296+264-1;域中的任意元素a∈[0,p-1];域中的元素a的b进制表示为a=(a(t-1),a(t-2),...,a2,a1,a0)b;方法的输入整数
Figure GDA0003158747100000121
且可表示为c=(c2t-1,...,c2,c1,c0),其中ci∈[0,b)和用log b个比特表示其值;方法的输出c mod p256;在本实施例中b=232,t=8。
为描述方便,在以下对本实施例的描述中,两个整数相乘(或整数符号相乘),在不产生二义性的情况下,省略乘号“*”,例如x*y可简化为xy;同时,将SM2椭圆曲线公钥算法推荐参数素数p256表示为:
p256=[(1,0,0,0,0,0,1,0,0)-(0,1,0,0,0,1,0,0,1)],
其中{0,1}的比特长度均为32。
步骤S1:通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数(p256)问题转化为计算若干个256比特数的线性组合。
本步骤具体包括以下的实现过程。
步骤1.1,将c mod p256进行转化,
c mod p256=([(c15,c14,c13,c12,c11,c10,c9,c8,0,0,0,0,0,0,0,0]mod p256+[(0,0,0,0,0,0,0,0,c7,c6,c5,c4,c3,c2,c1,c0)]mod p256)mod p256,其中I2和R1
=(I2mod p256+R1mod p256)mod p256
表公式中等号之前的较长数字串的替换,以下类似。
步骤1.2,将步骤1.1中的I2mod p256进行转化,
I2mod p256=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,0,c8,0,0,0,0,0,0,0,0)]mod p256-c8p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]mod p256+[(c8,0,0,0,c8,-c8,0,c8)]mod p256)mod p256
=(I3mod p256+R2mod p256)mod p256
步骤1.3,将步骤1.2中的I3 mod p256进行转化,
I3mod p256=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,0,c9,0,0,0,0,0,0,0,0,0)]mod p256-232c9p256 mod p256-c9p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c9,0,0,c9,0,-c9,c9,c9)]mod p256)mod p256
=(I4mod p256+R3mod p256)mod p256
步骤1.4,将步骤1.3中的I4mod p256进行转化,
I4mod p256=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,0,c10,0,0,0,0,0,0,0,0,0,0)]mod p256-264c10p256mod p256-232c10p256mod p256-c10p256mod p256)mod p256
=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c10,0,c10,0,0,0,c10,c10)]mod p256)mod p256
=(I5 mod p256+R4mod p256)mod p256
步骤1.5,将步骤1.4中的I5 mod p256进行转化,
I5mod p256=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,0,c11,0,0,0,0,0,0,0,0,0,0,0)]mod p256-296c11p256mod p256-264c11p256mod p256-232c11p256mod p256-c11p256mod p256)mod p256
=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(c11,c11,0,0,c11,0,c11,c11)]mod p256)mod p256
=(I6mod p256+R5 mod p256)mod p256
步骤1.6,将步骤1.5中的I6mod p256进行转化,
I6mod p256=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,0,c12,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2128c12p256mod p256-296c12p256mod p256-264c12p256mod p256-232c12p256 mod p256-c12p256 mod p256)mod p256
=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c12,0,0,c12,c12,0,c12,c12)]mod p256)mod p256
=(I7 mod p256+R6 mod p256)mod p256
步骤1.7,将步骤1.6中的I7mod p256进行转化,
I7 mod p256=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,0,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2160c13p256 mod p256-2128c13p256 mod p256-296c3p256mod p256-264c13p256mod p256-232c13p256 mod p256-c13p256mod p256)mod p256
=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c13,0,c13,c13,2c13,-c13,c13,2c13)]mod p256)mod p256
=(I8 mod p256+R7 mod p256)mod p256
步骤1.8,将步骤1.7中的I8 mod p256进行转化,
I8mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(0,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2192c14p256 mod p256-2160c14p256 mod p256-2128c14p256mod p256-296c14p256 mod p256-264c14p256mod p256-232c14p256 mod p256-c14p256mod p256)mod p256
=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256+[(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)]mod p256)mod p256
=(I9 mod p256+R8 mod p256)mod p256
步骤1.9,将步骤1.8中的I9 mod p256进行转化,
I9mod p256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]mod p256-2224c15p256 modp256-2192c15p256 mod p256-2160c15p256 mod p256-2128c15p256 mod p256-296c15p256 mod p256-264c15p256 mod p256-232c15p256 mod p256-c15p256mod p256)mod p256
=[(3c15,c15,2c15,c15,c15,0,2c15,2c15)]mod p256
=R9mod p256
根据上述转换过程,最后用转换数据(R1,R2,...,R9)表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
步骤S2:通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示。
本步骤具体包括以下的实现过程。
步骤2.1,拆分Ri中负数项,其中i=2,3,7,8。
R2=(c8,0,0,0,c8,-c8,0,c8)mod p256
=[(c8,0,0,0,c8,0,0,c8)-(0,0,0,0,0,c8,0,0)]mod p256
=(t2-s2)mod p256
R3=(c9,0,0,c9,0,-c9,c9,c9)mod p256
=[(c9,0,0,c9,0,0,c9,c9)-(0,0,0,0,0,c9,0,0)]mod p256
=(t3-s3)mod p256
R7=(2c13,0,c13,c13,2c13,-c13,c13,2c13)mod p256
=[(2c13,0,c13,c13,2c13,0,c13,2c13)-(0,0,0,0,0,c13,0,0)]mod p256
=(t7-s7)mod p256
R8=(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)mod p256
=[(2c14,c14,c14,2c14,c14,0,2c14,2c14)-(0,0,0,0,0,c14,0,0)]mod p256
=(t8-s8)mod p256
步骤2.2,拆分t7,t8,R6,R9中多倍项。
(R6+t7+t8+R9)mod p256=((2c12,0,0,c12,c12,0,c12,c12)mod p256+(2c13,0,c13,c13,2c13,0,c13,2c13)mod p256+(2c14,c14,c14,2c14,c14,0,2c14,2c14)mod p256+(3c15,c15,2c15,c15,c15,0,2c15,2c15)mod p256)mod p256
=[2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c12,0,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)]mod p256
=(T1+T2+T3+T4+T5+T6+T7+T8)mod p256
根据上述拆分过程,最后用拆分数据表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5。+T6+T7+T8-s2-s3-s7-s8)mod p256
其中的ti、si、Ti都是数字串的替换。
步骤S3:通过重组整合拆分数据,降低加法或减法个数。
重组整合过程中需确保对应位置相的和不发生变化。重组整合过程不唯一,以下只给出一种,不是全部可能的实施方案,不作为对本发明的限定。
c mod p256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c8,0,0,0,c8,0,0,c8)+(c9,0,0,c9,0,0,c9,c9)+(c10,0,c100,0,0,c10,c10)+(c11,c11,0,0,c11,0,c11,c11)++2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c120,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]mod p256
=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]mod p256
上述公式中,2s15是对两个(c15,c15,0,c15,c15,0,0,0)的合并。等式的正确性可以由依次代入各项进行简单展开后获得。
根据上述拆分过程,最后用重组整合数据表示c mod p256
c mod p256=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]modp256
步骤S4:通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算。
计算重组整合数据的和T,减法可以看做加上一个负数,即
T=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]
如果T大于p256,返回c mod p256=T-p256;否则,返回c mod p256=T。
下面是以一个具体的例子来说明本发明的实施方案,当然此举仅为示例,而非对本发明的限定。
一、符号及定义
(1)示例中每个元素均用计算机可识别的16进制表示。
(2)SM2椭圆曲线加密算法推荐素数p256可表示:
FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF。
(3)本示例随机选择512比特的数c,其16进制表示为:
999999998B8B8B8B4D4D4D4D0F0F0F0FE7E7E7E7070707073E3E3E3EB3B3B3B3DEDEDEDEC9C9C9C987878787F4F4F4F4ADADADAD51515151F8F8F8F8F3F3F3F3。
(4)将转化为b进制形式,即c=(c15,...,c2,c1,c0),其中:
c15=99999999,c14=8B8B8B8B,c13=4D4D4D4D,c12=0F0F0F0F,
c11=E7E7E7E7,c10=07070707,c9=3E3E3E3E,c8=B3B3B3B3,
c7=DEDEDEDE,c6=C9C9C9C9,c5=87878787,c4=F4F4F4F4,
c3=ADADADAD,c2=51515151,c1=F8F8F8F8,c0=F3F3F3F3。
(5)示例目标为计算c mod p256模约减。
二、数据转换
直接利用前述实施例中说明的数据转换过程,转换数据可表示为:
(1)R1=(c7,c6,c5,c4,c3,c2,c1,c0)=(DEDEDEDE,C9C9C9C9,87878787,F4F4F4F4,ADADADAD,51515151,F8F8F8F8,F3F3F3F3)。
(2)R2=(c8,0,0,0,c8,-c8,0,c8)=(B3B3B3B3,00000000,00000000,00000000,B3B3B3B3,-B3B3B3B3,00000000,B3B3B3B3)。
(3)R3=(c9,0,0,c9,0,-c9,c9,c9)=(3E3E3E3E,00000000,00000000,3E3E3E3E,00000000,-3E3E3E3E,3E3E3E3E,3E3E3E3E)。
(4)R4=(c10,0,c10,0,0,0,c10,c10)=(07070707,00000000,07070707,00000000,00000000,00000000,07070707,07070707)。
(5)R5=(c11,c11,0,0,c11,0,c11,c11)=(E7E7E7E7,E7E7E7E7,00000000,00000000,E7E7E7E7,00000000,E7E7E7E7,E7E7E7E7)。
(6)R6=(2c12,0,0,c12,c12,0,c12,c12)=(2*0F0F0F0F,00000000,00000000,0F0F0F0F,0F0F0F0F,00000000,0F0F0F0F,0F0F0F0F)。
(7)R7=(2*c13,0,c13,c13,2*c13,-c13,c13,2*c13)=(2*4D4D4D4D,00000000,4D4D4D4D,4D4D4D4D,2*4D4D4D4D,-4D4D4D4D,4D4D4D4D,2*4D4D4D4D)。
(8)R8=(2*c14,c14,c14,2*c14,c14,-c14,c14,2*c14)=(2*8B8B8B8B,8B8B8B8B,8B8B8B8B,2*8B8B8B8B,8B8B8B8B,-8B8B8B8B,8B8B8B8B,2*8B8B8B8B)。
(8)R9=(3*c15,c15,2*c15,c15,c15,0,2*c15,2*c15)=(3*99999999,99999999,2*99999999,99999999,99999999,00000000,2*99999999,2*99999999)。
三、转换数据(R1,R2,...,R9)进行拆分,直接利用前述实施例中说明的转换数据拆分,拆分数据可表示为:
(1)分离负数项。
(1.1)R2=(t2-s2),则t2,s2分别为:
t2=(B3B3B3B3,00000000,00000000,00000000,B3B3B3B3,00000000,00000000,B3B3B3B3)。
s2=(00000000,00000000,00000000,00000000,00000000,B3B3B3B3,00000000,00000000)。
(1.2)R3=(t3-s3),则t3,s3分别为:
t3=(3E3E3E3E,00000000,00000000,3E3E3E3E,00000000,00000000,3E3E3E3E,3E3E3E3E)。
s3=(00000000,00000000,00000000,00000000,00000000,3E3E3E3E,00000000,00000000)。
(1.3)R7=(t7-s7),则t7,s7分别为:
t7=(2*4D4D4D4D,00000000,4D4D4D4D,4D4D4D4D,2*4D4D4D4D,00000000,4D4D4D4D,2*4D4D4D4D)。
s7=(00000000,00000000,00000000,00000000,00000000,4D4D4D4D,00000000,00000000)。
(1.4)R8=(t8-s8),则t8,s8分别为:
t8=(2*8B8B8B8B,8B8B8B8B,8B8B8B8B,2*8B8B8B8B,8B8B8B8B,00000000,8B8B8B8B,2*8B8B8B8B)。
s8=(00000000,00000000,00000000,00000000,00000000,8B8B8B8B,00000000,00000000)。
(2)拆分多倍项。
将多倍项t7,t8,R6,R9拆分,最终获得T1,T2,T3,T4,T5,T6,T7,T8,在本示例中,可表示为:
T1=2*(c14,0,c15,c14,c13,0,c15,c14)=2*(8B8B8B8B,00000000,99999999,8B8B8B8B,4D4D4D4D,00000000,99999999,8B8B8B8B)。
T2=2*(c12,0,0,0,0,0,c14,c13)=2*(0F0F0F0F,00000000,00000000,00000000,00000000,00000000,8B8B8B8B,4D4D4D4D)。
T3=(0,0,0,c12,c12,0,c12,c12,)=(00000000,00000000,00000000,0F0F0F0F,0F0F0F0F,00000000,0F0F0F0F,0F0F0F0F)。
T4=(c13,0,c13,c13,0,0,c13,0)=(4D4D4D4D,00000000,4D4D4D4D,4D4D4D4D,00000000,00000000,4D4D4D4D,00000000)。
T5=(c13,c14,c14,0,c14,0,0,0)=(4D4D4D4D,8B8B8B8B,8B8B8B8B,00000000,8B8B8B8B,00000000,00000000,00000000)。
T6=(c15,c15,0,c15,c15,0,0,0)=(99999999,99999999,00000000,99999999,99999999,00000000,00000000,00000000)。
T7=T8=(c15,0,0,0,0,0,0,c15)=(99999999,00000000,00000000,00000000,00000000,00000000,00000000,99999999)。
最后用拆分数据表示c mod p256
c mod p256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)mod p256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
四、进行数据重组整合。
将上一步中的拆分结果进行重组整合,降低加操作的数量。另重组整合过程中应确保对应位置相的和不发生变化。
c mod p256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)mod p256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c8,0,0,0,c8,0,0,c8)+(c9,0,0,c9,0,0,c9,c9)+(c10,0,c100,0,0,c10,c10)+(c11,c11,0,0,c11,0,c11,c11)++2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c120,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]mod p256
=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]mod p256在本示例中,可表示为:
s0=(c7,c6,c5,c4,c3,c2,c1,c0)=(DEDEDEDE,C9C9C9C9,87878787,F4F4F4F4,ADADADAD,51515151,F8F8F8F8,F3F3F3F3)。
s1=(c8,0,0,0,c8,0,0,c8)=(B3B3B3B3,00000000,00000000,00000000,B3B3B3B3,00000000,00000000,B3B3B3B3)。
s4=(c9,0,0,c9,0,0,c9,c9)=(3E3E3E3E,00000000,00000000,3E3E3E3E,00000000,00000000,3E3E3E3E,3E3E3E3E)。
s5=(c15,0,0,0,0,0,0,0)=(99999999,00000000,00000000,00000000,00000000,00000000,00000000,00000000)。
s6=(c14,0,c15,c14,c13,0,c15,c14)=(8B8B8B8B,00000000,99999999,8B8B8B8B,4D4D4D4D,00000000,99999999,8B8B8B8B)。
s9=(c14,0,c15,c14,c13,0,c15,c14)=(8B8B8B8B,00000000,99999999,8B8B8B8B,4D4D4D4D,00000000,99999999,8B8B8B8B)。
s10=(c12,0,0,0,0,0,c14,c13)=(0F0F0F0F,00000000,00000000,00000000,00000000,00000000,8B8B8B8B,4D4D4D4D)。
s11=(0,0,0,c12,c12,0,c12,c12,)=(00000000,00000000,00000000,0F0F0F0F,0F0F0F0F,00000000,0F0F0F0F,0F0F0F0F)。
s12=(c13,0,c13,c13,0,0,c13,
0)=(4D4D4D4D,00000000,4D4D4D4D,4D4D4D4D,00000000,00000000,4D4D4D4D,00000000)。
s13=(c13,c14,c14,0,c14,0,0,0)=(4D4D4D4D,8B8B8B8B,8B8B8B8B,00000000,8B8B8B8B,00000000,00000000,00000000)。
s14=(c15,c15,0,c15,c15,0,0,0)=(99999999,99999999,00000000,99999999,99999999,00000000,00000000,00000000)。
s15=(c15,0,0,0,0,0,0,c15)=(99999999,00000000,00000000,00000000,00000000,00000000,00000000,99999999)。
五、模约减结果计算
计算上步骤中重组整合结果T,如
T=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]
如果T大于p256,返回c mod p256=T-p256;否则,返回c mod p256=T。
此外,本发明还公开了一种计算机可读存储介质,存储介质上存储有一计算机程序,计算机程序在处理器中运行以执行前述实施例所描述的方法步骤。由于程序实现的方法和前述实施例所述的相同,在此不再赘述。
尽管为使解释简单化将上述方法图示并描述为一系列动作,但是应理解并领会,这些方法不受动作的次序所限,因为根据一个或多个实施例,一些动作可按不同次序发生和/或与来自本文中图示和描述或本文中未图示和描述但本领域技术人员可以理解的其他动作并发地发生。
本领域技术人员将进一步领会,结合本文中所公开的实施例来描述的各种解说性逻辑板块、模块、电路、和算法步骤可实现为电子硬件、计算机软件、或这两者的组合。为清楚地解说硬件与软件的这一可互换性,各种解说性组件、框、模块、电路、和步骤在上面是以其功能性的形式作一般化描述的。此类功能性是被实现为硬件还是软件取决于具体应用和施加于整体系统的设计约束。技术人员对于每种特定应用可用不同的方式来实现所描述的功能性,但这样的实现决策不应被解读成导致脱离了本发明的范围。
结合本文所公开的实施例描述的各种解说性逻辑板块、模块、和电路可用通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立的门或晶体管逻辑、分立的硬件组件、或其设计成执行本文所描述功能的任何组合来实现或执行。通用处理器可以是微处理器,但在替换方案中,该处理器可以是任何常规的处理器、控制器、微控制器、或状态机。处理器还可以被实现为计算设备的组合,例如DSP与微处理器的组合、多个微处理器、与DSP核心协作的一个或多个微处理器、或任何其他此类配置。
结合本文中公开的实施例描述的方法或算法的步骤可直接在硬件中、在由处理器执行的软件模块中、或在这两者的组合中体现。软件模块可驻留在RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动盘、CD-ROM、或本领域中所知的任何其他形式的存储介质中。示例性存储介质耦合到处理器以使得该处理器能从/向该存储介质读取和写入信息。在替换方案中,存储介质可以被整合到处理器。处理器和存储介质可驻留在ASIC中。ASIC可驻留在用户终端中。在替换方案中,处理器和存储介质可作为分立组件驻留在用户终端中。
在一个或多个示例性实施例中,所描述的功能可在硬件、软件、固件或其任何组合中实现。如果在软件中实现为计算机程序产品,则各功能可以作为一条或更多条指令或代码存储在计算机可读介质上或藉其进行传送。计算机可读介质包括计算机存储介质和通信介质两者,其包括促成计算机程序从一地向另一地转移的任何介质。存储介质可以是能被计算机访问的任何可用介质。作为示例而非限定,这样的计算机可读介质可包括RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁存储设备、或能被用来携带或存储指令或数据结构形式的合意程序代码且能被计算机访问的任何其它介质。任何连接也被正当地称为计算机可读介质。例如,如果软件是使用同轴电缆、光纤电缆、双绞线、数字订户线(DSL)、或诸如红外、无线电、以及微波之类的无线技术从web网站、服务器、或其它远程源传送而来,则该同轴电缆、光纤电缆、双绞线、DSL、或诸如红外、无线电、以及微波之类的无线技术就被包括在介质的定义之中。如本文中所使用的盘(disk)和碟(disc)包括压缩碟(CD)、激光碟、光碟、数字多用碟(DVD)、软盘和蓝光碟,其中盘(disk)往往以磁的方式再现数据,而碟(disc)用激光以光学方式再现数据。上述的组合也应被包括在计算机可读介质的范围内。
提供对本公开的先前描述是为使得本领域任何技术人员皆能够制作或使用本公开。对本公开的各种修改对本领域技术人员来说都将是显而易见的,且本文中所定义的普适原理可被应用到其他变体而不会脱离本公开的精神或范围。由此,本公开并非旨在被限定于本文中所描述的示例和设计,而是应被授予与本文中所公开的原理和新颖性特征相一致的最广范围。

Claims (6)

1.一种适合SM2算法的快速模约减方法,其特征在于,针对SM2椭圆曲线公钥算法推荐参数计算模约减,用于SM2算法的快速实现,方法包括:
通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数问题转化为计算若干个256比特数的线性组合;
通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示;
通过重组整合拆分数据,降低加法或减法个数;
通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算;
其中,数据转换的步骤进一步包括:
步骤1.1,将c modp256进行转化,
Figure FDA0003158747090000011
其中p256=2256-2224-296+264-1,输入整数
Figure FDA0003158747090000012
且可表示为c=(c2t-1,...,c2,c1,c0),
其中t=8
步骤1.2,将步骤1.1中的I2modp256进行转化,
I2modp256=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,0,0,c8,0,0,0,0,0,0,0,0)]modp256-c8p256modp256)modp256
=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]modp256+[(c8,0,0,0,c8,-c8,0,c8)]modp256)modp256
=(I3modp256+R2modp256)modp256
步骤1.3,将步骤1.2中的I3modp256进行转化,
I3modp256=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,0,c9,0,0,0,0,0,0,0,0,0)]modp256-232c9p256modp256-c9p256modp256)modp256
=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]modp256+[(c9,0,0,c9,0,-c9,c9,c9)]modp256)modp256
=(I4modp256+R3modp256)modp256
步骤1.4,将步骤1.3中的I4modp256进行转化,
I4modp256=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,c10,0,0,0,0,0,0,0,0,0,0)]modp256-264c10p256modp256-232c10p256modp256-c10p256modp256)modp256
=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(c10,0,c10,0,0,0,c10,c10)]modp256)modp256
=(I5modp256+R4modp256)modp256
步骤1.5,将步骤1.4中的I5modp256进行转化,
I5modp256=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256-296c11p256modp256-264c11p256modp256-232c11p256modp256-c11p256modp256)modp256
=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(c11,c11,0,0,c11,0,c11,c11)]modp256)modp256
=(I6modp256+R5modp256)modp256
步骤1.6,将步骤1.5中的I6modp256进行转化,
I6modp256=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2128c12p256modp256-296c12p256modp256-264c12p256modp256-232c12p256modp256-c12p256modp256)modp256
=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c12,0,0,c12,c12,0,c12,c12)]modp256)modp256
=(I7modp256+R6modp256)modp256
步骤1.7,将步骤1.6中的I7modp256进行转化,
I7modp256=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2160c13p256modp256-2128c13p256modp256-296c3p256modp256-264c13p256modp256-232c13p256modp256-c13p256modp256)modp256
=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c13,0,c13,c13,2c13,-c13,c13,2c13)]modp256)modp256
=(I8modp256+R7modp256)modp256
步骤1.8,将步骤1.7中的I8modp256进行转化,
I8modp256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2192c14p256modp256-2160c14p256modp256-2128c14p256modp256-296c14p256modp256-264c14p256modp256-232c14p256modp256-c14p256modp256)modp256
=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)]modp256)modp256
=(I9modp256+R8modp256)modp256
步骤1.9,将步骤1.8中的I9modp256进行转化,
I9modp256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2224c15p256modp256-2192c15p256modp256-2160c15p256modp256-2128c15p256modp256-296c15p256modp256-264c15p256modp256-232c15p256modp256-c15p256modp256)modp256
=[(3c15,c15,2c15,c15,c15,0,2c15,2c15)]modp256
=R9modp256
根据上述步骤1.1至步骤1.9的转换过程,最后用转换数据(R1,R2,...,R9)表示c modp256
c modp256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)modp256
其中,重组整合拆分数据的过程中确保对应位置相的和不发生变化,其步骤进一步包括:
c modp256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)modp256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c8,0,0,0,c8,0,0,c8)+(c9,0,0,c9,0,0,c9,c9)+(c10,0,c100,0,0,c10,c10)+(c11,c11,0,0,c11,0,c11,c11)++2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c120,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]modp256
=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]modp256
根据上述拆分过程,最后用重组整合数据表示c modp256
c modp256=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]modp256
2.根据权利要求1所述的适合SM2算法的快速模约减方法,其特征在于,将转换数据(R1,R2,...,R9)拆分的步骤进一步包括:
步骤2.1,拆分Ri中负数项,其中i=2,3,7,8,
R2=(c8,0,0,0,c8,-c8,0,c8)modp256
=[(c8,0,0,0,c8,0,0,c8)-(0,0,0,0,0,c8,0,0)]modp256
=(t2-s2)modp256
R3=(c9,0,0,c9,0,-c9,c9,c9)modp256
=[(c9,0,0,c9,0,0,c9,c9)-(0,0,0,0,0,c9,0,0)]modp256
=(t3-s3)modp256
R7=(2c13,0,c13,c13,2c13,-c13,c13,2c13)modp256
=[(2c13,0,c13,c13,2c13,0,c13,2c13)-(0,0,0,0,0,c13,0,0)]modp256
=(t7-s7)modp256
R8=(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)modp256
=[(2c14,c14,c14,2c14,c14,0,2c14,2c14)-(0,0,0,0,0,c14,0,0)]modp256
=(t8-s8)modp256
步骤2.2,拆分t7,t8,R6,R9中多倍项,
(R6+t7+t8+R9)modp256=((2c12,0,0,c12,c12,0,c12,c12)modp256+(2c13,0,c13,c13,2c13,0,c13,2c13)modp256+(2c14,c14,c14,2c14,c14,0,2c14,2c14)modp256+(3c15,c15,2c15,c15,c15,0,2c15,2c15)modp256)modp256
=[2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c12,0,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)]modp256
=(T1+T2+T3+T4+T5+T6+T7+T8)modp256
根据上述步骤1.1到步骤2.2的拆分过程,最后用拆分数据表示c modp256
c modp256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)modp256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)modp256
3.根据权利要求2所述的适合SM2算法的快速模约减方法,其特征在于,计算重组整合数据的和,其步骤进一步包括:
计算重组整合数据的和T,即
T=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]
如果T大于p256,返回c modp256=T-p256;否则,返回c modp256=T。
4.一种计算机可读存储介质,存储一针对SM2椭圆曲线公钥算法推荐参数计算模约减,用于SM2算法的快速实现的计算机程序,所述计算机程序在处理器中运行以执行以下的步骤:
通过数据转换得到转换数据,将512比特数模SM2椭圆曲线推荐参数问题转化为计算若干个256比特数的线性组合;
通过拆分负数项和多倍项将转换数据拆分,并用拆分数据表示转换数据,以使每个256比特数易于表示;
通过重组整合拆分数据,降低加法或减法个数;
通过计算若干个256比特数的和,完成512比特数模SM2椭圆曲线推荐参数模约减的计算;
其中,计算机程序在处理器中运行所执行的数据转换的步骤进一步包括:
步骤1.1,将c modp256进行转化,
Figure FDA0003158747090000061
其中p256=2256-2224-296+264-1,输入整数
Figure FDA0003158747090000062
且可表示为c=(c2t-1,...,c2,c1,c0),
其中t=8
步骤1.2,将步骤1.1中的I2modp256进行转化,
I2modp256=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,0,0,c8,0,0,0,0,0,0,0,0)]modp256-c8p256modp256)modp256
=([(c15,c14,c13,c12,c11,c10,c9,0,0,0,0,0,0,0,0,0)]modp256+[(c8,0,0,0,c8,-c8,0,c8)]modp256)modp256
=(I3modp256+R2modp256)modp256
步骤1.3,将步骤1.2中的I3modp256进行转化,
I3modp256=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,0,c9,0,0,0,0,0,0,0,0,0)]modp256-232c9p256modp256-c9p256modp256)modp256
=([(c15,c14,c13,c12,c11,c10,0,0,0,0,0,0,0,0,0,0)]modp256+[(c9,0,0,c9,0,-c9,c9,c9)]modp256)modp256
=(I4modp256+R3modp256)modp256
步骤1.4,将步骤1.3中的I4modp256进行转化,
I4modp256=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,0,c10,0,0,0,0,0,0,0,0,0,0)]modp256-264c10p256modp256-232c10p256modp256-c10p256modp256)modp256
=([(c15,c14,c13,c12,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(c10,0,c10,0,0,0,c10,c10)]modp256)modp256
=(I5modp256+R4modp256)modp256
步骤1.5,将步骤1.4中的I5modp256进行转化,
I5modp256=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,0,c11,0,0,0,0,0,0,0,0,0,0,0)]modp256-296c11p256modp256-264c11p256modp256-232c11p256modp256-c11p256modp256)modp256
=([(c15,c14,c13,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(c11,c11,0,0,c11,0,c11,c11)]modp256)modp256
=(I6modp256+R5modp256)modp256
步骤1.6,将步骤1.5中的I6modp256进行转化,
I6modp256=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,0,c12,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2128c12p256modp256-296c12p256modp256-264c12p256modp256-232c12p256modp256-c12p256modp256)modp256
=([(c15,c14,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c12,0,0,c12,c12,0,c12,c12)]modp256)modp256
=(I7modp256+R6modp256)modp256
步骤1.7,将步骤1.6中的I7modp256进行转化,
I7modp256=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,0,c13,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2160c13p256modp256-2128c13p256modp256-296c3p256modp256-264c13p256modp256-232c13p256modp256-c13p256modp256)modp256
=([(c15,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c13,0,c13,c13,2c13,-c13,c13,2c13)]modp256)modp256
=(I8modp256+R7modp256)modp256
步骤1.8,将步骤1.7中的I8modp256进行转化,
I8modp256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(0,c14,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2192c14p256modp256-2160c14p256modp256-2128c14p256modp256-296c14p256modp256-264c14p256modp256-232c14p256modp256-c14p256modp256)modp256
=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256+[(2c14,c14,c14,2c14,c1 4,-c14,2c14,2c14)]modp256)modp256
=(I9modp256+R8modp256)modp256
步骤1.9,将步骤1.8中的I9modp256进行转化,
I9modp256=([(c15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)]modp256-2224c15p256modp256-2192c15p256modp256-2160c15p256modp256-2128c15p256modp256-296c15p256modp256-264c15p256modp256-232c15p256modp256-c15p256modp256)modp256
=[(3c15,c15,2c15,c15,c15,0,2c15,2c15)]modp256
=R9modp256
根据上述步骤1.1至步骤1.9的转换过程,最后用转换数据(R1,R2,...,R9)表示cmodp256
c modp256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)modp256
其中,计算机程序在处理器中运行所执行的重组整合拆分数据的过程中确保对应位置相的和不发生变化,其步骤进一步包括:
c modp256=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)modp256
=[(c7,c6,c5,c4,c3,c2,c1,c0)+(c8,0,0,0,c8,0,0,c8)+(c9,0,0,c9,0,0,c9,c9)+(c10,0,c100,0,0,c10,c10)+(c11,c11,0,0,c11,0,c11,c11)++2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c120,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)-(0,0,0,0,0,c8,0,0)-(0,0,0,0,0,c9,0,0)-(0,0,0,0,0,c13,0,0)-(0,0,0,0,0,c14,0,0)]modp256
=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]modp256
根据上述拆分过程,最后用重组整合数据表示c modp256
c modp256=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]modp256
5.根据权利要求4所述的计算机可读存储介质,其特征在于,计算机程序在处理器中运行所执行的将转换数据(R1,R2,...,R9)拆分的步骤进一步包括:
步骤2.1,拆分Ri中负数项,其中i=2,3,7,8,
R2=(c8,0,0,0,c8,-c8,0,c8)modp256
=[(c8,0,0,0,c8,0,0,c8)-(0,0,0,0,0,c8,0,0)]modp256
=(t2-s2)modp256
R3=(c9,0,0,c9,0,-c9,c9,c9)modp256
=[(c9,0,0,c9,0,0,c9,c9)-(0,0,0,0,0,c9,0,0)]modp256
=(t3-s3)modp256
R7=(2c13,0,c13,c13,2c13,-c13,c13,2c13)modp256
=[(2c13,0,c13,c13,2c13,0,c13,2c13)-(0,0,0,0,0,c13,0,0)]modp256
=(t7-s7)modp256
R8=(2c14,c14,c14,2c14,c14,-c14,2c14,2c14)modp256
=[(2c14,c14,c14,2c14,c14,0,2c14,2c14)-(0,0,0,0,0,c14,0,0)]modp256
=(t8-s8)modp256
步骤2.2,拆分t7,t8,R6,R9中多倍项,
(R6+t7+t8+R9)modp256=((2c12,0,0,c12,c12,0,c12,c12)modp256+(2c13,0,c13,c13,2c13,0,c13,2c13)modp256+(2c14,c14,c14,2c14,c14,0,2c14,2c14)modp256+(3c15,c15,2c15,c15,c15,0,2c15,2c15)modp256)modp256
=[2(c14,0,c15,c14,c13,0,c15,c14)+2(c12,0,0,0,0,0,c14,c13)+(0,0,0,c12,c12,0,c12,c12)+(c13,0,c13,c13,0,0,c13,0)+(c13,c14,c14,0,c14,0,0,0)+(c15,c15,0,c15,c15,0,0,0)+(c15,0,0,0,0,0,0,c15)+(c15,0,0,0,0,0,0,c15)]modp256
=(T1+T2+T3+T4+T5+T6+T7+T8)modp256
根据上述步骤1.1到步骤2.2的拆分过程,最后用拆分数据表示c modp256
c modp256=(R1+R2+R3+R4+R5+R6+R7+R8+R9)modp256
=(R1+t2+t3+R4+R5+T1+T2+T3+T4+T5+T6+T7+T8-s2-s3-s7-s8)modp256
6.根据权利要求5所述的计算机可读存储介质,其特征在于,计算机程序在处理器中运行所执行的计算重组整合数据的和的步骤进一步包括:
计算重组整合数据的和T,即
T=[s0+s1+s4+s5+s6+2s9+2s10+s11+s12+s13+s14+2s15-s2-s3-s7-s8]
如果T大于p256,返回c modp256=T-p256;否则,返回c modp256=T。
CN201711383428.9A 2017-12-20 2017-12-20 一种适合sm2算法的快速模约减方法和介质 Active CN108418687B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201711383428.9A CN108418687B (zh) 2017-12-20 2017-12-20 一种适合sm2算法的快速模约减方法和介质
PCT/CN2018/118868 WO2019120066A1 (zh) 2017-12-20 2018-12-03 一种适合sm2算法的快速模约减方法和介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711383428.9A CN108418687B (zh) 2017-12-20 2017-12-20 一种适合sm2算法的快速模约减方法和介质

Publications (2)

Publication Number Publication Date
CN108418687A CN108418687A (zh) 2018-08-17
CN108418687B true CN108418687B (zh) 2022-02-08

Family

ID=63125598

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711383428.9A Active CN108418687B (zh) 2017-12-20 2017-12-20 一种适合sm2算法的快速模约减方法和介质

Country Status (2)

Country Link
CN (1) CN108418687B (zh)
WO (1) WO2019120066A1 (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108418687B (zh) * 2017-12-20 2022-02-08 矩阵元技术(深圳)有限公司 一种适合sm2算法的快速模约减方法和介质
CN113612799B (zh) * 2021-08-25 2022-11-18 中国银行股份有限公司 一种基于sm2算法的区块链哈希加密方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2010048719A1 (en) * 2008-10-30 2010-05-06 Certicom Corp. Method and apparatus for modulus reduction
CN101826142B (zh) * 2010-04-19 2011-11-09 中国人民解放军信息工程大学 一种可重构椭圆曲线密码处理器
CN104699452A (zh) * 2015-03-10 2015-06-10 东南大学 一种素域gf(p)下实现位宽可变的模乘法器
CN107040380A (zh) * 2017-06-13 2017-08-11 厦门大学 一种基于二进制域的椭圆曲线密码体制的改进模除方法
CN108418687B (zh) * 2017-12-20 2022-02-08 矩阵元技术(深圳)有限公司 一种适合sm2算法的快速模约减方法和介质

Also Published As

Publication number Publication date
WO2019120066A1 (zh) 2019-06-27
CN108418687A (zh) 2018-08-17

Similar Documents

Publication Publication Date Title
Naehrig et al. Dual isogenies and their application to public-key compression for isogeny-based cryptography
CA2614120C (en) Elliptic curve point multiplication
JP4875700B2 (ja) ランダム化されたモジュラー多項式のリダクション方法およびそのためのハードウェア
US8862651B2 (en) Method and apparatus for modulus reduction
JP2000187438A (ja) 楕円曲線暗号実行方法及び装置並びに記録媒体
WO2015164996A1 (zh) 椭圆域曲线运算方法和椭圆域曲线运算器
Banegas et al. DAGS: Key encapsulation using dyadic GS codes
CN108418687B (zh) 一种适合sm2算法的快速模约减方法和介质
CN113467750A (zh) 用于基数为4的srt算法的大整数位宽除法电路及方法
US7050579B1 (en) Cryptographic methods and apparatus using word-wise montgomery multiplication
Lau et al. Key recovery attacks on some rank metric code-based signatures
JP5329879B2 (ja) 計算装置、方法及びプログラム
Chou et al. A constant-time AVX2 implementation of a variant of ROLLO
Greconici Kyber on RISC-V
CN101809638A (zh) 运算方法和运算装置
JP5175983B2 (ja) 演算装置
JP4182226B2 (ja) 剰余系の計算方法及び装置並びにプログラム
KR101548174B1 (ko) 모듈러스의 음의 역원을 구하는 방법
CN107005403A (zh) 电子计算设备
RU2401513C2 (ru) Способ формирования и проверки подлинности электронной цифровой подписи, заверяющей электронный документ
Knezevic et al. Modular reduction without precomputational phase
KR102019369B1 (ko) 단일파형공격을 차단하기 위한 타원곡선 암호화 장치 및 방법
SUBRAHMANYAM et al. Realization of Montgomery Multiplier for Power-Delay Critical Applications
JP6293681B2 (ja) マルチスカラー倍算演算装置、マルチスカラー倍算演算方法、プログラム
REDDY et al. Scalable Montgomery Modular Multiplication Architecture with Low-Latency and Low-Memory Bandwidth Requirement

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20230421

Address after: 518054 201, building a, No.1 Qianwan 1st Road, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen City, Guangdong Province

Patentee after: JUZIX TECHNOLOGY (SHENZHEN) Co.,Ltd.

Patentee after: WUHAN University

Address before: 518054 201, building a, No.1 Qianwan 1st Road, Qianhai Shenzhen Hong Kong cooperation zone, Shenzhen City, Guangdong Province

Patentee before: JUZIX TECHNOLOGY (SHENZHEN) Co.,Ltd.

TR01 Transfer of patent right