1、专利申请报告姓名:郭政明 学号:0849390086一、发明名称 一种适用于 FPGA 实现的大整数乘法二、现有技术当前的密码体制一般可划分为两种类型,即对称密码体制和公钥密码体制。对称密钥体制需要通信双方 A 和 B 共享同一密钥 K,并且要保证 A 和 B在协商密钥的时候,信道是保密且保真的。这就导致了它的密钥分发的问题和密钥的管理问题,除此之外由于两个或多个实体共享密钥,所以对称密钥体制不能实现用于认证和不可否认服务的数字签名。与对称密钥体制不同,公钥密码体制仅要求密钥的交换是保真的,并不要求其是保密的。每个实体选择一个密钥对(公钥,私钥) ,其中公钥对外是公开的,私钥自己保密,这种密钥
2、对需具备一个特点:仅由公钥不能计算出私钥。由于每一个实体都具有唯一的私钥,因此可以提供数据源和数据完整性的认证以及不可否认性服务。这样,公钥密码圆满地解决了上述对称密码面临的三个问题。在公钥加密机制中,虽然 RSA 是目前主流的加密机制,但是 RSA 目前却面临着越来越严重的来自安全方面的挑战。第六届国际密码学会议对应用于公钥密码系统的加密算法推荐了两种: RSA 算法和 ECC 算法。RSA 算法的特点之一是数学原理简单,在工程应用中比较易于实现,但它的单位安全强度相对较低。椭圆曲线密码算法建立在深奥和复杂的数学理论之上,它的单位安全强度相对较高。这两种算法安全强度比较如附图 1 所示。需要
3、指出的是,由于 ECC 的复杂度较高,它的运算通常比较慢。需要找到一种用硬件来实现 ECC 密码体制的方案去提高运算速度。ECC 密码体制主要是由有限域层、椭圆曲线层、椭圆曲线密码协议层和一些特殊功能算法组成的见附图 2,其中有限域是基础,因此首先要找到一种适合硬件来实现的有限域。有限域包括二进制域和素数域。二进制域里的元素都是用 0 和 1 表示,而构成二进制域有一种方法是采用正规基表示法,在正规基表示法下域中元素的加法、减法以及平方开方运算分别对应异或和移位操作,而这在硬件中如FPGA 是非常容易实现的。但是即便我们作此选择,在椭圆曲线密码协议中,除了二进制域正规基下的运算之外,还有一部分
4、是素数域的运算,主要是ECDSA 数字签名算法里的一些步骤。下面是 ECDSA 具体的算法。 ECDSA 签名的生成:输入:参数组 ,私钥 ,消息 。(,)DqFRSabPnhdm输出:签名 。,)rs(1) 选择 。1kn(2) 计算 ,并将 转换为整数 。(,Pxy1x1x(3) 计算 。若 ,则跳至步骤(1) 。1modr0r(4) 计算 。)eH(5) 计算 。若 ,则跳至步骤(1) 。(skns(6) 返回 。,rECDSA 签名的验证:输入:参数组 ,公钥 ,消息 ,签名 。(,)DqFRSabPhQm(,)rs输出:判断签名是否合法。(1) 检验 和 是否区间 内的整数。若任何一
5、个检验失败,则rs1,n返回(“拒绝该签名 ”) 。(2) 计算 。()eHm(3) 计算 。1odws(4) 计算 和 。un2odurwn(5) 计算 。1XPQ(6) 若 ,则返回(“拒绝该签名”) 。(7) 将 的横坐标 转换为整数 ;计算 。1x1x1modvxn(8) 若 ,则返回( “接收该签名”) ;否则,返回( “拒绝该签名”) 。vrECDSA 签名生成算法中的第五步和 ECDSA 签名验证算中的第四步都需要用到素数域上的乘法。根据附图 1 所示,为了满足密码算法的安全性,密钥等参数的位宽至少要在 160bit 以上,而 160bit 位宽以上的素域乘法就是一些大整数的乘法
6、运算,在 FPGA 里如果不采用特殊算法直接做 160bit 位宽以上的大整数乘法,会造成时钟主频过低,综合出的频率最高不会超过 50MHZ,进而会影响整个 ECDSA 签名的性能。如果不能找到一种好的 FPGA 实现方法来提高大整数的乘法运算效率,那么将无法体现出 ECC 在二进制域正规基表示下的硬件实现优势。三、发明内容1发明目的鉴于上述存在的问题,本发明的目的是提供一种适用于 FPGA 实现的大整数乘法算法,这种算法在 FPGA 中实现的速度很快,可以解决上述问题。2技术解决方案本算法将大整数 A 和 B 间的乘法分成五个步骤进行,分别是A:做大整数分解运算,将乘数 A 和被乘数 B 分
7、解成位长度相等且等于的小整数 和 ,为了方便说明不妨设 。l1321,.,n1321,.,m nmB:排列乘法矩阵,将被分解的小整数 和321.,nA之间按乘法矩阵的规则排列组合。 1321,.,mC:做小整数乘法运算,将矩阵中被组合在一起的小整数 做乘积 ,,jkBjkA其中 。,jnkD:做小整数加法运算,将矩阵相邻列在位宽上重合的部分做带进位相加,得到交错列和 。jLE:做位拼接运算,将所有的交错列和做一次位拼接运算 ,直接得到jL大整数 A 和 B 的乘积。从算法步骤中可以看出,整个大整数 A 和 B 的乘法运算主要被分解成长度为 的小数乘法运算,和长度为 的小整数加法运算以及位拼接运
8、算,这三种运l l算在 FPGA 中的运算速度是非常快的,因此通过合理的设计,由这三种运算组成的大整数乘法可以解决之前所述的问题。3技术效果从算法步骤中可以看出,整个大整数 A 和 B 的乘法运算主要被分解成长度为 的小数乘法运算,和长度为 的小整数加法运算以及位拼接运算,这三种运l l算在 FPGA 中的运算速度是非常快的,因此通过合理的设计,由这三种运算组成的大整数乘法可以解决之前所述的问题。四、附图及附图的简单说明图 1 为公钥体制中 RSA 和 ECC 安全密钥长度的比较图。图 2 为椭圆曲线密码体制的组成结构图。图 3 为本发明中大整数 A 和 B 的分解流程图。图 4 为本发明中乘
9、法矩阵的结构示意图。图 5 为本发明中交错列求和过程的示意图。五、具体实施方式假设我们需要在 FPGA 中做大整数 A 和 B 的乘法运算,那么根据本文所发明的算法,需要先将大整数 A 和 B 做分解运算见附图 3。一般来说,大整数的位数都在百位级或以上,对于一款性能尚可的 FPGA 来言,它内部集成的 DSP模块里都带有众多固定位宽的乘法单元,但是位宽较小如 9bit*9bit。理论上,大整数 A 和 B 的分解位宽 越小,整个乘法运算速度将越快,但同时占用的资l源也会比较多,相反大整数 A 和 B 的分解位宽 越大,整个乘法的运算速度将l会降低,但用的资源也相对较少。原则上,为了节省 FP
10、GA 内部的 DSP 乘法单元,位宽 的选择应该为 DSP 乘法单元位宽的整数倍,且位宽 最大值最好不要l l超过 50bit,否则,时序电路的时钟频率会很低,实验中甚至无法达到100MHZ。确定分解位宽 之后,根据大整数 A 和 B 的实际位宽长度进行高位l补零直至成为位宽 的整数倍。至此根据本发明中附图 3 所示,将输入的位宽为L 的大整数 A 和位宽为 S 的大整数 B 分解成位长度相等且等于 的小整数l和 并暂存在 FPGA 内部的寄存器中,不妨设1321,.,n1321,.,mB。接着,被分解的小整数 和 需按照附图 41321,.,nA1321,.,mB所示的排列规则排列出一乘法矩
11、阵。从图上可以看出,乘法矩阵里的元素都是由小整数 和 的乘积项 组成的,1321,.,nA1321,.,mBjkA,乘积项 的位宽是 2 。实际情况中,对于具体的大整数,jkjklA 和 B, m 和 n 之间的数值关系是固定的,而乘法矩阵每一列的元素也会随之确定,为了方便说明附图 4 中假设 m=n-2,从低位到高位,列按照A,B,C,DK 的顺序排列,且矩阵的总列数为 m+n-1,附图 4 中,K=m+n-1。在确定了乘法矩阵和矩阵中每列的元素后,便可把先前存储在寄存器中的和 依次做 * 位宽的乘法,求得矩阵列中的1321,.,nA1321,.,mBBl元素 。可根据资源多少的实际情况选择
12、一次性完成所有的 运算,或是jk jkAB按周期每次完成部分 运算。并将求得的 运算结果存入 FPGA 内的寄存jkAjkA器中。再下一步是做交错列的加法运算。值得提出的是,本发明中的附图 4 并不能真实的反应矩阵里各个列之间的关系。对于附图 4 中相邻两列的数据,如果将其值映射到大整数 A 和 B 的最终乘法结果上来,会发现其实列与列之间并非真正意义的相邻,或是说相切,而是相互交错。附图 5 给出了列与列之间真实的情况:A 列里元素的低 位数据相对其它列独立,但是 A 列的高 位数据却和l lB 列的低 位数据重叠,同样,B 列的高 位又与 C 列的低 位重叠最后一l ll列 K 列的低 位
13、和 J 列的高 位重叠,K 列的高 位相对其它列独立。除了第一l列的低 位和最后一列的高 位是与其它列相互独立之外,其余列间都是重叠交l错的。附图 4 中,总列数 K=m+n-1,其中交错的列数为(m+n-1)-1=m+n-2 个,且每个交错列的位宽都是 ,因此交错列的总位宽为(m+n-2)* ,如果把 Al l列的低 位和 K 列的高 位算人其中,那么交错列的总位宽为(m+n)* ,这刚ll l好对应着大整数 A 和 B 的乘法结果的总位宽(m+n)* 。本发明正式基于这一l点,并结合 verilog 硬件编程语言里特殊的位拼接运算发明了这种适用于 FPGA的大整数乘法算法。交错列和的具体算
14、法遵循以下步骤:先将寄存器中第一列 A 列元素的低 位做l加法,得到结果的低 位就被看做交错列和 ,高位被看做是进位 ,事实上,l ALacA 列只有一个 2 位宽长度的元素 ,因此 的低 就是交错列和 ,而进1B1lAL位=0;再将寄存器中 A 列元素的高 位和 B 列元素的低 位以及进位 做加法ac llac运算,得到结果的低 位便作为交错列和 ,结果的高位看成进位 ,以此类l ALb推,每次加法运算后得到一个交错列和和一个进位,直到 K 列的高 位和进位l做加法直接得到 位的交错列和 ,理论上不会产生新的进位。可以看出,jkclK计算交错列和的步骤主要是由多个 位数据间的加法组成的。计算
15、完所有的交错l列和,并将其保存在寄存器中。如果之前计算矩阵列中的元素 时,采用的jkAB是按周期每次完成部分 运算,那么可以在每次求得相邻两列所有的元素后jkAB便做一次相应的交错列和加法运算。最后将所有的交错列和 做位拼接运算,直接得到 m+n 位结果jL, 也就是大整数 A 和 B 的乘法结果。这种位拼接运算在,.,KJIABLFPGA 中是非常易于实现的,同时也是 FPGA 运算的特点之一。综上,在 FPGA 中我们其实只做了三种简单的运算: 位宽的乘法运算,l位的加法运算和一个位拼接运算。在运算量方面, 位宽的乘法运算一共有lm*n 个, 位的加法运算一共有 2mn-3 个。在 FPG
16、A 实验中,将位宽长度近 200l的两个大整数做乘法,如果采用将两个大整数直接相乘的办法去实现,则乘法电路时钟频率最高只能达到 30MHZ,而采用本文提出的算法可根据 的大小将l频率提高到 100MHZ200MHZ。解决了文中所述的 FPGA 中大整数乘法运算效率低的问题。说明书附图图 1椭圆曲线协议层( 签名 , 加密 , 密钥建立 )椭圆曲线层( 点加 , 倍点 , 点乘 )有限域运算层( 加减 , 乘法 , 求逆 , . . . )H A S H 及 K D F 对称加密 公钥确认 , . . .随机数生成图 28图 39图 410图 511专利申请老师:tel:88202912 13359253762王品华