FPGA实现密钥、SM4加密及解密功能

前言

        去年换工作的时候,看到FPGA可能用到加密解密策略,查找了一些FPGA加密案例资料:AES128、AES256、SM3、SM4。其中AES加密解密的数据不能流水式连续进行;SM3只能加密不能解密;SM4加密和解密的数据可以流水式连续进行,但是处理时间相对较长。

        伪随机序列,虽然具有周期性;如果在FPGA中随机时间去获取伪随机序列值,该值具有随机性,在工程中可结合上位机交互生成密钥。

        本文分享之前空闲时间获取的SM4资料和代码。有需要代码的请留言/私信。

目录

关于AES128:

基于FPGA的AES128加密解密实现

一、密钥产生

1.1 、伪随机数据

1.2 、真随机数(上位机参与)

1.3 、真随机数(器件)

1.4 、生产环境

二、SM4加密

2.1 、加密流程

2.2 、加密过程

2.3 、轮密钥rk

2.4 、S盒变换

2.5 、系统参数FK、固定参数CK

三 、 测试

3.1 、仿真测试

3.2 、上板测试


关于AES128:

基于FPGA的AES128加密解密实现

一、密钥产生

1.1 、伪随机数据

       常用的伪随机数据产生方法:线性反馈移位寄存器、线性同余生成器。这类方法实现简单,成本低,伪随机。

1.2 、真随机数(上位机参与)

       如果FPGA与上位机有通信接口,键盘输入的数据具有真随机性,不可预测,可以下发到FPGA作为密钥,或者获取系统时间进行处理,也可作为密钥使用。这种方法成本也低,需要人机交互。

1.3 、真随机数(器件)

         一些芯片可以产生噪声数据,这些数据也具有真随机性。这种方案需要额外器件成本。

1.4 、生产环境

         在实际应用场景中,密钥的生成大都需要人为操作。上述方案混合着使用,比如LFSR、上位机交互混合着使用,产生的数据具有真随机性,成本也较低。

二、SM4加密

        SM4是一种128位分组对称密码算法,包括密钥扩展和加解密两部分。采用32轮非线性迭代,涉及到异或、合成置换、非线性迭代、反序变换、循环移位以及S盒变换等操作。解密仅需加密密钥反序使用。

        SM4适用于大数据流处理,处理结果延时200 clk周期左右

2.1 、加密流程

        SM4加密流程如下:32轮迭代处理

2.2 、加密过程

        SM4输入数据128bit分成4个32bit数据X0、X1、X2、X3;

        第一轮迭代

        X1、X2、X3异或,结果与rk0(下小结阐述计算)异或;

        上述异或值32为分成4个8bit,分别进行S盒变换(非线性变换),变换结果组成32bit;

        上述结果分别循环左移2位、10位、0位、18位、24位,并进行异或处理;

        上述结果与X0异或后得到X4。

        经过32轮迭代后,可获得X4、X5、......、X34、X35,将X35、X34、X33、X32这128bit作为加密结果。

2.3 、轮密钥rk

        轮密钥rk(i) = K(i+4),其生成流程如下,需要32轮迭代

        其中系统参数FK(k)为128bit的固定值,固定参数CK(i)也为32个固定的32bit数据。

        数据输入为128bit的密钥KEY,分为4组32bit MK0、MK1、MK2、MK3;初始密钥KEY与系统参数FK进行异或;结果值为128bit,分为4组K0、K1、K2、K3;

        第一轮迭代

        K1、K2、K3异或,再与CK0异或;

        上述结果分为4组8bit,分别进行S盒变换,组成32bit数据;

        上述32bit分别进行循环左移13位、0位、23位,并进行异或;

        上述结果与K0进行异或,得到K4即rk0。

        经过32轮迭代后,可获得K4、K5、......K34、K35即rk0、rk1、......rk30、rk31。

