您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 第四章设计实例高级加密标准
高级FPGA结构,实现与优化第四章高级加密标准第四章设计实例:高级加密标准高级加密标准(AdvancedEncryptionStandard,AES,也是指它的原始名称:Rijndael)特指电子信息加密保护的最新标准。这个标准已经被美国国家标准和技术学会通过,并发表在联邦信息处理标准学报上(IPSPUB197)。推动新标准实现的原因是由于原来的数据加密标准(DES)已经不能满足要求。除了提供更好的安全性,AES还可以利用硬件很容易的实现。在这里,“容易”的是指是更少的设计错误(更可靠)和更快的速度(简单的组合逻辑)。本章的主要目标是介绍一些AES结构,并且分析有关性能和面积的各种平衡关系。4.1AES架构AES是对称的密钥密码,它映射128位明码文本的数据块到128位密码文本的块。密钥的长度在128位,192位和256位之间是可变的,它决定了安全的等级(更长的密钥=更大的密钥空间=更大的安全性)。AES算法的变换是由四个部分组成:字节替代(位映射),行间移位(交换),多列变换(变换到GF(28))和加轮密钥(在GF(2)域中,用bit方式操作的轮形密钥的相加)。这些变换构成了一个“轮”,这些轮的数量是由密钥的大小决定的(128位,10个轮;192位,12个轮;256位,14个轮)。要注意到每个轮的轮密钥是唯一的。这些密钥是由原始的密钥通过密钥扩展推导而来的。密钥扩展是本章的结构焦点之一,下文将会做更详细的讨论。对于完整的AES密码更加详细的说明,可以参考NIST提供的联邦信息处理标准197(FIPS197)。密钥扩展并行的运行于数据路径,获取密码密钥,并且为每一个变换的轮产生一个唯一的密钥。令一个字=32bit,Nk=密钥尺寸/字尺寸(128,192或者256/32)。扩展密钥的第一个Nk使用密码密钥填充,下面每个32位宽的字都是前一个32位字与前一个32位Nk字的异或。对于出现在Nk倍数上的字,当前的字在异或操作之前要经过一次变换,接着是与一个轮常量进行异或。这个变换由一组轮排列组成,接着是对32位内的全部4个字节的8-byte映射。轮常量在FIPS定义是由[{x(i-1),{00},{00},{00}}]给出的数值,x(i-1)是x的幂,其中x在域GF(28)中用{02}表示。一个单独的密钥扩展是与高层次的结构相独立的,下面的实现说明了这一点。moduleKeyExp1Enc(//updatedvaluestobepassedtonextiterationoutput[3:0]oKeyIter,oKeyIterModNk,oKeyIterDivNk,output[32*‘Nk-1:0]oNkKeys,inputiClk,iReset,//representstotal#ofiterationsandvaluemodNkinput[3:0]iKeyIter,iKeyIterModNk,iKeyIterDivNk,//ThelastNkkeysgeneratedinkeyexpansioninput[32*‘Nk-1:0]iNkKeys);//updatedvaluestobepassedtonextiterationreg[3:0]oKeyIter,oKeyIterModNk,oKeyIterDivNk;reg[32*‘Nk-1:0]OldKeys;reg[31:0]InterKey;//intermediatekeyvalue高级FPGA结构,实现与优化第四章高级加密标准wire[32*‘Nk-1:0]oNkKeys;wire[31:0]PrevKey,RotWord,SubWord,NewKeyWord;wire[31:0]KeyWordNk;wire[31:0]Rcon;assignPrevKey=iNkKeys[31:0];//lastwordinkeyarrayassignKeyWordNk=OldKeys[32*‘Nk-1:32*‘Nk-32];//1bytecyclicpermutationassignRotWord={PrevKey[23:0],PrevKey[31:24]};//newkeycalculatedinthisroundassignNewKeyWord=KeyWordNk^InterKey;//calculatenewkeysetassignoNkKeys={OldKeys[32*‘Nk-33:0],NewKeyWord};//calculateRconoverGF(2^8)assignRcon=iKeyIterDivNk==8’h1?32’h01000000:iKeyIterDivNk==8’h2?32’h02000000:iKeyIterDivNk==8’h3?32’h04000000:iKeyIterDivNk==8’h4?32’h08000000:iKeyIterDivNk==8’h5?32’h10000000:iKeyIterDivNk==8’h6?32’h20000000:iKeyIterDivNk==8’h7?32’h40000000:iKeyIterDivNk==8’h8?32’h80000000:iKeyIterDivNk==8’h9?32’h1b000000:32’h36000000;SboxEncSboxEnc0(.iPreMap(RotWord[31:24]),.oPostMap(SubWord[31:24]));SboxEncSboxEnc1(.iPreMap(RotWord[23:16]),.oPostMap(SubWord[23:16]));SboxEncSboxEnc2(.iPreMap(RotWord[15:8]),.oPostMap(SubWord[15:8]));SboxEncSboxEnc3(.iPreMap(RotWord[7:0]),.oPostMap(SubWord[7:0]));‘ifdefNk8wire[31:0]SubWordNk8;//SubstitutiononlywhenNk=8SboxEncSboxEncNk8_0(.iPreMap(PrevKey[31:24]),.oPostMap(SubWordNk8[31:24]));SboxEncSboxEncNk8_1(.iPreMap(PrevKey[23:16]),.oPostMap(SubWordNk8[23:16]));SboxEncSboxEncNk8_2(.iPreMap(PrevKey[15:8]),.oPostMap(SubWordNk8[15:8]));SboxEncSboxEncNk8_3(.iPreMap(PrevKey[7:0]),.oPostMap(SubWordNk8[7:0]));‘endifalways@(posedgeiClk)if(!iReset)beginoKeyIter=0;oKeyIterModNk=0;InterKey=0;oKeyIterDivNk=0;高级FPGA结构,实现与优化第四章高级加密标准OldKeys=0;endelsebeginoKeyIter=iKeyIter+1;OldKeys=iNkKeys;//updateKeyiterationmodNkfornextiterationif(iKeyIterModNk+1==‘Nk)beginoKeyIterModNk=0;oKeyIterDivNk=iKeyIterDivNk+1;endelsebeginoKeyIterModNk=iKeyIterModNk+1;oKeyIterDivNk=iKeyIterDivNk;endif(iKeyIterModNk==0)InterKey=SubWord^Rcon;‘ifdefNk8//anoptiononlyforNk=8elseif(iKeyIterModNk==4)InterKey=SubWordNk8;‘endifelseInterKey=PrevKey;endendmodule同样地,数据通道的独立操作是轮加密要求的所有函数的组合,如下面实现中所说明的。moduleRoundEnc(output[32*‘Nb-1:0]oBlockOut,outputoValid,inputiClk,iReset,input[32*‘Nb-1:0]iBlockIn,iRoundKey,inputiReady,input[3:0]iRound);wire[32*‘Nb-1:0]wSubOut,wShiftOut,wMixOut;wirewValidSub,wValidShift,wValidMix;SubBytesEncsub(.iClk(iClk),.iReset(iReset),.iBlockIn(iBlockIn),.oBlockOut(wSubOut),.iReady(iReady),.oValid(wValidSub));ShiftRowsEncshift高级FPGA结构,实现与优化第四章高级加密标准(.iBlockIn(wSubOut),.oBlockOut(wShiftOut),.iReady(wValidSub),.oValid(wValidShift));MixColumnsEncmixcolumn(.iClk(iClk),.iReset(iReset),.iBlockIn(wShiftOut),.iReady(wValidShift),.oValid(wValidMix),.iRound(iRound));AddRoundKeyEncaddroundkey(.iClk(iClk),.iReset(iReset),.iBlockIn(wMixOut),.iRoundKey(iRoundKey),.oBlockOut(oBlockOut),.iReady(wValidMix),.oValid(oValid));endmodule一级字节替代由于算法迭代的重复利用性和相对小的映射空间,字节替代使用查找表实现。那么,使用一个同步的单级流水线的8x256(28)ROM能够有效地实现8bit到8bit的映射。如果4.1所示。图4.1字节替代模块中一个8位映射高级FPGA结构,实现与优化第四章高级加密标准零级行间移位这一级简单的混合数据块中的行,这里没有用到逻辑。因此,这一点的另一个流水级将使这个流水级周期产生逻辑的不平衡,减少了最大频率和总的吞吐量。行间移位的实现如图4.2所示。图4.2行间移位的实现两个流水线级列混合这一级有全部四个轮级之外最多的逻辑,对于添加流水线这一级是最好的位置。列混合的层次入图4-3所示。图4.3列混合的层次如图4-3所看到的,列混合使用一个成为列映射(Map_Column)的模块作为积木块,在途4-4中可以看到。高级FPGA结构,实现与优化第四章高级加密标准图4.4列映射的层次如图4-4所看到的,列映射使用一个称为多项式乘2乘法器(polynomialX2multiplier)的模块作为积木块,如图4-5所示。图4.5多项式乘2一级加轮密钥这一级简单地将密钥扩展流水线的轮密钥与数据块异或。如图4-6所示。图4.6加轮密钥模块紧缩结构考虑中的第一个实现是设计成可多次重用的逻辑资源的紧缩实现。最初,输入的数据和密钥在初始轮模型中相加,在进入加密循环之前将结果寄存。然后按照规定的顺序,将数据应用于字节代换,行间移位,多列变换和加轮密钥。在每个轮的结尾,新的数据被寄存。按照轮的数量重复这些操作。图4-7是一个迭代结构的框图。高级FPGA结构,实现与优化第四章高级加密标准图4.7紧缩结构实现inputiClk,iReset,input[32*‘Nb-1:0]iPlaintext,//inputdatatobeencryptedinput[32*‘Nk-1:0]iKey,//inputciptherkeyinputiReady,//validdatatoencryptinputiNewK
本文标题:第四章设计实例高级加密标准
链接地址:https://www.777doc.com/doc-2170722 .html