0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解析FPGA和USB芯片的加密盒设计与实现

电子工程师 来源:微型机与应用 作者:苏振宇 2021-04-06 10:08 次阅读

摘 要: 针对网络信息安全领域对数据加密和快速处理的需求,设计了一种基于FPGAUSB2.0芯片的数据加密盒,实现了高安全性的国产SM4对称密码算法。该设备在30个明文分组、10 000次循环的测试条件下数据加密速度可达到126 Mb/s。

0 引言

随着计算机网络技术的发展,黑客袭击事件逐年递增,给用户的数据安全造成很大的威胁。密码技术是实现网络信息安全的核心技术,是保护数据的重要工具[1]。通过在PC上运行软件进行加密的方法占用CPU资源多、处理速度慢、安全性差。近年来,通过采用FPGA、DSP硬件实现密码算法的技术得到了更多的应用。当前我国的商用密码产品大多数采用PCI、USB接口,PCI接口的产品具有开发周期长、使用复杂等缺点,而USB接口的产品加密性能较差。

针对这些情况,设计了一种以FPGA为核心的USB加密盒,充分利用了FPGA的数据处理能力和控制能力,实现了安全可控的国产SM4对称密码算法。在使用中连接到用户终端,保证重要数据在网络中以密文的方式安全传输,具有加密速度快、灵活等优点,可广泛应用于金融、电信、税控等信息安全领域。

1 系统总体架构设计

6357025045329500007835198.jpg

加密盒由USB2.0芯片CH378和FPGA构成,系统架构如图1所示。通过Verilog语言在FPGA中设计了USB控制模块、SM4 IP核、SM4控制模块和双端口RAM。其中USB控制模块控制CH378,SM4 IP核实现SM4对称算法,SM4控制模块实现对IP核的控制,双端口RAM作为数据的缓存。CH378使用30 MHz时钟,利用锁相环PLL把时钟倍频到60 MHz作为系统的主时钟。FPGA各模块的时钟都为60 MHz,采用了完全同步的设计方式,可以有效避免毛刺,使系统稳定。

数据的加密过程是:上位机准备好明文分组数据,启动加密操作,USB控制模块控制CH378把数据传输到双端口RAM,数据传输完成后,启动SM4控制模块,把数据传输到SM4 IP核进行加密运算,运算完成后的密文分组数据由SM4控制模块传回到RAM,由上位机取回。数据解密过程完成从密文到明文的转换。

2 USB控制模块设计

2.1 CH378接口设计

CH378是南京沁恒电子公司的USB2.0芯片,支持USB设备方式和主机方式,内置了USB通信协议的基本固件和文件系统管理固件[2]。加密盒采用了USB设备方式、内部固件模式和8位并口的设计方式。CH378与FPGA的接口见图1,其中D是8位数据总线;nRD与nWR分别是读写控制引脚,低有效;A0是命令口与数据口的区分引脚,为高时写命令或读状态,为低时读写数据;nINT是中断输出引脚,低有效。

2.2 状态机设计

状态机是数字时序逻辑中重要的设计内容,通过状态转移图设计手段可以将复杂的控制时序以图形化表示,分解为状态之间的转换关系,将问题简化[3]。状态机是USB控制模块的核心,实现对CH378的控制。其状态转移如图2所示,对各状态的编码采用了格雷码,可以有效地防止毛刺,使系统稳定[4]。

6357025044201700003919130.jpg

系统上电后FPGA首先对CH378初始化,状态机处于空闲状态。采用USB的批量端点进行数据的传输[5],下传时数据由上位机传输到加密盒,端点号为0x02,支持最大包512 B;上传时数据由加密盒传输到上位机,端点号为0x82,最大包也是512 B。CH378完成数据的下传后通过nINT引脚向FPGA发送中断。在TX_C22状态FPGA向CH378写命令字0x22,请求获得中断状态值;状态机在RX_INT状态读取中断状态值,若为0x04表示端点0x02的接收器接收到数据,否则说明未能接收到数据;

在TX_C23状态,状态机释放USB缓冲区;在TX_C29状态,状态机向CH378写入命令字0x29和端点号0x02,使CH378准备从0x02端点缓冲区读取数据块,之后进入RX_DAT状态,依次把从端点缓冲区读取的数据分组长度和数据分组写入RAM,传输完成后CH378释放缓冲区,状态机进入SM4_SF状态,启动SM4控制模块。

