一种高效的公钥加密引擎转让专利

申请号 : CN201510040249.X

文献号 : CN104572021B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘力睿张晨袁世强

申请人 : 聚辰半导体(上海)有限公司

摘要 :

本发明涉及一种高效的公钥加密引擎,CPU能够在进行公钥运算之前将非易失性存储器中存放的微指令串通过公钥协处理器加载到随机存取存储器中,并在公钥运算过程中将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,使公钥协处理器能够主动从所述随机存取存储器的该存放地址获取与公钥运算进程相匹配的微指令串分段,并将其加载到公钥协处理器设置的指令序列中来执行相应的微指令运算。基于本发明的公钥加密引擎,公钥运算的速度接近或达到采用硬件电路直接实现的公钥运算,且可以采用微指令灵活实现各种公钥运算算法。

权利要求 :

1.一种公钥加密引擎,其特征在于,包含:

随机存取存储器,其在公钥运算的过程中存放微指令串和中间数据;

公钥协处理器,通过设置的I/O控制模块主动从所述随机存取存储器存放的微指令串中,将与公钥运算进程相匹配的微指令串分段加载到公钥协处理器设置的指令序列中运行;

CPU,其将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,以便所述公钥协处理器根据该存放地址从随机存取存储器获得相应的微指令串分段。

2.如权利要求1所述的公钥加密引擎,其特征在于,

所述公钥加密引擎还包含最初用来存放微指令串的非易失性存储器;所述CPU在进行公钥运算之前,将非易失性存储器中存放的与公钥运算相应的微指令串,通过公钥协处理器的I/O控制模块加载到随机存取存储器中。

3.如权利要求1或2所述的公钥加密引擎,其特征在于,

所述公钥协处理器还设置有微指令解析模块,将CPU向其发送的与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址,作为使所述公钥协处理器启动公钥运算中相应微指令运算的启动地址。

4.如权利要求3所述的公钥加密引擎,其特征在于,

所述微指令串是对应有限域上加、减、取模、乘法运算中任意一项的微指令或这些微指令的任意组合。

5.如权利要求4所述的公钥加密引擎,其特征在于,

设有表示公钥运算结束的结束微指令;基于微指令解析模块接收到的结束微指令,使所述公钥协处理器停止从随机存取存储器获取微指令串分段。

6.一种公钥加密引擎,其特征在于,包含:

非易失性存储器,最初用来存放公钥运算相关的微指令串;

随机存取存储器,在公钥运算的过程中存放所述微指令串和中间数据;

公钥协处理器,主动从所述随机存取存储器存放的微指令串中,将与公钥运算进程相匹配的微指令串分段加载到公钥协处理器设置的指令序列中并执行相应的微指令运算;

CPU,其在进行公钥运算之前将非易失性存储器中存放的微指令串通过公钥协处理器加载到随机存取存储器中;所述CPU还将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,以便所述公钥协处理器根据该存放地址从随机存取存储器获得相应的微指令串分段。

7.一种公钥加密引擎的公钥运算方法,其特征在于,

在启动公钥运算之前,CPU将非易失性存储器中存放的微指令串通过公钥协处理器加载到随机存取存储器中;

CPU在启动公钥协处理器进行公钥运算后,公钥协处理器将其主动从所述随机存取存储器存放的微指令串中获取的微指令串分段加载到指令序列中运行;

当指令序列中的微指令串分段即将执行完成而公钥运算尚未结束时,所述公钥协处理器将其主动从所述随机存取存储器存放的微指令串中获得的与公钥运算进程相匹配的下一个微指令串分段加载到指令序列中运行;

直到公钥运算结束时,所述公钥协处理器不再从随机存取存储器获取微指令串分段;

将随机存取存储器中存放公钥运算相关的微指令串及中间数据的内存空间释放;

其中,所述CPU将公钥运算相关的微指令串写入随机存取存储器中指定的存放地址,并将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,以便所述公钥协处理器根据该存放地址从随机存取存储器获得相应的微指令串分段来执行相应的微指令运算。

8.如权利要求7所述公钥加密引擎的公钥运算方法,其特征在于,所述公钥协处理器接收到表示公钥运算结束的结束微指令后,不再从随机存取存储器获取微指令串分段。

说明书 :

一种高效的公钥加密引擎

技术领域

[0001] 本发明涉及公钥运算的相关领域,特别涉及一种高效的公钥加密引擎,采用新型的微指令优化,加载和运算技术,可实现所有已知的公钥运算。

背景技术

