CN104579656A - 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 - Google Patents
一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 Download PDFInfo
- Publication number
- CN104579656A CN104579656A CN201410851308.7A CN201410851308A CN104579656A CN 104579656 A CN104579656 A CN 104579656A CN 201410851308 A CN201410851308 A CN 201410851308A CN 104579656 A CN104579656 A CN 104579656A
- Authority
- CN
- China
- Prior art keywords
- mould
- calculation
- control signal
- deliver
- module
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3893—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
- G06F9/3895—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3066—Public 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
Abstract
一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,结合SM2算法实际,包括控制模块、寄存器堆、模乘模块、模逆模块、模加减模块、SM3模块。其中控制模块,接收主处理器发送的SM3运算指令、模乘运算指令、模逆运算指令或模加减运算指令,并控制寄存器堆将数据送至对应运算模块,运算模块按照运算指令进行运算后计算结果送至寄存器堆存储,寄存器接收并存储计算结果。本发明中每个模块只需要完成自己特定的工作即可通过协同工作实现SM2密码算法,具有模块化优势,另外本发明灵活性高,提高了整体芯片的可靠性和可扩展性,节省了硬件资源。
Description
技术领域
本发明涉及一种椭圆曲线公钥密码SM2算法所需的核心运算单元,特别是一种椭圆曲线公钥密码SM2算法的硬件加速协处理器。
背景技术
2010年12月17日,国家密码管理局公布了SM2椭圆曲线公钥密码算法,然后在要求在2011年7月后投入运行并使用公钥密码的信息系统中应使用SM2椭圆曲线密码算法,并为现有基于RSA算法的电子认证系统、密钥管理系统、应用系统进行升级改造,在我国商用密码体系中使用SM2椭圆曲线密码算法来替换RSA算法。
随着我国信息技术的发展,物联网进程逐渐加快,信息安全工作显得尤为重要,国家密码管理局颁布的国密算法具有安全性和制度性两方面优势。SM2算法是椭圆曲线算法(ECC)的一种,属于公钥密码算法,具有椭圆曲线密码算法的多种优点,同时也是一种更加先进、更加复杂的算法。因此,设计一个SM2算法硬件加速协处理器,作为IP核集成到安全SoC芯片中,对于在实际应用中发挥椭圆曲线密码算法的灵活性、安全性和高运算速度都具有重要的意义。椭圆曲线密码算法着重关注以下四个性能指标:
(1)速度,运算速度是评价椭圆曲线密码算法实现方案的一个重要指标。一般来说,运算速度与实现代价是矛盾的;(2)实现代价:实现代价包括存储器占用空间、芯片面积、功率消耗等。在计算资源受限的应用场合,如智能卡、RFID等,实现代价是首要考虑的指标;(3)安全性:密码算法的实现有别于其他程序或芯片的设计,为信息提供保护的密码模块本身必须是安全的,防护措施的施行将影响实现模块的速度与实现代价;(4)灵活性:由于椭圆曲线密码体制标准众多、不同安全级别下的椭圆曲线参数可选择性强,因此椭圆曲线算法实现的灵活性近些年成为研究的热点。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供了一种椭圆曲线公钥密码SM2算法的硬件加速协处理器。
本发明的技术解决方案是:一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,包括控制模块、寄存器堆、模乘模块、模逆模块、模加减模块、SM3模块,其中
控制模块,接收主处理器发送的一级指令后进行译码并判断,如果是存储指令,则将当前数据存储到寄存器堆中,如果是SM3运算指令,则控制寄存器堆按照SM3运算指令将数据读出并送至SM3模块,如果是点加或倍点运算指令,则将点加或倍点运算指令进行译码得到模乘运算指令或模逆运算指令或模加减运算指令,对于模乘运算指令,则按照模乘运算指令控制寄存器堆将数据读出并送至模乘运算模块和寄存器堆进行模乘运算,对于模逆运算指令,则按照模逆运算指令控制寄存器堆将数据读出并送至模逆运算模块和寄存器堆进行模逆运算,对于模加减运算指令,则按照模加减运算指令控制寄存器堆将数据读出并送至模加减模块和寄存器堆进行模加减运算;所述一级指令包括存储指令、SM3运算指令、点加或倍点运算指令;
寄存器堆,预先存储待模乘运算的数据m和n、待模逆运算的数据x、待模加减运算的数据z和v、消息分组B(ii)、模Nj、模数p、模Nj参数q;按照模乘运算指令将域选择控制信号field、模Nj,模Nj参数q送至模乘运算模块,接收并存储模乘运算模块发送的模乘计算结果,将模乘计算结果中的cj送至模乘运算模块用于模乘运算;按照模逆运算指令将域选择控制信号field、加减控制信号sel、待模逆运算的数据x、模数p送至模逆运算模块,接收并存储模逆运算模块发送的模逆计算结果;按照模加减运算指令将域选择控制信号field、加减选择控制信号sel、模数p和待模加减运算的数据z和v送至模加减模块,接收并存储模加减模块发送的模加减计算结果;按照SM3运算指令将消息分组B(i)送至SM3模块,接收并存储SM3模块发送的SM3计算结果;
模乘模块,接收寄存器堆发送的域选择控制信号field、模Nj,模Nj参数q后进行模乘运算并将计算得到的模乘计算结果送至寄存器堆存储;
模逆模块,接收寄存器堆发送的域选择控制信号field、加减控制信号sel、待模逆运算的数据x、模数p后进行模逆运算并将摸逆计算结果送至寄存器堆存储;
模加减模块,接受寄存器堆发送的域选择控制信号field、加减选择控制信号sel、模数p和待模加减运算的数据z和v后进行模加减运算并将模加减计算结果送至寄存器堆存储;
SM3模块,接收寄存器堆发送的消息分组B(ii)后进行SM3运算并将计算得到SM3计算结果送至寄存器堆存储。
所述的模乘模块包括第一控制单元、运算处理单元A、运算处理单元B、运算处理单元C、运算处理单元D、运算处理单元E,其中
第一控制单元,接收寄存器堆发送的待模乘运算的数据m和n、模Nj、模Nj参数q、域选择控制信号field,使用计算得到ai、bj,令i=0并判断,若i小于等于7,将ai、bj送至运算处理单元A计算得到c0和Ti,接收运算处理单元A发送的c0和Ti并送至运算处理单元B更新c0直至i大于7;将ai、bj和Ti送至运算处理单元C,令i=0,j=1并判断,若i小于等于7,调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,判断j,若j小于等于7,则重复调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,直至j大于7后i=i+1并判断,若i小于等于7,则重复调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与cj一起送至运算处理单元D计算cj且j=j+1,判断j,若j小于等于7,则重读调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,直至j大于7后i=i+1直至i大于7,接收运算处理单元C发送的cj,得到{c7、c6、c5、c4、c3、c2、c1、c0},若field=1,则将{c7、c6、c5、c4、c3、c2、c1、c0}送至运算处理单元E并接收其发送的计算结果,若field=0,则将{c7、c6、c5、c4、c3、c2、c1、c0}作为计算结果,将计算结果输出并送至寄存器堆存储,其中上一层外循环表示i的循环,当i=1时,其上一层外循环的cj为c0;
运算处理单元A,接收第一控制单元发送的ai、bj、c0、q,计算aib0+c0并赋给c0,计算qc0并赋值给Ti,将c0、Ti送至第一控制单元,其中c0初始值为0;
运算处理单元B,接收第一控制单元发送的c0、Ti,接收寄存器堆发送的模N0,将TiN0+c0赋给c0;
运算处理单元C,接收第一控制单元发送ai、bj和Ti,接收寄存器堆发送的模Nj,计算aibj+TiNj并赋给sum后送至第一控制单元;
运算处理单元D,接收第一控制单元发送的sum值,接收寄存器堆发送的上一外层循环的cj,进行sum+cj计算后将结果赋给cj并送至第一控制单元;
运算处理单元E,接收第一控制单元发送的{c7、c6、c5、c4、c3、c2、c1、c0}接收寄存器堆发送的模Nj,将{c7、c6、c5、c4、c3、c2、c1、c0}与Nj进行比较,若{c7、c6、c5、c4、c3、c2、c1、c0}>Nj,则将C={c7、c6、c5、c4、c3、c2、c1、c0}-Nj作为模乘计算结果,否则将{c7、c6、c5、c4、c3、c2、c1、c0}作为计算结果,将模乘计算结果送至寄存器堆存储。
所述的模逆运算模块包括预计算单元、第二控制单元、双域加减法器计算单元,其中
预计算单元,接收模数p并对模数p进行判断,输出模数p的有效比特位数记为n,若p=0,则输出n=0至第二控制单元,若p不等于0,则将p右移一位并n=n+1,如果此时p等于0,则输出n=1至第二控制单元,如果此时p不等于0,继续将p的右移一位并n=n+1,直到p等于0并输出此时的n至第二控制单元,将模数p送至双域加减法器计算单元;所述n初始值为0;
第二控制单元,接收预计算单元发送的模数p的有效比特位数n并将其作为使用Montgomery模逆算法计算的判断条件,接收域选择控制信号field、加减控制信号sel并进行判断,当域选择控制信号field=1且加减控制信号sel=1时,从寄存器堆读取待模逆运算的数据x送至双域加减法器计算单元进行素数域下的加法计算;当域选择控制信号field=1且加减控制信号sel=0时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行素数域下的减法计算;当域选择控制信号field=0且加减控制信号sel=1时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行二进制下的加法计算;当域选择控制信号field=0且加减控制信号sel=0时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行二进制下的减法计算;将n送至双域加减法器计算单元;
双域加减法器计算单元,接收预计算单元发送的模数p,接收控制单元发送的n,当域选择控制信号field=1且加减控制信号sel=1时,接收第二控制单元发送的待模逆运算的数据x使用Montgomery模逆算法进行素数域下的加法计算,将模逆计算结果输出并送至寄存器堆;当域选择控制信号field=1且加减控制信号sel=0时,接收第二控制单元发送的待模逆运算的数据x,使用Montgomery模逆算法进行素数域下的减法计算,将模逆计算结果输出并送至寄存器堆;当域选择控制信号field=0,接收第二控制单元发送的待模逆运算的数据x使用Montgomery模逆算法进行异或运算,将模逆计算结果输出并送至寄存器堆。
所述的模加减运算模块包括双域加减法器计算单元、第三控制单元,其中
第三控制单元,接收域选择控制信号field与加减控制信号sel并进行判断,当域选择控制信号field=1且加减控制信号sel=1时,从寄存器堆读取待模加减运算的数据z和v送至双域加减法器计算单元进行素数域下的加法计算;当域选择控制信号field=1且加减控制信号sel=0时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行素数域下的减法计算;当域选择控制信号field=0且加减控制信号sel=1时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行二进制下的加法计算;当域选择控制信号field=0且加减控制信号sel=0时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行二进制下的减法计算;
双域加减法器计算单元,接收寄存器堆发送的模数p,当域选择控制信号field=1且加减控制信号sel=1时,接收第三控制单元发送的待模加减运算的数据z和v进行素数域下的加法计算得到s,将s与模数p进行对比,若s小于p,则将s作为计算结果输出并送至寄存器堆,否则将s-p作为计算结果输出并送至寄存器堆;当域选择控制信号field=1且加减控制信号sel=0时,接收第三控制单元发送的待模加减运算的数据z和v,然后进行素数域下的减法计算得到s,若s大于零,则将s作为模加减计算结果输出并送至寄存器堆,否则将s+p作为模加减计算结果输出至寄存器堆;当域选择控制信号field=0时,接收第三控制单元发送的待模加减运算的数据z和v进行异或运算,将模加减计算结果输出并送至寄存器堆。
所述的SM3模块包括消息扩展单元、压缩单元、其中
消息扩展单元,接收寄存器堆发送的消息分组B(ii),ii=0,1…n,后将其划分为16个字W0,W1,…,W15,并送至寄存器堆,令jj=16并判断,如果jj小于等于67,则Wjj=P1(Wjj-16⊕Wjj-9⊕(Wjj-3<<15))⊕(Wjj-13<<7)⊕Wjj-6且jj=jj+1直至jj大于67,令jj=0并判断,如果jj小于等于63,则W′jj=Wjj⊕Wjj+4且jj=jj+1,直到jj大于63,将计算得到的W0,W1,…,W67,W′1,…,W′63送至压缩单元;
压缩单元,接收消息扩展单元发送的W0,W1,…,W67,W′1,…,W′63,同时选取八个字寄存器,分别记为A、B、C、D、E、F、G、H且A、B、C、D、E、F、G、H的拼接结果记为ABCDEFGH=V(ii),令jj=0并判断,若jj小于等于63,则SS1=((A<<<12)+E+(Tjj<<<jj))<<<7,SS2=SS1⊕(A<<<12),TT1=FFjj(A,B,C)+D+SS2+Wjj’,TT2=GGjj(E,F,G)+H+SS1+Wjj,然后将C字寄存器数值赋予字寄存器D、将字寄存器G数值赋予字寄存器H、字寄存器A数值赋予字寄存器B、将B<<<9数值赋予字寄存器C、将F<<<19数值赋予字寄存器G、字寄存器A数值赋予字寄存器B、字寄存器E数值赋予字寄存器F、将TT1赋予字寄存器A、将P0(TT2)赋予字寄存器E,同时jj=jj+1,直至jj大于63,然后进行计算V(ii+1)=ABCDEFGH⊕V(ii)(ii=0,1…n-1),若0<ii<n-1,则获取新的W0,W1,…,W67,W′1,…,W′63后重复执行上述计算,直至jj大于63,然后进行V(ii+1)=ABCDEFGH⊕V(ii)直至ii=n-1,若ii=n-1,则将V(ii+1)作为B(ii)的SM3运算结果,最终得B(ii),ii=0,1…n的SM3计算结果输出并送至寄存器堆存储,其中,V(ii)初始值为V(0)=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc163138aa e38dee4d b0fb0e4e,<<<为左移k比特运算,FFjj和GGjj分别是布尔函数,表达式为
P0、P1是置换函数,表达式为
Tjj为常量,表达式为 所述消息分组B(ii),i=0,1…n,为长度<264比特的消息进行填充得到的512n长度的新消息。
本发明与现有技术相比的优点在于:
(1)本发明根据主处理器提供的控制信号和运算数据,对主要运算进行加速,具有模块化优势,每个模块只需要完成自己特定的工作即可通过协同工作实现SM2密码算法,而且灵活性高,提高了整体芯片的可靠性、可验证性和可扩展性;
(2)本发明支持双域(GF(p)素数域和GF(2m)二进制域),在高效率实现运算的同时,实现运算基本单元的最大复用,与现有技术相比极大的缩小了时间消耗与硬件需求;
(3)本发明提出了一种预计算单元,不仅提高了整体计算的效率,还节省了硬件资源。
附图说明
图1为本发明主处理器、协处理器工作流程图;
图2为本发明运算处理单元A、B、C、D、E的结构图;
图3为本发明改进双域Montgomery模乘算法流程图;
图4为本发明整体模乘运算结构示意图;
图5为本发明二阶BOOTH编码部分积产生电路图;
图6为本发明M1结构图;
图7为本发明两个乘法结合图;
图8为本发明双域乘法器结构图;
图9为本发明双域4-2压缩器结构图;
图10为本发明DFA结构图;
图11为本发明比较器结构图;
图12为本发明模逆运算中双域Montgomery模逆算法流程图;
图13为本发明模逆运算模块结构图;
图14为本发明预计算单元结构图;
图15为本发明双域加减法器结构图;
图16为本发明双域模加减运算流程图;
图17为本发明模加减运算模块结构图;
图18为本发明SM3模块结构图;
图19为本发明扩展单元结构示意图;
图20为本发明压缩函数单元示意图;
图21为本发明密钥派生函数KDF算法流程图。
具体实施方式
1、协处理器结构
将SM2算法协处理器作为集成电路IP核挂接在SoC芯片的AMBA总线上,协处理器在计算过程中能够独立于主处理器进行大部分操作,专门负责点加、倍点、模乘、模加、减等计算型任务的运算。利用这种结构的模块化优势,每个部分只需要完成自己特定的工作即可通过协同工作实现SM2密码算法。其中,主处理器只需要提供协处理器必需的控制信息和运算数据,协处理器完成运算后由主处理器读取其结果。
主处理器负责将控制信息、曲线参数、随机数、待签名的消息等通过总线输出到相应的寄存器中去,协处理器由控制模块、寄存器堆、预计算模块、模乘运算模块、模逆运算模块,模加减运算模块,SM3模块组成。控制模块负责根据控制信息产生控制码,寄存器堆负责存储运算所需的各种参数、随机数、消息、中间运算结果与最终运算结果。协处理器的主要工作是在接收完数据之后,根据相应的控制码实现不同的计算,在计算完成之后,协处理器同样通过总线将计算结果返回至主处理器中。
工作流程图如图1所示。在工作过程中,主处理器只负责对协处理器进行配置并将必须的数据送至协处理器的寄存器中,然后等待协处理器计算完成;协处理器接收到数据后进行计算,在计算完成后产生对于主处理器的中断信号;在主处理器收到中断信号后,进入了响应的中断处理函数中,读取计算得到的数据并通过响应的通道将其输出,然后中断返回,整体流程结束。
2、模乘运算模块
在基于椭圆曲线密码体制的运算过程中,模乘运算是SM2椭圆曲线加密算法中的最为核心的运算,本发明结合SM2算法实际,提设计了基于改进Montgomery模乘算法的模乘器,保证能够在一个单元中实现双域运算,还进行算法的拆分和解析。
另外为了能够充分且合理有效地复用运算处理单元,最大程度的节省面积,提高效率,本发明将整个模乘计算分为5个单元,这五个运算处理单元A、B、C、D、E的结构图分别如图2所示。运算处理单元A和B共同完成的是算法中的外层循环,运算处理单元C、D、E协同完成内层循环中计算,运算处理单元E是专门用来在素数域情况下完成最后的比较工作。
a.在每一次外层循环开始时,运算处理单元A的计算都需要等待前一次外层循环中的内层循环内运算处理单元D计算出C0值后才可以开始计算;
b.在每一个外层循环中,运算处理单元A计算出Ti和S|Cj后,运算处理单元B才可以开始计算,其中|为间隔符;
c.在每一次的内层循环中,运算处理单元C要等待运算处理单元A计算出Ti后才可以开始计算;
d.在每一个内层循环中,运算处理单元D都需要等待运算处理单元C和B计算出结果,且前一次循环中cj的计算完成后才可以开始计算;
e.运算处理单元E需要等待循环结束后,对最终结果C=(C7,C6,……C0)与N进行比较计算,其中控制单元,接收256位待操作数据m和m,模N以及模Nj参数q,令令C为模乘计算结果,令其初始值为0,令令i=0,进入第一层for循环,若i小于等于7,将ai,b0,c0,q,输入给运算处理单元A,计算得到c0和Ti,将N0以及运算处理单元A的运算结果c0和Ti发送给运算处理单元B,计算得到新的c0,令j=1,进入第二层for循环,若j小于等于7,调用运算处理单元C计算sum=aibj+TiNj,得到结果输入到运算处理单元D,并将cj输入其中,计算sum+cj,得到cj,令j=j+1,再次判断j是否小于等于7,若成立则再次进行第二层for循环下的计算,直到j不再满足条件,则第二层for循环结束,令i=i+1,判断i是否小于等于7,若成立,则调用运算处理单元A、B再次开始新一轮的运算,然后再次令j=1,开始新一轮的第二层for循环运算,调用运算处理单元C、D进行运算,待此次第二层for循环运算结束后,再令i=i+1,判断i是否小于等于7,若成立,则再次开始进行第一层的for循环下的计算,依此类推,直到i=7,且j=7时,完成最后一次运算,得到最终的计算结果,c7、c6、c5、c4、c3、c2、c1、c0,令c=(c7,c6,c5,c4,c3,c2,c1,c0),此时,控制单元再对与选择控制信号进行判断,若field=1,表示素数域,将c与N输入运算处理单元E,得到最终的运算结果C,并输出,若field=0,表示二进制域,则不调用运算处理单元E,直接令C=c,输出模乘结果;
运算处理单元A,接收256位待操作数据A和B,模N以及模的参数q,包含两个双域乘法器M1和一个双域加法器DFA,完成对s|c0=aib0+c0,Ti=qc0的计算,输出s|c0和Ti;
运算处理单元B,接收来自主处理器发送来的模N,以及单元A的运算结果,包含一个双域乘法器M1和一个双域加法器DFA,求得s|c0=TiN0+s|c0;
运算处理单元C,包含一个改进型双域乘法器M3,该乘法器可实现求两组乘积之和的运算,接收操作数A和B,以及模N,运算处理单元A的运算结果Ti,计算aibj+TiNj,令sum=aibj+TiNj,输出sum;
运算处理单元D,包含一个4-2压缩器,一个双域加法器DFA,接收运算处理单元B、C以及前一外层循环c值的计算结果,求得s|cj=sum+cj;
运算处理单元E,仅在素数域下被使用到,是接收之前计算得到的c=(c7,c6,c5,c4,c3,c2,c1,c0)和模N,将c与N进行比较,若c>N,则令C=c-N,否则C=c,输出C。
根据这些数据依赖关系,改进双域Montgomery模乘算法流程图如图3所示,整体模乘运算结构示意图如图4所示。数据输入、输出单元与外部数据接口宽度均设为32位,数据输入输出、数据在各个运算处理单元中传递与计算均在状态控制单元的控制下完成。寄存器堆存储的是运算必需的参数、数据以及最终计算结果,状态控制单元根据时钟信号、复位信号以及各个运算处理单元运算的执行情况,进行状态控制并综合调度各个运算模块,完成整体的运算。
下面分别对这五种运算处理单元运算使用到的基本运算进行设计,包括双域乘法,双域加法以及比较器。
(21)双域乘法器
首先,为了减少部分积数量,本发明采用BOOTH编码来求部分积。采用二阶BOOTH编码对乘数进行编码,可以将部分积数量从32个减少为17个,这将大大提高乘法器速度。二阶BOOTH编码部分积产生电路如图5所示。
其次,为了缩短加法所耗费的时间,使用双域Wallace树对BOOTH编码产生的部分积进行相加计算。Wallace树形结构将减少关键路径和所需的加法器单元数目,节省乘法器所需的硬件,同时也减少了传播延时。将部分积按列进行分组,每一列对应一组加法器,各列相同权重的值进行压缩相加,得到的进位传到权值高一位的前一列,得到的伪和传到同权值的下级,另外对基本Wallace树结构进行优化,对其中使用的不同压缩器,加法器进行优化组合分配,使其更加适合本发明需求。
由于在模乘算法的外部循环中用到的乘法器是求两数乘积,得到的结果是与一个值直接相加,或作为另一个乘法器的输入。针对此种情况,本发明提出的乘法器在完成最后一个压缩后,再用一个加法器对得到的伪和和进位相加,最后输出最终的乘积,这个乘法器命名为M1,其结构如图6所示,其中,4-2表示双域4-2压缩器,DFA(Dual-field adder)表示双域加法器。Control信号为BOOTH编码产生的进位-取反信号。
在模乘算法内层循环中,用到的乘法器是求两个乘积后,计算结果是直接相加的,本发明将这两个乘法结合起来实现:首先通过两个Wallace树M2,如图7所示,对两个乘法产生的部分积分别压缩相加,在Wallace树末端4-2压缩计算完成后,直接输出压缩得到两对结果共4个值。再将这些值通过一个4-2压缩器进行相加,最后,再通过一个DFA将伪和和进位相加,得到最终结果。整体的实现结构如图8所示,命名为M3-改进双域Wallace树乘法器。
(22)双域加法单元
本发明中模乘运算单元中涉及到的加法器总共有两种,分别为对部分积进行迭加时用到的双域4-2压缩器和计算最终结果的DFA,它们都是支持双域的。当域选择信号field=1时,它们执行的是素数域上的加法,这与基本加法的实现没有差别。当域选择信号field=0时,它们执行的是二进制域上加法,即异或运算,进位输出恒为0。
a.双域4-2压缩器
双域4-2压缩器结构如图9所示。该电路由异或门、与门和二选一数据选择器组成。此结构从不同数据输入端到输出端的延时比较均衡,这就确保Sum信号和Carry信号能够同时产生,且结构颇为规整,具有高速,低功耗、节约面积的优点。
b.DFA
DFA主要是用来处理64位加法,因此对于运算速度有较高的要求。在加法运算中,进位信号的产生消耗了绝大部分的运算时间,因此为了进一步提高加法器的运算速度,本发明的集中于如何快速产生进位信号,在每一结构层次上每次只组合四个信号,采用基四Kogge-Stone结构超前进位加法器,即w=4,N=64。其结构示意图如图10所示,其中,“□”表示用加法器两个加数ai、bi来建立相应的用加法器两个加数ai、bi来建立相应的Pi和Gi信号,“○”表示超前进位对数算法中的点操作,“◇”表示用两个加数ai、bi和前一位的进位Co,i-1来计算该位的和。运算的实现使用了进位产生函数Gi∶j、进位传播函数Pi∶j和点操作。Gi∶j和Pi∶j分别表示从第i位至第j位的进位产生和进位传播信号,如G3∶2=G3+P3G2=1,表示进位产生于第3位或进位产生第2位并传播通过第3位;P3∶2=P3P2=1,表示进位传播通过第3位和第2位。二进制域下,只需要令进位产生函数Gi:0为零即可,其余均与素数域下一致,可用同一个结构来实现。
(23)比较器单元
运算处理单元E中所使用到的比较器,是仅在素数域情况下需要使用到的比较器。它完成的功能是对C=(C7,C6,……C0)与N进行比较的,如果C>N,则令C=C-N,否则C值不变,最后输出C。得到的比较器结构图如图11所示。
本方法所设计的比较器可以在计算模乘的同时进行运算,这样做不仅节省了时钟周期,而且也减小了比较器的面积。由于二进制有限域上并不需要进行比较与减法操作,因此添加了域选择信号控制端,使得二进制域上的模乘运算可以不受此比较单元的影响,当field=0时,表示是二进制域,直接输出C的值。field=1时表示是素数域。在素数域下,减法运算结果和运算处理单元D计算的结果C=(C7,C6,……C0)均保存在内部寄存器中,将减法器计算最后的借位信号作为第一级多路选择器的一个输入端,对后续输出进行控制。若C>N,则减法器最后的借位信号为0,最终选择输出的为减法器的计算结果,C=C-N,若C<N,则借位信号为1,输出C值不变。
3、模逆运算模块
本发明从三方面着手,一是减少模逆运算的次数;二是改进、优化模逆运算算法,提高算法本身速度;三是优化设计模逆单元的硬件结构,提高运算速度。本发明选取标准射影坐标来减少模逆运算的次数,选择便于硬件实现,且中间变量少,判断简单,支持双域运算的双域Montgomery模逆算法来实现模逆运算模块。并通过对算法的分析以及各个子运算的可复用性,设计得到的双域Montgomery模逆算法流程如图12所示。
根据算法流程,同时最多运行两个加法,所以最多需要两个双域加、减法器就可以实现模逆运算。除以2和乘以2的运算都可以用右移一位和左移一位运算代替。奇偶校验对通过该数末位是否为零进行判断就可以实现,末位为零即为偶数,末位非零即为奇数。另外n表示模数p的有效比特位数,由于n在算法执行中需要被用到,所以本发明决定使用一个额外独立的单元进行预计算求出n的值,使n值直接作为输入数据输入到运算单元中,直接参与运算。
本方法设计的模逆运算模块主要由4个部分组成:一是预计算单元,二是用来存储操作数、中间计算结果和最终计算结果的寄存器,三是两个双域加/减法器(DFa_s)计算单元,以及控制单元。具体结构如图13所示。预计算单元独立存在,提前计算好n的值,运算结果可以直接拿来使用。控制单元主要负责根据运算进行的实际情况产生控制信号,控制各个寄存器的读写、双域加减运算单元的调用、输入输出、产生加减控制信号sel,决定是进行加法运算还是进行减法运算,其中sel=1,表示要进行加法运算,sel=0,表示要进行减法运算。
(31)预计算单元
本发明预计算n的算法为:模数p作为输入数据,设定n表示模数p的有效比特位数,且初始值为0。算法首先对输入的p进行判断,如果p=0,则p的有效比特位数为0,直接输出n=0;若p不等于0,则进行右移一位操作,n=n+1。接着,继续进行判断,如果此时p=0,则说明p只有最末一位为非零数1,则n=1,若p不等于1,继续进行p的右移一位以及n值加一操作,再进行p是否等于一的判断操作,以此类推,进行循环,直到p=0,输出此时n的值,即为p的有效比特位数。该算法的实现只需要进行右移操作、加一操作以及是否为零的判断即可,其硬件实现结构图如图14所示,其中控制单元主要完成的是对p是否等于0的判断,并根据比较的结果,输出控制信号,对右移一位操作和加1操作进行控制。若p不等于0,则进行右移一位操作,n=n+1,若p=0时,则直接输出此时n的值。REG_p和REG_n分别为两个寄存器,REG_p为256位寄存器,用来存储模数p(p为256位),REG_n为9位寄存器,用来存储模数p的有效比特位数(p为256位数,所以它的最高有效比特位数为256=28,所以n最大为9位),其中n用作模逆运算中for循环的判断条件。
(32)双域加减法器
本发明设计的双域加减法器单元硬件结构如图15所示,其中REG_A和REG_B表示两个寄存器,用来存储待计算的数值。素数域下,如果要进行加法运算,控制单元根据field=1,sel=1,进行判断,并输出控制信号,从REG_B中取出的数值将不进行取反运算,直接输入到运算单元进行加法计算;如果要进行减法运算,控制单元则会根据收到的field=1和sel=0,输出控制信号,使从REG_B中取出的数值进行取反加一求补码的操作后再输入到运算单元进行计算,得到减法结果。在二进制域下,field=0,控制单元则直接输出控制信号使从REG_B中取出的数值不进行取反运算,直接输入到运算单元进行二进制域下的加、减法计算即异或运算。
4、模加减运算模块
本发明双域模加减运算流程图如图16所示,首先,对域进行判断,如果field=0,二进制域,则无需再对加、减运算选择控制信号sel进行判断,直接进行异或运算,输出结果即可;如果field=1,素数域,则接着进行加减法运算判断,sel=1则进行加法运算,得到的结果s与模数p进行对比,若s小于p,则直接输出计算结果,若s大于等于p,则令s=s-p,输出s。sel=0则进行减法运算,得到结果s,若s大于零,则输出s,若s小于等于0,则令s=s+p,输出s。模加减运算模块实现结构示意图如图17所示。模加、减运算单元由五个寄存器和两个双域加、减法器(DFa_s)计算单元,以及控制单元组成,其中控制单元主要进行判断,决定寄存器的读写,运算单元的调用等。三个寄存器负责存储输入的数据X、Y和模数P,另外寄存器1负责存储中间计算结果,送到控制单元进行判断,决定是否继续进行计算,若不需要继续计算,则输出该寄存器的值。寄存器2当需要继续计算时负责存储最终计算结果并输出。
当field=0时,二进制域,无论sel为何值,直接调用DFa_s(1)取寄存器REG_X和REG_Y的值进行二进制域下的加、减运算即异或运算,得到的结果直接输出。此种情况下不需要使用到DFa_s(2)。
当field=1时,素数域。若sel=1,执行模加运算,首先调用DFa_s(1),读取REG_X和REG_Y中的值进行加法运算,再对得到的结果进行判断,若结果大于等于P,则继续调用DFa_s(2),调用寄存器1中的值减去P,得到结果输出,否则,直接输出寄存器1中的值。若sel=0,执行模减运算,首次调用DFa_s(1),读取REG_X和REG_Y中的值进行减法运算,再对得到的结果进行判断,若结果小于等于0,则继续调用DFa_s(2),将寄存器1中的值与P相加,得到结果存入寄存器2输出,否则,直接输出寄存器1中的值。
5、SM3密码杂凑函数运算模块
密码杂凑函数的作用是对长度为l(l<264)比特的消息m进行填充和迭代压缩生成杂凑值,杂凑值长度为256比特。首先对消息m的填充,生成512整数倍数长度的新消息m’(长度为512xn),再对此消息按512位进行分组得到m’=B(0)B(1)…B(n),将B(0)送至消息扩展单元开始运算;接收消息扩展单元发送的Wj和Wj’后送至压缩单元;将V(0)=7380166f 4914b2b9 172442d7 da8a0600a96f30bc 163138aa e38dee4d b0fb0e4e(SM3算法规定的初始值),发送给压缩单元并接收压缩单元的压缩结果V(1),再将V(1)发送给压缩单元,将B(1)发送给消息扩展单元开始运算,再将结果发送给压缩单元进行压缩,得到V(2),以此类推得到V(n)作为最终的计算结果,本模块结构如图18所示。
(51)消息扩展单元
SM3消息扩展单元结构示意图如图19所示,将B(i)划分为16个字W0,W1,…,W15存储在此寄存器堆中,依次作为寄存器堆的初始值;每个时钟周期计算新的Wj+16,并取W0以及W0和W4异或的结果作为下一级压缩函数计算所需的Wj和Wj’输出;然后将寄存器左移一个字;再用之前新计算的Wj+16更新W15。
(52)压缩函数单元
压缩函数单元示意图如图20所示,接收消息扩展单元发送的W0,W1,…,W67,W′1,…,W′63,获取字寄存器,记为A、B、C、D、E、F、G、H且ABCDEFGH=V(i),令j=0并判断,若j小于等于63,则
SS1=((A<<12)+E+(Tj<<j))<<7,SS2=SS1⊕(A<<12),
TT1=FFj(A,B,C)+D+SS2+Wj’,TT2=GGj(E,F,G)+H+SS1+Wj
然后将C字寄存器数值赋予字寄存器D、将字寄存器G数值赋予字寄存器H、字寄存器A数值赋予字寄存器B、将B<<9数值赋予字寄存器C、将F<<19数值赋予字寄存器G、字寄存器A数值赋予字寄存器B、字寄存器E数值赋予字寄存器F、将TT1赋予字寄存器A、将P0(TT2)赋予字寄存器E,同时j=j+1,直至j大于63,然后进行计算V(i+1)=ABCDEFGH⊕V(i)(i=0,1…n-1),若0<i<n-1,则获取新的W0,W1,…,W67,W′1,…,W′63后重复执行获取字寄存器,记为A、B、C、D、E、F、G、H且ABCDEFGH=V(i),令j=0并判断,若j小于等于63,则SS1=((A<<<12)+E+(Tj<<<j))<<7,SS2=SS1⊕(A<<<12),TT1=FFj(A,B,C)+D+SS2+Wj’,TT2=GGj(E,F,G)+H+SS1+Wj,然后将C字寄存器数值赋予字寄存器D、将字寄存器G数值赋予字寄存器H、字寄存器A数值赋予字寄存器B、将B<<9数值赋予字寄存器C、将F<<19数值赋予字寄存器G、字寄存器A数值赋予字寄存器B、字寄存器E数值赋予字寄存器F、将TT1赋予字寄存器A、将P0(TT2)赋予字寄存器E,同时j=j+1,直至j大于63,然后进行V(i+1)=ABCDEFGH⊕V(i)(i=0,1…n-1)直至i=n-1,若i=n-1,则将V(i+1)作为B(i)的SM3运算结果,最终得B(i),i=0,1…n的计算结果输出并送至寄存器堆存储,其中,<<<为左移k比特运算,FFj和GGj分别是布尔函数,表达式为
P0、P1是置换函数,表达式为
Tj为常量,表达式为
6、KDF密钥派生函数的实现
通过多次调用SM3密码杂凑函数,再附加一些判断、连接就可以实现密钥派生函数KDF的整个算法流程,如图21所示。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (5)
1.一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,其特征在于包括控制模块、寄存器堆、模乘模块、模逆模块、模加减模块、SM3模块,其中
控制模块,接收主处理器发送的一级指令后进行译码并判断,如果是存储指令,则将当前数据存储到寄存器堆中,如果是SM3运算指令,则控制寄存器堆按照SM3运算指令将数据读出并送至SM3模块,如果是点加或倍点运算指令,则将点加或倍点运算指令进行译码得到模乘运算指令或模逆运算指令或模加减运算指令,对于模乘运算指令,则按照模乘运算指令控制寄存器堆将数据读出并送至模乘运算模块和寄存器堆进行模乘运算,对于模逆运算指令,则按照模逆运算指令控制寄存器堆将数据读出并送至模逆运算模块和寄存器堆进行模逆运算,对于模加减运算指令,则按照模加减运算指令控制寄存器堆将数据读出并送至模加减模块和寄存器堆进行模加减运算;所述一级指令包括存储指令、SM3运算指令、点加或倍点运算指令;
寄存器堆,预先存储待模乘运算的数据m和n、待模逆运算的数据x、待模加减运算的数据z和v、消息分组B(ii)、模Nj、模数p、模Nj参数q;按照模乘运算指令将域选择控制信号field、模Nj,模Nj参数q送至模乘运算模块,接收并存储模乘运算模块发送的模乘计算结果,将模乘计算结果中的cj送至模乘运算模块用于模乘运算;按照模逆运算指令将域选择控制信号field、加减控制信号sel、待模逆运算的数据x、模数p送至模逆运算模块,接收并存储模逆运算模块发送的模逆计算结果;按照模加减运算指令将域选择控制信号field、加减选择控制信号sel、模数p和待模加减运算的数据z和v送至模加减模块,接收并存储模加减模块发送的模加减计算结果;按照SM3运算指令将消息分组B(i)送至SM3模块,接收并存储SM3模块发送的SM3计算结果;
模乘模块,接收寄存器堆发送的域选择控制信号field、模Nj,模Nj参数q后进行模乘运算并将计算得到的模乘计算结果送至寄存器堆存储;
模逆模块,接收寄存器堆发送的域选择控制信号field、加减控制信号sel、待模逆运算的数据x、模数p后进行模逆运算并将摸逆计算结果送至寄存器堆存储;
模加减模块,接受寄存器堆发送的域选择控制信号field、加减选择控制信号sel、模数p和待模加减运算的数据z和v后进行模加减运算并将模加减计算结果送至寄存器堆存储;
SM3模块,接收寄存器堆发送的消息分组B(ii)后进行SM3运算并将计算得到SM3计算结果送至寄存器堆存储。
2.根据权利要求1所述的一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,其特征在于:所述的模乘模块包括第一控制单元、运算处理单元A、运算处理单元B、运算处理单元C、运算处理单元D、运算处理单元E,其中
第一控制单元,接收寄存器堆发送的待模乘运算的数据m和n、模Nj、模Nj参数q、域选择控制信号field,使用 计算得到ai、bj,令i=0并判断,若i小于等于7,将ai、bj送至运算处理单元A计算得到c0和Ti,接收运算处理单元A发送的c0和Ti并送至运算处理单元B更新c0直至i大于7;将ai、bj和Ti送至运算处理单元C,令i=0,j=1并判断,若i小于等于7,调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,判断j,若j小于等于7,则重复调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,直至j大于7后i=i+1并判断,若i小于等于7,则重复调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与cj一起送至运算处理单元D计算cj且j=j+1,判断j,若j小于等于7,则重读调用运算处理单元C计算sum数值,并接收运算处理单元C发送的sum后与上一外层循环的cj一起送至运算处理单元D计算cj且j=j+1,直至j大于7后i=i+1直至i大于7,接收运算处理单元C发送的cj,得到{c7、c6、c5、c4、c3、c2、c1、c0},若field=1,则将{c7、c6、c5、c4、c3、c2、c1、c0}送至运算处理单元E并接收其发送的计算结果,若field=0,则将{c7、c6、c5、c4、c3、c2、c1、c0}作为计算结果,将计算结果输出并送至寄存器堆存储,其中上一层外循环表示i的循环,当i=1时,其上一层外循环的cj为c0;
运算处理单元A,接收第一控制单元发送的ai、bj、c0、q,计算aib0+c0并赋给c0,计算qc0并赋值给Ti,将c0、Ti送至第一控制单元,其中c0初始值为0;
运算处理单元B,接收第一控制单元发送的c0、Ti,接收寄存器堆发送的模N0,将TiN0+c0赋给c0;
运算处理单元C,接收第一控制单元发送ai、bj和Ti,接收寄存器堆发送的模Nj,计算aibj+TiNj并赋给sum后送至第一控制单元;
运算处理单元D,接收第一控制单元发送的sum值,接收寄存器堆发送的上一外层循环的cj,进行sum+cj计算后将结果赋给cj并送至第一控制单元;
运算处理单元E,接收第一控制单元发送的{c7、c6、c5、c4、c3、c2、c1、c0}接收寄存器堆发送的模Nj,将{c7、c6、c5、c4、c3、c2、c1、c0}与Nj进行比较,若{c7、c6、c5、c4、c3、c2、c1、c0}>Nj,则将C={c7、c6、c5、c4、c3、c2、c1、c0}-Nj作为模乘计算结果,否则将{c7、c6、c5、c4、c3、c2、c1、c0}作为计算结果,将模乘计算结果送至寄存器堆存储。
3.根据权利要求1所述的一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,其特征在于:所述的模逆运算模块包括预计算单元、第二控制单元、双域加减法器计算单元,其中
预计算单元,接收模数p并对模数p进行判断,输出模数p的有效比特位数记为n,若p=0,则输出n=0至第二控制单元,若p不等于0,则将p右移一位并n=n+1,如果此时p等于0,则输出n=1至第二控制单元,如果此时p不等于0,继续将p的右移一位并n=n+1,直到p等于0并输出此时的n至第二控制单元,将模数p送至双域加减法器计算单元;所述n初始值为0;
第二控制单元,接收预计算单元发送的模数p的有效比特位数n并将其作为使用Montgomery模逆算法计算的判断条件,接收域选择控制信号field、加减控制信号sel并进行判断,当域选择控制信号field=1且加减控制信号sel=1时,从寄存器堆读取待模逆运算的数据x送至双域加减法器计算单元进行素数域下的加法计算;当域选择控制信号field=1且加减控制信号sel=0时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行素数域下的减法计算;当域选择控制信号field=0且加减控制信号sel=1时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行二进制下的加法计算;当域选择控制信号field=0且加减控制信号sel=0时,从寄存器堆中读取待模逆运算的数据x送至双域加减法器计算单元进行二进制下的减法计算;将n送至双域加减法器计算单元;
双域加减法器计算单元,接收预计算单元发送的模数p,接收控制单元发送的n,当域选择控制信号field=1且加减控制信号sel=1时,接收第二控制单元发送的待模逆运算的数据x使用Montgomery模逆算法进行素数域下的加法计算,将模逆计算结果输出并送至寄存器堆;当域选择控制信号field=1且加减控制信号sel=0时,接收第二控制单元发送的待模逆运算的数据x,使用Montgomery模逆算法进行素数域下的减法计算,将模逆计算结果输出并送至寄存器堆;当域选择控制信号field=0,接收第二控制单元发送的待模逆运算的数据x使用Montgomery模逆算法进行异或运算,将模逆计算结果输出并送至寄存器堆。
4.根据权利要求1所述的一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,其特征在于:所述的模加减运算模块包括双域加减法器计算单元、第三控制单元,其中
第三控制单元,接收域选择控制信号field与加减控制信号sel并进行判断,当域选择控制信号field=1且加减控制信号sel=1时,从寄存器堆读取待模加减运算的数据z和v送至双域加减法器计算单元进行素数域下的加法计算;当域选择控制信号field=1且加减控制信号sel=0时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行素数域下的减法计算;当域选择控制信号field=0且加减控制信号sel=1时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行二进制下的加法计算;当域选择控制信号field=0且加减控制信号sel=0时,从寄存器堆中读取待模加减运算的数据z和v送至双域加减法器计算单元进行二进制下的减法计算;
双域加减法器计算单元,接收寄存器堆发送的模数p,当域选择控制信号field=1且加减控制信号sel=1时,接收第三控制单元发送的待模加减运算的数据z和v进行素数域下的加法计算得到s,将s与模数p进行对比,若s小于p,则将s作为计算结果输出并送至寄存器堆,否则将s-p作为计算结果输出并送至寄存器堆;当域选择控制信号field=1且加减控制信号sel=0时,接收第三控制单元发送的待模加减运算的数据z和v,然后进行素数域下的减法计算得到s,若s大于零,则将s作为模加减计算结果输出并送至寄存器堆,否则将s+p作为模加减计算结果输出至寄存器堆;当域选择控制信号field=0时,接收第三控制单元发送的待模加减运算的数据z和v进行异或运算,将模加减计算结果输出并送至寄存器堆。
5.根据权利要求1所述的一种椭圆曲线公钥密码SM2算法的硬件加速协处理器,其特征在于:所述的SM3模块包括消息扩展单元、压缩单元、其中
消息扩展单元,接收寄存器堆发送的消息分组B(ii),ii=0,1…n,后将其划分为16个字W0,W1,…,W15,并送至寄存器堆,令jj=16并判断,如果jj小于等于67,则Wjj=P1(Wjj-16⊕Wjj-9⊕(Wjj-3<<15))⊕(Wjj-13<<7)⊕Wjj-6且jj=jj+1直至jj大于67,令jj=0并判断,如果jj小于等于63,则W′jj=Wjj⊕Wjj+4且jj=jj+1,直到jj大于63,将计算得到的W0,W1,…,W67,W′1,…,W′63送至压缩单元;
压缩单元,接收消息扩展单元发送的W0,W1,…,W67,W′1,…,W′63,同时选取八个字寄存器,分别记为A、B、C、D、E、F、G、H且A、B、C、D、E、F、G、H的拼接结果记为ABCDEFGH=V(ii),令jj=0并判断,若jj小于等于63,则SS1=((A<<<12)+E+(Tjj<<<jj))<<<7,SS2=SS1⊕(A<<<12),
TT1=FFjj(A,B,C)+D+SS2+Wjj’,TT2=GGjj(E,F,G)+H+SS1+Wjj,然后将C字寄存器数值赋予字寄存器D、将字寄存器G数值赋予字寄存器H、字寄存器A数值赋予字寄存器B、将B<<<9数值赋予字寄存器C、将F<<<19数值赋予字寄存器G、字寄存器A数值赋予字寄存器B、字寄存器E数值赋予字寄存器F、将TT1赋予字寄存器A、将P0(TT2)赋予字寄存器E,同时jj=jj+1,直至jj大于63,然后进行计算V(ii+1)=ABCDEFGH⊕V(ii)(ii=0,1…n-1),若0<ii<n-1,则获取新的W0,W1,…,W67,W′1,…,W′63后重复执行上述计算,直至jj大于63,然后进行V(ii+1)=ABCDEFGH⊕V(ii)直至ii=n-1,若ii=n-1,则将V(ii+1)作为B(ii)的SM3运算结果,最终得B(ii),ii=0,1…n的SM3计算结果输出并送至寄存器堆存储,其中,V(ii)初始值为V(0)=7380166f 4914b2b9172442d7da8a0600a96f30bc163138aa e38dee4d b0fb0e4e,<<<为左移k比特运算,FFjj和GGjj分别是布尔函数,表达式为
P0、P1是置换函数,表达式为
Tjj为常量,表达式为 所述消息分组B(ii),i=0,1…n,为长度<264比特的消息进行填充得到的512n长度的新消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410851308.7A CN104579656A (zh) | 2014-12-31 | 2014-12-31 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410851308.7A CN104579656A (zh) | 2014-12-31 | 2014-12-31 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104579656A true CN104579656A (zh) | 2015-04-29 |
Family
ID=53094942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410851308.7A Pending CN104579656A (zh) | 2014-12-31 | 2014-12-31 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104579656A (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105577372A (zh) * | 2015-12-11 | 2016-05-11 | 杭州朔天科技有限公司 | 模逆算法的无符号处理方法及模逆加速器 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN107040385A (zh) * | 2017-05-23 | 2017-08-11 | 广东工业大学 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
CN107294719A (zh) * | 2017-06-19 | 2017-10-24 | 北京万协通信息技术有限公司 | 一种双线性对运算的加解密协处理器 |
CN107483204A (zh) * | 2017-09-04 | 2017-12-15 | 捷德(中国)信息科技有限公司 | 一种国密sm2加密算法的优化处理方法及装置 |
CN109687954A (zh) * | 2018-12-25 | 2019-04-26 | 贵州华芯通半导体技术有限公司 | 用于算法加速的方法和装置 |
CN109936455A (zh) * | 2017-12-19 | 2019-06-25 | 航天信息股份有限公司 | 一种数字签名的方法、装置和系统 |
CN110443053A (zh) * | 2019-07-31 | 2019-11-12 | 四川效率源信息安全技术股份有限公司 | 一种基于密钥循环表及映射表的密钥生成方法 |
CN111835517A (zh) * | 2020-06-29 | 2020-10-27 | 易兆微电子(杭州)股份有限公司 | 一种双域椭圆曲线点乘硬件加速器 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN112099763A (zh) * | 2020-09-10 | 2020-12-18 | 上海交通大学 | 用于sm2的快速安全硬件乘法器及其应用 |
CN113055165A (zh) * | 2021-03-11 | 2021-06-29 | 湖南国科微电子股份有限公司 | 一种非对称密码算法装置、方法、设备及存储介质 |
CN114629665A (zh) * | 2022-05-16 | 2022-06-14 | 百信信息技术有限公司 | 一种用于可信计算的硬件平台 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170406A (zh) * | 2006-10-27 | 2008-04-30 | 北京中电华大电子设计有限责任公司 | 双核公钥密码算法运算协处理器的一种实现方法 |
CN104092534A (zh) * | 2014-07-09 | 2014-10-08 | 昆腾微电子股份有限公司 | 实现sm3密码杂凑算法中的迭代压缩的方法 |
-
2014
- 2014-12-31 CN CN201410851308.7A patent/CN104579656A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101170406A (zh) * | 2006-10-27 | 2008-04-30 | 北京中电华大电子设计有限责任公司 | 双核公钥密码算法运算协处理器的一种实现方法 |
CN104092534A (zh) * | 2014-07-09 | 2014-10-08 | 昆腾微电子股份有限公司 | 实现sm3密码杂凑算法中的迭代压缩的方法 |
Non-Patent Citations (2)
Title |
---|
蔡亮: "双域ECC协处理器体系结构研究与设计", 《解放军信息工程大学硕士毕业论文》 * |
郭晓等: "SM2高速双域 Montgomery模乘的硬件设计", 《微电子学与计算机》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105577372A (zh) * | 2015-12-11 | 2016-05-11 | 杭州朔天科技有限公司 | 模逆算法的无符号处理方法及模逆加速器 |
CN106301761B (zh) * | 2016-08-09 | 2019-04-09 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN107040385B (zh) * | 2017-05-23 | 2020-10-27 | 广东工业大学 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
CN107040385A (zh) * | 2017-05-23 | 2017-08-11 | 广东工业大学 | 一种基于sm2椭圆曲线的签名验证算法的实现方法及系统 |
CN107294719A (zh) * | 2017-06-19 | 2017-10-24 | 北京万协通信息技术有限公司 | 一种双线性对运算的加解密协处理器 |
CN107483204B (zh) * | 2017-09-04 | 2020-07-21 | 捷德(中国)科技有限公司 | 一种国密sm2加密算法的优化处理方法及装置 |
CN107483204A (zh) * | 2017-09-04 | 2017-12-15 | 捷德(中国)信息科技有限公司 | 一种国密sm2加密算法的优化处理方法及装置 |
CN109936455B (zh) * | 2017-12-19 | 2022-06-07 | 航天信息股份有限公司 | 一种数字签名的方法、装置和系统 |
CN109936455A (zh) * | 2017-12-19 | 2019-06-25 | 航天信息股份有限公司 | 一种数字签名的方法、装置和系统 |
CN109687954A (zh) * | 2018-12-25 | 2019-04-26 | 贵州华芯通半导体技术有限公司 | 用于算法加速的方法和装置 |
CN110443053A (zh) * | 2019-07-31 | 2019-11-12 | 四川效率源信息安全技术股份有限公司 | 一种基于密钥循环表及映射表的密钥生成方法 |
CN110443053B (zh) * | 2019-07-31 | 2023-03-14 | 四川效率源信息安全技术股份有限公司 | 一种基于密钥循环表及映射表的密钥生成方法 |
CN111835517A (zh) * | 2020-06-29 | 2020-10-27 | 易兆微电子(杭州)股份有限公司 | 一种双域椭圆曲线点乘硬件加速器 |
CN111835517B (zh) * | 2020-06-29 | 2023-12-22 | 易兆微电子(杭州)股份有限公司 | 一种双域椭圆曲线点乘硬件加速器 |
CN112099761A (zh) * | 2020-08-27 | 2020-12-18 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN112099761B (zh) * | 2020-08-27 | 2022-09-02 | 清华大学 | 基于改进的二进制左移模逆算法的装置及其控制方法 |
CN112099763A (zh) * | 2020-09-10 | 2020-12-18 | 上海交通大学 | 用于sm2的快速安全硬件乘法器及其应用 |
CN112099763B (zh) * | 2020-09-10 | 2024-03-12 | 上海交通大学 | 用于sm2的快速安全硬件乘法器及其应用 |
CN113055165A (zh) * | 2021-03-11 | 2021-06-29 | 湖南国科微电子股份有限公司 | 一种非对称密码算法装置、方法、设备及存储介质 |
CN114629665A (zh) * | 2022-05-16 | 2022-06-14 | 百信信息技术有限公司 | 一种用于可信计算的硬件平台 |
CN114629665B (zh) * | 2022-05-16 | 2022-07-29 | 百信信息技术有限公司 | 一种用于可信计算的硬件平台 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104579656A (zh) | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 | |
CN108512650B (zh) | 面向区块链的动态哈希计算方法、装置、节点及存储介质 | |
CN100470464C (zh) | 基于改进的蒙哥马利算法的模乘器 | |
CN112865954B (zh) | 用于Paillier解密的加速器、芯片及系统 | |
CN100536390C (zh) | 一种椭圆曲线密码协处理器 | |
CN103226461B (zh) | 一种用于电路的蒙哥马利模乘方法及其电路 | |
US20070116270A1 (en) | Calculating unit for reducing an input number with respect to a modulus | |
CN103903047B (zh) | 一种适用于rfid安全通信的椭圆曲线加密协处理器 | |
CN102207847A (zh) | 基于蒙哥马利模乘运算的数据加解密处理方法及装置 | |
CN101826142A (zh) | 一种可重构椭圆曲线密码处理器 | |
CN103761068A (zh) | 优化的蒙哥马利模乘方法、模平方方法和模乘硬件 | |
CN100583757C (zh) | 一种ecc\rsa加解密协处理器 | |
CN103631660A (zh) | 在gpu中进行大整数计算时的存储资源分配方法及装置 | |
EP4156597A1 (en) | Low-latency digital-signature processing with side-channel security | |
CN110704109B (zh) | 一种椭圆曲线密码协处理器 | |
Dong et al. | Ec-ecc: Accelerating elliptic curve cryptography for edge computing on embedded gpu tx2 | |
US20070100926A1 (en) | Device and method for calculating a multiplication addition operation and for calculating a result of a modular multiplication | |
CN102156836A (zh) | 一种椭圆曲线密码处理器 | |
CN101304312B (zh) | 一种适用于精简指令集处理器的加密单元 | |
Gutub et al. | Efficient scalable VLSI architecture for Montgomery inversion in GF (p) | |
CN113032723B (zh) | 一种矩阵乘法器的实现方法及矩阵乘法器装置 | |
CN108259179A (zh) | 一种基于sm9标识密码算法的加解密协处理器及其运算方法 | |
Du et al. | Feature-aware task scheduling on CPU-FPGA heterogeneous platforms | |
Keliris et al. | Investigating large integer arithmetic on Intel Xeon Phi SIMD extensions | |
US20070100925A1 (en) | Device and method for calculating a result of a sum with a calculating unit with limited word length |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20150429 |