SM4模块完成之后状态机进入TX_C2A状态,向CH378写入命令字0x2A和端点号0x82,使CH378做好发送数据的准备,之后进入TX_DAT状态,读取RAM中的运算结果并写入端点0x82的发送缓冲区,由CH378把数据发送到上位机。至此完成了数据的传输过程,状态机回到空闲状态。

3 SM4 IP核设计

3.1 SM4算法简介

SM4算法是由国家密码管理局发布的对称密码算法,分组长度和密钥长度都为128位。加密算法与密钥扩展算法都采用32轮非线性迭代结构[6]。解密算法与加密算法的结构相同,只是解密轮密钥是加密轮密钥的逆序。SM4算法的密钥空间包含2128个密钥,数量十分庞大,破解由SM4算法加密的密文难度极大,算法安全性很高。

3.2 IP核关键逻辑设计

SM4 IP核模块的接口见图1,start是算法启动信号;op是模式选择接口,为0时读入密钥,为1时进行加密操作,为2时进行解密操作;datain是数据输入;dataout是数据输出;done是运算结果输出标志位。

SM4加密算法采用了32轮非线性迭代结构,每轮变换的逻辑如图3所示。初始明文分组为(X0,X1,X2,X3)∈(Z232)4,(Z232)4为4个32 bit字,从端口datain输入,密文是(Y0,Y1,Y2,Y3)∈(Z232)4,轮密钥为rki∈Z232,i=0,1,2,…,31。在每一轮中Xi+1,Xi+2,Xi+3与rki相异或后形成数据A,即A=Xi+1⊕Xi+2⊕Xi+3⊕rki,经过S盒非线性变换成为数据B,即Sbox(A)=B。S盒中的数据采用查找表的结构预先存储于FPGA的ROM中,由16行×16列的字节数据构成。

例如A的低8位数据A[7..0]=0xEF对应于S盒中第E行和第F列的值,经过S盒变换后成为B[7..0]=Sbox(A[7..0])=0x84。A需要经过4个S盒并行运算后成为数据B。对B进行循环移位、异或后形成C,C=B⊕(B《《《2)⊕(B《《《10)⊕(B《《《18)⊕(B《《《24),最后C与Xi异或后形成Xi+4,即Xi+4=Xi⊕C。最终密文(Y0,Y1,Y2,Y3)=(X35,X34,X33,X32),从端口dataout输出。解密变换与加密变换结构相同,加密时轮密钥的使用顺序是:rk0,rk1,…,rk31,解密时轮密钥的使用顺序与加密时相反。

SM4算法的轮密钥由128 bit的加密密钥通过密钥扩展算法生成,设加密密钥MK=(MK0,MK1,MK2,MK3)∈(Z232)4,同样从datain输入。令Ki∈Z232,i=0,1,。。。,35,首先令(K0,K1,K2,K3)=(MK0⊕FK0,MK1⊕FK1,MK2⊕FK2,MK3⊕FK3),其中(FK0,FK1,FK2,FK3)∈(Z232)4为已知的系统参数。轮密钥的逻辑如图4所示,其中CKi是固定参数。经变换后轮密钥rki=Ki+4i=0,1,…,31。

6357025036896100002657932.jpg

4 SM4控制模块

SM4控制模块的作用是控制SM4 IP核进行数据的加密或解密,核心同样是状态机,其状态转移如图5所示,对状态的编码同样采用了格雷码。

6357025031034900004230778.jpg

状态机开始处于空闲状态,由fsm_start信号启动后进入RD_LEN状态,读取RAM中的数据分组长度。在RD_FLAG状态读取RAM中的模式选择位,判断执行加密或解密的操作;之后进入RD_KEY状态,从RAM中读取16 B的密钥数据后发送给SM4 IP核;之后进入WAIT1状态,等待IP核读取密钥;状态机进入RD_DAT状态后,依次读取RAM中的16 B明文数据发送给IP核;

进入WAIT2状态后,等待IP核把一个分组的数据处理完成(加密或解密),done信号输出高电平;进入WR_DAT状态后,把IP核运算完成后的128 bit数据分组(密文或明文)写入RAM;进入SF_JUDGE状态后,判断是否处理完所有的数据分组,若未处理完则返回到RD_DAT状态,若处理完所有的数据分组则返回空闲状态。一次USB批量传输可以处理的数据分组是1~30个。