[0002] 随着移动支付等技术的大规模应用,其面临的信息安全威胁也越来越大,应用环境的日益复杂和黑客技术的提高,使得公钥算法在各种安全相关的领域中的应用越来越重要。为了使公钥协处理器的性能能够满足各种应用的要求,目前多采用微指令技术。
[0003] 典型的采用微指令技术的公钥协处理器的系统构架如图1所示。应用这类公钥协处理器的系统一般包含:非易失存储器ROM/FLASH,CPU,公钥IP控制模块和公钥IP。其中公钥IP控制模块可选,其功能完全可由软件完成。完成某项公钥运算的微指令串存储在非易失存储器中,当要进行这种公钥运算时,因为公钥运算通常比较复杂,其微指令串较长,且公钥IP中的指令序列(即,存放公钥IP当前可以连续执行的最长的微指令串),远小于完成公钥运算的微指令串的长度,因此CPU或公钥IP控制模块要分段将完成公钥运算的微指令加载到公钥IP的指令序列中以完成整个公钥运算。
[0004] 这种方式有以下缺点:
[0005] 1. 若没有公钥IP控制模块,则由CPU直接将微指令串分段加载到公钥IP的指令序列中。这种方式下CPU需要实时监控公钥IP的指令序列中的微指令是否执行完以加载新的微指令段,因此公钥IP每执行完指令序列中的微指令段要等待CPU将新的微指令段填入指令序列才能继续执行,对于像ECC点乘运算来说,要执行几百次相同的点加或倍点运算,这就需要反复加载同样的微指令串,严重影响了微指令的执行效率,而且CPU在公钥IP运行时不能执行其他指令。
[0006] 2. 若采用公钥IP控制模块,则由CPU将微指令串加载到公钥IP控制模块中,再由公钥IP控制模块分段加载微指令段到指令序列中执行。这种方式虽然在公钥IP运行时可以将CPU部分解放出来,而且减少了一些公钥IP在等待指令序列重新加载的时间,但是不能根本缓解这种问题,在多次执行较长的微指令串时微指令执行效率的问题依然严重,而影响整个公钥运算的速度。而且公钥运算的微指令一般很长,因此公钥IP控制模块中会有很大的内存用来暂存微指令串,增大了面积和功耗。
[0007] 3. 一些公钥协处理器为了缓解1和2中的问题,通过将公钥高层次的运算(例如ECC点乘运算),也编成一条微指令,这种方式看似解决了微指令加载运行效率的问题,但是同时带来了其他严重的问题。首先像ECC点乘运算这种公钥算法的核心运算有很多种算法,其速度,安全性和应用环境都不同,将点乘运算编成一条微指令这意味着只能选择某一特定的算法用硬件电路来实现点乘运算,这不但限制了公钥IP的应用领域,而且增大了硬件电路设计的复杂性和面积功耗;其次在公钥协议中仍然需要底层有限域运算,将公钥高层运算编成微指令不会减少对底层运算微指令的需求,因此导致微指令种类增多,单条微指令编码变长,公钥协处理器解析微指令变慢。
[0008] 4. 集成这种公钥协处理器非常复杂,需添加额外的硬件接口电路或复杂的软件处理来完成。
[0009] 因此,亟需能够提高微指令运行效率和速度的技术,解决上述公钥协处理器不能兼顾性能和灵活性的问题。

发明内容

