CN115202616A - 模乘器、安全芯片、电子设备及加密方法 - Google Patents

模乘器、安全芯片、电子设备及加密方法 Download PDF

Info

Publication number
CN115202616A
CN115202616A CN202210729378.XA CN202210729378A CN115202616A CN 115202616 A CN115202616 A CN 115202616A CN 202210729378 A CN202210729378 A CN 202210729378A CN 115202616 A CN115202616 A CN 115202616A
Authority
CN
China
Prior art keywords
result
modulus
modulo
input
modular
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.)
Pending
Application number
CN202210729378.XA
Other languages
English (en)
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.)
Shanghai Tuqing Microelectronics Co ltd
Original Assignee
Shanghai Tuqing Microelectronics 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 Shanghai Tuqing Microelectronics Co ltd filed Critical Shanghai Tuqing Microelectronics Co ltd
Priority to CN202210729378.XA priority Critical patent/CN115202616A/zh
Publication of CN115202616A publication Critical patent/CN115202616A/zh
Priority to TW111146219A priority patent/TWI843313B/zh
Priority to PCT/CN2022/143036 priority patent/WO2023246063A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/60Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
    • G06F7/72Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
    • G06F7/724Finite field arithmetic
    • G06F7/725Finite field arithmetic over elliptic curves

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

本申请提供一种模乘器,应用于SM9,包括:相乘电路,用于对所述SM9中两个算子执行乘积操作,以获得所述两个算子的乘积,其中,所述乘积为二进制数,且其位数为m,所述m为2的整数倍;以及取模器,与所述相乘电路连接,用于在n个时钟周期内完成对所述乘积执行n次取模操作,从而得到最终模乘结果,其中,每次所述取模操作在一个时钟周期内执行,以得到一次取模结果,所述n为小于m/2的正整数。本申请还提供了相应的安全芯片及加密算法。本申请的上述方案,避免使用Montgomery模乘算法,减少不必要的反复模乘,提高SM9中整个模乘运算的速度,从而提高SM9的整体性能。

Description

