• 117
•
针对网络安全问题,为了提升网络数据信息的安全性,通过采用北京智芯微电子科技有限公司自主研发的高速安全芯片SC1038,实现了一种基于单芯片的高集成高可靠性的高速PCIe加密卡设计。SC1038高速安全芯片将算法、PCIe接口和MCU的功能集中到一颗芯片内,芯片支持SM1、SM2、SM3、SM4和SM7国密安全算法,同时支持DES、RSA和SHA国际安全算法,并且芯片内部具有4个独立的真随机源。芯片和上位机之间通过PCIe接口进行通讯,并包含一个基于ARC EM6结构的高性能32位处理器,用于实现PCIe通讯和算法的控制。实测结果表明,该PCIe加密卡解决方案能实现高速算法加解密运算,通过PCIe接口能达到Gbps级的算法吞吐率,具有良好的应用前景。
1.引言
随着互联网的深入和普及,在促进社会进步经济发展的同时,也带来了越来越严重的网络安全([美]Douglas Jacobson(D.
雅各布森)著,仰礼友译,网络安全基础——网络攻防、协议与安全:电子工业出版社,2011)问题。近来层出不穷的网络安全事件,也反映出网络安全技术的重要性。网络安全技术有防火墙、杀毒软件和加密技术(徐亚凤.加密技术在通讯安全中的应用研究:信息技术,2012)等。其中信息加密技术可以分为软件加密和硬件加密,其中硬件加密主要采用加密卡来实现,其具有加密速度快、安全性高等优点。加密卡采用PCI总线或PCIe(王齐.PCI Express体系结构导读:机械工业出版社,2010)总线负责与上位机通信。PCIe总线作为替代PCI总线的新一代高速串行计算机扩展总线标准,使用了高速差分总线,并使用端到端的连接方式,实现了更高的总线宽度。市面上的高速加密卡均采用PCIe接口,利用PCIe接口的多通道高带宽,结合高速算法芯片最终实现加密卡算法运算的高吞吐率。现行的PCIe加密卡大都采用基于FPGA的设计方案,由FPFA芯片自带的PCIe硬核和软核处理器实现PCIe接口和MCU功能(彭阳,孟李林,等.基于FPGA的高速加密卡设计与实现:电子科技,2015),或者由单独的PCIe桥芯片(潘玉霞,马游春,熊继军,基于PCI Express总线的高速数据传输卡设计与实现:电子技术应用,2010)和外部的DSP芯片(苏振宇,基于FPGA与DSP 的PCI-E高速密码卡设计与实现:山东大学学位论文,2012)分别实现PCIe接口和MCU功能。这种基于FPGA的设计方案,需要提供单独的随机数芯片和非公开国密算法芯片(非公开国密算法特指SM1算法和SM7算法)。上述包含单独的随机数和算法芯片的设计方案降低了加密卡的可靠性,也提升了加密卡的安全风险。基于上述因素,本文通过采用北京智芯微电子科技有限公司自主研发的高速安全芯片SC1038,通过将算法、PCIe接口和MCU的功能集中到一颗芯片内,实现了一种单芯片高集成高可靠性的高速PCIe加密卡设计。以下分别通过硬件设计和软件设计,详细描述加密卡的整体设计方案。
2.加密卡设计
加密卡作为一种密码设备,为服务器加密机等上位机提供算法运算、随机数生成、密钥管理和权限状态管理等功能。本文设计的加密卡,提供了SM1、SM2和SM4算法硬件实现和对应的linux驱动、库函数,同时为了满足服务器加密机的配置和管理要求,提供了完整的密钥管理和权限管理功能。SM1、SM4分组密码算法,用于大量数据的加解密操作;SM2公钥算法主要用于数字签名和权限认证;密钥管理包括密钥种类、用途、存储、生成、备份、恢复、销毁等内容;权限管理包括管理员权限和操作员权限的登录和管理。
2.1 硬件设计
2.1.1 硬件系统结构
图1 加密卡系统结构图
本加密卡采用高速安全芯片SC1038作为主芯片,并由其完成PCIe 接口的数据指令收发、算法运算和状态指示等功能,不包含单独的算法、接口和随机数芯片,具有结构简单、集成度高、可靠性高和安全性高的特点,加密卡硬件系统结构如上图1所示。其中电源模块用于从PCIe接口取电,并经过电平转换输出1.1V给SC1038芯片内核供电。状态指示模块用于显示加密卡的当前状态,具体包括电源是否上电、SC1038的算法和随机数自检是否正常等信息。主7816接口用于连接外部IC卡,用于加密卡的用户认证和权限管理。串口作为SC1038的cos下载和升级接口,同时作为SC1038运行日志的输出接口。以下分别介绍SC1038芯片和电源模块的硬件设计。
单芯片高集成高速PCIe加密卡设计和实现
北京智芯微电子科技有限公司 国家电网公司重点实验室 电力芯片设计分析实验室北京市电力高可靠性集成电路设计工
程技术研究中心 王 健 甘 杰 杜鹏程 魏 斌
徐靖林 李 靖 姜明刚
• 118
•
2.1.2 高速安全芯片SC1038
图2 SC1038芯片BGA封装图SC1038芯片采用BGA 封装(如上图2所示),芯片大小为12mm*12mm 。芯片包含一个ARC EM6高性能32位处理器,包含32KB 指令高速缓存(ICache )和32KB 数据高速缓存(DCache ),性能可到1.77 DMIPS/MHz 和3.41 Core-Marks/MHz ,主频可达100MHz ,拥有128KB ROM 、547KB RAM 资源。同时为了存储用户程序和数据,芯片合封有一块大小为4MB 的NOR Flash ,具体包含8个8KB 大小的扇区和63个64KB 大小的扇区,Flash 支持页擦、片擦和读写操作,满足最小10万次擦写寿命。芯片片内支持4个相互独立的物理随机源,四路物理随机源的输出经异或后送给后处理模块,并最终输出符合安全需求的真随机数。同时芯片具有电压检测、频率检测、温度检测、光检测、毛刺检测等安全传感器,能有效防止环境变化对芯片功能和安全的影响,并有效抵御各种侵入式和非侵入式安全攻击。SC1038芯片支持以下安全算法:DES 算法,具体包括ECB 、CBC 、CFB 和OFB 模式;RSA 算法,支持512位~4096位宽,支持密钥生成、签名、验签、数据加解密算法运算;SHA 算法,支持SHA1、SHA256、SHA384、SHA512算法运算;SM1国密算法,支持ECB 、CBC 、CFB 、OFB 、CBC_MAC 工作模式;SM2国密算法,支持256位的密钥生成、签名、验签、数据加解密算法运算;SM3国密算法;SM4国密算法,支持ECB 、CBC 、CFB 、OFB 、CBC_MAC 工作模式;SM73国密算法,支持ECB 、CBC 、CFB 、OFB 、CBC_MAC 工作模式。SC1038芯片包含以下数据接口:PCIeX2 GEN2 EndPoint ,单通道最大速率为5Gbit/s ,支持x2宽度的PCIe 链路和最终10GT/s 的峰值带宽;1路USB 2.0 OTG ,支持USB 的主机模式和从属模式;3路SPI 接口,支持主从模式,可用于扩展如SPI EEPROM 等外部资源;2路I2C 接口,支持主从模式,用于连接外部I2C 总线;2路UART 接口;1路ISO7816主模式接口,用于外部IC 卡操作。
SC1038芯片所需外围电路,除了电源模块和电源部分去耦电容,只包括晶振电路,如下图3所示。电路采用一个12MHz 的无源晶振,并输入到芯片的内部锁相环(PLL )电路并产生1200MHz 时
钟,然后分频得到各总线、算法和外设时钟。
图3 晶振电路
2.1.3 电源模块
SC1038芯片有两个电压域,其中芯片输入输出接口采用3.3V 电压,芯片内核采用1.1V 电压。由于PCIe 插槽同时提供了3.3V 和
12V 两个供电电压,本加密卡采用PCIe 插槽3.3V 直接给SC1038芯片接口电压域供电,同时加密卡电源模块提供了3.3V 转1.1V 的LDO 电路用于给芯片内核1.1V 电压域供电。具体电路采用MPS 公司的MP2188 LDO 芯片,芯片支持1.1V 、1.8V 电压输出,芯片最高输出电流可达3A ,满足SC1038芯片的最高2W 峰值功耗需求。电源模块具体设计如下图4所示,其中L1和C6组成的低通滤波电路用于滤除输出的1.1V 电源纹波;con1跳线接口用于将1.1V 电源引出至外部,
通过电流探头测试芯片工作电流、评估芯片具体功耗。
图4 电源模块电路
2.2 软件设计2.2.1 软件结构
因为加密卡使用的服务器加密机一般为linux 操作系统,所以本加密卡的上位机软件也在linux 环境上进行开发。上位机软件结构可分为PCIe 驱动(宋宝华,LINUX 设备驱动开发详解:人民邮电出版社,2010)、库函数和上位机测试demo ,具体如下图5所示。PCIe 驱动负责识别加密卡的PCIe 接口,并给库函数提供相关的参数配置、设备操作接口;库函数负责给上位机测试demo 提供算法运算、随机数生成、密钥管理和权限状态管理相关函数接口;上位机测试demo 负责调用库函数,并实现算法操作、机数生成、密钥管
理和权限状态管理等具体功能。
图5 软件结构图2.2.2 PCIe驱动开发设计
本驱动采用字符型驱动,提供操作系统内核到加密卡设备之间的的接口,在使用中驱动以模块的机制动态加载到内核中。驱动开发设计流程如下:
(1)用pci_driver 结构体来定义PCIe 驱动,该结构体中包含了PCIe 设备的探测/移除、挂起/恢复等函数。结构体具体定义如下:
static struct pci_driver encCard_pcie_driver = {name: “encCard
pcie device ”,
id_table: pci_encCard_pcie_tbl,probe: pci_encCard_probe,
remove: __devexit_p(pci_encCard_remove)};
• 119
1038•
其中pci_driver 的probe()函数要完成PCI设备的初始化及其设备驱动的注册。当linux内核启动并完成对所有PCI设备进行扫描、登录和分配资源等初始化操作的同时,probe()函数负责硬件的探测并保存配置信息。其具体工作包括:
1)通过调用cdev_init()函数实现驱动的cdev结构体成员的初始化,cdev结构体定义如下所示:
struct cdev {
struct kobject kobj; // 内嵌的kobject对象
struct module *owner; // 所属模块
const struct file_operations *ops; // 文件操作结构体
struct list_head list; //linux内核所维护的链表指针
dev_t dev; //设备号
unsigned int count; //设备数目
};
同时建立cdev结构体和cdev结构体接口函数成员file_operation 之间的连接,接口函数的具体功能如下所示:
static struct file_operations pcie_enccard_fops =
{ .owner = THIS_MODULE,
.read = pcie_enccard_read,
.open = pcie_enccard_open,
.
release = pcie_enccard_release,
.write = pcie_enccard_write,
.llseek = pcie_enccard_llseek,
.mmap = pcie_enccard_mmap,
.unlocked_ioctl = pci_mp3010_ioctl,};
2)调用alloc_chrdev_region函数进行动态分配设备号,函数原型如下:
int alloc_chrdev_region(dev_t *dev,unsigned int -firstminor,unsigned int -count,char *name);
3)最后通过调用cdev_add()函数完成字符设备的注册。注册完毕后,即可调用接口函数file_operation中的成员函数实现对字符设备的具体操作。
(2)定义驱动模块初始化函数,在函数中用以下函数来注册上述pci_driver结构体定义的驱动:
int pci_register_driver(struct pci_driver *driver);
(3)定义驱动模块退出函数,在函数中用以下函数来注销上述pci_driver结构体定义的驱动、释放分配的系统资源:void pci_unregister_driver(struct pci_driver *drv);
2.2.3 库函数设计
库函数通过调用PCIe驱动接口,以私有指令的形式实现和PCIe加密卡之间的交互,交互的敏感数据由会话密钥进行加密传输。PCIe加密卡作为一种密码设备,推广商用需符合国家密码局关于密码设备相关标准和规范(GM/T 0018-2012密码设备应用接口规范),并通过相关安全认证(GM/T 0028-2014密码模块安全技术要求)。本库函数设计参考国密规范中的函数定义,具体分为以下6类函数:
(1)设备管理类函数;
(2)密钥管理类函数;
(3)非对称算法运算类函数;
(4)对称算法运算类函数;
(5)杂凑算法函数;
(6)用户文件操作类函数;
在每类函数中对各个函数的原型做了详细的定义。其中对称加密算法的函数原型和参数,如下所示。
原型:int SDF_Encrypt(
void hSessionHandle,
void hKeyHandle,
unsigned int uiAlgID,
unsigned char * pucIV,
unsigned char * pucData,
unsigned int uiDataLength,
unsigned char * pucEncData,
unsigned int *puiEncDataLength
);
参数:
hSessionHandle[in],与设备建立的会话句柄
hKeyHandle[in],指定的密钥句柄
uiAlgID[in],算法标识,指定对称加密算法
pucIV[in|out],缓冲区指针,用于存放输入和返回的IV数据
pucData[in],缓冲区指针,用于存放输入的数据明文
uiDataLength[in],输入的数据明文长度
pucEncData[out],缓冲区指针,用于存放输出的数据密文
puiEncDataLength[out],输出的数据密文长度
3.实测算法吞吐率
图6 PCIe加密卡实物图
在上述硬件设计的基础上,本加密卡硬件实物如图6所示,pcb 采用6层板,PCIe差分信号对的pcb走线做等长处理,并进行100欧姆差分阻抗匹配。在上述软件设计的基础上,将加密卡在PC上进行加密卡算法性能测试,测试环境如下:
(1)操作系统:Ubuntu 12.0
(2)linux kernel版本:3.2.0-29-generic
(3)CPU:Intel Core i5-2400@3.10GHz
(4)加解密数据大小:1GBytes
在上述测试环境下,SM1、SM4对称算法的ECB模式加解密性能测试结果如下:
算法吞吐率(Mbps)
SM1 ECB1150
SM4 ECB1200
4.总结
本文介绍了一种单芯片高速PCIe加密卡设计和实现。通过采用北京智芯微电子科技有限公司自主研发的SC1038高速算法芯片,实现了一种高集成高可靠性的高速PCIe加密卡设计。通过实测,SM1、SM4对称算法ECB模式下加解密PCIe接口吞吐率达到了Gbps级。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论