[0010] 本发明提供一种高效的公钥加密引擎,其采用微指令主动加载技术和微指令优化设计的公钥协处理器,目标在于使采用微指令串实现的公钥运算的速度接近或达到采用硬件电路直接实现的公钥运算,且可以采用微指令灵活实现各种公钥运算算法。
[0011] 为了达到上述目的,本发明的一个技术方案是提供一种公钥加密引擎,其包含:
[0012] 随机存取存储器,其在公钥运算的过程中存放微指令串和中间数据;
[0013] 公钥协处理器,通过设置的I/O控制模块主动从所述随机存取存储器存放的微指令串中,将与公钥运算进程相匹配的微指令串分段,加载到公钥协处理器设置的指令序列中运行。
[0014] 优选地,所述公钥加密引擎还包含CPU,其将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,以便所述公钥协处理器根据该存放地址从随机存取存储器获得相应的微指令串分段。
[0015] 优选地,所述公钥加密引擎还包含最初用来存放微指令串的非易失性存储器;所述CPU在进行公钥运算之前,将非易失性存储器中存放的与公钥运算相应的微指令串,通过公钥协处理器的I/O控制模块加载到随机存取存储器中。
[0016] 优选地,所述公钥协处理器还设置有微指令解析模块,将CPU向其发送的与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址,作为使所述公钥协处理器启动公钥运算中相应微指令运算的启动地址。
[0017] 优选地,所述微指令串,是对应有限域上加、减、取模、乘法运算中任意一项的微指令或这些微指令的任意组合。
[0018] 优选地,设有表示公钥运算结束的结束微指令;基于微指令解析模块接收到的结束微指令,使所述公钥协处理器停止从随机存取存储器获取微指令串分段。
[0019] 本发明的另一个技术方案是提供一种公钥加密引擎,其包含:
[0020] 非易失性存储器,最初用来存放公钥运算相关的微指令串;
[0021] 随机存取存储器,在公钥运算的过程中存放所述微指令串和中间数据;
[0022] 公钥协处理器,主动从所述随机存取存储器存放的微指令串中,将与公钥运算进程相匹配的微指令串分段,加载到公钥协处理器设置的指令序列中并执行相应的微指令运算;
[0023] CPU,其在进行公钥运算之前将非易失性存储器中存放的微指令串通过公钥协处理器加载到随机存取存储器中;所述CPU还将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器。
[0024] 本发明的又一个技术方案是提供一种公钥加密引擎的公钥运算方法,在启动公钥运算之前,CPU将非易失性存储存器中存放微指令串通过公钥协处理器加载到随机存取存储器中;
[0025] CPU在启动公钥协处理器进行公钥运算后,公钥协处理器将其主动从所述随机存取存储器存放的微指令串中获取的微指令串分段,加载到指令序列中运行;
[0026] 当指令序列中的微指令串分段即将执行完成而公钥运算尚未结束时,所述公钥协处理器将其主动从所述随机存取存储器存放的微指令串中获得的与公钥运算进程相匹配的下一个微指令串分段,加载到指令序列中运行;
[0027] 直到公钥运算结束时,所述公钥协处理器不再从随机存取存储器获取微指令分段;将随机存取存储器中存放公钥运算相关微指令串及中间数据的内存空间释放。
[0028] 优选地,所述CPU将公钥运算相关的微指令串写入随机存取存储器中指定的存放地址,并将与公钥运算进程相匹配的微指令串分段在随机存取存储器中的存放地址发送给公钥协处理器,以便所述公钥协处理器根据该存放地址从随机存取存储器获得相应的微指令串分段来执行相应的微指令运算。
[0029] 优选地,所述公钥协处理器接收到表示公钥运算结束的结束微指令后,不再从随机存取存储器获取微指令串分段。
[0030] 本发明提供一款高效的公钥加密引擎,采用新型的微指令优化,加载和运算技术,形成了高效灵活的微指令式的公钥协处理器,解决了性能和灵活性之间的矛盾,并实现RSA,ECC等所有已知的公钥算法的各种运算及公钥协议。与其他采用微指令技术的公钥协处理器相比,本发明具有微指令短,微指令加载效率高等特点,性能和灵活性远好于目前已知的同类协处理器。
[0031] 相比现有技术,本发明具有以下优点:
[0032] 1. 将所有跟公钥运算的模块集成到公钥协处理器中,该公钥协处理器可应用在包括各种类型的CPU,非易失存储器和RAM的公钥加密引擎中,便于把公钥协处理器移植和集成到新的系统中,通用性更好;
[0033] 2. 将微指令和公钥运算的中间数据放在系统的RAM中,降低了公钥协处理器和整个系统的面积,公钥运算结束后占用的RAM可以释放给系统的其他应用;
[0034] 3. 系统只需在运算开始前加载需要的微指令串到RAM中,之后CPU只需控制微指令串运算完成后将新的要执行的微指令串在RAM中的地址告诉公钥协处理器,无需其他操作,在微指令串被执行时CPU可以进行其他操作;
[0035] 4. 由于无需CPU参与过多的操作,因此降低了软件的开发难度,且采用微指令实现的公钥运算的程序可以轻松移植到新的采用此公钥协处理器的系统环境中;
[0036] 5. 最重要的是,此公钥协处理器可以高效高速的实现各种算法的各种公钥运算。

附图说明

[0037] 图1 是现有技术中典型的采用微指令技术的公钥协处理器的系统构架;
[0038] 图2是本发明中采用微指令主动加载技术和微指令优化设计的公钥协处理器的系统构架;
[0039] 图3是本发明的一个具体示例中进行 ECC素数域点乘运算的处理流程示意图。

具体实施方式

