前言:
此刻姐妹们对“aes算法列混合变换”大概比较关怀,大家都想要剖析一些“aes算法列混合变换”的相关知识。那么小编在网络上网罗了一些关于“aes算法列混合变换””的相关内容,希望小伙伴们能喜欢,各位老铁们快快来学习一下吧!分组密码是一类重要的密码体制,在信息安全领域有着广泛的应用。随着分组密码的不断发展,一方面算法的多样性要求处理模块具有一定的灵活性,另一方面对运算速度有着一定的要求[1]。
分组密码的专用集成电路(Application Specific Integrated Circuit,ASIC)实现方式针对具体的一种或几种算法设计,密码处理性能高,但无法满足灵活性要求。针对密码运算设计的专用指令处理器(Application Specific Instruction-Set Processor,ASIP)在指令集和体系结构上进行了专项优化,在具有密码处理性能的基础上保证了一定的灵活度。受制于指令集体系结构的执行模式,依然存在计算资源受限,能效提升困难的问题。
密码逻辑阵列(Cipher Logical Array,CLA)较好地兼顾了灵活性和处理速度的需求。与ASIP相比密码逻辑阵列舍弃了“取指”、“译码”等过程,同时阵列中采用分布式寄存资源存储分组密码的运算结果,节省了大量的“访存”时间。这种由数据流驱动的方式将密码处理集中于“执行”阶段,因此在能效上优于专用指令密码处理器[2]。
本文依托于针对项目组设计的密码逻辑阵列,分析了分组密码的基本特点,提出了分组密码在阵列上映射的基本原则和高能效映射方法,选取几种典型的分组密码算法,论述对应算法在阵列芯片上的映射步骤及流程,并实测映射后的实验数据,以验证阵列映射分组密码的实现性能。实测结果表明该密码逻辑阵列支持多种分组密码算法的映射实现,具有一定的灵活度和较好的能效特性。
1 分组密码处理特点分析
分组密码是将明文消息编码的数字序列按固定长度进行分组,在密钥作用下逐组加密,最终变换为密文分组。分组密码以混乱和扩散为基本原则,通常由子密钥生成算法和加密、解密算法组成[3]。分组密码处理流程如图1所示。
分组密码属于对称密码体制,采用迭代型结构,由初始变换、末变换以及中间变换组成,中间变换一般为一定次数的轮函数迭代,通常由子密钥异或、S盒置换以及算术、移位等多类操作组成。从其结构特点不难归纳出分组密码在硬件处理上具有以下几个显著特点:
(1)分组密码处理属于典型的数据密集型计算,基于数据流驱动的方式可以进一步加速分组密码处理性能。
(2)分组密码中数据为二进制字符串,大多为无符号的整数,长度介于64 bit到256 bit之间,粒度为32 bit的阵列适合实现分组密码操作的并行运算。
(3)分组密码具有很强的数据局部性,即第i轮迭代运算的输入数据只与第i-1轮的输出数据直接相关,而与之前的数据不直接相关。这使得轮内操作只能串行执行,而中间计算结果可被覆盖。
(4)轮函数作为运算主体部分,轮函数内部结构简单且算子排列有序,不存在相同运算操作,控制实现简单,因此分组密码具有速度快和易于软硬件实现的特点[4]。
本文将选取AES、DES等典型的分组密码算法进行映射,验证阵列平台的分组密码算法高能效实现结果。
2 CLA基本结构
本文依托的密码逻辑阵列面向对称密码算法高速处理而设计,阵列中的计算单元(Process Element,PE)包含多种算子结构,粒度为32 bit,采取数据流驱动的方式,根据存储的配置信息确定算子结构和互连结构,不同的配置信息对应不同的内部结构,实现不同的密码运算和所需功能。
阵列整体上包含输入输出FIFO、共享存储单元(Shared Store Unit,SSU)和运算系统。其中输入输出FIFO起到数据缓存和数据交换的作用;SSU由寄存器堆和SRAM组成,主要完成密码算法中子密钥、常数的存取以及S盒操作;运算系统由16个PE和基于2D-Mesh的互连结构组成,通过可重构的方式实现特定的密码运算,支持多个最小阵列组合成规模更大的阵列结构。密码逻辑阵列结构图如图2所示。
PE包含功能单元(Function Unit,FU)、交互单元(Interaction Unit,IU)和连接单元(Connection Unit,CU)。连接单元实现PE内部功能单元的互连,交互单元实现PE之间的互连,两者构成互连结构。功能单元根据配置存储器(Configuration Memory,CM)中的配置信息,在分布式控制器控制下实现输入、输出、路由和计算。目标阵列有四个配置页面,具有较大的配置存储空间和较高的配置灵活性。
在阵列中异构PE(图2中深色填充PE)中设计了能够执行某些低频次的128 bit甚至更大位宽的操作算子,在分组密码映射实现的前提下,有效地平衡了阵列整体的功耗与面积。
作为计算核心的可重构密码块(Reconfigurable Cryptography Block,RCB)由算术类单元AG、逻辑类单元LG、置换类单元BP和非线性类单元NF共四类算子组成;通过互连资源,各算子单元能够以多种组合搭建数据路径,从而实现复杂的密码运算。
每一级单元后加入了旁路寄存器,可配置数据是否寄存。PE内部的旁路寄存器构成了阵列的分布式存储结构,利用该类寄存器可控制数据路径的延时,灵活应对不同密码算法不同应用场景下的性能需求。
3 分组密码算法高能效映射
3.1 阵列映射模型
CLA是实现分组密码的平台,通过集合抽象的方式来表示其硬件资源,可为映射提供各种硬件资源的抽象信息。本文参考PRAM参数化描述形式[5],将CLA的硬件资源模型(不考虑输入输出FIFO)定义如下:
(1)CLA中所有计算资源的集合可表示为FU={FUi,j|i,j=1,2,3,4};
(2)IU、CU以及FU内输入输出选择网络组成的CLA中的互连资源集合可以表示为ConPE={(Con_PEI,Con_PEO)i,j|i,j=1,2,3,4};
(3)CLA中的存储资源包括SSU和内部的寄存器,可表示为SS={SSU,RSi,j|i,j=1,2,3,4};
则CLA的硬件资源模型可以视为一个的三元数组D,D=(FU,ConPE,SS)。如果将轮函数视为一个有限集合,则有R={op1,op2,…,opn},集合中的每一个元素表示一种操作,若干个操作顺序组合形成特定的密码算法。
将阵列中的每一个RCB视为一个集合F,则F={ag,lg,nf,bp,rs},F中元素代表四类算子单元和寄存器资源。则有即在四类算子单元中至少可以找到一个用于实现分组密码中一个独立的操作。
映射过程中分组密码操作顺序最终表现为PE间互连资源即IU、CU的配置使用以及PE内算子单元的连接顺序,构建的集合可以表示为:
IOicu={up,down,left,right}
IOrcb={up,down,left,right,ssu,rs,ag,lg,nf,bp}
通过一个二元向量即可将阵列中的互连关系表示出来:Con=<Vi,Vo>,对应的PE内部和PE之间的连接关系可表示为:
Con_PEI={<Vi,Vo>unit|<Vi,Vo>∈IOreb,unit=ag,lg,nf,bp}
Con_PEO={<Vi,Vo>unit|<Vi,Vo>∈IOicu,unit=iu,cu}
在确定互连关系集合之后,映射的存储资源使用关系也被确定下来。映射密码算法的实质就是在CLA硬件资源模型的基础上选取适当的资源,确定各单元间的连接关系,配合时序控制实现密码运算。
若将分组密码视为一个集合Block={I,R,L},集合中的元素分别代表初始变换、轮函数循环和末变换。循环并行映射的集合可表示为:
Map={Pagem=(FU,SS,Con,Ctr)m|m=1,2,3,4}
即阵列最终的映射结果是全部4个配置页面的配置信息,每个页面包含计算、存储、互连和控制4类配置要素。
3.2 分组密码循环并行映射
式(1)为吞吐率公式,式中w为处理数据位宽即分组长度;f为频率;c为算法的运算周期,表示每秒内电路的数据处理能力,单位为b/s。
式(2)中PFIFO、PCM和PS分别表示阵列FIFO、配置存储器和阵列的静态功耗,均可视为常量;而阵列的动态功耗PD则取决于具体的映射方案并与消耗的FU数量直接相关。
结合式(1)、式(2)可知,实现高能效映射一方面是增大数据处理位宽和运行频率,提高阵列的吞吐率;另一方面则是节约映射消耗资源,以降低整体功耗。
提高分组密码处理速度的重点是加速轮函数的循环过程,主要有操作流水和映射并行两种方式。操作流水使用流水线技术将轮函数各操作展开,阵列中的算子单元在每个时钟周期都承担着特定的运算任务;映射并行则是在阵列上映射多个分组,使得阵列资源实现对不同数据的并行处理。这两者都能有效提升分组密码处理的吞吐率。
映射过程中往往要考虑到分组密码的工作模式,例如ECB这种数据不相关的工作模式,可以实现操作流水,而CBC这类前后分组数据相关的工作模式,则无法实现操作流水。同时实现操作流水将显著增大阵列控制的复杂度,因而映射并行是一种更为实用的提升吞吐率的方式。
阵列预设有四个配置页面,灵活切换能够充分容纳更多的操作运算,有效支持轮函数循环的并行映射。而阵列提供的资源总是有限的,实现并行处理的组数取决于循环内映射所需频次最高的算子单元。以DES算法为例,将DES算法的初始置换I和逆初始置换L映射到Page0,而在Page1上并行映射两组轮运算R1和R2,由阵列控制结构控制配置页面的切换,这样通过循环加速能有效提升DES算法的吞吐率,如图3所示。
通过将循环部分在一个页面上并行映射达到加速处理的目的,余下的非循环部分则通过时序控制映射到其他页面,最大限度利用阵列资源和相关配置,此时吞吐率可表示为式(3):
式中fp为循环并行的运算频率,n为映射并行度,tdelay为切换配置页面的时钟延时。使用多个配置页面并行映射后,阵列运行频率基本不变,虽然引入了配置页面切换延时,增大了阵列的动态功耗,但是处理数据量近似成倍增加,有效提高了阵列的吞吐率和最终映射的能效。
3.3 分组密码高能效映射方法
根据以上分析,结合分组密码的基本特点,在映射过程中遵循以下基本原则优化映射方案:
(1)最少FU:尽可能减小PE单元使用量,同时提高每个PE单元内部功能单元FU的利用率,以提高阵列的整体饱和度和吞吐率密度,简化阵列内部的连接关系,降低阵列功耗;
(2)操作合并:阵列中的异构PE算子单元支持级联和大位宽数据处理,同类型的操作和相邻数据操作均可以实现合并运算,进一步减少阵列中的资源消耗[6];
(3)最小配置信息量:映射方案的配置信息越少,说明需要配置的结构单元越少,则映射复杂度越低,效率越高;
(4)启用配置页面:配置存储器CM中包含4个配置页面(Page0~Page3),当映射循环并行页面资源占用已满或存在分支操作时,应选择添加一个新的配置页面;
(5)中间值寄存:轮运算过程中的中间数据应在PE中寄存,为下一轮运算提供数据输入,同时缩短阵列内部关键路径,提高运行频率和能效。
此外,分组密码的同一组子密钥往往需要加解密若干组明、密文,子密钥生成算法运算一次即可,其耗费时间同整个数据任务处理的时间相比可忽略不计[7]。在阵列中采用离线密码生成方式,即子密钥提前生成并存入SSU中,待执行轮函数时取出对应的子密钥参与运算。
S盒变换是分组密码中重要的非线性算子单元,在映射时使用SSU中的SRAM实现该算子,具体地,需在映射前将S盒的配置信息写入SRAM。映射按照如下步骤进行,流程图如图4所示。
(1)设定映射并行度:如需在阵列上实现循环并行,需要在满足资源限定下选择合适的并行度,并确定各页面映射内容;
(2)划分算法操作,选取算子单元:根据算法中主要包含的操作类型确定各操作适合采用AG、LG、BP、NF中的哪一类计算单元实现;
(3)确定阵列中计算资源消耗:阵列的粒度为32 bit,处理的数据位宽决定了算法映射所需的计算单元及其内部算子单元数目;
(4)由操作次序确定RCB内算子单元的排列顺序,即在输入、输出网络中确定待映射算子单元的数据来源、流向,完成PE内部映射;
(5)通过PE中的IU、CU单元确定阵列内部互连关系,搭建阵列内部数据路径;
(6)根据算法的时序图确定相应控制信号:控制信号的主体是时序控制,主要包括配置控制和存储使能控制,还包括算法过程中配置页面切换和寄存器读写需求产生对应时序的控制信号。
4 分组密码算法映射及性能分析
4.1 AES算法映射
以映射AES-128 bit算法为例,遵照以上步骤进行。划分操作后选取SRAM、BP、LG和AG单元依次实现轮函数中的S盒变换、行移位、列混合以及子密钥异或4类操作。根据所需算子单元数量,将AES算法的初始变换和轮运算分别映射到阵列上,由数据处理顺序确定PE内部及PE间互连关系,得到图5所示的阵列数据路径。
映射AES算法使用了12个FU以及若干互连单元,考虑到初始变换只有子密钥异或,轮运算中也包含相同操作,若将初始变换放入轮运算中实现操作合并,AES算法流程可以调整为前9轮轮函数迭代、第10轮的S盒、行移位操作以及最后一轮的子密钥异或;此外结合循环并行映射,在阵列上并行映射2个AES分组,得到如图6所示的映射数据路径。
确定数据路径之后生成所需的时序控制,最终生成配置信息,完成AES算法的映射。调整后的映射方案使用了更少的FU以及互连资源,结合映射的基本原则,调整后的映射方案优于调整前的方案,同时两个分组并行处理有效提升了吞吐率和映射能效。
4.2 映射性能分析
实验室设计的密码逻辑阵列基于CMOS 55 nm工艺流片,选取几种典型的分组密码算法在CBC工作模式下的映射性能进行实测分析,得到的结果如表1所示。
文献中分组密码的处理性能通常以某个算法的吞吐率作为直接评价标准,而阵列结构可以通过堆叠可重构单元的方式显著提升吞吐率,但同时这样会带来面积和功耗的等幅增加,仅仅考虑吞吐率指标是不够客观的,因此本文将能效作为重要评估指标。
阵列能够动态配置中间数据的寄存与否,进而改变阵列内部的关键路径,所以针对不同的算法可以优化映射方案,使其能够在阵列上达到最优运算频率。根据实测的功耗数值,各个算法对应功耗也稳定在150~190 mW范围内,其中DES算法映射共使用了11个FU,因而功耗最大。吞吐率受到算法的迭代周期、数据位宽以及频率的影响,因此AES算法具有最少的迭代次数,其吞吐率达到最高的586 Mb/s,能效也相对最高。
在阵列上利用循环并行方式对各算法进行映射,测得的结果如表2所示。
对比表1和表2中的结果,通过轮函数循环并行映射的方式,算法的吞吐率得到显著提升,且和映射并行度成正相关。虽然并行映射的方式小幅度增大了阵列的功耗,但在能效指标仍然有较为明显的提高。实验证明循环并行映射能够有效提升阵列映射分组密码的吞吐率和能效。
在相关文献中选取了关于AES算法CBC模式下密码处理结构作为对比,考虑到不同工艺制程对性能参数的影响,本文参照了文献[8]中依据工艺特征尺寸的方法换算了等价能效,虽然无法完全消除工艺偏差带来的影响,但是可以作为参考依据,结果如表3所示。
在CBC模式并行映射下阵列AES算法能够达到1 765 Mb/s的吞吐率,得益于映射方案的优化,阵列整体功耗仅有0.18 W,能效为9.54 Mbps/mW,处理能效分别是文献[8]和文献[12]的7.5倍和2.3倍。在同等资源密度下,数据流驱动的阵列架构相对于指令驱动的处理器架构能够省去在指令部分的相关资源开销,在能效上占据一定优势。本文提出的阵列结构规模较小,但实际应用时可根据需求扩展PE数量以满足分组密码的性能、功耗等需求,因而具有较好的能效优势。
5 结论
本文分析了分组密码处理的基本特点,并结合目标密码逻辑阵列结构特点,提出了分组密码算法的映射模型和具体映射原则以及循环并行映射方式。本文选取了典型的分组密码算法在目标阵列上的映射,并对映射结果进行实测验证,数据表明,通过并行映射的方式提升了映射吞吐率和能效,该阵列同其他处理平台相比达到了较好的能效值,能够满足分组密码的映射需求。但是存在资源利用率低的问题。通过改善PE内部算子单元结构和扩充阵列规模,可以支持并行化映射,并对算法的映射方案不断优化,从而进一步提升阵列的吞吐率及能效。
参考文献
[1] COMPTON K,HAUCK S.Reconfigurable computing:a survey of systems and software[J].ACM Computing Surveys,2002,34(2):171-210.
[2] 金晨辉,郑浩然,张少武,等.密码学[M].北京:高等教育出版社,2009.
[3] 刘雷波,王博,魏少军.可重构计算密码处理器[M].北京:科学出版社,2018.
[4] 朱敏,刘雷波,尹首一,等.面向对称密码领域的可重构阵列设计[J].微电子学,2012,42(6):815-818.
[5] 孙康.可重构计算相关技术研究[D].杭州:浙江大学,2007.
[6] 李远铭,严迎建,李伟.基于粗粒度可重构密码阵列的AES算法映射实现[J].计算机应用与软件,2018,35(3):304-308,326.
[7] 徐金甫,杨宇航.SM4算法在粗粒度阵列平台的并行化映射[J].电子技术应用,2017,43(4):39-42,46.
[8] SAYILAR G,CHIOU D.Cryptoraptor:high throughput reconfigurable cryptographic processor[C].IEEE/ACM International Conference on Computer-aided Design.IEEE,2014.
[9] FRONTE D,PEREZ A,PAYRAT E.Celator:a multi-algo-rithm cryptographic co-processor[C].International Conference on Reconfigurable Computing & Fpgas.IEEE,2008.
[10] 郭岩松,刘雷波.一种面向分组密码的粗粒度可重构阵列及AES算法映射[J].微电子学与计算机,2015,32(9):1-5.
[11] LIU B,BAAS B M.Parallel AES encryption engines for many-core processor arrays[J].IEEE Transactions on Computers,2013,62(3):536-547.
[12] HUANG W,HAN J,WANG S,et al.A low-complexity heterogeneous multi-core platform for security SoC[C].Solid State Circuits Conference.IEEE,2010.
作者信息:
高嘉浩,李 伟,陈 韬
(解放军信息工程大学,河南 郑州 450001)
标签: #aes算法列混合变换