本發(fā)明涉及加密解密技術(shù)領(lǐng)域,尤其涉及一種用于加密解密的方法和處理器。
背景技術(shù):
AES是目前流行程度比較高,可靠性比較好的一種加密解密算法。該算法在1998年提出,很快被定美國國家標(biāo)準(zhǔn)與技術(shù)研究所(NIST)定為高級加密標(biāo)準(zhǔn),2006年之后在國際上廣泛流行。
AES算法的秘鑰分成128位,192位和256位三種。大眾產(chǎn)品普遍采用128位版本,最高機(jī)密可用256位版本。
在實(shí)現(xiàn)技術(shù)方面,AES算法分成采用軟件實(shí)現(xiàn),F(xiàn)PGA實(shí)現(xiàn)以及ASIC實(shí)現(xiàn)。軟件實(shí)現(xiàn)價(jià)格低廉靈活高,ASIC實(shí)現(xiàn)代價(jià)高性能也高。FPGA實(shí)現(xiàn)是兩者之間的折中。目前,很多嵌入式系統(tǒng)中都包含了FPGA,因此適用于FPGA的AES實(shí)現(xiàn)有廣泛的需求。
AES在硬件中的直接實(shí)現(xiàn)方案占用較大的面積。FPGA資源有限,F(xiàn)PGA的價(jià)格同F(xiàn)PGA中的資源量直接關(guān)聯(lián),資源越多價(jià)格越貴。因此,怎樣減少面積是AES的FPGA實(shí)現(xiàn)所要解決的一個(gè)重要問題。
AES算法中包含了大量的并行操作。在硬件實(shí)現(xiàn)中,并行操作增加了面積。因此,減少AES面積的一個(gè)重要途徑就是把并行操作通過順序方式實(shí)現(xiàn)。雖然這樣做會(huì)降低算法的速度,但是在很多情況下,順序AES算法也足以滿足應(yīng)用的需要。
文獻(xiàn)[1,2]采用一種把128位數(shù)據(jù)路徑轉(zhuǎn)變成32位數(shù)據(jù)路徑的技術(shù)。這類變換能夠把某些子模塊的面積減少到原來的四分之一。為了進(jìn)一步減少面積,文獻(xiàn)[3,4]通過引入專用處理器實(shí)現(xiàn)了8位數(shù)據(jù)路徑的AES實(shí)現(xiàn)。但這兩篇文獻(xiàn)并沒有公布他們所涉及的處理器指令集以及處理器的實(shí)現(xiàn)細(xì)節(jié)。從文獻(xiàn)介紹來看, 某些實(shí)現(xiàn)技術(shù)并沒有采用面積最小的實(shí)現(xiàn)方案。比如,在處理器中引入對子程序調(diào)用的支持,這一方案需要多占用一定的FPGA面積。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于克服現(xiàn)有技術(shù)不足,提供了一種用于加密解密的方法和處理器,能夠有效的減少AES在FPGA的實(shí)現(xiàn)中所占用的邏輯單元數(shù)。
本發(fā)明的技術(shù)解決方案:
一方面,一種用于加密解密的處理器,包括:秘鑰生成模塊和加密、解密模塊;
其中,所述秘鑰生成模塊,用于通過第一指令啟動(dòng)端口數(shù)據(jù)讀入操作,并設(shè)置數(shù)據(jù)存儲(chǔ)器ram的寫操作使能為1,并把輸入數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)器ram的輸入數(shù)據(jù)寄存器中,以便下一時(shí)鐘周期把輸入數(shù)據(jù)讀入數(shù)據(jù)存儲(chǔ)器,所述第一指令用指令中的地址addr8域和變址寄存器addr1更新數(shù)據(jù)存儲(chǔ)地址:addr=addr1+addr8;第二指令在循環(huán)計(jì)數(shù)器cnt2小于該指令中的循環(huán)計(jì)數(shù)cntv的條件下把變址寄存器addr1和循環(huán)計(jì)數(shù)器cnt2分別加一,然后轉(zhuǎn)移到addr8指定的指令地址,循環(huán)計(jì)數(shù)器cnt2置0,所述第一指令和所述第二指令相結(jié)合實(shí)現(xiàn)0到15范圍內(nèi)的循環(huán)操作;
所述加密、解密模塊,用于AES加密和解密過程中,在進(jìn)行寄存器寫操作的同時(shí)把該寄存器原有數(shù)據(jù)保留到另一個(gè)寄存器,把存儲(chǔ)器到寄存器的讀取操作和該寄存器到另一寄存器的寫操作組合在同一條指令中,以實(shí)現(xiàn)兩個(gè)并行的寄存器數(shù)據(jù)轉(zhuǎn)移操作;用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊,該程序塊能夠完成數(shù)據(jù)存儲(chǔ)區(qū)中的待加密文本數(shù)據(jù)同密鑰做XOR操作并且把結(jié)果放回?cái)?shù)據(jù)存 儲(chǔ)區(qū),用以實(shí)現(xiàn)AES算法中的Add Roundkey操作,以上所涉及指令的結(jié)構(gòu)包括操作符op、循環(huán)計(jì)數(shù)cntv和地址addr8。
進(jìn)一步可選的,所述在進(jìn)行寄存器寫操作的同時(shí)把該寄存器原有數(shù)據(jù)保留到另一個(gè)寄存器為:第三指令在cntv=0時(shí)把a(bǔ)ddr1同addr8相加,結(jié)果放入addr,用于把數(shù)據(jù)存儲(chǔ)器ram的數(shù)據(jù)ram[addr]讀入到輸出數(shù)據(jù)緩存寄存器mem_out中,同時(shí),把輸出數(shù)據(jù)緩存寄存器mem_out中原先的數(shù)據(jù)存入通用數(shù)據(jù)寄存器reg8。
進(jìn)一步可選的,所述把存儲(chǔ)器到寄存器的讀取操作和該寄存器到另一寄存器的寫操作組合在同一條指令中為:在指令2中實(shí)現(xiàn)reg8<-mem_out和addr<-addr1+addr8兩個(gè)操作:后一操作將把ram[addr]讀入到輸出數(shù)據(jù)緩存寄存器mem_out中,指令2的一個(gè)應(yīng)用是在密鑰擴(kuò)展中從數(shù)據(jù)存儲(chǔ)器中讀取前一次存放的密鑰數(shù)據(jù)。
進(jìn)一步可選的,所述用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊為:指令A(yù)和指令B進(jìn)行循環(huán)的初始化,循環(huán)終結(jié)指令9做循環(huán)結(jié)束判斷并且在未結(jié)束的情況下將控制跳轉(zhuǎn)到指令B的下一條指令,循環(huán)次數(shù)通過指令C的cntv域設(shè)定為16進(jìn)制的F,表示向后跳轉(zhuǎn)15次,循環(huán)體總計(jì)執(zhí)行16次,文本數(shù)據(jù)和密鑰數(shù)據(jù)通過指令D的兩次調(diào)用讀取,指令D的第一次調(diào)用讀取文本數(shù)據(jù)到輸出數(shù)據(jù)緩存寄存器mem_out,第二次調(diào)用讀取密鑰數(shù)據(jù)到輸出數(shù)據(jù)緩存寄存器mem_out,同時(shí)把原先輸出數(shù)據(jù)緩存寄存器mem_out中數(shù)據(jù)轉(zhuǎn)儲(chǔ)到通用數(shù)據(jù)寄存器reg8,指令E把輸出數(shù)據(jù)緩存寄存器mem_out和通用數(shù)據(jù)寄存器reg8兩個(gè)寄存器的內(nèi)容做XOR操作并保存在寫入數(shù)據(jù)緩存寄存器mem_in,同時(shí)把寫入地址保存在addr,下一個(gè)時(shí)鐘上升沿將把數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器,在這一過程中, 指令D和指令E均同時(shí)執(zhí)行多項(xiàng)并行操作。
進(jìn)一步可選的,所述加密、解密模塊在Galois乘二操作的基礎(chǔ)上實(shí)現(xiàn)其他常數(shù)乘法時(shí),通過自然數(shù)的二進(jìn)制表示方式把任意的常數(shù)乘法操作轉(zhuǎn)換為乘二操作和Galois加法操作。
另一方面、一種用于加密解密的方法,包括以下步驟;
秘鑰生成模塊,通過第一指令啟動(dòng)端口數(shù)據(jù)讀入操作,并設(shè)置數(shù)據(jù)存儲(chǔ)器ram的寫操作使能為1,并把輸入數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)器ram的輸入數(shù)據(jù)寄存器中,以便下一時(shí)鐘周期把輸入數(shù)據(jù)讀入數(shù)據(jù)存儲(chǔ)器,所述第一指令用指令中的地址addr8域和變址寄存器addr1更新數(shù)據(jù)存儲(chǔ)地址:addr=addr1+addr8;第二指令在計(jì)數(shù)器cnt2小于該指令中的循環(huán)計(jì)數(shù)cntv的條件下把變址寄存器addr1和循環(huán)計(jì)數(shù)器cnt2分別加一,然后轉(zhuǎn)移到addr8指定的指令地址,循環(huán)計(jì)數(shù)器cnt2置0,所述第二指令同指令0相結(jié)合實(shí)現(xiàn)0到15范圍內(nèi)的循環(huán)操作;
加密、解密模塊在AES加密和解密過程中,在進(jìn)行寄存器寫操作的同時(shí)把該寄存器原有數(shù)據(jù)保留到另一個(gè)寄存器,把存儲(chǔ)器到寄存器的讀取操作和該寄存器到另一寄存器的寫操作組合在同一條指令中,以實(shí)現(xiàn)兩個(gè)并行的寄存器數(shù)據(jù)轉(zhuǎn)移操作;用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊,該程序塊能夠完成數(shù)據(jù)存儲(chǔ)區(qū)中的待加密文本數(shù)據(jù)同密鑰做XOR操作并且把結(jié)果放回?cái)?shù)據(jù)存儲(chǔ)區(qū),用以實(shí)現(xiàn)AES算法中的Add Roundkey操作。
本發(fā)明實(shí)施例提供的一種用于加密解密的方法和處理器,該處理器包括秘鑰生成模塊,從輸入秘鑰出發(fā),按照AES算法生成內(nèi)部秘鑰;加密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES加密;解密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES解密。在完成AES加密和解密功能的情況下,對處理器的架構(gòu)和指令集進(jìn)行優(yōu)化,采用 較少的指令數(shù),并且使每條指令結(jié)構(gòu)簡單;同時(shí),為了保證一定的性能,每條指令執(zhí)行盡可能多的操作。
附圖說明
所包括的附圖用來提供對本發(fā)明實(shí)施例的進(jìn)一步的理解,其構(gòu)成了說明書的一部分,用于例示本發(fā)明的實(shí)施例,并與文字描述一起來闡釋本發(fā)明的原理。顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種用于加密解密的處理器結(jié)構(gòu)示意圖;
圖2為圖1所示處理器及其對應(yīng)方法所涉及的指令結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合附圖對本發(fā)明的具體實(shí)施例進(jìn)行詳細(xì)說明。在下面的描述中,出于解釋而非限制性的目的,闡述了具體細(xì)節(jié),以幫助全面地理解本發(fā)明。然而,對本領(lǐng)域技術(shù)人員來說顯而易見的是,也可以在脫離了這些具體細(xì)節(jié)的其它實(shí)施例中實(shí)踐本發(fā)明。
在此需要說明的是,為了避免因不必要的細(xì)節(jié)而模糊了本發(fā)明,在附圖中僅僅示出了與根據(jù)本發(fā)明的方案密切相關(guān)的設(shè)備結(jié)構(gòu)和/或處理步驟,而省略了與本發(fā)明關(guān)系不大的其他細(xì)節(jié)。
本發(fā)明實(shí)施例提供一種用于加密解密的處理器,如圖1所示,包括:秘鑰生成模塊和加密、解密模塊;
其中,秘鑰生成模塊,用于通過第一指令啟動(dòng)端口數(shù)據(jù)(intext)讀入操作,并設(shè)置數(shù)據(jù)存儲(chǔ)器ram的寫操作使能為1(wten=1),并把輸入數(shù)據(jù)(intext)存放在數(shù)據(jù)存儲(chǔ)器ram的輸入數(shù)據(jù)寄存器(mem_in)中,以便下一時(shí)鐘周期把輸入數(shù)據(jù)讀入數(shù)據(jù)存儲(chǔ)器(ram),所述第一指令用指令中的addr8域和變址寄存器 addr1更新數(shù)據(jù)存儲(chǔ)地址:addr=addr1+addr8;
第二指令在計(jì)數(shù)器cnt2小于cntv的條件下把變址寄存器addr1和循環(huán)計(jì)數(shù)器cnt2分別加一,然后轉(zhuǎn)移到addr8指定的指令地址,循環(huán)計(jì)數(shù)器cnt2置0,所述第二指令同指令0相結(jié)合實(shí)現(xiàn)0到15范圍內(nèi)的循環(huán)操作,只用兩條指令實(shí)現(xiàn)次數(shù)小于等于16的循環(huán)的控制方法。該方法可用于實(shí)現(xiàn)把16個(gè)字節(jié)(128位)輸入秘鑰或輸入數(shù)據(jù)保存到數(shù)據(jù)存儲(chǔ)器,其中,第一指令可以是操作符為0(op=0)的指令,第二指令可以是操作符為9(op=9)的指令,循環(huán)計(jì)數(shù)器cnt2置0的方式可以采用初始化階段置0以及用其他本領(lǐng)域技術(shù)人員熟悉的指令置0方式,此處不再贅述;
加密、解密模塊,用于AES加密和解密過程中,在進(jìn)行寄存器寫操作的同時(shí)把該寄存器原有數(shù)據(jù)保留到另一個(gè)寄存器,這一方法減少了存儲(chǔ)器的訪問次數(shù),通過寫操作的并行執(zhí)行提高性能。具體的,第三指令在cntv=0時(shí)把a(bǔ)ddr1同addr8相加,結(jié)果放入addr,用于把數(shù)據(jù)存儲(chǔ)器ram的數(shù)據(jù)ram[addr]讀入到寄存器mem_out中,同時(shí),把寄存器mem_out中原先的數(shù)據(jù)存入寄存器reg8,具體的,把存儲(chǔ)器到寄存器的讀取操作和該寄存器到另一寄存器的寫操作組合在同一條指令中,實(shí)現(xiàn)兩個(gè)并行的寄存器數(shù)據(jù)轉(zhuǎn)移操作。具體的,存儲(chǔ)器讀取的內(nèi)容存放到一個(gè)寄存器,同時(shí)把該寄存器的內(nèi)容存放到另一個(gè)寄存器。在指令2中實(shí)現(xiàn)了兩個(gè)操作:reg8<-mem_out,addr<-addr1+addr8,后一操作將把ram[addr]讀入到寄存器mem_out中,指令2的一個(gè)應(yīng)用是在密鑰擴(kuò)展中從數(shù)據(jù)存儲(chǔ)器中讀取前一次存放的密鑰數(shù)據(jù),以實(shí)現(xiàn)兩個(gè)并行的寄存器數(shù)據(jù)轉(zhuǎn)移操作,第三指令可以是操作符為2的指令;
用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊,該程序塊能夠完成數(shù)據(jù)存儲(chǔ)區(qū)中 的待加密文本數(shù)據(jù)同密鑰做XOR操作并且把結(jié)果放回?cái)?shù)據(jù)存儲(chǔ)區(qū),用以實(shí)現(xiàn)AES算法中的Add Roundkey操作。
其中,用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊為:指令A(yù)和指令6進(jìn)行循環(huán)的初始化,循環(huán)終結(jié)指令9做循環(huán)結(jié)束判斷并且在未結(jié)束的情況下將控制跳轉(zhuǎn)到指令6的下一條指令,循環(huán)次數(shù)通過指令9的cntv域設(shè)定為16進(jìn)制的F,表示向后跳轉(zhuǎn)15次,循環(huán)體總計(jì)執(zhí)行16次,文本數(shù)據(jù)和密鑰數(shù)據(jù)通過指令2的兩次調(diào)用讀取,指令2的第一次調(diào)用讀取文本數(shù)據(jù)到寄存器mem_out,第二次調(diào)用讀取密鑰數(shù)據(jù)到寄存器mem_out,同時(shí)把原先寄存器mem_out中數(shù)據(jù)轉(zhuǎn)儲(chǔ)到reg8,指令8把mem_out和reg8兩個(gè)寄存器的內(nèi)容做XOR操作并保存在mem_in,同時(shí)把寫入地址保存在addr,下一個(gè)時(shí)鐘上升沿將把數(shù)據(jù)寫入數(shù)據(jù)存儲(chǔ)器,在這一過程中,指令2和指令8均同時(shí)執(zhí)行多項(xiàng)并行操作。
需要說明的是,如圖2所示,以上所涉及指令的結(jié)構(gòu)包括操作符op、循環(huán)計(jì)數(shù)cntv和地址addr8。
進(jìn)一步可選的,加密、解密模塊在Galois乘二操作的基礎(chǔ)上實(shí)現(xiàn)其他常數(shù)乘法時(shí),通過自然數(shù)的二進(jìn)制表示方式把任意的常數(shù)乘法操作轉(zhuǎn)換為乘二操作和Galois加法操作。
本發(fā)明實(shí)施例提供的一種用于加密解密的處理器,該處理器包括秘鑰生成模塊,從輸入秘鑰出發(fā),按照AES算法生成內(nèi)部秘鑰;加密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES加密;解密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES解密。在完成AES加密和解密功能的情況下,對處理器的架構(gòu)和指令集進(jìn)行優(yōu)化,采用較少的指令數(shù),并且使每條指令結(jié)構(gòu)簡單;同時(shí),為了保證一定的性能,每條指令執(zhí)行盡可能多的操作。
本發(fā)明實(shí)施例提供一種用于加密解密的方法,包括以下步驟;
秘鑰生成模塊,通過第一指令啟動(dòng)端口數(shù)據(jù)讀入操作,并設(shè)置數(shù)據(jù)存儲(chǔ)器ram的寫操作使能為1,并把輸入數(shù)據(jù)存放在數(shù)據(jù)存儲(chǔ)器ram的輸入數(shù)據(jù)寄存器中,以便下一時(shí)鐘周期把輸入數(shù)據(jù)讀入數(shù)據(jù)存儲(chǔ)器,所述第一指令用指令中的addr8域和變址寄存器addr1更新數(shù)據(jù)存儲(chǔ)地址:addr=addr1+addr8;第二指令在計(jì)數(shù)器cnt2小于cntv的條件下把變址寄存器addr1和循環(huán)計(jì)數(shù)器cnt2分別加一,然后轉(zhuǎn)移到addr8指定的指令地址,循環(huán)計(jì)數(shù)器cnt2置0,所述第二指令同指令0相結(jié)合實(shí)現(xiàn)0到15范圍內(nèi)的循環(huán)操作;
加密、解密模塊在AES加密和解密過程中,在進(jìn)行寄存器寫操作的同時(shí)把該寄存器原有數(shù)據(jù)保留到另一個(gè)寄存器,把存儲(chǔ)器到寄存器的讀取操作和該寄存器到另一寄存器的寫操作組合在同一條指令中,以實(shí)現(xiàn)兩個(gè)并行的寄存器數(shù)據(jù)轉(zhuǎn)移操作;用6條指令實(shí)現(xiàn)一個(gè)16次循環(huán)的程序塊,該程序塊能夠完成數(shù)據(jù)存儲(chǔ)區(qū)中的待加密文本數(shù)據(jù)同密鑰做XOR操作并且把結(jié)果放回?cái)?shù)據(jù)存儲(chǔ)區(qū),用以實(shí)現(xiàn)AES算法中的Add Roundkey操作。
本發(fā)明實(shí)施例提供的一種用于加密解密的方法,該處理器包括秘鑰生成模塊,從輸入秘鑰出發(fā),按照AES算法生成內(nèi)部秘鑰;加密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES加密;解密模塊,在秘鑰生成之后,實(shí)現(xiàn)AES解密。在完成AES加密和解密功能的情況下,對處理器的架構(gòu)和指令集進(jìn)行優(yōu)化,采用較少的指令數(shù),并且使每條指令結(jié)構(gòu)簡單;同時(shí),為了保證一定的性能,每條指令執(zhí)行盡可能多的操作。
如上針對一種實(shí)施例描述和/或示出的特征可以以相同或類似的方式在一個(gè)或更多個(gè)其它實(shí)施例中使用,和/或與其它實(shí)施例中的特征相結(jié)合或替代其它實(shí) 施例中的特征使用。
應(yīng)該強(qiáng)調(diào),術(shù)語“包括/包含”在本文使用時(shí)指特征、整件、步驟或組件的存在,但并不排除一個(gè)或更多個(gè)其它特征、整件、步驟、組件或其組合的存在或附加。
這些實(shí)施例的許多特征和優(yōu)點(diǎn)根據(jù)該詳細(xì)描述是清楚的,因此所附權(quán)利要求旨在覆蓋這些實(shí)施例的落入其真實(shí)精神和范圍內(nèi)的所有這些特征和優(yōu)點(diǎn)。此外,由于本領(lǐng)域的技術(shù)人員容易想到很多修改和改變,因此不是要將本發(fā)明的實(shí)施例限于所例示和描述的精確結(jié)構(gòu)和操作,而是可以涵蓋落入其范圍內(nèi)的所有合適修改和等同物。
本發(fā)明未詳細(xì)說明部分為本領(lǐng)域技術(shù)人員公知技術(shù)。