基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench

简介: 基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench

1.算法描述

     AES, 高级加密标准, 是采用区块加密的一种标准, 又称Rijndael加密法. 严格上来讲, AES和Rijndael又不是完全一样, AES的区块长度固定为128比特, 秘钥长度可以是128, 192或者256. Rijndael加密法可以支持更大范围的区块和密钥长度, Rijndael使用的密钥和区块长度均可以是128,192或256比特. AES是对称加密最流行的算法之一.

   AES算法在对明文加密的时候,并不是把整个明文一股脑的加密成一整段密文,而是把明文拆分成一个个独立的明文块,每一个明文块长度128bit。这些明文块经过AES加密器复杂处理,生成一个个独立的密文块,这些密文块拼接在一起,就是最终的AES加密的结果。

   但这里涉及到一个问题,假如一段明文长度是196bit,如果按每128bit一个明文块来拆分的话,第二个明文块只有64bit,不足128bit。这时候怎么办呢?就需要对明文块进行填充(Padding) 。

   需要注意的是,如果在AES加密的时候使用了某一种填充方式,解密的时候也必须采用同样的填充方式。

    殊的加法和乘法。AES 所用的加法和乘法是基于数学(译者注:近世代数)的域论。尤其是 AES 基于有限域GF(2^8)。 
   GF(2^8)由一组从 0x00 到 0xff 的256个值组成,加上加法和乘法,因此是(2^8)。GF代表伽罗瓦域,以发明这一理论的数学家的名字命名。GF(2^8) 的一个特性是一个加法或乘法的操作的结果必须是在{0x00 ... 0xff}这组数中。虽然域论是相当深奥的,但GF(2^8)加法的最终结果却很简单。GF(2^8) 加法就是异或(XOR)操作。 
    然而,GF(2^8)的乘法有点繁难。AES的加密和解密例程需要知道怎样只用七个常量 0x01、0x02、0x03、0x09、0x0b、0x0d 和 0x0e 来相乘。所以我不全面介绍GF(2^8)的乘法,而只是针对这七种特殊情况进行说明。 

在GF(2^8)中用0x01的乘法是特殊的;它相当于普通算术中用1做乘法并且结果也同样—任何值乘0x01等于其自身。

   现在让我们看看用0x02做乘法。和加法的情况相同,理论是深奥的,但最终结果十分简单。只要被乘的值小于0x80,这时乘法的结果就是该值左移1比特位。如果被乘的值大于或等于0x80,这时乘法的结果就是左移1比特位再用值0x1b异或。它防止了“域溢出”并保持乘法的乘积在范围以内。 
   一旦你在GF(2^8)中用0x02建立了加法和乘法,你就可以用任何常量去定义乘法。用0x03做乘法时,你可以将 0x03 分解为2的幂之和。为了用 0x03 乘以任意字节b, 因为 0x03 = 0x02 + 0x01,因此: 

b 0x03 = b (0x02 + 0x01) = (b 0x02) + (b 0x01)

   这是可以行得通的,因为你知道如何用 0x02 和 0x01 相乘和相加,同理,用0x0d去乘以任意字节b可以这样做:

b 0x0d = b (0x08 + 0x04 + 0x01)

= (b 0x08) + (b 0x04) + (b * 0x01)

= (b 0x02 0x02 0x02) + (b 0x02 0x02) + (b 0x01)

在加解密算法中,AES MixColumns 例程的其它乘法遵循大体相同的模式,如下所示:

b 0x09 = b (0x08 + 0x01)

= (b 0x02 0x02 0x02) + (b 0x01)b * 0x0b

= b * (0x08 + 0x02 + 0x01)

= (b 0x02 0x02 0x02) + (b 0x02) + (b 0x01)b 0x0e

= b * (0x08 +0x04 + 0x02)

= (b 0x02 0x02 0x02) + (b 0x02 0x02) + (b 0x02)

总之,在GF(2^8)中,加法是异或操作。其乘法将分解成加法和用0x02做的乘法,而用0x02做的乘法是一个有条件的左移1比特位。AES规范中包括大量有关GF(2^8)操作的附加信息。

     密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。