模乘器、安全芯片、电子设备及加密方法
技术领域
本申请的所公开实施例涉及信息安全技术领域,且更具体而言,涉及一种模乘器、安全芯片、电子设备及加密方法。
背景技术
随着信息技术发展,信息加密的要求也随之越来越高。其中,SM9(Modularmultiplication Encryption algorithm,模乘加密算法)是国家密码管理局于2007年发布的标识密码算法,相比于一般公钥加密方式,SM9的公钥来源于身份标识,避免了复杂的交换过程,提高了无线网络吞吐量,因此,目前SM9广泛应用各种设备中,需求越来越大。
SM9基于扩域上的椭圆曲线运算,核心算法为双线性对的计算,主要包括基域、二次扩域、四次扩域和十二次扩域上的模加、模乘和模逆运算模块,基域和二次扩域上的点加和多倍点运算模块,Miller算法模块,十二次扩域上的模幂模块和最终模幂模块,其中,模乘运算为最基础的运算,其计算频率非常高,因此,模乘运算的速度对SM9整体的性能至关重要。
目前,模乘运算的实现有如下几种方式:
方式1):反复用两个乘数的乘积减去模数,直到得到的差小于模数,但这种方式仅适用于加密算法中算子位数较少的情况,而对于诸如SM9中算子位数较大的情况,使用这种方式来计算模乘会浪费较多的时钟周期,严重影响算法的性能。
方式2):直接利用两个乘数的乘积除以模数,并取余数作为结果,应用于加密算法中,即先将两个算子相乘,然后直接用乘积除以模数取余。然而,这种方式中,由于除法器综合后的电路往往过于复杂,且运算时间较长,硬件电路中往往用移位的方式代替除操作。
方式3):采用double-add算法,将乘转化为模加操作。这样,每次计算1比特,然而,在加密算法中,模数的位数过多时,采用这种方式过于耗时,从而影响算法性能。
方式4):采用Montgomery模乘,无需采用除法即可计算模乘。具体过程为:先进行一次蒙哥马利模乘,以完成进入蒙哥马利域,然后,在蒙哥马利域中进行蒙哥马利模乘,以得到结果,最后,再进行一次蒙哥马利模乘,以退出蒙哥马利域。这种方式是目前加密算法中常用的计算模乘的方法,适合于算子位数高达2048比特的RSA算法,或者需进行反复模乘的模幂运算。但对于SM9中的256比特的模乘运算来说,由于每计算一次模乘至少需要经历三次蒙哥马利模乘,消耗的时钟周期过多,从而降低了SM9的性能。
发明内容
根据本申请的实施例,本申请提出一种模乘器、安全芯片、电子设备及加密方法。
根据本申请的第一方面,公开一种实例性的模乘器,应用于SM9,包括:相乘电路,用于对所述SM9中两个算子执行乘积操作,以获得所述两个算子的乘积,其中,所述乘积为二进制数,且其位数为m,所述m为2的整数倍;以及取模器,与所述相乘电路连接,用于在n个时钟周期内完成对所述乘积执行n次取模操作,从而得到最终模乘结果,其中,每次所述取模操作在一个时钟周期内执行,以得到一次取模结果,所述n为小于m/2的正整数。
根据本申请的第二方面,公开一种实例性的一种安全芯片,包括如上述第一方面所述的模乘器。
根据本申请的第三方面,公开一种实例性的一种电子设备,包括如上述第二方面所述的安全芯片。
根据本申请的第四方面,公开一种实例性的一种加密方法,应用于SM9,包括:对所述SM9中的两个算子执行模乘操作,以得到模乘结果,从而实现加密,其中,所述模乘操作由如上述第一方面所述的的模乘器实现。
本申请的有益效果有:通过相乘电路对SM9中两个算子执行乘积操作,以获得两个算子的乘积,取模器在n个时钟周期内完成对乘积执行n次取模操作,从而得到最终模乘结果,其中,每次取模操作在一个时钟周期内执行,以得到一次取模结果,n为小于m/2的正整数,避免使用Montgomery模乘算法,减少不必要的反复模乘,提高SM9中整个模乘运算的速度,从而提高SM9的整体性能。
在阅读以下对各图及图式中所例示的优选实施例的详细说明之后,本申请的这些及其它目标无疑将对所属领域的技术人员显而易见。
附图说明
图1是例示本申请一实施例的模乘器的结构示意图。
图2是例示本申请另一实施例的模乘器的结构示意图。
图3是例示本申请实施例的状态机的状态转移图。
图4是例示本申请一实施例的安全芯片的结构示意图。
图5是例示本申请一实施例的电子设备的结构示意图。
具体实施方式
为使本领域的技术人员更好地理解本申请的技术方案,下面结合附图和具体实施方式对本申请的技术方案做进一步详细描述。
如图1所示,是本申请一实施例的模乘器的结构示意图。该模乘器100应用于SM9,如上述,SM9基于扩域上的椭圆曲线运算,核心算法为双线性对的计算,本申请对SM9的具体算法流程或构成并不作具体限定。具体地,该模乘器100包括相乘电路110与取模器120,其中,取模器120与相乘电路110连接。
相乘电路110用于对SM9中的两个算子执行乘积操作,以获得两个算子的乘积,其中,乘积为二进制数,且其位数为m,m为2的整数倍。
取模器120用于在n个时钟周期内完成对乘积执行n次取模操作,从而得到最终模乘结果,其中,每次取模操作在一个时钟周期内执行,以得到一次取模结果,n为小于m/2的正整数。
相乘电路110采用Booth算法来执行乘积操作,SM9中的两个算子为二进制数,相应地,执行乘积操作所得到的乘积也以二进制数表示。例如,假设SM9中的两个算子分别为a_mul、b_mul,均是256比特,也即a_mul与b_mul的位数为256,可以表示为a_mul[255:0]和b_mul[255:0]。采用Booth算法执行乘积操作后,这两个算子a_mul与b_mul的乘积标记为ab_product,其位数m为512,可以表示为ab_product[511:0]。
取模器120在n个时钟周期内完成对乘积ab_product执行n次取模操作,一个时钟周期内执行一次取模操作,从而得到最终取模结果。n为小于m/2的正整数,在上述m为512的情况下,n为小于256(即512/2)的正整数,例如,n可以为64、32等,即,取模器120可以在64或32个时钟周期内,执行64或32次取模操作,以完成对乘积ab_product的取模,得到最终取模结果。
本实施例中,通过相乘电路对SM9中两个算子执行乘积操作,以获得两个算子的乘积,取模器在n个时钟周期内完成对乘积执行n次取模操作,从而得到最终模乘结果,其中,每次取模操作在一个时钟周期内执行,以得到一次取模结果,n为小于m/2的正整数,避免使用Montgomery模乘算法,减少不必要的反复模乘,提高SM9中整个模乘运算的速度,从而提高SM9的整体性能。
在一些实施例中,两个算子的乘积被顺序划分成一个第一部分和n-1个第二部分,其中,第一部分位于n-1个第二部分之前,且第一部分的位数等于一个第二部分的位数与一次取模结果的位数之和。
此时,取模器120分别对第一部分和n-1个第二部分进行取模。
第一部分位于n-1个第二部分之前,表示第一部分为乘积的前面高位部分的二进制数,n-1个第二部分分别为乘积的后面低位部分的二进制数,即乘积是从高到低被划分的。
并且,第一部分的位数等于一个第二部分的位数与一次取模结果的位数之和,当一次取模结果的位数已知时,则第一部分和n-1个第二部分被确定。
继续以上述SM9中的两个算子a_mul与b_mul为例进行说明,乘积ab_product被顺序划分成一个第一部分和n-1个第二部分,例如,从高到低,对乘积ab_product进行划分,得到一个第一部分和n-1个第二部分。
例如,当n为64,即乘积ab_product被顺序划分成一个第一部分和63个第二部分,且一次取模结果的位数为256时,第一部分的位数为260,每个第二部分的位数为4,即第一部分表示为ab_product[511:252],63个第二部分依次为ab_product[253:250],ab_product[249:246]…ab_product[3:0]。
又例如,当n为32,即乘积ab_product被顺序划分成一个第一部分和31个第二部分,且一次取模结果的位数为256时,第一部分的位数为264,每个第二部分的位数为8,即第一部分表示为ab_product[511:248],31个第二部分依次为ab_product[247:240],ab_product[239:232]…ab_product[7:0]。
进一步地,在一些示例中,取模器分别对第一部分和n-1个第二部分进行取模,包括:在n个时钟周期中第一个时钟周期内对第一部分执行一次取模操作;在n个时钟周期中剩余n-1个时钟周期内,顺序对上一个时钟周期内所得到的取模结果和相邻的第二部分的结合执行一次取模操作,从而执行n-1次取模操作。
在n个时钟周期中第一个时钟周期内,对第一部分执行一次取模操作,得到第一次取模结果。随后,下一个时钟周期,即n个时钟周期中第二个时钟周期内,将第一个第二部分与第一次取模结果进行结合,并对结合后的第一个第二部分与第一次取模结果执行一次取模操作。随后,下一个时钟周期,即n个时钟周期中第三个时钟周期内,将第二个第二部分与第二次取模结果进行结合,并对结合后的第二个第二部分与第二次取模结果执行一次取模操作。以此类推,在n个时钟周期中第n个时钟周期内,将第n-1个第二部分与第n-1次取模结果进行结合,并对结合后的第n-1个第二部分与第n-1次取模结果执行一次取模操作。
进一步地,在一些实施例中,在n个时钟周期中第一个时钟周期内对第一部分执行一次取模操作,包括:在第一个时钟周期内,将第一部分传输至取模器120,以自取模器120获得并寄存第一次取模结果。
在n个时钟周期中剩余n-1个时钟周期内,顺序对上一个时钟周期内所得到的取模结果和相邻的第二部分的结合执行一次取模操作,包括:在n个时钟周期中剩余的每个时钟周期内,将上一个时钟周期内所得到的取模结果与相邻的第二部分拼接并传输至取模器,以自取模器120获得并寄存本次取模结果,其中,最后一次取模结果为最终模乘结果。
第一个第二部分与第一次取模结果拼接,第一次取模结果位于第一个第二部分之前,从而,得到拼接数,其具有与第一部分相同的位数。同样地,每个第二部分与前一次取模结果拼接,前一次取模结果位于第二部分之前,从而,得到相应的拼接数,其具有与第一部分相同的位数。
在n个时钟周期中第一个时钟周期内,将第一部分传输至取模器120,以自取模器120获得并寄存第一次取模结果。随后,下一个时钟周期,即n个时钟周期中第二个时钟周期内,将第一个第二部分与第一次取模结果拼接并传输至取模器120,以自取模器120获得并寄存第二次取模结果。随后,下一个时钟周期,即n个时钟周期中第三个时钟周期内,将第二个第二部分与第二次取模结果拼接并传输至取模器120,以自取模器120获得并寄存第三次取模结果。以此类推,在n个时钟周期中第n个时钟周期内,将第n-1个第二部分与第n-1次取模结果拼接并传输至取模器120,以自取模器120获得并寄存第n次取模结果,即最终模乘结果。
继续以上述SM9中的两个算子a_mul与b_mul为例进行说明,在n为64的示例中,在64个时钟周期中第一个时钟周期内对第一部分ab_product[511:252]进行取模,获得并寄存第一次取模结果。随后,下一个时钟周期,即在64个时钟周期中第二个时钟周期,对第二部分ab_product[253:250]与第一次取模结果拼接并进行取模,获得并寄存第二次取模结果。随后,下一个时钟周期,即64个时钟周期中第三个时钟周期,对第二部分ab_product[249:246]与第二次取模结果拼接并进行取模,获得并寄存第三次取模结果。依次类推,直到64个时钟周期中第64个时钟周期内,对第二部分ab_product[3:0]与第63次取模结果拼接并进行取模,获得并寄存第64次取模结果。这样,第64次取模结果即为最终模乘结果。
在n为32的示例中,在32个时钟周期中第一个时钟周期内对第一部分ab_product[511:248]进行取模,获得并寄存第一次取模结果。随后,下一个时钟周期,即在32个时钟周期中第二个时钟周期,对第二部分ab_product[247:240]与第一次取模结果拼接并进行取模,获得并寄存第二次取模结果。随后,下一个时钟周期,即32个时钟周期中第三个时钟周期内,对第二部分ab_product[239:232]与第二次取模结果拼接并进行取模,获得并寄存第三次取模结果。依次类推,直到32个时钟周期中第32个时钟周期内,对第二部分ab_product[7:0]与第31次取模结果拼接并进行取模。这样,第32次取模结果即为最终模乘结果。
如图2所示,是本申请另一实施例的模乘器的结构示意图。在上述实施例的基础上,取模器120包括状态机121和取模电路122,取模电路122与状态机121连接,状态机121用于指示取模电路122在n个时钟周期内完成对乘积执行n次取模操作,取模电路122用于在n个时钟周期中每个时钟周期内执行一次取模操作,以得到一次取模结果。
继续以上述SM9中的两个算子a_mul与b_mul为例进行说明,状态机121控制取模电路122在n个时钟周期内完成对乘积ab_product执行n次取模操作,例如,在64个时钟周期内,执行64次取模操作,完成对乘积ab_product的取模,取模电路122在一个时钟周期内执行一次取模操作,以得到一次取模结果。
如图3所示,为本申请实施例的状态机的状态转移图。状态机121用于指示取模电路122在n个时钟周期内完成对乘积执行n次取模操作,具体地,状态机121包括第一状态、第二状态和第三状态。
第一状态用于指示取模电路122在n个时钟周期中第一个时钟周期内对第一部分执行一次取模操作。
第二状态用于指示取模电路122在n个时钟周期中剩余n-1个时钟周期内顺序对上一个时钟周期的取模结果和相邻的n-1个第二部分执行一次取模操作。
第三状态用于指示控制取模电路122处于空闲状态,以等待开始执行n次取模操作,或者结束执行n次取模操作。
状态机121检测到起始信号时,进入第一状态。
当状态机121处于第一状态时,其指示取模电路122在n个时钟周期中第一个时钟周期内对第一部分执行一次取模操作。随后,下一个时钟周期,即n个时钟周期中第二个时钟周期内,状态机121处于第二状态,其指示取模电路122在该第二个时钟周期内对第一个时钟周期内的取模结果结合第一个第二部分执行一次取模操作。随后,下一个时钟周期,即n个时钟周期中第三个时钟周期内,状态机121仍处于第二状态,其指示取模电路122在该第三个时钟周期内对第二个时钟周期的取模结果结合第二个第二部分执行一次取模操作,依次类推,直到n个时钟周期中第n个时钟周期内,状态机121处于第二状态,其指示取模电路122在该第n个时钟周期内对第n-2个时钟周期的取模结果结合第n-1个第二部分执行一次取模操作。这样,状态机121处于第二状态,指示取模电路122在剩余n-1个时钟周期内顺序对n-1个第二部分执行n-1一次取模操作。
当状态机121复位时,状态机121进入第三状态,指示取模电路122处于空闲状态,以等待开始执行n次取模操作,或者结束执行n次取模操作,例如,等待开始执行64次取模操作。
需要说明的是,第一个时钟周期内所取模的结果结合第一个第二部分、对第二个时钟周期的取模结果结合第二个第二部分等,详见上述实施例的说明,在此不再说明。
在一些实施例中,一次取模操作包括级联的x次减法操作,其中每次减法操作中减数为SM9中的模数,x为正整数,且为取模电路122的取模输入的位数与一次取模结果的位数的差。
一次取模操作包括级联的x次减法操作,即将一次取模操作分解成减法操作。在硬件实现上,取模电路122可以包括减法器和多路选择器,但本申请对取模电路122的具体结构并不进行限定,满足一次取模操作包括级联的x次减法操作即可。
继续以上述SM9中的两个算子a_mul与b_mul为例进行说明,在n为64的示例中,输入到取模电路122的是乘积ab_product的第一部分ab_product[511:252]、拼接后的第一次取模结果与乘积ab_product的第二部分ab_product[253:250]、拼接后的第二次取模结果与乘积ab_product的第二部分ab_product[249:246]…拼接后的第n-1次取模结果与乘积ab_product的第二部分ab_product[3:0],即取模电路122的取模输入的位数为260,且一次取模结果的位数为256,此时,x为4,表示一次取模操作包括级联的4次减法操作。可以看出,x为4,也是第二部分的位数或比特数。也就是说,x也为每个第二部分的位数或比特数,例如第二部分ab_product[253:250]。
在n为32的示例中,输入到取模电路122的是乘积ab_product的第一部分ab_product[511:248]、拼接后的第一次取模结果与乘积ab_product的第二部分ab_product[247:240]、拼接后的第二次取模结果与乘积ab_product的第二部分ab_product[239:232]…拼接后的第n-1次取模结果与乘积ab_product的第二部分ab_product[7:0],即取模电路122的取模输入的位数为264,且一次取模结果的位数为256,此时,x为8,表示一次取模操作包括级联的8次减法操作。可以看出,x为8,也是第二部分的位数或比特数。也就是说,x也为每个第二部分的位数或比特数,例如第二部分ab_product[247:240]。
在一些实施例中,取模输入被顺序拆分成一个第一输入部分和x-1个第二输入部分,其中,第一输入部分位于x-1个第二输入部分之前,且第一输入部分的位数等于一个第二输入部分的位数与一次取模结果的位数之和。
第一输入部分位于x-1个第二部分之前,表示第一输入部分为取模输入的高位部分位数的二进制数,x-1个第二输入部分分别为取模输入的低位部分位数的二进制数,即取模输入是从高到低被划分的。
并且,第一输入部分的位数等于一个第二输入部分的位数与一次取模结果的位数之和,当一次取模结果的位数已知时,则第一输入部分和x-1个第二输入部分被确定。
继续以上述SM9中的两个算子a_mul与b_mul为例进行说明,假设取模电路122的取模输入为mod_input,下面对不同取模输入的一次取模操作进行描述。
在n为64的示例中,取模输入mod_input的位数为260,也即取模输入mod_input为260比特,一次取模操作包括级联的4次减法操作。取模输入mod_input被顺序拆分成一个第一输入部分和3个第二输入部分,其中一次取模结果的位数为256,则第一输入部分的位数为257,每个第二输入部分的位数为1,即第一输入部分表示为mod_input[259:3],3个第二输入部分依次为mod_input[2]、mod_input[1]和mod_input[0]。
在n为32的示例中,取模输入mod_input的位数为264,也即取模输入mod_input为264比特,一次取模操作包括级联的8次减法操作。取模输入mod_input被顺序拆分成一个第一输入部分和7个第二输入部分,其中一次取模结果的位数为256,则第一输入部分的位数为257,每个第二输入部分的位数为1,即第一输入部分表示为mod_input[263:7],7个第二输入部分依次为mod_input[6]、mod_input[5]、mod_input[4]、mod_input[3]、mod_input[2]、mod_input[1]和mod_input[0]。
此时,执行一次取模操作包括:将第一输入部分作为第一被减数,并对第一被减数执行一次减法操作,得到第一个结果;将前一个结果与相邻的第二输入部分拼接,以得到相应的第x被减数,并对相应的第x被减数执行一次减法操作,得到相应的第x个结果,其中,最后一个结果为取模结果。
继续以上述取模电路122的取模输入为mod_input为例进行说明,在n为64的示例中,执行一次取模操作,首先,将第一输入部分mod_input[259:3]作为第一被减数,并对第一被减数执行一次减法操作,得到第一个结果。随后,将第二输入部分mod_input[2](即第一个第二输入部分)与第一个结果拼接,以得到第二被减数,并对第二被减数执行一次减法操作,得到第二个结果。随后,将第二输入部分mod_input[1](即第二个第二输入部分)与第二个结果拼接,以得到第三被减数,并对第三被减数执行一次减法操作,得到第三个结果。最后,将第二输入部分mod_input[0](即第三个第二输入部分)与第三个结果拼接,以得到第四被减数,并对第四被减数执行一次减法操作,得到第四个结果,即为一次取模结果,自取模电路122中输出。
在n为32的示例中,执行一次取模操作,首先,将第一输入部分mod_input[263:7]作为第一被减数,并对第一被减数执行一次减法操作,得到第一个结果。随后,将第二输入部分mod_input[6](即第一个第二输入部分)与第一个结果拼接,以得到第二被减数,并对第二被减数执行一次减法操作,得到第二个结果。随后,将第二输入部分mod_input[5](即第二个第二输入部分)与第二个结果拼接,以得到第三被减数,并对第三被减数执行一次减法操作,得到第三个结果。随后,将第二输入部分mod_input[4](即第三个第二输入部分)与第三个结果拼接,以得到第四被减数,并对第四被减数执行一次减法操作,得到第四个结果。依次类推,最后,将第二输入部分mod_input[0](即第七个第二输入部分)与第七个结果拼接,以得到第八被减数,并对第八被减数执行一次减法操作,得到第八个结果,即为一次取模结果,自取模电路122中输出。
进一步地,在一些实施例中,对第一被减数执行一次减法操作,得到第一个结果,包括:将第一被减数减去模数,得到第一减结果;其中,当第一减结果为正时,第一个结果为第一减结果;当第一减结果为负时,第一个结果为第一被减数,也即第一输入部分。
第二被减数为拼接的第一结果的后预设位与第一个第二输入部分,其中,第一个第二输入部分位于第一个结果的后预设位之后。
对第二被减数执行一次减法操作,得到第二个结果,包括:将第二被减数减去模数,得到第二减结果;其中,当第二减结果为正时,第二个结果为第二减结果;当第二减结果为负时,第二个结果为第二被减数。
第x被减数为拼接的上一个结果的后预设位与相邻的第二输入部分,其中,相邻的第二输入部分位于上一个结果的后预设位之后。
对第x被减数执行一次减法操作,得到相应的第x个结果,包括:将第x被减数减去模数,得到相应的第x减结果;其中,当相应的第x减结果为正时,相应的第x个结果为相应的第x减结果;当相应的第x减结果为负时,相应的第x个结果为第x被减数。
继续以上述取模电路122的取模输入为mod_input为例,以说明上述不同被减数的一次减法操作,其中,假设SM9中的模数为Q。
在n为64的示例中,首先,第一被减数mod_input[259:3]减去模数Q,得到第一减结果sub1,当第一减结果sub1的最高位为0时,表示第一减结果sub1为正,此时,第一个结果step1_sel为第一减结果sub1;当第一减结果sub1的最高位为1时,表示第一减结果sub1为负,此时,第一个结果step1_sel为第一被减数mod_input[259:3]。
随后,将第一个结果step1_sel的后预设位,例如,第一个结果step1_sel的后256位,即step1_sel[255:0],与第二输入部分mod_input[2](即第一个第二输入部分)进行拼接,得到第二被减数(即step1_sel[255:0]与mod_input[2]),将第二被减数减去模数Q,得到第二减结果sub2,当第二减结果sub2的最高位为0时,表示第二减结果sub2为正,此时,第二个结果step2_sel为第二减结果sub2;当第二减结果sub2的最高位为1时,表示第二减结果sub2为负,此时,第二个结果step2_sel为第二被减数,即step1_sel[255:0]与mod_input[2]。
随后,将第二个结果step2_sel的后预设位,例如,第二个结果step2_sel的后256位,即step2_sel[255:0],与第二输入部分mod_input[1](即第二个第二输入部分)进行拼接,得到第三被减数(即step2_sel[255:0]与mod_input[1]),将第三被减数减去模数Q,得到第三减结果sub3,当第三减结果sub3的最高位为0时,表示第三减结果sub3为正,此时,第三个结果step3_sel为第三减结果sub3;当第三减结果sub3的最高位为1时,表示第三减结果sub3为负,此时,第三个结果step3_sel为第三被减数,即step2_sel[255:0]与mod_input[1]。
最后,将第三个结果step3_sel的后预设位,例如,第三个结果step3_sel的后256位,即step3_sel[255:0],与第二输入部分mod_input[0](即第三个第二输入部分)进行拼接,得到第四被减数(即step3_sel[255:0]与mod_input[0]),将第四被减数减去模数Q,得到第四减结果sub4,当第四减结果sub4的最高位为0时,表示第四减结果sub4为正,此时,第四个结果step4_sel为第四减结果sub4;当第四减结果sub4的最高位为1时,表示第四减结果sub4为负,此时,第四个结果step4_sel为第四被减数,即step3_sel[255:0]与mod_input[0]。这样,第四个结果step4_sel即为一次取模结果,自取模电路122中输出。
在n为32的示例中,首先,第一被减数mod_input[263:7]减去模数Q,得到第一减结果sub1,当第一减结果sub1的最高位为0时,表示第一减结果sub1为正,此时,第一个结果step1_sel为第一减结果sub1;当第一减结果sub1的最高位为1时,表示第一减结果sub1为负,此时,第一个结果step1_sel为第一被减数mod_input[263:7]。
随后,将第一个结果step1_sel的后预设位,例如,第一个结果step1_sel的后256位,即step1_sel[255:0],与第二输入部分mod_input[6](即第一个第二输入部分)进行拼接,得到第二被减数(即step1_sel[255:0]与mod_input[6]),将第二被减数减去模数Q,得到第二减结果sub2,当第二减结果sub2的最高位为0时,表示第二减结果sub2为正,此时,第二个结果step2_sel为第二减结果sub2;当第二减结果sub2的最高位为1时,表示第二减结果sub2为负,此时,第二个结果step2_sel为第二被减数,即step1_sel[255:0]与mod_input[6]。
随后,将第二个结果step2_sel的后预设位,例如,第二个结果step2_sel的后256位,即step2_sel[255:0],与第二输入部分mod_input[5](即第二个第二输入部分)进行拼接,得到第三被减数(即step2_sel[255:0]与mod_input[5]),将第三被减数减去模数Q,得到第三减结果sub3,当第三减结果sub3的最高位为0时,表示第三减结果sub3为正,此时,第三个结果step3_sel为第三减结果sub3;当第三减结果sub3的最高位为1时,表示第三减结果sub3为负,此时,第三个结果step3_sel为第三被减数,即step2_sel[255:0]与mod_input[5]。
依次类推,最后,将第七个结果step7_sel的后预设位,例如,第七个结果step7_sel的后256位,即step7_sel[255:0],与第二输入部分mod_input[0](即第七个第二输入部分)进行拼接,得到第八被减数(即step7_sel[255:0]与mod_input[0]),将第八被减数减去模数Q,得到第八减结果sub8,当第八减结果sub8的最高位为0时,表示第八减结果sub8为正,此时,第八个结果step8_sel为第八减结果sub8;当第八减结果sub8的最高位为1时,表示第八减结果sub8为负,此时,第八个结果step8_sel为第八被减数,即step7_sel[255:0]与mod_input[0]。这样,第八个结果step8_sel即为一次取模结果,自取模电路122中输出。
本申请还提供一种安全芯片。如图4所示,为本申请一实施例的安全芯片的结构示意图。该安全芯片400包括模乘器410,其中,模乘器410可以为如图1或图2所示的模乘器100。
本申请还提供一种电子设备。如图5所示,本申请一实施例的电子设备的结构示意图。该电子设备500包括安全芯片510,其中安全芯片510可以为如图4所示的安全芯片400。
本申请还提供一种加密方法。该加密方法应用于SM9,包括如下步骤:对SM9中的两个算子执行模乘操作,以得到模乘结果,从而实现加密,其中,模乘操作由如图1或图2所示的模乘器100实现。
所属领域的技术人员易知,可在保持本申请的教示内容的同时对装置及方法作出诸多修改及变动。因此,以上公开内容应被视为仅受随附权利要求书的范围的限制。