[0040] 本发明的公钥加密引擎,采用微指令主动加载技术和微指令优化设计的公钥协处理器的系统构架,如图2所示。系统包含非易失性存储器ROM(只读存储器)/FLASH(闪存)等,CPU,公钥IP(公钥协处理器),RAM(随机存取存储器)。
[0041] 即,完成各种复杂公钥运算的微指令串最初存放在非易失性存储器中;嵌入式系统通常包括处理存放临时数据的RAM等,在公钥协处理器的应用中可以作为存放公钥运算中间数据和微指令的内存,待公钥运算结束后可以释放给系统做其他用处。在进行某项公钥运算时,CPU首先将存放在非易失性存储存器中相应的微指令串通过公钥协处理器的I/O控制模块加载到RAM中,而且只需在整个运算之前加载一次即可;若某个公钥运算需多次调用同一微指令串,只需从RAM中调用即可,而无需CPU重新从非易失性存储器加载。
[0042] 本发明的公钥协处理器和其他公钥IP类似,其指令队列一般只能存储十几条微指令;而本发明的公钥协处理器中可以采用微指令主动加载技术,来完成整个微指令串的运算。微指令主动加载技术是指CPU在启动公钥协处理器进行某种公钥运算后,公钥协处理器会主动从RAM中将指定位置的微指令串分段加载到指令序列中运行,当公钥协处理器的指令序列中的微指令段即将执行完成而没有检测到结束微指令时,公钥协处理器会主动从RAM中接着加载下一段微指令,直到RAM中此微指令串执行完成,即公钥IP检测到结束微指令。
[0043] 本发明中采用微指令主动加载技术的公钥协处理器,在微指令运算时无需停下来等待新的微指令加载到指令队列中,因此微指令运算效率极高, 达到硬件实现的水平。本发明所述微指令优化设计,是指在采用微指令主动加载技术的公钥协处理器中,微指令解析模块应支持特殊的微指令,即支持对一种结束微指令的识别及处理,才能判断当前微指令串是否执行完成。且微指令种类应尽量少以降低单条微指令占用的空间,一般只需将有限域上的加,减,取模和乘法运算编成微指令即可,高层运算采用微指令串实现。
[0044] 在使用本发明的公钥协处理器时,主要工作是将要实现的公钥运算变为公钥协处理器可以执行的微指令串,我们以ECC(椭圆曲线密码)素数域点乘运算为例示范。设采用经典的“从左到右(Left-to-Right)”点乘算法,如算法1所示,公钥协处理器支持的微指令为有限域上的加,减,取模和乘法运算,分别以ADD,SUB,MOD,MULT表示,另外有表示当前微指令串结束的微指令END。
[0045] 首先将ECC的点加和倍点,转换为由加,减,取模和乘法组成的微指令串,将其分别存入非易失存储器中。在进行ECC点乘运算前,CPU首先选择公钥IP进行素数域上的运算,然后将点加和倍点的微指令串通过公钥协处理器分别写入RAM中,地址表示为ADD_ADDR和DOUBLE_ADDR,然后根据“从左到右”的二进制算法判断每一位密钥以启动点加或倍点运算。
[0046]
[0047] 算法1中,输入的k是给定的正整数,并以二进制表示;P是椭圆曲线E上给定的点,椭圆曲线E定义在域Fq上。输出为kP,即椭圆曲线E上的点Q。
[0048] 本发明所述公钥加密引擎,基于算法1的主要处理过程,如图3所示:
[0049] S1)CPU设置公钥协处理器进行素数域上的运算;
[0050] S2)CPU将点加的微指令串写入RAM的地址ADD_ADDR中;
[0051] S3)CPU将倍点的微指令串写入RAM的地址DOUBLE_ADDR中;
[0052] S4)CPU将ECC点的坐标(和/或算法需要的其他输入参数)分别写入RAM内;
[0053] S5)对于二进制表示的k中从最高位kt-1到最低位k0扫描,对于其中每一位执行以下操作;
[0054] S6)将地址DOUBLE_ADDR写入公钥协处理器的微指令解析模块作为启动地址,之后该公钥协处理器启动倍点的微指令运算( );
[0055] S7)对ki数值进行判断:
[0056] 如果ki=1,将地址ADD_ADDR写入公钥协处理器的微指令解析模块作为启动地址,之后该公钥协处理器启动点加的微指令运算( );再对i的数值进行判断后,执行S8);
[0057] 如果ki≠1,则对i的数值进行判断后,执行S8);
[0058] S8)如果i≠0,则使i=i-1,并对k中扫描到的下一位重新执行S5)操作;如果i=0,则点乘运算完成。
[0059] 其中,S2)所述点加的微指令串或S3)中所述倍点的微指令串,是指将点加运算或倍点运算分别转换为由有限域上加,减,取模和乘法运算表示的微指令串,并预先已经分别存入非易失存储器中。此外,在其他的示例中,诸如S2)S3)的执行顺序也可以在实际应用~中进行调整。
[0060] 综上所述,本发明提供一种高效的公钥加密引擎,其采用微指令主动加载技术和微指令优化设计的公钥协处理器,能够使采用微指令串实现的公钥运算的速度接近或达到采用硬件电路直接实现的公钥运算,且可以采用微指令灵活实现各种公钥运算算法。
[0061] 尽管本发明的内容已经通过上述优选实施例作了详细介绍,但应当认识到上述的描述不应被认为是对本发明的限制。在本领域技术人员阅读了上述内容后,对于本发明的多种修改和替代都将是显而易见的。因此,本发明的保护范围应由所附的权利要求来限定。