AES支持三种长度的密钥: 128位,192位,256位

    平时大家所说的AES128,AES192,AES256,实际上就是指AES算法对不同长度密钥的使用。三种密钥的区别:

     从安全性来看,AES256安全性最高。从性能看,AES128性能最高。本质原因是它们的加密处理轮数不同。

    AES原理:AES是对数据按128位,也就是16个字节进行分组进行加密的,每次对一组数据加密需要运行多轮,而输入密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节,如果用户输入的密钥长度不是这几种长度,也会补成这几种长度。

  无论输入密钥是多少字节,加密还是以16字节的数据一组来进行的,密钥长度的不同仅仅影响加密运行的轮数。

     AES算法是一个对称分组密码算法。数据分组长度必须是 128 bits,使用的密钥长度为 128,192 或 256 bits。对于三种不同密钥长度的 AES 算法,分别称为“AES-128”、“AES-192”、“AES-256”。AES加密算法涉及4种操作:字节替代(SubBytes)、行移位(ShiftRows)、列混(MixColumns)和轮密钥加(AddRoundKey)。

​ 从AES的加密和解密的流程图中可知:解密算法的每一步分别对应加密算法的逆操作。加解密所有操作的顺序正好是相反的,正是这样才保证了算法的正确性。加解密中每轮的密钥分别由种子密钥经过密钥扩展算法得到,算法中16字节的明文、密文和轮子密钥都以一个4x4的矩阵表示。

2.仿真效果预览
vivado2019.2仿真结果如下:

80ca6054af685a1593da72fe8c9e6c6a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
7aa543ed3f86e9b66c1431c4b52a9de1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.verilog核心程序

reg    [127:0]    text_in_r;
reg    [127:0]    text_out;
reg    [7:0]    sa00, sa01, sa02, sa03;
reg    [7:0]    sa10, sa11, sa12, sa13;
reg    [7:0]    sa20, sa21, sa22, sa23;
reg    [7:0]    sa30, sa31, sa32, sa33;
wire    [7:0]    sa00_next, sa01_next, sa02_next, sa03_next;
wire    [7:0]    sa10_next, sa11_next, sa12_next, sa13_next;
wire    [7:0]    sa20_next, sa21_next, sa22_next, sa23_next;
wire    [7:0]    sa30_next, sa31_next, sa32_next, sa33_next;
wire    [7:0]    sa00_sub, sa01_sub, sa02_sub, sa03_sub;
wire    [7:0]    sa10_sub, sa11_sub, sa12_sub, sa13_sub;
wire    [7:0]    sa20_sub, sa21_sub, sa22_sub, sa23_sub;
wire    [7:0]    sa30_sub, sa31_sub, sa32_sub, sa33_sub;
wire    [7:0]    sa00_sr, sa01_sr, sa02_sr, sa03_sr;
wire    [7:0]    sa10_sr, sa11_sr, sa12_sr, sa13_sr;
wire    [7:0]    sa20_sr, sa21_sr, sa22_sr, sa23_sr;
wire    [7:0]    sa30_sr, sa31_sr, sa32_sr, sa33_sr;
wire    [7:0]    sa00_mc, sa01_mc, sa02_mc, sa03_mc;
wire    [7:0]    sa10_mc, sa11_mc, sa12_mc, sa13_mc;
wire    [7:0]    sa20_mc, sa21_mc, sa22_mc, sa23_mc;
wire    [7:0]    sa30_mc, sa31_mc, sa32_mc, sa33_mc;
reg        done, ld_r;
reg    [3:0]    dcnt;
 
....................................................................
aes_key_expand_128 u0(
    .clk(        clk    ),
    .kld(        ld    ),
    .key(        key    ),
    .wo_0(        w0    ),
    .wo_1(        w1    ),
    .wo_2(        w2    ),
    .wo_3(        w3    ));
 
aes_sbox us00(    .a(    sa00    ), .d(    sa00_sub    ));
aes_sbox us01(    .a(    sa01    ), .d(    sa01_sub    ));
aes_sbox us02(    .a(    sa02    ), .d(    sa02_sub    ));
aes_sbox us03(    .a(    sa03    ), .d(    sa03_sub    ));
aes_sbox us10(    .a(    sa10    ), .d(    sa10_sub    ));
aes_sbox us11(    .a(    sa11    ), .d(    sa11_sub    ));
aes_sbox us12(    .a(    sa12    ), .d(    sa12_sub    ));
aes_sbox us13(    .a(    sa13    ), .d(    sa13_sub    ));
aes_sbox us20(    .a(    sa20    ), .d(    sa20_sub    ));
aes_sbox us21(    .a(    sa21    ), .d(    sa21_sub    ));
aes_sbox us22(    .a(    sa22    ), .d(    sa22_sub    ));
aes_sbox us23(    .a(    sa23    ), .d(    sa23_sub    ));
aes_sbox us30(    .a(    sa30    ), .d(    sa30_sub    ));
aes_sbox us31(    .a(    sa31    ), .d(    sa31_sub    ));
aes_sbox us32(    .a(    sa32    ), .d(    sa32_sub    ));
aes_sbox us33(    .a(    sa33    ), .d(    sa33_sub    ));
 