Claims (11)

1.一种模乘器,其特征在于,应用于SM9,包括:
相乘电路,用于对所述SM9中两个算子执行乘积操作,以获得所述两个算子的乘积,其中,所述乘积为二进制数,且其位数为m,所述m为2的整数倍;以及
取模器,与所述相乘电路连接,用于在n个时钟周期内完成对所述乘积执行n次取模操作,从而得到最终模乘结果,其中,每次所述取模操作在一个时钟周期内执行,以得到一次取模结果,所述n为小于m/2的正整数。
2.如权利要求1所述的模乘器,其特征在于,所述乘积被顺序划分成一个第一部分和n-1个第二部分,其中,所述第一部分位于所述n-1个第二部分之前,且所述第一部分的位数等于一个所述第二部分的位数与所述一次取模结果的位数之和;
所述取模器分别对所述第一部分和所述n-1个第二部分进行取模。
3.如权利要求2所述的模乘器,其特征在于,所述取模器分别对所述第一部分和所述n-1个第二部分进行取模,包括:
在所述n个时钟周期中第一个时钟周期内对所述第一部分执行一次取模操作;
在所述n个时钟周期中剩余n-1个时钟周期内,顺序对上一个时钟周期内所得到的取模结果和相邻的所述第二部分的结合执行一次取模操作,从而执行n-1次取模操作。
4.如权利要求3所述的模乘器,其特征在于,所述在所述n个时钟周期中第一个时钟周期内对所述第一部分执行一次取模操作,包括:
在所述第一个时钟周期内,将所述第一部分传输至所述取模器,以自所述取模器获得并寄存第一次取模结果;
在所述n个时钟周期中剩余n-1个时钟周期内,顺序对上一个时钟周期内所得到的取模结果和相邻的所述第二部分的结合执行一次取模操作,包括:
在所述n个时钟周期中剩余的每个时钟周期内,将上一个时钟周期内所得到的取模结果与相邻的所述第二部分拼接并传输至所述取模器,以自所述取模器获得并寄存本次取模结果,其中,最后一次取模结果为所述最终模乘结果。
5.如权利要求1所述的模乘器,其特征在于,所述取模器包括状态机和取模电路,所述取模电路与所述状态机连接,所述状态机包括第一状态和第二状态,其中,
第一状态,用于指示所述取模电路在所述n个时钟周期中第一个时钟周期内对所述第一部分执行一次取模操作;以及
第二状态,用于指示所述取模电路在所述n个时钟周期中剩余n-1个时钟周期内顺序对所述n-1个第二部分执行一次取模操作。
6.如权利要求4所述的模乘器,其特征在于,所述一次取模操作包括级联的x次减法操作,其中每次所述减法操作中减数为所述SM9中的模数,所述x为正整数,且为所述取模器的取模输入的位数与所述一次取模结果的位数的差。
7.如权利要求6所述的模乘器,其特征在于,所述取模输入被顺序拆分成一个第一输入部分和x-1个第二输入部分,其中,所述第一输入部分位于所述x-1个第二输入部分之前,且所述第一输入部分的位数等于一个所述第二输入部分的位数与所述一次取模结果的位数之和;以及
执行所述一次取模操作包括:
将所述第一输入部分作为第一被减数,并对所述第一被减数执行一次减法操作,得到第一个结果;
将前一个结果与相邻的所述第二输入部分拼接,以得到相应的第x被减数,并对所述相应的第x被减数执行一次减法操作,得到相应的第x个结果,其中,最后一个结果为所述一次取模结果。
8.如权利要求7所述的模乘器,其特征在于,对所述第一被减数执行一次减法操作,得到第一个结果,包括:
将所述第一被减数减去所述模数,得到第一减结果;
其中,当所述第一减结果为正时,所述第一个结果为所述第一减结果;当所述第一减结果为负时,所述第一个结果为所述第一被减数;
所述第x被减数为拼接的上一个结果的后预设位与相邻的所述第二输入部分,其中,相邻的所述第二输入部分位于所述上一个结果的后预设位之后;
所述对所述第x被减数执行一次减法操作,得到相应的第x个结果,包括:
将所述第x被减数减去所述模数,得到相应的第x减结果;
其中,当所述相应的第x减结果为正时,所述相应的第x个结果为所述相应的第x减结果;当所述相应的第x减结果为负时,所述相应的第x个结果为所述第x被减数。
9.一种安全芯片,其特征在于,包括如权利要求1-8中任一项所述的模乘器。
10.一种电子设备,其特征在于,包括如权利要求9中所述的安全芯片。
11.一种加密方法,其特征在于,应用于SM9,包括:
对所述SM9中的两个算子执行模乘操作,以得到模乘结果,从而实现加密,其中,所述模乘操作由如权利要求1-8中任一项所述的模乘器实现。
CN202210729378.XA 2022-06-24 2022-06-24 模乘器、安全芯片、电子设备及加密方法 Pending CN115202616A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202210729378.XA CN115202616A (zh) 2022-06-24 2022-06-24 模乘器、安全芯片、电子设备及加密方法
TW111146219A TWI843313B (zh) 2022-06-24 2022-12-01 模乘器、安全晶片、電子設備及加密方法
PCT/CN2022/143036 WO2023246063A1 (zh) 2022-06-24 2022-12-28 模乘器、安全芯片、电子设备及加密方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210729378.XA CN115202616A (zh) 2022-06-24 2022-06-24 模乘器、安全芯片、电子设备及加密方法

