发明名称 基于余数系统的RSA密码处理方法及协处理器
摘要 本发明涉及信息技术安全及微处理器设计。为能够加速RSA模乘运算速度,提高RSA加解密性能,本发明采取的技术方案是,基于余数系统的RSA密码处理方法,采用RSA算法进行加解密运算,采用L-R二进制扫描模幂算法进行RSA算法的大数模幂运算,所述改进的Montgomery算法具体为:将1024bit的大数表示成余数系统下的数,即两组33个32bit的小数,以及1个冗余基下表示的32bit的数,表示过程即求模过程,分解成的32bit小数分别独立参与32bit的模乘、模乘累加、模加运算,并且各个32bit数据之间不存在依赖,进行并行执行运算。本发明主要应用于信息技术安全及微处理器设计。
申请公布号 CN102231102B 申请公布日期 2013.08.07
申请号 CN201110161204.X 申请日期 2011.06.16
申请人 天津大学 发明人 郭炜;白松辉;苏蛟;刘亚灵;魏继增
分类号 G06F7/72(2006.01)I 主分类号 G06F7/72(2006.01)I
代理机构 天津市北洋有限责任专利代理事务所 12201 代理人 刘国威
主权项 1.一种基于余数系统的RSA密码协处理器,其特征是,基于TTA架构来实现1024bit的RSA加解密算法,TTA架构是把运算的任务分配到各个功能单元,每个功能单元都由三类寄存器组成,即Operand寄存器、Trigger寄存器和Result寄存器,其中Operand寄存器作为运算操作数,Trigger寄存器也是运算的操作数,但给Trigger寄存器传输数据时,该功能单元的运算被触发,经过约定的时钟周期后,运算得到最终结果并存于Result寄存器;整体结构为:采用8条总线来进行数据之间的传输,需要进行数据通讯的功能单元之间通过总线进行连接,功能单元运算出来的结果放在功能单元的结果寄存器,通过总线传输到需要的功能单元,即需要进行数据通讯的功能单元之间通过总线进行相互连接;功能单元包括:处理器中包括2个存储器访问功能单元(LDST)、3个查表单元(LUT)、1个寄存器组RU、1个跳转功能单元JMP、1个算术逻辑运算单元ALU和8个模乘累加功能单元(MMAC),前述处理器各组件都直接连接到总线上;存取数据单元是唯一能与数据存储器Data Memory进行交互的功能单元,存储器访问功能单元访问数据存储器Data Memory时,支持两种寻址方式:直接寻址和偏移寻址,完成直接寻址取数、直接寻址存数、偏移寻址取数和偏移寻址存数;查表单元是与ROM进行交互的功能单元;查表单元完成以4Bank形式的查表,即同一周期从ROM里Load4个在同一地址上的32bit预计算数据,以及以Burst形式加载32个连续地址存放的预计算数据;寄存器组用来暂存操作数或者运算结果,跳转功能单元用来支持绝对跳转、条件跳转和循环操作;除总线外,功能单元之间还设计了额外的数据通路:其中第二个存储器访问功能单元2和前四个模乘累加功能单元之间、第3个查表单元和后四个模乘累加功能单元之间存在着直接的数据通路;处理器中的模乘累加功能单元是进行模乘运算的核心计算功能单元,主要完成模乘、模加、模乘累加操作;算术逻辑运算单元用来实现包括模加、模减和32bit数左移一位的逻辑功能;模乘累加功能单元有两个Operand寄存器、一个Trigger寄存器和一个Result寄存器,两个Operand寄存器分别为乘数寄存器和模数寄存器,功能单元延时为3,支持三种触发方式mul、mac和clr,能够完成模乘、模乘累加和清零操作;本模乘累加功能单元分三级流水来完成模乘累加功能:第一级流水完成两个32bit的数相乘;第二级流水将第一级流水产生的64bit乘法结果进行模(2<sup>32</sup>-c<sub>i</sub>)的运算,得到(a*b)mod(2<sup>32</sup>-c<sub>i</sub>)的结果,其中a、b为任意32bit数据;第三级流水为完成累加功能,即将本次模乘结果与上一次模乘结果进行累加;其中在第一级流水中,硬件上由一个32bit×32bit的乘法器组成,并将两个32bit的乘数相乘结果存入第一级寄存器中,模数则直接寄存一级;其中在第二级流水中,假设P为第一级流水产生的64bit乘法结果,m<sub>i</sub>为模数,即2<sup>32</sup>-c<sub>i</sub>,其中c<sub>i</sub>为不大于2<sup>14</sup>-1的数,p<sub>1</sub>表示P的高32bit,p<sub>0</sub>表示P的低32bit,则:<img file="FDA00003103568700021.GIF" wi="823" he="77" /><img file="FDA00003103568700022.GIF" wi="749" he="80" /><img file="FDA00003103568700023.GIF" wi="1100" he="79" /><img file="FDA00003103568700024.GIF" wi="533" he="65" />得到的p<sub>1</sub>c<sub>i</sub>+p<sub>0</sub>中,p<sub>1</sub>不大于32bit,c<sub>i</sub>不大于14bit,p<sub>0</sub>为32bit,所以p<sub>1</sub>c<sub>i</sub>+p<sub>0</sub>不大于47bit;硬件上由一个14bit×32bit的乘法器和一个48bit的加法器组成,同理,令p′=p<sub>1</sub>c<sub>i</sub>+p<sub>0</sub>再执行一次这样的操作得到(p'<sub>1</sub>c<sub>i</sub>+p'<sub>0</sub>)mod(2<sup>32</sup>-c<sub>i</sub>),此时得到的p′<sub>1</sub>不大于14bit,c<sub>i</sub>也不大于14bit,p′<sub>0</sub>不大于32bit,相加后的p′不大于33bit;硬件上由一个14bit×14bit的乘法器和一个33bit加法器组成比较p′=p<sub>1</sub>c<sub>i</sub>+p<sub>0</sub>与2<sup>32</sup>-c<sub>i</sub>的大小,如果大于2<sup>32</sup>-c<sub>i</sub>则进行一次相减操作,此时得到的结果便是(a*b)mod(2<sup>32</sup>-c<sub>i</sub>);硬件上由一个33bit加法器和一个两路选择器组成;并将计算结果寄存到第二级寄存器中,模数则继续寄存一级;在第三级流水中,主要完成(a'+b')mod(2<sup>32</sup>-c<sub>i</sub>),其中a'为模乘后得到的结果,b'为上次累加的结果;模乘累加功能单元的第三级流水中第一个加法器完成c'=a'+b',第二个加法器主要完成d=c'+c<sub>i</sub>,后面的两个多路选择器为,如果d大于2<sup>32</sup>,则执行一次相减操作,若d小于2<sup>32</sup>,则d即为所得结果;并将计算的最终结果存入第三级寄存器中;算术逻辑运算单元包括两个Operand寄存器、一个Trigger寄存器和一个Result寄存器,trigger type包括3个信号,算术逻辑运算单元在一个时钟周期内只有一个trigger type信号有效,触发后一个周期延时后得到结果,结果放在Result寄存器里面;在算术逻辑运算单元的内部结构中,有模加和模减两种运算,主要完成:(a+b)mod(2<sup>32</sup>-c<sub>i</sub>)或(a-b)mod(2<sup>32</sup>-c<sub>i</sub>),其中alu1_o_mod为模数操作数寄存器,这里模数都是2<sup>32</sup>-c<sub>i</sub>的形式,送给alu1_o_mod的数是c<sub>i</sub>,而不是2<sup>32</sup>-c<sub>i</sub>,算术逻辑运算单元在各数据到达后先根据alu_type来选择是完成哪种操作,如果是alu_type是001,则完成模加运算,010完成模减运算,100完成对alu_t_dat的左移位操作;算术逻辑运算单元首先对alu1_o_subtractor进行按位取反并在最低位后补1操作,和直接在最低位的后一位补0操作,对alu_t_dat进行最低位的后一位补1操作,这样硬件实现上就可以利用一个多路选择器进行选择原来的数据还是数据的补码,用一个33bit的加法器完成加法或减法的操作;同理,在得到加或减的结果后,做模时采用同样的方法,只需一个多路选择器和一个加法器即可完成;最终由trigger type信号来路选最终的计算结果,并写到结果寄存器中。
地址 300072 天津市南开区卫津路92号