2.4 、S盒变换

        S盒变换是SM4算法中唯一的非线性变换,查找表方法:输入为8 bit,其中,高4bit为查找表的行信息,后4bit为查找表的列信息。行列都从0开始。

    以16进制表示,每个S盒元素8bit,每行共有16个8bit S盒元素,共有16列。例如当输入的8bit数据为0x12时,S盒变化输出为0x9A(1行2列所在元素)

2.5 、系统参数FK、固定参数CK

        系统参数FK0、FK1、FK2、FK3分别为32'hA3B1BAC6 32'h56AA3350 32'h677D9197 32'hB27022DC。

        固定参数CK0~CK31分别为:

        00070E15    1C232A31    383F464D    545B6269    

        70777E85    8C939AA1    A8AFB6BD    C4CBD2D9    

        E0E7EEF5    FC030A11    181F262D   343B4249

        50575E65    6C737A81    888F969D    A4ABB2B9    

        C0C7CED5    DCE3EAF1    F8FF060D    141B2229    

        30373E45    4C535A61    686F767D    848B9299

        A0A7AEB5    BCC3CAD1    D8DFE6ED    F4FB0209   

        10171E25   2C333A41        484F565D    646B7279

三 、 测试

        分别进行仿真和上板测试,为了测试简便,密钥通过多个伪随机数据拼接而成,初始化向量IV不启用。

3.1 、仿真测试

        伪随机数据产生密钥:503d0115a7589321a8bd30f2c9473dc1

        待加密数据为6个连续数据:00000001000000010000000100000001~00000006000000060000000600000006

        整个仿真流程:

        加密结果:

        解密结果:能正确解密

        根据仿真结果整理如下:

待加密数据

加密结果

00000001000000010000000100000001

b16c5c7e18de0e14680bcd788e3d030d

00000002000000020000000200000002

c5b4f5552a1fd62eac5c00171ad75fb3

00000003000000030000000300000003

a768d3ce3d9acec3ba1b4f3db98ea501

00000004000000040000000400000004

177fe2858687078d34f30a10c84de70c

00000005000000050000000500000005

f7c0dd9690e4cbb1b55d39e432d7d5c1

00000006000000060000000600000006

6e8d44b06f9141ea3eb2c2951c3c03a8

        根据在线网站验证加密、解密结果:

        加密验证:在线验证结果与仿真一致

        解密验证:仿真解密与在线网站解密结果相同。

3.2 、上板测试

        上板时钟为250MHz

        VIO设置取样密钥:

        密钥结果为:4c6321d4d57d30a4fe41e498aa274e1f

        待加密数据同样为6个连续数据:

00000001000000010000000100000001~00000006000000060000000600000006

        VIO设置加密开始:

        加密结果为:

        整理如下:

待加密数据

加密结果

00000001000000010000000100000001

1af0a55e0ac847a67fa4ce38bbb0439b

00000002000000020000000200000002

78400bff16757ea6de7e79ba09575c47

00000003000000030000000300000003

8c8114680dce6f3f9f24d82d6aec4c19

00000004000000040000000400000004

fa06b6ad8323095212dfc2652763190a

00000005000000050000000500000005

09d8e39ee1ea59ac3020ee8b842bfcbe

00000006000000060000000600000006

7ec094347f00ec1428342261f31b4b1a

        解密结果能正常还原:

        用在线网站进行对比验证:

        加密结果验证:

        解密结果验证:

 

基于FPGA的AES128加密解密实现

FPGA实现SD卡内文件的读写功能(FAT32文件系统)

Xilinx DDR4 MIG IP核的AXI接口:FIFO应用

Xilinx PCIE数据交互应用(XDMA)

FPGA实现Aurora光通信应用

基于ZYNQ的远程更新功能

FPGA实现千兆网UDP协议(含ARP、ICMP)

基于FPGA的USB3.0使用(CYUSB3014)

宽带信号多相滤波及脉压处理(FPGA+ADC)

多相DDS波形产生工程应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值