Publications (1)

Publication Number Publication Date
CN115202616A true CN115202616A (zh) 2022-10-18

Family

ID=83578679

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210729378.XA Pending CN115202616A (zh) 2022-06-24 2022-06-24 模乘器、安全芯片、电子设备及加密方法

Country Status (3)

Country Link
CN (1) CN115202616A (zh)
TW (1) TWI843313B (zh)
WO (1) WO2023246063A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023246063A1 (zh) * 2022-06-24 2023-12-28 上海途擎微电子有限公司 模乘器、安全芯片、电子设备及加密方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9111122B2 (en) * 2007-07-02 2015-08-18 Freescale Semiconductor, Inc. Asymmetric cryptographic device with local private key generation and method therefor
CN107968710B (zh) * 2017-11-27 2020-08-25 武汉理工大学 Sm9数字签名分离交互生成方法及系统
US11249726B2 (en) * 2019-09-10 2022-02-15 Intel Corporation Integrated circuits with modular multiplication circuitry
CN110908635A (zh) * 2019-11-04 2020-03-24 南京大学 基于同源曲线的后量子密码学的高速模乘器及其模乘方法
CN110943828B (zh) * 2019-11-05 2021-01-08 武汉理工大学 秘密数运算转换方法及系统
US11218303B2 (en) * 2020-03-27 2022-01-04 Ahp-Tech Inc. Quantum attack-resistant system to facilitate and enhance processes of cryptography key exchange
CN111722833B (zh) * 2020-06-18 2023-06-02 安徽师范大学 一种sm2算法并行模乘器
CN112099763B (zh) * 2020-09-10 2024-03-12 上海交通大学 用于sm2的快速安全硬件乘法器及其应用
CN112486457B (zh) * 2020-11-23 2022-12-20 杭州电子科技大学 一种实现改进的fios模乘算法的硬件系统
CN112631546B (zh) * 2020-12-30 2024-10-29 南京低功耗芯片技术研究院有限公司 基于ko-8算法的高性能模乘器
CN114172651B (zh) * 2021-11-15 2023-07-18 武汉大学 一种sm9公钥加密算法、解密算法的gpu加速实现方法
CN115202616A (zh) * 2022-06-24 2022-10-18 上海途擎微电子有限公司 模乘器、安全芯片、电子设备及加密方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023246063A1 (zh) * 2022-06-24 2023-12-28 上海途擎微电子有限公司 模乘器、安全芯片、电子设备及加密方法

