• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      AES密碼算法的FPGA實現(xiàn)與仿真﹡

      2013-09-17 12:31:20張慧霞趙建平李曉麗
      通信技術(shù) 2013年9期
      關(guān)鍵詞:解密字節(jié)移位

      張慧霞, 趙建平, 李曉麗, 路 娜

      (曲阜師范大學(xué) 物理工程學(xué)院,山東 曲阜 273165)

      0 引言

      由于缺乏保密措施,使得電話竊聽,密碼泄露等事件不斷發(fā)生,嚴(yán)重威脅到個人的隱私、軍事、商業(yè)機(jī)密、地區(qū)和國家的信息安全。因此,AES(Advanced Encryption Standard)加密算法已成為信息安全領(lǐng)域研究的熱點。AES算法是美國國家標(biāo)準(zhǔn)技術(shù)研究所(NIST)于 2001年宣布其成為取代DES的新一代數(shù)據(jù)高級加密標(biāo)準(zhǔn)[1]。該算法在實現(xiàn)方面具有設(shè)計簡單、安全性高、速度快等優(yōu)點,而且AES算法的128位的密鑰比DES的56位密鑰在破解所花費的時間上強(qiáng)1021倍[2]。如果加解密使用同樣的密鑰,安全性得不到保證。文中所采用不同的(相關(guān)的)加解密密鑰,把加密密鑰擴(kuò)展模塊的最后一輪子密鑰作為解密密鑰的初試密鑰,這樣可以加強(qiáng)通信安全性,保密性。

      1 AES算法描述

      AES是一個迭代型分組密碼算法,分組長度為128 bit,有三種可選密鑰長度分別是 128 bit,192 bit,256 bit。不同的密鑰長度對應(yīng)的迭代循環(huán)次數(shù)rN分別是10輪,12輪,14輪。由于其操作都是以字節(jié)為基礎(chǔ)的,因此把中間變量和密鑰都分成 16個字節(jié)。加密數(shù)據(jù)按照從上到下、從左到右構(gòu)成4×4以字節(jié)為元素的狀態(tài)矩陣(State)。加密過程是首先使待加密的明文與初始密鑰異或(AddRoundKey),然后進(jìn)行 10次圈迭代變換。每圈包括字節(jié)替換變換(SubBytes)、行移位變換(ShiftRows)、列混合變換(MixColumns)、輪密鑰異或變換(AddAdd RoundKey)四步變換[3],最后一圈不含列混合操作。解密運算是與加密過程完全相反的逆運算。文中以數(shù)據(jù)長度和密鑰長度均為128 bit為例進(jìn)行討論。

      2 AES算法的實現(xiàn)

      2.1 AES算法的整體設(shè)計

      該設(shè)計的整體內(nèi)部結(jié)構(gòu)框圖如圖1所示,該結(jié)構(gòu)由加密模塊、解密模塊、控制模塊、FIFO組成。其中AES加密模塊包括字節(jié)替換模塊(SubBytes)、行移位模塊(ShiftRows)、列混合模塊(MixColumns)、輪密鑰異或模塊(AddRoundKey);解密模塊包括逆字節(jié)替換模塊(invSubBytes)、逆行移位模塊(invShiftRows)、逆列混合模塊(invMixColumns)、逆輪密鑰異或模塊(invAddRoundKey)。加密過程的數(shù)據(jù)流向為:首先明文數(shù)據(jù)通過數(shù)據(jù)總線寫入16位入128位出的FIFO緩存;然后由控制模塊啟動AES加密模塊進(jìn)行一次加密運算;運算完成輸出128 bit密文存入128位入16出的FIFO中。解密過程與其相同。

      圖1 整體內(nèi)部結(jié)構(gòu)框

      2.2 加密模塊和解密模塊設(shè)計

      2.2.1 字節(jié)替換和逆字節(jié)替換的實現(xiàn)

      字節(jié)替換是AES密碼中唯一的非線性變換。它將狀態(tài)組的每一個字節(jié)非線性變換成另一個字節(jié)。此模塊如果采用 GF(28)模乘求逆運算[4]實現(xiàn),則邏輯延時較長,速度較慢。為加快速度,采用時延小、基于只讀存儲器(ROM)查找方式的S盒結(jié)構(gòu),即把輸入的8bit的數(shù)據(jù)作為地址而相應(yīng)的輸出作為字節(jié)替換后的 8bit數(shù)據(jù)[5]。逆字節(jié)替換是字節(jié)替換的逆運算,采用逆S盒實現(xiàn)。字節(jié)替換的部分代碼是:

      case (a)

      8’h00: o=8’h63;

      8’h01: o=8’h7c;

      ......

      8’hff: o=8’h16;

      2.2.2 行移位模塊與逆行移位模塊的實現(xiàn)

      把行移位的結(jié)果狀態(tài)矩陣State的第一行不變,其余的三行依次循環(huán)左移一個字節(jié)、兩個字節(jié)、三個字節(jié),變換如式(1)所示。逆行移位模塊是行移位的逆變換,即各行進(jìn)行循環(huán)右移。

      2.2.3 列混合變換與逆列混合變換的實現(xiàn)

      列混合變換是利用矩陣乘法做位元變換。列混合變換將行移位的變換結(jié)果的狀態(tài)列看作是有限域上的次數(shù)小于 4的多項式 s(x)[6]與多項式進(jìn)行模x4+1相乘運算。令,用矩陣乘法表示(矩陣元素用十六進(jìn)制表示)如式(2)所示

      function [7:0] mult2;

      input [7:0] s;

      mult2={s[6],s[5],s[4],s[3]^s[7],s[2]^s[7],s[1],s[0]^s[7],s[7]}

      2.2.4 加密與解密密鑰擴(kuò)展模塊

      密鑰擴(kuò)展作用是負(fù)責(zé)產(chǎn)生各輪操作所需要的子密鑰,它控制著整個算法的效率。因為每一輪變換都要和相應(yīng)密鑰擴(kuò)展生產(chǎn)的子密鑰進(jìn)行異或運算。加密運算采用的是內(nèi)部擴(kuò)展,即加密運算與加密密鑰擴(kuò)展運算是同步的,但是與解密不能同步,因為解密運算使用的初始密鑰是加密密鑰擴(kuò)展模塊生產(chǎn)的最后一輪子密鑰。通過構(gòu)造不同的加密密鑰擴(kuò)展算法與解密密鑰擴(kuò)展算法,使得采用不同初始密鑰實現(xiàn)數(shù)據(jù)的加密和解密。

      AES算法利用外部輸入的初始密鑰 key(KN 為密鑰長度,以字為單位),通過密鑰擴(kuò)展模塊得到輪密鑰的位數(shù)是(分組長度)×(KN+1),即 128×(10+1)=1408位。它涉及到一下二個模塊:

      1)位置變換模塊(rot_word ):把一個4字節(jié)的序列in[31:0]變換成{in[23:0],in[31:24]};

      2)S盒變換(sub_word):對一個4字節(jié)序列進(jìn)行字節(jié)替換。圈常數(shù)數(shù)組’00’,’00’)是固定的數(shù)組,其中 rconst[i]所用可能值是示 ) ’01’,’02’,’04’,’08’,’10’,’20’,’40’,’ 80’,’1b’,’36’,‘6c’(十六進(jìn)制)。

      加密子密鑰生成過程:外部輸入的密鑰作為初始密鑰,以后的子密鑰就是字 w[i]等于其前一個字w[i-1]與前kN 個字 w[i-kN]進(jìn)行“異或”,即 []w i=若i是KN 的倍數(shù):w[i]=w[i-加密密鑰擴(kuò)展模塊的部分代碼是:

      rot_word..rw(.i(key_in[31:0]), .out(rot_key));

      sub_word sw (.in (rot_key), .out(subrot_key));

      xor6_32q(.o(key_out[127:96]),.a({rconst[i],24'b0}),.b(subrot_key),.c(key_in[127:96]),.d(32'b0),.e(32'b0),.f(32'b0));

      解密子密鑰生成過程是:首先使初始密鑰字序列進(jìn)行異或,然后再進(jìn)行位置變換、字節(jié)替換和異或運算。

      解密密鑰擴(kuò)展模塊的部分代碼是:

      assign {a,b,c,d} = key_in;

      wire [31:0] w,x,y,z;

      assign key_out = {w,x,y,z};

      assign z = c ^ d;

      assign y = b ^ c;

      assign x = a ^ b;

      wire [31:0] rot_key;

      wire [31:0] subrot_key;

      rot_word rw (.in (z), .out(rot_key));

      sub_word..sw(.in(rot_key),

      .out(subrot_key));

      assignw=a ^ subrot_key ^ {rconst,24'b0}

      3 AES算法的仿真

      用Xilinx ISE Simulator分別對加密模塊與解密模塊進(jìn)行功能仿真,加密模塊功能仿真結(jié)果如圖 2所示,其輸入明文是dat_in[127:0]=128’h8e09e9d2ba 681af3d6d33313bcdb20d3,密鑰是 key[127:0]=128’hfa32bb8cc3c825ad90c45d3ab6980c57,對應(yīng)的輸出密文是 dat_out[127:0]=128’h1468974803d64bcc89bcf 0ad7b28a454。

      將加密后的結(jié)果進(jìn)行解密,把加密輸出的子密鑰作為解密的初始密鑰,解密模塊功能仿真結(jié)果如圖 3所示,輸入密鑰是:inv_key[127:0]=128’h3fdf0ed cabe54f56c60a5337984d34df。解密后的結(jié)果:dat_out=128’h8e09e9d2ba681af3d6d33313bcdb20d3,與輸入的明文比較結(jié)果相同,驗證成功。

      圖2 加密結(jié)果信號功能仿真

      圖3 解密結(jié)果信號功能仿真

      4 結(jié)語

      文中加密算法的實現(xiàn)采用賽靈思(Xilinx)公司的Spartan6系列的XC6SLX16芯片作為器件,在ISE 13.1軟件平臺下對AES算法verilog HDL代碼進(jìn)行編譯、綜合、仿真。在加密密鑰與解密密鑰不同,但相關(guān)的情況下,經(jīng)過多次調(diào)試仿真后,驗證該算法正確性。

      [1] 何德彪,胡進(jìn),陳建華.基于 FPGA的高速 AES實現(xiàn)[J].華中科技大學(xué)學(xué)報,2010(02):101-103.

      [2] 楊軍,張偉平,趙嘎,等.面向 SOPC的 FPGA設(shè)計與應(yīng)用[M].北京:科學(xué)出版社,2012:177-188.

      [3] 嚴(yán)迎健,任方,付小兵,等.基于 NIOSII的語音加密傳輸系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2009(09):61-6.

      [4] 宋軍輝.基于選進(jìn)加密標(biāo)準(zhǔn)(AES)算法的加密芯片設(shè)計[D].南京:南京理工大學(xué),2004.

      [5] 黃前山,季曉勇.基于低成本 FPGA的 AES密碼算法設(shè)計[J].通信技術(shù),2010,43(09):156-158.

      [6] 高帥娜.基于 FPGA的數(shù)據(jù)加密設(shè)備的設(shè)計[D].大連:大連海事大學(xué),2012.

      猜你喜歡
      解密字節(jié)移位
      解密“熱脹冷縮”
      No.8 字節(jié)跳動將推出獨立出口電商APP
      解密“一包三改”
      少先隊活動(2020年9期)2020-12-17 06:17:31
      再生核移位勒讓德基函數(shù)法求解分?jǐn)?shù)階微分方程
      炫詞解密
      大型總段船塢建造、移位、定位工藝技術(shù)
      No.10 “字節(jié)跳動手機(jī)”要來了?
      Σ(X)上權(quán)移位算子的不變分布混沌性
      簡談MC7字節(jié)碼
      多指離斷手指移位再植拇指25例
      祥云县| 商城县| 神池县| 鞍山市| 高陵县| 海盐县| 衡水市| 潮安县| 林口县| 广安市| 宝坻区| 孙吴县| 齐河县| 富宁县| 安平县| 高青县| 沙坪坝区| 娄烦县| 海盐县| 陇川县| 东丰县| 泰州市| 龙口市| 丰顺县| 云浮市| 司法| 陈巴尔虎旗| 济宁市| 盖州市| 乌审旗| 杭锦后旗| 宁海县| 庄河市| 襄樊市| 东台市| 望都县| 城固县| 宝鸡市| 双柏县| 远安县| 广昌县|