endmodule
相关文章
|
4月前
|
数据采集 算法 测试技术
【硬件测试】基于FPGA的1024QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的1024QAM基带通信系统的硬件测试版本,包含testbench、高斯信道模块和误码率统计模块。系统新增ila在线数据采集和vio在线SNR设置模块,支持不同SNR条件下的性能测试。1024QAM调制将10比特映射到复平面上的1024个星座点之一,实现高效数据传输。硬件测试结果表明,在SNR=32dB和40dB时,系统表现出良好的性能。Verilog核心程序展示了各模块的连接与功能实现。
107 7
|
2月前
|
数据采集 监控 API
加密货币 Pump 监测刮刀工具开发原理及实现路径
开发Pump监测刮刀工具需综合运用高频数据采集、波动率建模、跨平台对冲三大核心技术,2025年的技术瓶颈已从基础数据获取转向超低延迟执行与合规适配。建议采用模块化开发策略,优先实现核心监控功能,再逐步接入AI决策与链上套利模块。代码示例需根据最新交易所API文档动态调整,并严格遵守所在地监管法规。
|
3月前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
142 35
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
4月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
87 0
|
4月前
|
算法 数据安全/隐私保护 异构计算
基于LSB最低有效位的音频水印嵌入提取算法FPGA实现,包含testbench和MATLAB对比
本项目展示了一种基于FPGA的音频水印算法,采用LSB(最低有效位)技术实现版权保护与数据追踪功能。使用Vivado2019.2和Matlab2022a开发,完整代码含中文注释及操作视频。算法通过修改音频采样点的最低有效位嵌入水印,人耳难以察觉变化。然而,面对滤波或压缩等攻击时,水印提取可能受影响。该项目运行效果无水印干扰,适合实时应用场景,核心逻辑简单高效,时间复杂度低。
|
4月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4ASK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文介绍了基于FPGA的4ASK调制解调系统的硬件测试版本,该系统包括testbench、高斯信道模块和误码率统计模块,并新增了ILA在线数据采集和VIO在线SNR设置功能。通过VIO设置不同SNR(如15dB和25dB),实现了对系统性能的实时监测与调整。4ASK是一种通过改变载波幅度表示数据的数字调制方式,适用于多种通信场景。FPGA平台的高效性和灵活性使其成为构建高性能通信系统的理想选择。
113 17
|
4月前
|
安全 网络协议 算法
零基础IM开发入门(五):什么是IM系统的端到端加密?
本篇将通俗易懂地讲解IM系统中的端到端加密原理,为了降低阅读门槛,相关的技术概念会提及但不深入展开。
80 2
|
4月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的4FSK调制解调通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于之前的文章《基于FPGA的4FSK调制解调系统》,增加了ILA在线数据采集模块和VIO在线SNR设置模块,实现了硬件测试版本。通过VIO设置不同SNR(如10dB和20dB),并展示了ILA采集的数据结果。四频移键控(4FSK)是一种数字调制方法,利用四个不同频率传输二进制数据,具有较高的频带利用率和抗干扰性能。输入的二进制数据分为两组,每组两个比特,对应四个频率f1、f2、f3、f4,分别代表二进制组合00、01、10、11。调制过程中选择相应频率输出,并进行幅度调制以增强抗干扰能力。接收端通过带通滤波器提取信号并还原为原始二进制数据。
91 7
|
5月前
|
云安全 安全 数据建模
《数字证书:互联网世界的"身份证"与"防盗门"》 ——揭秘网络安全背后的加密江湖
在2023年某深夜,上海陆家嘴金融公司机房遭遇黑客攻击,神秘青铜大门与九大掌门封印的玉牌突现,阻止了入侵。此门象征数字证书,保障网络安全。数字证书如验钞机识别假币,保护用户数据。它通过SSL/TLS加密、CA认证和非对称加密,构建安全通信。证书分为DV、OV、EV三类,分别适合不同场景。忽视证书安全可能导致巨额损失。阿里云提供一站式证书服务,助力企业部署SSL证书,迎接未来量子计算和物联网挑战。