aes加解密算法(rijndael算法)對待加密的明文先進行分段然后加密,明文的長度可以是l28位、192位或256位。同樣,用于加密的密鑰長度也有l(wèi)28位、192位或256位。根據(jù)明文及密鑰長度不同的組合,加密的輪次有10輪、12輪和l4輪。在圈函數(shù)的每一圈迭代中,包括4步變換,分別是字節(jié)代換運算、行變換、列混合以及圈密鑰的加法變換。經(jīng)過驗證,選用l28位的明文和密鑰是幾種組合中加解密速度快的[2]。所以在本系統(tǒng)設計中使用的為128位明文和128位密文的組合。由于aes為對稱加解密,所以在此文中我們只討論aes的加密方法,解密就是與aes對稱的方式來進行的。在本系統(tǒng)中,使用了fpga的硬件描述語言(vhdl)來實現(xiàn)了aes的加解密算法,aes分別為輪密鑰加、字節(jié)代換、行移位、列混淆、密鑰擴展,下面為5個用硬件描述語言實現(xiàn)的小模塊的分別介紹。由于列混淆模塊、行移位模塊、輪密鑰加與文獻[4]中算法相同在此不做討論。此模塊為aes中的每一個字節(jié)提供了一個非線性代換。任一非零字節(jié)被函數(shù)所代替。如果x是零字節(jié),y=b就是subbytes變化的結(jié)果。在本設計中,為了加快算法速度,將s盒預先寫入ram中,直接用地址來指示替代的字節(jié),利用空間來換時間,達到了加快用算的目的。
本設計采用了xilinxip核singleblockram位寬32,深度64,在程序的開始,由用戶設置的初始密鑰系統(tǒng)按照密鑰擴展算法生成的10輪擴展密鑰,將生成的密鑰按照地址次序從低到高放入ram中,在每一輪執(zhí)行addroundkey時取出對應輪數(shù)的密鑰,與明文相加(異或)。在本系統(tǒng)中采用ti公司的cc2420來實現(xiàn)數(shù)據(jù)的無線通信cc2420工作于免授權(quán)的2.4ghz頻段,33個16位配置寄存器、15個命令選通寄存器、1個128字節(jié)的rxram、1個128字節(jié)的txram、1個112字節(jié)的安全信息存儲器。tx和rxram的存取可通過地址或者用兩個8位的寄存器。主機可通過spi總線設置其工作在normal模式,通過spi總線mosi,miso接口對txfifo和rxfifo及狀態(tài)進行寫和讀的操作,將數(shù)據(jù)寫入和讀出ram來實現(xiàn)與cc2420的數(shù)據(jù)傳輸,通過觸發(fā)cc2420stxon,srxon來實現(xiàn)數(shù)據(jù)的無線發(fā)送和接收。表二是本系統(tǒng)cc2420涉及的寄存器及其功能。
microblaze是一款由xilinx公司開發(fā)的嵌入式處理器軟核,其采用risc(reducedinstructionsetcomputer)優(yōu)化架構(gòu)。它符合ibmcoreconnect標準,能夠與ppc405系統(tǒng)無縫連接[3]。microblaze是一個非常簡化卻具有較高性能的軟核,在spartan3e系列fpga中它只占400個slice,相當于10萬門fpga容量的1/3。其為哈佛結(jié)構(gòu),32位地址總線,獨立的指令和數(shù)據(jù)緩存,并且有獨立的數(shù)據(jù)和指令總線連接到ibm的plb總線,使得它能很容易和其它外設ip核一起完成整體功能。支持spi、i2c、pci、can總線,支持重置、硬件異常、中斷、用戶異常、暫停等機制,可配置uart、gpio等接口。