发明内容
本申请的主要目的在于提供一种RSA单核数据系统,以解决现有技术中RSA单核数据系统中的第一运算单元与第二运算单元不能同时进行计算的问题。
为了实现上述目的,根据本申请的一个方面,提供了一种RSA单核数据系统,包括控制单元、第一运算单元、第二运算单元和寄存器,所述控制单元用于接收多条待加密数据,且将多条所述待加密数据分别写入所述第一运算单元和所述第二运算单元;每次循环在两个计算周期内完成,在第i次循环的第一个计算周期内,所述第一运算单元用于解算第m条所述待加密数据的第一参数,同时,所述第二运算单元用于解算第n条所述待加密数据的第二参数,在第i次循环的第二个计算周期内,所述第一运算单元用于解算第n条所述待加密数据的第一参数,同时,所述第二运算单元用于解算第m条所述待加密数据的第二参数,其中,m为大于或者等于1的整数,n为大于或者等于1的整数,且m不等于n,i为大于或者等于0的整数;所述寄存器用于存储所有的所述第一参数和所述第二参数。
进一步地,所述数据系统还包括至少一个预运算单元,所述预运算单元用于求取多个预定参数,所述第一运算单元基于所述预定参数解算所述第一参数,所述第二运算单元基于所述预定参数解算所述第二参数。
进一步地,所述预运算单元的个数与所述待加密数据的条数相等。
进一步地,在所述待加密数据有两条的情况下,在第i次循环的第一个计算周期内,所述第一运算单元用于解算第一条待加密数据的第一参数,同时,所述第二运算单元用于解算第二条待加密数据的第二参数,在第i次循环的第二个计算周期内,所述第一运算单元用于解算第二条待加密数据的第一参数,同时,所述第二运算单元用于解算第一条待加密数据的第二参数。
进一步地,所述控制单元的状态机有十个不同的状态,分别为发输入请求状态、准备写输入状态、写输入状态、预运算状态、第一计算模乘状态、第二计算模乘状态、指数E的扫描状态、完成运算状态、发输出请求状态和输出状态,所述第一计算模乘状态用于控制所述第一运算单元解算所述第一参数,所述第二计算模乘状态用于控制所述第二运算单元解算所述第二参数,所述预运算状态用于控制所述预运算单元求取多个所述预定参数。
进一步地,在所述待加密数据有两条的情况下,所述状态机有93种组合状态。
进一步地,对一条所述待加密数据进行加密的操作为第一操作,对另一条所述待加密数据进行加密的操作为第二操作,在所述第一操作和所述第二操作在下一个计算周期同时跳入所述第一计算模乘状态或者所述第二计算模乘状态的情况下,控制其中的一个操作保持原状态或者进入空状态等待一个所述计算周期。
进一步地,所述第一操作和所述第二操作在下一个计算周期同时跳入所述第一计算模乘状态或者所述第二计算模乘状态的当前组合状态包括:所述第一操作处于所述第一计算模乘状态,且所述第二操作处于所述第二计算模乘状态;所述第一操作处于所述指数E的扫描状态,且所述第二操作处于所述第二计算模乘状态;所述第一操作处于所述第二计算模乘状态,且所述第二操作处于所述预运算状态;所述第一操作处于所述指数E的扫描状态,且所述第二操作处于所述预运算状态;所述第一操作处于所述预运算状态,且所述第二操作处于所述预运算状态;所述第一操作处于所述指数E的扫描状态,且所述第二操作处于所述指数E的扫描状态。
进一步地,在所述第一操作处于所述第一计算模乘状态,且所述第二操作处于所述第二计算模乘状态,下一个计算周期两个操作均预跳入所述第二计算模乘状态的情况下,控制所述第一操作停在所述第一计算模乘状态。
进一步地,在所述第一操作处于所述指数E的扫描状态,且所述第二操作处于所述第二计算模乘状态,下一个计算周期两个操作均预跳入所述第一计算模乘状态的情况下,控制所述第一操作首先进入所述第一计算模乘状态,所述第二操作停在所述第二计算模乘状态。
应用本申请的技术方案,将每次循环在两个计算周期内完成,对于每一次循环,第一计算周期内第一运算单元计算其中的一条待加密数据的第一参数,同时,第二运算单元计算另一条待加密的数据的第二参数,第二计算周期内第一运算单元计算另一条待加密的数据的第一参数,同时,第二运算单元计算一条待加密数据的第二参数,使得在每个计算周期内第一运算单元和第二运算单元可以同时进行运算,由于寄存器将计算得到的第一参数和第二参数进行了存储,使得下一次计算第一参数时可以从寄存器中获取上一次计算得到的第二参数,同理,使得下一次计算第二参数时可以从寄存器中获取上一次计算得到的第一参数,保证了第一运算单元和第二运算单元的同时计算,节约了资源,且可以同时加密多条待加密的数据,且加快了数据处理的频率,数据的吞吐量得到了提升。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应该理解的是,当元件(诸如层、膜、区域、或衬底)描述为在另一元件“上”时,该元件可直接在该另一元件上,或者也可存在中间元件。而且,在说明书以及权利要求书中,当描述有元件“连接”至另一元件时,该元件可“直接连接”至该另一元件,或者通过第三元件“连接”至该另一元件。
正如背景技术中所介绍的,现有技术中的RSA单核数据系统中的第一运算单元与第二运算单元不能同时进行计算,为解决如上RSA单核数据系统中的第一运算单元与第二运算单元不能同时进行计算的问题,本申请的实施例提供了一种RSA单核数据系统。
本申请的一种实施例,提供了一种RSA单核数据系统。如图1所示,该RSA单核数据系统,包括控制单元、第一运算单元、第二运算单元和寄存器,
上述控制单元用于接收多条待加密数据,且将多条上述待加密数据分别写入上述第一运算单元和上述第二运算单元;
每次循环在两个计算周期内完成,在第i次循环的第一个计算周期内,上述第一运算单元用于解算第m条上述待加密数据的第一参数,同时,上述第二运算单元用于解算第n条上述待加密数据的第二参数,在第i次循环的第二个计算周期内,上述第一运算单元用于解算第n条上述待加密数据的第一参数,同时,上述第二运算单元用于解算第m条上述待加密数据的第二参数,其中,m为大于或者等于1的整数,n为大于或者等于1的整数,且m不等于n,i为大于或者等于0的整数;
上述寄存器用于存储所有的上述第一参数和上述第二参数。
具体地,上述寄存器位于上述控制单元的内部。
上述方案中,将每次循环在两个计算周期内完成,对于每一次循环,第一计算周期内第一运算单元计算其中的一条待加密数据的第一参数,同时,第二运算单元计算另一条待加密的数据的第二参数,第二计算周期内第一运算单元计算另一条待加密的数据的第一参数,同时,第二运算单元计算一条待加密数据的第二参数,使得在每个计算周期内第一运算单元和第二运算单元可以同时进行运算,由于寄存器将计算得到的第一参数和第二参数进行了存储,使得下一次计算第一参数时可以从寄存器中获取上一次计算得到的第二参数,同理,使得下一次计算第二参数时可以从寄存器中获取上一次计算得到的第一参数,保证了第一运算单元和第二运算单元的同时计算,节约了资源,且可以同时加密多条待加密的数据,且加快了数据处理的频率,数据的吞吐量得到了提升。
本申请的一种实施例中,如图1所示,上述数据系统还包括至少一个预运算单元,上述预运算单元用于求取多个预定参数,上述第一运算单元基于上述预定参数解算上述第一参数,上述第二运算单元基于上述预定参数解算上述第二参数。由于解算第一参数和第二参数时需要用到预定参数,且在计算第一参数的第二参数的多次循环中,预定参数的值不会随着循环次数的增加而改变,所以,通过设置预运算单元提前对预定参数进行求取,然后控制单元将求取得到的预定参数发送至第一运算单元和第二运算单元,可以加快数据加密的速度。
本申请的一种实施例中,上述预运算单元的个数与上述待加密数据的条数相等。由于待加密数据的差异性,使得每一条待加密数据对应的预定参数也是不同的,通过为每一条待加密的数据设置预运算单元,可以保证多条待加密数据的预定参数同时进行求取,以提高数据加密的速度,如果仅仅只有一个预运算单元,需要对多条待加密数据的预定参数轮流求取。
本申请的一种实施例中,在上述待加密数据有两条的情况下,在第i次循环的第一个计算周期内,上述第一运算单元用于解算第一条待加密数据的第一参数,同时,上述第二运算单元用于解算第二条待加密数据的第二参数,在第i次循环的第二个计算周期内,上述第一运算单元用于解算第二条待加密数据的第一参数,同时,上述第二运算单元用于解算第一条待加密数据的第二参数。即在有两条待加密的数据的情况下,在某一次循环中可以实现对两条待加密数据的第一参数和第二参数的解算。
本申请的一种实施例中,由于本次计算得到的第二参数与上次计算得到的第一参数有关,本次计算得到的第一参数与上次计算得到的第二参数有关,通过合理安排第一参数和第二参数的计算时间,可以实现同时对两条待加密数据进行流水加密。
本申请的一种实施例中,上述控制单元的状态机有十个不同的状态,分别为发输入请求状态(WRITE_PRE)、准备写输入状态(IDLE)、写输入状态(FETCH_DATA)、预运算状态(COMPUTE_MOD)、第一计算模乘状态(EXECUTE_S1)、第二计算模乘状态(EXECUTE_S2)、指数E的扫描状态(E_SCAN)、完成运算状态(COMPUTE_DONE)、发输出请求状态(WAIT_FOR_OUTPUT)和输出状态(OUTPUT),上述第一计算模乘状态用于控制上述第一运算单元解算上述第一参数,上述第二计算模乘状态用于控制上述第二运算单元解算上述第二参数,上述预运算状态用于控制上述预运算单元求取多个上述预定参数。即控制单元中的状态可以实现对第一运算单元、第二运算单元的预运算单元的控制。
具体地,第一计算模乘状态用于控制上述第一运算单元解算第一条待加密数据的第一参数,同时,第二计算模乘状态用于控制上述第二运算单元解算第二条待加密数据的第二参数;同理,第一计算模乘状态用于控制上述第一运算单元解算第二条待加密数据的第一参数,同时,第二计算模乘状态用于控制上述第二运算单元解算第一条待加密数据的第二参数,以实现对两条待加密数据的同时加密。
本申请的一种实施例中,在上述待加密数据有两条的情况下,上述状态机有93种组合状态。由于每一条待加密的数据对应10种不同的状态,在有两条待加密的数据的情况下,本应该有100种组合状态,但是由于某些组合状态无法成立,使得状态机剩余93种组合状态。具体地,对一条上述待加密数据进行加密的操作为第一操作,对另一条上述待加密数据进行加密的操作为第二操作,由于运算单元的资源限制,两笔操作在EXECUTE_S1,EXECUTE_S2两个状态不能重合;此外由于64个数据端口为双向端口,两笔操作读输入和写结果的相关状态不能重合。当单核接收到握手信号,则进入IDLE状态待一个周期,下一周期进入FETCH_DATA状态开始数据的传输,因此两笔操作不能同时在IDLE状态或FETCH_DATA状态,或一笔在IDLE,另一笔在FETCH_DATA状态。同一时间只能有一个单核向结果SRAM写数据,因此两笔操作不能同时在OUTPUT状态,即不能成立的组合状态包括(其中OP1表示第一操作,OP2表示第二操作,“-”表示状态组合):
OP1_EXECUTE_S1-OP2_EXECUTE_S1;OP1_EXECUTE_S2-OP2_EXECUTE_S2;
OP1_FETCH_DATA-OP2_FETCH_DATA;OP1_IDLE-OP2_IDLE;
OP1_FETCH_DATA-OP2_IDLE;
OP1_IDLE-OP2_FETCH_DATA;
OP1_OUTPUT-OP2_OUTPUT。
本申请的一种实施例中,对一条上述待加密数据进行加密的操作为第一操作,对另一条上述待加密数据进行加密的操作为第二操作,在上述第一操作和上述第二操作在下一个计算周期同时跳入上述第一计算模乘状态或者上述第二计算模乘状态的情况下,控制其中的一个操作保持原状态或者进入空状态等待一个上述计算周期。控制其中的一个操作保持原状态还是进入空状态等待一个上述计算周期,取决于停在该状态会不会造成控制信号的错误赋值,以及上一周期的结果能不能保持住。由于第一操作和上述第二操作不能同时跳入第一计算模乘状态或者上述第二计算模乘状态,所以,在第一操作和上述第二操作在下一个计算周期同时跳入第一计算模乘状态或者上述第二计算模乘状态的情况下,需要控制其中的一个操作保持原状态或者进入空状态等待一个计算周期,在第一操作完成计算后,第二操作再开始计算,防止对同一计算单元的资源的抢占。
本申请的一种实施例中,上述第一操作和上述第二操作在下一个计算周期同时跳入上述第一计算模乘状态或者上述第二计算模乘状态的当前组合状态包括:上述第一操作处于上述第一计算模乘状态,且上述第二操作处于上述第二计算模乘状态;上述第一操作处于上述指数E的扫描状态,且上述第二操作处于上述第二计算模乘状态;上述第一操作处于上述第二计算模乘状态,且上述第二操作处于上述预运算状态;上述第一操作处于上述指数E的扫描状态,且上述第二操作处于上述预运算状态;上述第一操作处于上述预运算状态,且上述第二操作处于上述预运算状态;上述第一操作处于上述指数E的扫描状态,且上述第二操作处于上述指数E的扫描状态,共六种状态,下一周期跳EXECUTE_S2的状态时当前状态只有EXECUTE_S1和EXECUTE_S2两种可能,而下一周期跳EXECUTE_S1的状态时当前状态有EXECUTE_S2,COMPUTE_MOD,E_SCAN三种可能,那么下一周期某个操作需要被停在该状态或跳入NOP(空状态)的情况有6种;两个操作的当前状态分别是EXECUTE_S1- EXECUTE_S2,E_SCAN-EXECUTE_S2,EXECUTE_S2-COMPUTE_MOD,E_SCAN- COMPUTE_MOD,COMPUTE_MOD-COMPUTE_MOD,E_SCAN-E_SCAN,其中“-”表示状态组合。当然,六种组合中第一操作和第二操作的位置可以互换。
本申请的一种实施例中,在上述第一操作处于上述第一计算模乘状态,且上述第二操作处于上述第二计算模乘状态,下一个计算周期两个操作均预跳入第二计算模乘状态的情况下,控制上述第一操作停在上述第一计算模乘状态。由于EXECUTE_S1状态是执行第一参数qi的计算,它的结果在第一运算单元赋值,因此EXECUTE_S1状态的那条操作可以被停在该状态,而不会影响到下一周期的结果。
本申请的一种实施例中,对于E_SCAN- E_SCAN,由于该状态需要对指数(E)的扫描进行计数,因此该状态的操作不能停在该状态(否则会造成计数信号的错误增加),解决方案是增加一个EXECUTE_S1-E_SCAN_NOP状态,下一周期再回到EXECUTE_S2- EXECUTE_S1状态。
本申请的一种实施例中,在上述第一操作处于上述指数E的扫描状态,且上述第二操作处于上述第二计算模乘状态,下一个计算周期两个操作均预跳入上述第一计算模乘状态的情况下,控制上述第一操作首先进入上述第一计算模乘状态,上述第二操作停在上述第二计算模乘状态。
本申请的一种实施例中,对于COMPUTE_MOD状态,不涉及计数或其他改变上一周期结果的操作,因此任何操作在遇到阻塞时,COMPUTE_MOD状态的操作可以被停在该状态。
需要说明的是,本申请中的RSA单核数据系统同样适用于对数据的解密。
实施例
本实施例涉及一种具体的RSA单核数据系统,如图2所示,该RSA单核数据系统包括控制单元、第一运算单元、第二运算单元和寄存器,第二运算单元包括pe_word0至pe_word7, pe_word0到pe_word7拼接起来的输出为一个循环Si+1的结果,对待加密的数据进行加密的具体的原理如下:
其中,X为待加密数据,E为指数,N为模数,X、E和N为输入控制单元的数据,A为最终的加密之后的输出,mont(X,R2mod(N))= X R2mod(N) R-1modN,mont表示模乘,在X为2048位时,可以将X用八个256位的数表示,即令m=8,每次模乘需要经过八次循环求得S7,即第二运算单元的输出,每次对一个2048位的数据进行加密时,至少需要经过2048次模乘。
预运算单元包括i_modinv,M1,M2,共3个运算模块,其中i_modinv用来求N’,M1用来求A的初始值,A = R mod (N),M2用来求R2mod(N)。
预运算单元的3个运算模块可并行,对于2048位的一次加密,需要花费大概2150个周期。如果只有一套预运算的运算单元,进入单核的两条加密操作就要串行地完成预运算。在操作1计算预运算的2150个周期,第一运算单元和8个pe_word都有一半的时间空闲。为了解决这个问题,复制了一份预运算单元modinv,M1,M2,让两笔操作的预运算同时进行,同时结束,之后相隔一个周期进入对指数E的扫描和Montgomery模乘。
本发明中,一次算法循环仍在两个周期内完成,但采用两条加密操作同时送入单核的方式,第一个周期求第一操作的qi,同时8个pe_word求第二操作的Si+1,第二个周期求第一操作的Si+1,同时8个pe_word求第二操作的qi。
对于一次模乘,要执行m(i=0 to m-1)次for循环和下一次模乘操作数的赋值,每次循环将8个pe_word的结果赋值给Si的寄存器,之后开启下一个循环,最后一次for循环为一次模乘的结果。运行下一次模乘之前,还要花费一个周期给下一次模乘的输入赋值,Si寄存器赋回零。对于本发明,由于qi和Si的计算拆成了两个周期完成,一次模乘需要执行(2m+1)个周期。为了方便状态的控制,增加了loop_cnt信号对循环进行计数,其中loop_cnt值为0到m-1时分别对应m次for循环,loop_cnt值为m时对应给下一次模乘的两个操作数赋值,Si赋值回零(对应算法中的S0 =0),为了简便,将loop_cnt为m的操作并入EXECUTE_S2状态。在EXECUTE_S1状态时下一周期只能跳入EXECUTE_S2状态,而EXECUTE_S2通过判断控制信号,可跳到EXECUTE_S1(loop_cnt为0到m-1),EXECUTE_S2(loop_cnt为8),E_SCAN(根据指数E的扫描结果判断下一次模乘的操作数),COMP_DONE(完成了A和1的模乘,将Montgomery域转化为普通域的结果)四个不同状态。
在上述第一操作处于上述指数E的扫描状态,且上述第二操作处于上述第二计算模乘状态,下一个计算周期两个操作均预跳入上述第一计算模乘状态的情况下,控制上述第一操作首先进入上述第一计算模乘状态,上述第二操作停在上述第二计算模乘状态。由于EXECUTE_S2跳EXECUTE_S1状态涉及到Si结果的写回,如果等到下一周期再赋值,则会错误地读取另一笔操作的结果;解决方案是增加一个flag(标识)信号,当下一状态和当前状态都是EXECUTE_S2,且当前loop_cnt不等于m-1时,把8个pe_word的结果写回Si,loop_cnt加1,且flag赋1;下一周期跳EXECUTE_S1时,如果flag为1,则不再执行写结果的操作,且flag赋回0。
应用本发明的方案,RSA单核实现了同时对两笔待加密的数据进行加密,且加快了数据处理的频率,数据的吞吐量得到了提升。
从以上的描述中,可以看出,本申请上述的实施例实现了如下技术效果:
本申请的RSA单核数据系统,将每次循环在两个计算周期内完成,对于每一次循环,第一计算周期内第一运算单元计算其中的一条待加密数据的第一参数,同时,第二运算单元计算另一条待加密的数据的第二参数,第二计算周期内第一运算单元计算另一条待加密的数据的第一参数,同时,第二运算单元计算一条待加密数据的第二参数,使得在每个计算周期内第一运算单元和第二运算单元可以同时进行运算,由于寄存器将计算得到的第一参数和第二参数进行了存储,使得下一次计算第一参数时可以从寄存器中获取上一次计算得到的第二参数,同理,使得下一次计算第二参数时可以从寄存器中获取上一次计算得到的第一参数,保证了第一运算单元和第二运算单元的同时计算,节约了资源,且可以同时加密多条待加密的数据,且加快了数据处理的频率,数据的吞吐量得到了提升。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。