5 双端口RAM模块

双端口RAM的作用是缓存数据,设计RAM的容量为512 B,上位机和FPGA可以对RAM进行独立访问,使设计更加灵活。对RAM的访问顺序如下:

(1)上位机写RAM:上位机把数据传送到端点缓冲区后,CH378把数据写入RAM,WR_addr是RAM的写地址端口,ram_wr是写使能端口,data是数据输入端口。

(2)SM4控制模块读RAM:启动SM4控制模块后,读取RAM中的数据并传送到SM4 IP核,RD_addr是RAM的读地址端口,q是数据输出端口。

(3)SM4控制模块写RAM:当IP核完成数据运算后,SM4控制模块将运算结果通过data端口写入到RAM。

(4)上位机读RAM:CH378读取RAM中的运算结果,传输到USB批量上传端点的发送缓冲区并把数据发送到上位机。

6 实验结果分析

FPGA芯片选用了Cyclone IV系列的EP4CE15F17C8N,I/O引脚数为166,RAM总量为63 KB,逻辑单元LE为15 408个[7]。整个设计在Altera的开发工具Quartus II 11.1中先后完成综合、功能仿真、布局布线后,通过逻辑分析仪并结合上位机软件进行调试。最终综合结果是:占用存储单元3 KB,逻辑单元3 921个。另外,经时序分析所有信号的建立、保持时间无违规路径。图6是调试通过的波形图。

6357025025582500002472128.jpg

图6显示了一个明文的加密过程,start信号变高后,SM4 IP核从端口datain读入明文,此时信号op=1指示加密过程的开始。运算完成后IP核的done信号变高,dataout端口输出128 bit的密文;之后SM4控制模块通过端口ram_di把密文写入到RAM中,写RAM地址WR_addr实现递增,RAM写使能控制信号ram_wr变为高电平。图中明文、密钥和密文与SM4算法标准数据一致。

上位机软件是结合CH378驱动程序和Visual C++6.0软件在Windows XP环境下开发而成的。对SM4算法的性能进行测试,设置每次批量传输时数据的最大分组为30个,通过10 000次循环测试,测得数据加密(解密)的速率为126 Mb/s。

7 结论

本文基于FPGA和USB2.0芯片的加密盒,通过FPGA实现了国密SM4对称密码算法,应用于工程实践中,满足用户对数据加密的需求。与市场上的密码产品相比,具有集成度高、加密速度快、性能高的优势。作为后续的工作,可以在FPGA中集成多种其他的国产密码算法,使得该加密盒的应用更加灵活和广泛。

参考文献

[1] 罗守山。密码学与信息安全技术[M]。北京:北京邮电大学出版社,2009.

[2] 南京沁恒电子公司.U盘和SD卡高速文件管理控制芯片CH378[Z].2013,5.

[3] 吴继华,王诚.Altera FPGA/CPLD设计(高级篇)[M]。北京:人民邮电出版社,2005.

[4] 夏宇闻.Verilog数字系统设计教程(第2版)[M]。北京:北京航空航天大学出版社,2008.

[5] 萧世文,宋延清.USB 2.0硬件设计(第二版)[M]。北京:清华大学出版社,2006.

[6] GM/T 0002-2012,SM4分组密码算法[S].2012.

[7] Altera Corporation.Cyclone IV Device Handbook[Z].2010.

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21664

    浏览量

    601682
  • PCI
    PCI
    +关注

    关注

    4

    文章

    662

    浏览量

    130177
  • USB芯片
    +关注

    关注

    0

    文章

    18

    浏览量

    10498
  • SM4算法
    +关注

    关注

    0

    文章

    3

    浏览量

    1528
