一种基于PCI-E接口的全算法密码卡及其加密方法
技术领域
本发明涉及信息安全技术领域,具体地说,是涉及一种基于PCI-E接口的全算法密码卡及其的加密方法。
背景技术
PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001 年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量 (QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-E”。它的主要优势就是数据传输速率高,目前的v2.x版本x16通道可达到8GB/s,而且还有相当大的发展潜力。
随着国家对信息安全的重视,当前很多部门和企业要求使用国产算法对其信息进行保护,因此对国产密码产品提出了更高的要求。为满足服务器、网关等设备对密码算法速度与安全性的需求,现在许多厂商研制了基于PCI接口的密码卡。PCI总线使用并行总线结构,在同一条总线上所有外部设备共享总线带宽,采用了并行互联,这大大影响了系统整体的性能表现,同时并行信号由于相互干扰也严重制约了日后速度的进一步提升。随着用户规模大幅增长,发现 PCI密码卡的瓶颈导致网关吞吐量无法提升,无法满足高性能网络应用的需要,在此背景下需开发出基于一款基于PCI-E总线接口支持全算法:SM1、SM2、SM3、SM4的密码卡势在必行。
目前拥有国家密码管理局产品批号密码卡SJK0814和SJK1220支持的算法只有SM1、SM2、SM3,不支持SM4算法,不再支持SM2、SM3、SM4密码算法的商用密码产品目录,原密码卡性能较低,且现有密码卡使用DSP、各算法芯片、PEX8311 芯片的密码卡硬件电路众多,增加了整个电路和电源模块的设计难度,并且该类密码卡的功耗略大于高速密码卡。硬件电路模块的增多意味着密码卡控制系统的繁杂,增加了编写与维护的工作难度此前的密码卡设计也没有加入对称密钥加密SM4算法。已经不能满足市场和行业需求。因此设计出支持全算法的密码卡,并且性能上也会有较大的提升,以满足市场需要,同时为下一步支持全算法的服务器密码机、金融密码机申请国家密码管理局产品资质做前提和保障。
发明内容
本发明的目的在于提供一种基于PCI-E接口的全算法密码卡及其的加密方法,本发明实现了高性能全算法的密码卡,减少硬件电路的复杂度和能耗,提高了密钥运算速度。
为实现上述目的,本发明采用的技术方案如下:
一种基于PCI-E接口的全算法密码卡,包括:密码算法模块、FLASH存储器、 PCI-E总线接口、随机数发生器,还包括:具有NIOS软核处理器的FPGA主控芯片,所述FPGA主控芯片其内部集成有PCI-E IP核和算法状态机,其中,
所述密码算法模块包括对称密钥加密SM4算法芯片、对称密钥加密SM1算法芯片和非对称密钥加密SM2算法芯片,所述算法状态机控制所述密码算法模块,用于调用密码算法模块进行密码运算;
所述PCI-E总线接口通过所述PCI-E IP核连接于所述FPGA主控芯片,用于实现数据交互;
所述NIOS软核处理器为FPGA主控芯片的主处理器,用于控制所述FPGA主控芯片进行数据和命令的读写操作;
所述随机数发生器由所述NIOS软核处理器控制,并将产生的随机数序列存储于与所述FPGA主控芯片连接的所述FLASH存储器中。
进一步地,所述对称密钥加密SM4算法芯片其分组长度、密钥长度分别为 128位,且其加密算法与密钥扩展算法都采用32轮非线性迭代结构。
再进一步地,所述密码算法模块还包括SM1/SM2/SM3专用密码算法芯片及RSA国际密码算法芯片,并由所述算法状态机控制各算法芯片进行密码运算。
再进一步地,所述FPGA主控芯片内设有双端口RAM,用于储存所述PCI-E 总线接口接收和发送的数据,并于所述NIOS软核处理器进行数据读取。
再进一步地,所述随机数发生器具有两片WNG9物理噪声源芯片,由所述NIOS 软核处理器控制,进而产生随机数序列。
再进一步地,所述FPGA主控芯片连接有EPCS16配置芯片,所述EPCS16配置芯片用于存储配置程序,每次上电后所述FPGA主控芯片需要加载所述EPCS16 配置芯片里的配置程序,从而初始化密码卡。
再进一步地,所述FPGA主控芯片内集成有寄存器,用于暂存指令、数据和地址。
再进一步地,所述FPGA主控芯片内设有DMA控制器,所述DMA控制器通过所述PCI-E总线接口处理数据的传送,完成一批数据传输之后,向FPGA主控芯片发出一次中断请求,并请示下一步的操作要求。
基于上述结构,本发明还公开了一种基于PCI-E接口的全算法密码卡的加密方法,包括如下步骤:
(1)FPGA主控芯片从EPCS16配置芯片里加载程序,进而等待外部服务器发送请求指令;
(2)外部服务器准备好待加密码数据,通过PCI-E总线接口将待加密数据存储至双端口RAM中,并向FPGA主控芯片发送中断信号;
(3)FPGA主控芯片接收到中断信号后清除中断,向NIOS软核处理器发送控制密码算法模块读取双口RAM的数据进行加密的命令;
(4)密码算法模块对数据加密完成后向NIOS软核处理器发送完成指令, NIOS软核处理器将加密好的数据送回到双端口RAM内存储,同时向FPGA主控芯片发送完成命令;
(5)FPGA主控芯片向外部服务器发送中断信号;
(6)数据由双端口RAM通过PCI-E总线接口读回到外部服务器的内存,至此完成一次加密过程。
与现有技术相比,本发明具有以下有益效果:
(1)本发明的密码卡采用国家密码管理局批准使用的SM1分组密码算法、 SM2椭圆曲线公钥密码算法、SM3密码杂凑算法,都是具有很高安全强度的密码算法,因此数据很难被篡改,攻击者很难直接对算法进行破解,提高了算法的安全性,从而可以满足信息安全领域对数据进行安全防护的要求,并遵循我国行业标准。
(2)本发明的密码卡通过密钥保护,将密钥加密后存放在密钥存储器中,可以防止非法读取。当管理员/操作员成功登录时,FPGA主控芯片从密钥存储器中读出加密的密钥,用密钥保护密钥解密后放入FPGA主控芯片的双端口RAM中使用,FPGA主控芯片内的双端口RAM是易失性存储器,掉电后密钥数据消失,密码卡中的密钥需要管理权限满足后才可以生成、修改和删除,防止非法使用者对设备内关键密钥的非法操作,除公钥之外的密钥不能以明文的形式输出到密码卡外,保证了密钥不会被泄露,提高了密钥保密技术。
(3)本发明的密码卡增加了对称密钥加密SM4算法,其分组长度、密钥长度均为128位,加密算法与密钥扩展算法都采用32轮非线性迭代结构。用于实现数据的加密/解密运算,以保证数据和信息的机密性,这种算法可以用于网络数据的加密保护,以及存储数据或文件的加密保护,同时还能够抵抗针对分组密码算法的各种攻击方法,包括穷举搜索攻击、差分攻击、线性攻击等,在实际应用中能够抵抗这些攻击手段。
(4)本发明的FPGA主控芯片采用Nios软核,减少了整个电路和电源模块的设计难度,降低了编写与维护的工作难度,该密码卡具有密码运算速度快、效率高、功耗小的优点,因而具有很好的推广价值.
(5)本发明的密码卡抛弃了原来的PEX8311转换芯片,采用PCIE IP核配置方式实现,提高了密钥传输的安全性与快捷性。
(6)本发明的密码卡支持SM1、SM2、SM3和SM4算法的功能和性能可以满足银行、证券等行业的应用需求,支持Linux多个常用操作系统,可以很方便的部署于各种应用环境中,具有较强的安全管理机制与创新性的备份恢复机制:通过管理员和操作员的分级权限管理,使得用户在需要时,可以获得最大的安全保证;在备份恢复过程中,采用(3,5)门限算法,既提高了安全性,也增强了易用性。
附图说明
图1为本发明的整体结构示意图。
图2为发明的工作流程图。
图3为本发明实施例中加密方法的执行流程图。
具体实施方式
下面结合附图说明和实施例对本发明作进一步说明,本发明的方式包括但不仅限于以下实施例。
实施例
如图1-图2所示,一种基于PCI-E接口的全算法密码卡,包括:密码算法模块、FLASH存储器、PCI-E总线接口、随机数发生器,还包括:具有NIOS软核处理器的FPGA主控芯片,所述FPGA主控芯片其内部集成有PCI-E IP核和算法状态机,其中,
所述密码算法模块包括对称密钥加密SM4算法芯片、对称密钥加密SM1算法芯片和非对称密钥加密SM2算法芯片,所述算法状态机控制所述密码算法模块,用于调用密码算法模块进行密码运算;
所述PCI-E总线接口通过所述PCI-E IP核连接于所述FPGA主控芯片,用于实现数据交互;
所述NIOS软核处理器为FPGA主控芯片的主处理器,用于控制所述FPGA主控芯片进行数据和命令的读写操作;
所述随机数发生器由所述NIOS软核处理器控制,并将产生的随机数序列存储于与所述FPGA主控芯片连接的所述FLASH存储器中。
为了保证数据和信息的机密性,所述对称密钥加密SM4算法芯片其分组长度、密钥长度分别为128位,且其加密算法与密钥扩展算法都采用32轮非线性迭代结构。
为了实现多种算法,所述密码算法模块还包括SM1/SM2/SM3专用密码算法芯片及RSA国际密码算法芯片,并由所述算法状态机控制各算法芯片进行密码运算。
为了保证密钥的安全性,实现掉电后密钥数据消失,所述FPGA主控芯片内设有双端口RAM,用于储存所述PCI-E总线接口接收和发送的数据,并于所述 NIOS软核处理器进行数据读取。
为了提高随机密钥的质量,所述随机数发生器具有两片WNG9物理噪声源芯片,并由所述NIOS软核处理器控制,进而产生随机数序列。
所述FPGA主控芯片连接有EPCS16配置芯片,所述EPCS16配置芯片用于存储配置程序,每次上电后所述FPGA主控芯片需要加载所述EPCS16配置芯片里的配置程序,从而初始化密码卡。
所述FPGA主控芯片内集成有寄存器,用于暂存指令、数据和地址。
所述FPGA主控芯片内设有DMA控制器,所述DMA控制器通过所述PCI-E总线接口处理数据的传送,完成一批数据传输之后,向FPGA主控芯片发出一次中断请求,并请示下一步的操作要求。
一种基于PCI-E接口的全算法密码卡的加密方法,包括如下步骤:
(1)FPGA主控芯片从EPCS16配置芯片里加载程序,进而等待外部服务器发送请求指令;
(2)外部服务器准备好待加密码数据,通过PCI-E总线接口将待加密数据存储至双端口RAM中,并向FPGA主控芯片发送中断信号;
(3)FPGA主控芯片接收到中断信号后清除中断,向NIOS软核处理器发送控制密码算法模块读取双口RAM的数据进行加密的命令;
(4)密码算法模块对数据加密完成后向NIOS软核处理器发送完成指令,NIOS软核处理器将加密好的数据送回到双端口RAM内存储,同时向FPGA主控芯片发送完成命令;
(5)FPGA主控芯片向外部服务器发送中断信号;
(6)数据由双端口RAM通过PCI-E总线接口读回到外部服务器的内存,至此完成一次加密过程。
本发明的工作原理:如图3所示,首先接通电源,密码卡进行上电自复位后,FPGA主控芯片从EPCS配置芯片里加载卡内程序,初始化密码卡的硬件参数,等待外部服务器的指令,密码卡处于等待状态,外部服务器准备好待加密数据,设置FPGA主控芯片的控制状态寄存器(CSR),外部服务器通过PCI-E总线接口把待加密的明文、密钥等数据由外部服务器的内存传入到FPGA主控芯片的双端口RAM中,进行存储,存储完成,则向现场可编程门阵列FPGA芯片发送中断信号,若存储未完成,则PCI-E总线接口继续把待加密明文、密钥等数据传入双端口RAM中存储,直到存储完成,FPGA主控芯片接收到中断信号后清除中断,向NIOS软核处理器发送命令,NIOS软核处理器接收到命令后控制密码算法模块读取双端口RAM的数据进行加密,进而识别算法类型:SM1、SM2、SM3、SM4国产密码算法或RSA国际密码算法,从而进行加密处理,若未完成加密处理,则, NIOS软核处理器继续调用密码算法模块,直至密码算法模块完成加密处理。NIOS 软核处理器接收到密码算法模块对数据加密完成的指令后,进而控制FPGA主控芯片接口,将加密好的数据送回到双端口RAM内存储,同时NIOS软核处理器向 FPGA主控芯片发送完成命令,进而向外部服务器发送中断信号,外部服务器接收到中断信号后,数据由双端口RAM通过PCI-E总线接口读回到外部服务器的内存,外部服务器读取数据若未结束,则继续给外部服务器发送中断信号后,直至读取数据结束,至此完成一次加密过程。
本实施例中,分组密码就是将明文数据按固定长度进行分组,然后在同一密钥控制下逐组进行加密,从而将各个明文分组变换成一个等长的密文分组的密码。其中二进制明文分组的长度称为该分组密码的分组规模。
例如:在SM4的源代码中存在如下几个函数:
void sm4_setkey_enc(sm4_context*ctx,unsigned char key[16])
void sm4_setkey_dec(sm4_context*ctx,unsigned char key[16])
void sm4_crypt_ecb(sm4_context*ctx,int mode,int length,unsigned char*input,unsigned char*output)
void sm4_crypt_cbc(sm4_context*ctx,int mode,int length,unsigned chariv[16],unsigned char*input,unsigned char*output)
static void sm4_setkey(unsigned long SK[32],unsigned char key[16]) 还有一个非常重要的结构体:sm4_context
typedef struct
{
int mode;/!<encrypt/decrypt/
unsigned long sk[32];/!<SM4subkeys/
}
sm4_context;
先说结构体:
sm4_context结构体中的Mode控制是加密还是解密,sk则表示子密钥,也称作轮密钥。第一个函数:void sm4_setkey_enc(sm4_context*ctx,unsigned char key[16]),这个函数是用来设置加密密钥的,一个参数分别为sm4_context *ctx和一个key。其内部会调用static void sm4_setkey(unsigned long SK[32], unsigned char key[16])函数,这个函数是用来设置密钥的,这个函数内部会对当前传入的主密钥进行32轮的迭代,每次迭代的轮密钥都被存放到ctx结构中的sk数组中。
void sm4_setkey_dec(sm4_context*ctx,unsigned char key[16])函数就是解密函数,过程为上述过程的逆序过程。第二个函数:void sm4_crypt_ecb(sm4_context*ctx,int mode,int length,unsigned char。
这个函数的作用是使用ecb模式(ECB(Electronic Codebook,电码本) 模式是分组密码的一种最基本的工作模式。同样,sm4_crypt_cbc函数则是使用的CBC模式,也就是分组链接模式)来对内容进行加密,内部也是一个循环,根据length的长度来进行循环,每次循环都调用sm4_one_round进行加密或者解密,到底是加密还是解密,主要是根据第二个参数Mode来进行决定。
以上就是整个SM4算法的函数简介,运用这些函数接口,我们不需要知道内部的具体实现,就可以使用sm4加密算法来对我们的数据进行加解密,十分的方便。
再如:RSA算法既可用于加密,又可用于数字签名,已得到广泛采用,并被许多标准化组织(如ISO、ITU、IETF和SWIFT等)接纳。目前许多国家标准仍采用RSA算法或它的变型。RSA算法的实现如下:
(1)实现者寻找出两个大素数p和q;
(2)实现者计算出n=pq和φ(n)=(p-1)(q-1);
(3)实现者选择一个随机数e(0<e<></e<>;
(4)实现者使用辗转相除法计算d=e-1(modφ(n));
(5)实现者在目录中公开n和e作为公钥。
密码分析者攻击RSA体制的关键点在于如何分解n。若分解成功使n=pq,则可以算出φ(n)=(p-1)(q-1),然后由公开的e,解出秘密的d。所以说RSA算法的安全性基于分解大整数的困难性。
再如:SM2算法由国家密码管理局于2010年12月17日发布,全称为椭圆曲线算法。椭圆曲线并不是椭圆,之所以称为椭圆曲线是因为它们是用三次方程来表示的,并且该方程与计算椭圆周长的方程相似。一般而言,椭圆曲线的三次方程形为:y2+axy+by=x3+cx2+dx+e[其中a,b,c,d和e是满足某些条件的实数,因为方程中的指数最高是3,所以我们称之为三次方程,或者说方程的次数为3]
SM2算法使用的方程为:y2=x3+ax+b
SM2算法实现如下:
(1)选择Ep(a,b)的元素G,使得G的阶n是一个大素数
(2)G的阶是指满足nG=O的最小n值
(3)秘密选择整数k,计算B=kG,然后公开(p,a,b,G,B),B为公钥,保密 k,k为私钥
加密M:先把消息M变换成为Ep(a,b)中一个点Pm,然后,选择随机数r,计算密文Cm={rG,Pm+rP},如果r使得rG或者rP为O,则要重新选择r。
解密Cm:(Pm+rP)-k(rG)=Pm+rkG-krG=Pm
SM2算法的安全性基于一个数学难题:离散对数问题ECDLP实现,即考虑等式Q=KP,其中Q、P属于Ep(a,b),K<p,则:1)p=""已知q和p,计算k,是很困难的。
本发明通过以上设计方案,提高了密码算法的安全性,从而可以满足信息安全领域对数据进行安全防护的要求,并且能够抵抗针对分组密码算法的各种攻击方法,同时减少硬件电路的复杂度和能耗,提高了密钥运算速度,使用户的密钥得到最安全的保护。
上述实施例仅为本发明的优选实施方式之一,不应当用于限制本发明的保护范围,但凡在本发明的主体设计思想和精神上作出的毫无实质意义的改动或润色,其所解决的技术问题仍然与本发明一致的,均应当包含在本发明的保护范围之内。