设计一种适用于嵌入式系统的加密IP核
出处:电子技术应用 发布于:2011-09-04 19:11:02
计算机技术和网络技术的迅速发展,使得现代社会高度信息化。在日常生活中,使用电子装置储存重要资料的方式日渐普及。随之而来的是,信息安全受到了人们的普遍关注。当使用者必须经由不可信任的通道传递秘密信息时,人们总是使用密码系统保障信息的安全。 数据加密标准(DES)自1977年被采用至今,已超过二十多年。面对各种新的攻击方法,DES在某些应用上已不堪使用。因此,在2000年10月,美国国家标准技术局(NIST)选定Rijndael算法为新的加密标准,将获得广泛地应用。
1 AES算法
1.1 AES算法描述
密钥密码体制分为流密码和分组密码两种。分组密码是信息与网络安全中实现数据加密、数字签名、及密钥管理的体制,具有速度快、易于标准化和便于软硬件实现等特点。AES采用分组密码的加密方式,其分组长度分为128 bit、192 bit、256 bit三种,AES密码在相同的轮函数作用下,迭代运算次数的不同可达到不同级别的安全强度。128 bit分组长度的情况下,循环轮数指定为11次,目前还没有可行的算法可以对该模型进行有效攻击[1]。每一轮处理均为作用在中间结果上的一批运算,该中间结果称为状态,用4×4字节矩阵表示,其中,数据矩阵称为State、密钥矩阵称为Key。AES加密涉及5种运算,分别是字节代换(SubBytes)、行移变换(ShiftRows)、列混合变换(MixColumns)、密钥加法(AddRoundKey)和密钥扩展(ExpandedKey)。
字节代换是对State每个字节进行独立非线性变换,由字节在GF域中求其乘法逆并外加一个仿射变换完成[2]。具体实现中广泛使用查表方式完成该步变换(实现该功能单元被称为Sbox),以避免复杂的乘法运算。
行移变换是对State进行按行移位操作,第0行不移位,第1行循环左移一位,第2行循环左移两位,第3行循环左移三位。
密钥加法是将轮密钥Key和状态State中对应字节按位“异或”。
密钥扩展提供轮变换对应密钥加法用到的各轮密钥。各轮运算中使用到的轮密钥都不相同,密钥扩展运算通过控制迭代运算次数计算出对应轮所需轮密钥。
加密过程由11轮运算组成,其中首轮只进行密钥加法,接着进行9次轮变换,轮变换由字节代换、行移变换、列混合变换及密钥加法4个步骤构成,再进行末轮变换,在末轮中跳过列混合变换。末轮完成后输出密文数据。AES加密过程如图1所示。
1.2 常用AES优化实现
AES算法的轮操作特点看似更适合于在通用CPU平台下编程实现,而实际上,此种实现方式在性能方面存在加密速度慢等先天局限性。AES加密处理单元一般处于数据主干道上,其处理数据能力直接影响整个应用系统的外在性能表现,因此,研究数据处理能力强的硬件加密实现方式具有重要的意义。如何实现高性价比的硬件AES加密一直是加密算法应用领域研究的热点问题。
常见的硬件优化实现有如下几种方式:(1)串行方式。将轮函数展平,每轮对应组合逻辑,11轮迭代过程直接相连,前输出作为次的输入,每一个时钟周期均可完成一个分组处理;(2)迭代方式。各轮迭代只用一个对应轮函数功能的组合逻辑实体实现,每11个时钟周期完成一个分组处理;(3)流水线方式。用于提高系统工作时钟周期的流水线技术,一般仅在局部使用,或是与串行方式并用,可提高工作时钟频率,使其满足极大带宽的应用要求;(4)轮内实现流水线。在轮函数对应实体中插入寄存器,将一轮运算分至多个逻辑段完成,每个时钟周期仍能完成一个数据分组处理。
以上AES算法实现方式各有优缺点,但总体来说缺乏灵活性。当前应用于嵌入式系统的AES加密模块在灵活性、资源占用上还不是很理想。在对常用优化方法进行研究后,本文针对嵌入式系统设计一种AES加密IP核、实现低资源占用、高性能要求、32位数据位宽、且能方便进行并行连接,实现数据位宽扩展。
2 IP核设计
2.1 系统架构设计
IP系统分为时序控制、密钥处理、数据处理三个主要单元,其系统结构如图2所示。系统的工作模式分为闲置模式、密钥输入模式、单轮加密模式及连续加密模式。复位后系统处于闲置模式,单轮加密模式可以直接切换为连续加密模式,而连续加密模式需进入到闲置模式至少一个时钟周期后才可切换到单轮加密工作模式。
数据处理单元在加密模式下对明文数据进行迭代运算。该单元检测到当前是末轮数据处理时自动跳过列混合运算。在系统进入加密模式后,数据处理单元从输入端口分4次读入128位明文数据,经过接下来的40个时钟周期数据运算过程后,得到密文中的个32位数据段。
时序控制单元负责整个系统关键控制信号的生成,控制信号集中由一个单元负责产生,不仅利于软件综合出较高的时钟频率,而且输出的时钟相位也有较优的一致性。
系统正常工作状态为先进行密钥载入操作,然后触发进入加密模式进行多次的数据加密。在需要时可以在闲置状态下再次进行密钥模式对密钥进行更新。
在系统闲置状态下,密钥加载信号被检测为有效时,系统进入密钥输入模式,对密钥数据进行读入、保存及生成轮密钥待用,而忽略密钥处理单元中是否先前已存在密钥数据。数字签名通常是使用被称为消息的相关信息来加密附属于这个信息的标签,也称为消息摘要或简称摘要。如果签名是在信息被修改后创建的,那么两个标签将不再匹配。发现修改通常并不能提供谁修改、怎样修改或修改了什么的信息。数字签名可以使用加密,但更多的是使用哈希函数。哈希函数和加密之间的区别在于哈希函数是单向操作,而加密通常是双向过程,因为原始明文可以用正确的密钥和算法重新构建。在进行大量数据处理时,载入密钥及载入组加密数据的几个时钟周期均可忽略,系统性能为每40个时钟周期处理128位数据。在读入明文时,若检测到载入数据信号无效,则退出连续加密模式,系统回复到闲置状态。
2.2 设计要点
嵌入式系统中资源相对较少,一般数据位宽为32位或更少,如果设计的AES数据通道位宽达到128位或更多,虽然轮处理时间较短,但数据通道在I/O接口段必然利用率不高,而且占用资源难以降低,故本设计采用主通道数据位宽为32位的结构。由于每轮中列混合变换需要的32位数据与前4个时钟周期的行移变换输出结果相关,因此在行移与列混合单元间使用128位数据位宽,每4个时钟周期进行State0到State1转换。
从AES加密方法流程图中可见首轮与末轮均有特殊处理,未经过完整的4个轮处理过程,在一些设计中将首轮与末轮使用单独硬件实现,这样可使硬件代价减少2轮的运算时间。首轮结构简单,与标准轮处理过程差异较大,单独实现只需要在输入端加上32个“异或”门,能以较小的代价换取一轮的运算时间。而末轮与标准处理过程仅差列混合运算,单独实现需要将近多一倍的轮处理硬件,所以在本设计中由时序控制单元控制末轮处理时跳过列混合运算。
Sbox作为非线性运算部分,必需具有良好的差分特性和比较复杂的代数结构,如果使用独立逻辑电路实现,面积优化空间不大,多采用查表法实现。AES实现中的密钥扩展与数据处理都需要多个Sbox,通过分析综合软件资源消耗结果可知单个Sbox占用资源为208个LCs或是2KB RAM。减少Sbox的使用无疑成为降低资源占用的主要手段。经过调研,一般嵌入式系统对AES加密性能要求在160 Mb/s到480 Mb/s之间,考虑到本设计可灵活扩展的特性,设计中在数据处理路径使用4个Sbox进行时分复用,另采用4个Sbox进行密钥实时扩展。
3 硬件实现
在虚拟专用网(VPN)和波分复用系统的光纤链路、视频加密、Internet高端路由器等高速应用中,硬件实现才是解决方案。硬件实现能确保加密算法及其密钥扩展的物理安全,因为硬件实现通常不容易被外部攻击者接触或修改。
本硬件实现在QuartusII8.0下使用 Verilog HDL语言进行描述,在ModelSim6.2环境下进行调试与仿真,使用Synplify9协助完成综合与关键路径分析工作。主要分析该IP核综合到目标器件EP1C4F324C6中在80 MHz频率的性能表现及资源占用情况。同时在更高性能的目标器件EP2S15F484C3中也进行了综合及后仿真,以作纵向对比。
在QuartusII环境下选定目标器件为低成本Cyclone系列EP1C4F324C6设置速度与面积均衡优化模式,目标工作频率为90 MHz,使用逻辑单元实现Sbox查找表功能。综合显示实际综合频率为87.82 MHz(period=11.387 ns),本IP核占用资源2 647(Logic Cells),其中密钥扩展单元占用1 388(LCs),时序控制单元占用45(LCs)。文中均以此IP核运行于80 MHz时钟频率进行性能分析。
选定综合到StratixII系列中EP2S15F484C3器件,综合频率FMAX达到169.12 MHz时占用资源Logic utilization 9%,其中Combinational ALUTS 834/12 480(7%),Dedicated logic registers 598/12 480(5%)。将此综合结果在ModelSim中用133 MHz时钟驱动进行后仿真。
4 数据分析
仿真结果见表1,No.1采用常用测试数据,密钥为:2b7e1516_28aed2a6_abf71588_09cf4f3c,输入明文为3243f6a8_885a308d_313198a2_e0370734时,得到输出密文3925841d_02dc09fb_dc118597_196a0b32,结果正确无误。
该IP核工作在80 MHz时钟频率下时,数据吞吐量为128 bit×80 MHz/40 clk=256 Mb/s。速度/资源比(Mb/s)/Slice=256/(2647/2)=0.193。当并行连接IP核进行位宽扩展时,密钥扩展单元与时序控制单元可共用,进一步提高资源利用率。当扩展为128位数据位宽时,数据吞吐量成倍增加,而速度/资源比也有所提高,几乎能达到 (Mb/s)/Slice=1024/((2647×4-(1388+45)×3)/2)=0.326。
128位数据位宽的设计[6]中原文计算速度/资源比值时未考虑所占用的RAMs资源,而且文中设计为25 MHz时钟频率,进行数据分析时却将工作频率直接换算为54 MHz,而未对其设计是否可正常工作于此频率进行论证。其设计主要考虑建立流水作业以提高性能。采用6级流水线技术及复合域方法优化Sbox,达到了较优的设计指标,但其固定的128位数据位宽在嵌入式系统中应用有一定的局限性。
在Synplify9下选定目标器件EP2S15F484C3,优先考虑提高速度,综合结果时钟频率超过240 MHz,说明本IP核设计合理,较好地利用了目标器件资源。如果将本IP核应用在更高性能目标器件上或是设计为ASIC将会有更大的性能提升。
本文设计的IP核在低端FPGA能以较低的资源消耗提供I/O性能,AES实现达到256 Mb/s,并提供适合应用于嵌入式系统中32位数据界面。Rijndael算法在设计之初就将软件实现的高效性、灵活性作为一个目标。事实证明,Rijndael算法在通用处理器上能获得相当不错的性能。在933 MHz Pentium III处理器上用C语言和汇编语言实现了AES算法,128、192和256比特密钥下的吞吐量分别达到325、275和236 Mb/s。文献[27]的方案使用比特滑动术处理256比特数据,仅花费170个时钟周期(相当于1 GHz Pentium III处理器上1.6 Gb/s的数据吞吐量)。
版权与免责声明
凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
- 深入解析嵌入式 OPENAMP 框架:开启异核通信新时代2025/7/22 16:27:29
- 一文快速了解OPENWRT基础知识2025/7/14 16:59:04
- 独立 ADC 优势大揭秘:为何不可替代?2025/7/7 16:21:04
- 深入剖析:嵌入式中 RS485、RS422 和 RS232 的特点差异2025/7/5 15:07:54
- 揭秘嵌入式 MCU:浮点数据处理难点及应对策略2025/6/20 15:19:07