收藏 人收藏

    评论

    相关推荐

    socket 加密通信的实现方式

    在网络通信中,数据的安全性至关重要。Socket 编程作为网络通信的基础,实现加密通信是保护数据不被窃取或篡改的重要手段。 1. SSL/TLS 加密 SSL(Secure Socket Layer
    的头像 发表于 11-12 14:18 175次阅读

    AG32 芯片保护与加密

    AG32 芯片保护与加密 代码安全有两种方式: 一种是 Lock flash,一个是代码加密。 Lock flash: Lock flash 是在烧录代码后,锁定 flash,防止外部
    发表于 09-19 16:01

    FPGA + USB2.0 PHY USB3300 实现高速USB2UART

    本帖最后由 jf_73911065 于 2024-9-23 16:23 编辑 Malogic FPGA + USB2.0 PHY CY7C68000或USB3300 实现高速
    发表于 09-02 18:01

    科普小课堂|不同版本USB接口详细解析

    USB接口凭借其广泛的兼容性和高性能,已成为连接多样外设的主要接口,囊括了日常的键盘、鼠标等输入设备以及其他更多的领域。不仅如此,USB还展现了高度灵活性,能够便捷地转换为其他总线接口,例如实现
    的头像 发表于 06-27 09:40 5327次阅读
    科普小课堂|不同版本<b class='flag-5'>USB</b>接口详细<b class='flag-5'>解析</b>

    基于FPGA的AES256光纤加密设计

    AES算法的硬件实现,国内外研究学者大部分是基于FPGA的硬件实现。解放军理工大学的吕游等人研究高级加密标准俄歇算法的设计原理,并通过加密
    发表于 06-19 19:50

    忆阻器诱导的超混沌、多涡旋和极端多稳态小数阶HNN:镜像加密FPGA实现

    电子发烧友网站提供《忆阻器诱导的超混沌、多涡旋和极端多稳态小数阶HNN:镜像加密FPGA实现.pdf》资料免费下载
    发表于 06-03 14:46 0次下载

    基于 FPGA 的光纤混沌加密系统

    。 作品难点与创新 3.1 AES 加密算法在 FPGA 上的实现 最常用的数据加密方式是软件加密,即在通用微处理器
    发表于 04-26 17:18

    基于FPGA的光纤通信加密系统

    FPGA 设计加密算法具有安全性高,加密速度快,开发周期短,开发成本较低, 可重配,可靠性高以及移植性好等优点。 系统链路部分采用 Aurora 协议,该协议是一款轻量级的光纤链路协议,具有冗余少,可定制度高,链路速率快等特点。
    发表于 04-26 11:33 1103次阅读
    基于<b class='flag-5'>FPGA</b>的光纤通信<b class='flag-5'>加密</b>系统

    KEIL下如何实现代码的加密

    从STM32F0 到STM32F4,用了有好几款芯片,都是在KEIL编译,之前没有关注到加密的问题,突然想到这个问题,不知道大家都是怎么来实现加密的。
    发表于 03-20 07:06

    fpga芯片工作原理 fpga芯片有哪些型号

    FPGA芯片的工作原理主要基于其内部的可配置逻辑单元和连线资源。包括以下工作原理: 首先,FPGA内部包含可配置逻辑模块(CLB)、输出输入模块(IOB)和内部连线(Interconnect)三个
    的头像 发表于 03-14 17:17 1366次阅读

    如何排查FPGAUSB之间的芯片通信问题?

    ”,而在SBBulkSourceSink固件中没有显示这个错误,可不可以证明我的FPGAUSB之间通信成功?另外,我该如何排查FPGAUSB之间的
    发表于 02-27 06:46

    应用方案:实时数据加密

    应用方案:实时数据加密 利用CPLD设计加密电路方便可行,能够较好地实现加密功能。AG32系列MCU产品,在芯片内部内置了CPLD逻辑,可以
    发表于 01-15 08:57

    高性能加密芯片LKT4302U概述

    加密狗是一种关键的安全设备,扮演着数据安全的守护者。如果客户需要支持USB接口的、可控GPIO的加密芯片,LKT4302U是不错的选择。
    的头像 发表于 12-26 10:13 662次阅读

    加密芯片工作原理max32555

    实现方式和安全性等方面。 一、加密芯片的功能 数据加密加密芯片采用对称或非对称
    的头像 发表于 12-13 15:03 2016次阅读

    简单认识安全加密处理器

    安全加密处理器 (Secure Cryptoprocessor) 是一种本身不产生加密数据或程序指令,但产生密钥(Key)的处理器,其应用产品有智能卡、ATM、电视机机顶、军事系统等。而加密
    的头像 发表于 12-06 09:19 1159次阅读