Also Published As

Publication number Publication date
TW202401243A (zh) 2024-01-01
WO2023246063A1 (zh) 2023-12-28
TWI843313B (zh) 2024-05-21

Similar Documents

Publication Publication Date Title
US5513133A (en) Compact microelectronic device for performing modular multiplication and exponentiation over large numbers
Kwon et al. Two implementation methods of a 1024-bit RSA cryptoprocessor based on modified Montgomery algorithm
CN115344237B (zh) 结合Karatsuba和蒙哥马利模乘的数据处理方法
US7580966B2 (en) Method and device for reducing the time required to perform a product, multiplication and modular exponentiation calculation using the Montgomery method
WO2010048719A1 (en) Method and apparatus for modulus reduction
US7024560B2 (en) Power-residue calculating unit using Montgomery algorithm
EP1600852A2 (en) Method and apparatus for calculating a modular inverse
CN115202616A (zh) 模乘器、安全芯片、电子设备及加密方法
CN117406957B (zh) 一种模乘方法、模乘组件和半定制电路
CN109144472B (zh) 一种二元扩域椭圆曲线的标量乘法及其实现电路
US20040091105A1 (en) Apparatus for hyperelliptic-curve cryptography processing
CN115268839A (zh) 一种以2为基的蒙哥马利模乘方法及装置
CN115270155A (zh) 一种获取大数拓展最大公约数的方法及硬件架构
CN207115387U (zh) Xiu‑累加寄存器、xiu‑累加寄存器电路、以及电子设备
Gao et al. DPF-ECC: A framework for efficient ECC with double precision floating-point computing power
US5948051A (en) Device improving the processing speed of a modular arithmetic coprocessor
US20210407322A1 (en) Low complexity conversion to montgomery domain
JP2002358010A (ja) べき乗剰余演算器
CN114594925A (zh) 适用于sm2加密运算的高效模乘电路及其运算方法
CN110633574B (zh) 用于电力系统安全传输的椭圆曲线密码学ecc加密模块
CN113190211A (zh) 一种用于双线性对的四输入fios模乘算法及架构设计
Nadjia et al. High throughput parallel montgomery modular exponentiation on FPGA
KR100297110B1 (ko) 모듈러곱셈기
CN116820394B (zh) 一种面向椭圆曲线加密算法的标量乘电路
Zhou et al. New algorithm and fast VLSI implementation for modular inversion in galois field GF (p)

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