專利名稱:Rijndael的子字節(jié)函數(shù)的小型硬件實現(xiàn)的制作方法
1.發(fā)明領域本發(fā)明涉及數(shù)據(jù)加密領域。本發(fā)明特別涉及一種實現(xiàn)SubByte(子字節(jié))函數(shù)的小型硬件的設備和方法,該子字節(jié)函數(shù)出現(xiàn)在高級密碼標準(AES)算法或Rijndael塊密碼即下面的AES/Rijndael中。其適應性被重新設計為在正常處理或逆向處理下都適合工作。
2.相關技術的討論當前技術提供硬件實現(xiàn),其中逆向密碼(cipher)只能部分地再使用實現(xiàn)密碼的電路。對于高速網(wǎng)絡處理器和智能卡應用,期望很小的(門尺寸)且高速的數(shù)據(jù)速率(適合OC-192和高于9953.28Mbps的光載波率和9.6Gbps的有效負載)。
AES/Rijndael是一個迭代的塊密碼,在由Joan Daemen和Vincent Rijmen所寫并于1999年3月9日公布的提案中做了描述。國家標準和技術協(xié)會(NIST)已經(jīng)批準所述AES/Rijndael作為加密算法,并且在2001年12月26日公布(公布號197,也被稱為聯(lián)邦信息處理標準197或“FIPS”197,因此將之并入作為參考,如同在此完全闡述)。依照許多私鑰加密/解密算法,包括AES/Rijndael,采用多階段執(zhí)行加密/解密,即通常所知的迭代和回合。這種算法自己依賴于數(shù)據(jù)處理流水線或流水線體系結構。在每個回合,AES/Rijndael使用仿射變換及其反變換連同其它變換一起解密(解密碼)和加密(加密碼)信息。加密將數(shù)據(jù)轉化為稱為密文的難解形式;解密密文將數(shù)據(jù)轉化回稱為明文的最初形式。
AES/Rijndael算法的輸入和輸出均由128位的序列組成(每位有值0或1)。通常稱這些序列為塊,稱它們包含的位數(shù)為它們的長度(“FIPS 197”,NIST,p.7)。在AES/Rijndael算法中處理的基本單位是字節(jié),一個八位的序列被作為單個實體對待,最高有效位(MSB)在左邊。在內(nèi)部,AES/Rijndael算法的操作是在稱為狀態(tài)的二維字節(jié)陣列上執(zhí)行的。所述狀態(tài)是由四行字節(jié)組成,每行包含Nb個字節(jié),其中Nb是塊長度除以32所得到的數(shù)(“FIPS 197”,NIST,p.9)。
在密碼和逆向密碼(加密和解密)的開始,把輸入字節(jié)-陣列in0,in1,...in15被復制到如
圖1所示的狀態(tài)陣列中。然后在這個狀態(tài)陣列的每個字節(jié)上實施密碼和反密碼操作,之后將其最終值復制到輸出-字節(jié)陣列out0,out1,...out15。通過多項式中兩個元素對應冪的系數(shù)“相加”實現(xiàn)在有限域中兩個元素的相加。相加是由布爾XOR操作執(zhí)行的(“FIPS 197”,NIST,p.10)。兩個字節(jié)相加的二進制符號表示法是{01010111}{10000011}={11010100}(1.0)在多項式表示中,GF(28)中的乘法運算與以8次的不可約多項式為模的多項式的乘法運算一致。如果一個多項式僅有的約數(shù)是1和它自己,則它是不可約的。對于AES/Rijndael算法,這個不可約多項式是(“FIPS 197”,NIST,p.10)m(x)=x8+x4+x3+x+1(1.1)每一個對角元素等于1的對角矩陣稱為單位矩陣。n×n的單位矩陣表示為In。
In=1000001000001000001000001---(1.2)]]>如果A和B和n×n矩陣有如下關系,我們稱它們互為逆矩陣AB=BA=In(1.3)乘以一個相加了一個向量的矩陣的乘法運算組成的變換稱為仿射變換。
AES/Rijndael的SubByte()函數(shù)是非線性的字節(jié)置換,該置換使用一個置換表(S-box)獨立地對狀態(tài)的每個字節(jié)進行操作。這個可逆的S箱(S-box)是由組合兩個變換構成的,S箱是不可逆的1.采用前面描述的在所述有限域GF(28)中的乘法逆元素;元素{00}映射到它自身。
2.應用下面的仿射變換(在GF(2))
bi′=b<i>mod8b<i+4>mod8b<i+5>mod8b<i+6>mod8b<i+7>mod8ci(1.4)在矩陣形式下,S箱的仿射變換元素可以表示如下(“FIPS 197”,NIST,p.16)b′0b′1b′2b′3b′4b′5b′6b′7=1000111111000111111000111111000111111000011111000011111000011111b0b1b2b3b4b5b6b7+11000110---(1.5)]]>如果這以AES/Rijndael提案中建議的查找表實現(xiàn),則可能要求256條目的ROM或多路復用器。為了實現(xiàn)AES/Rijndael算法,可能要求該表的12個示例。這個矩陣的逆矩陣可以是如下所示b′0b′1b′2b′3b′4b′5b′6b′7=0010010110010010010010011010010001010010001010011001010001001010b0b1b2b3b4b5b6b7+10100000---(1.6)]]>如果這以AES/Rijndael提案中建議的查找表實現(xiàn),則可能要求128條目的16位字的ROM或多路復用器。為了實現(xiàn)AES/Rijndael算法,可能要求該表的12個示例。
因而,為了減少門的計數(shù),就需要一種幾乎共享所有用于仿射變換的電路的系統(tǒng)和方法。為了達到高速率和小的門電路尺寸,設計必須被構造為使得最大路徑不是明顯太長并且門電路尺寸很小,以至可以不需明顯增加基片尺寸就可以復制該設計以便促進并行處理。增加基片尺寸會增加更多代價和功率消耗,使得產(chǎn)品較不適于銷售。本發(fā)明是一種以略微增加最大路徑延遲為代價來減小門電路尺寸的設備和方法。這使得所述電路更小,因而對于高數(shù)據(jù)速率設計更有吸引力。
本發(fā)明把AES/Rijndael中每對仿射變換和逆仿射變換的發(fā)生減小到一次變換,全仿射變換。在優(yōu)選實施例中,電路通過很少的復制邏輯來執(zhí)行正常的和逆仿射變換。在這個優(yōu)選實施例中,通過以一個乘法逆元素ROM實現(xiàn)全仿射變換,所述邏輯顯著減小,并且最大路徑延遲與多路復用器實現(xiàn)方式比有所減小,而與ROM實現(xiàn)方式比只略大。
因此,本發(fā)明的優(yōu)選實施例采用用于乘法逆元素的只讀存儲器ROM和用于仿射變換的減小的組合邏輯實現(xiàn)。這個實現(xiàn)方式門電路數(shù)很低,且有可比的最大延遲路徑。
圖1示出了輸入和輸出狀態(tài)陣列(“FIPS 197”,NIST,p.9)。
圖2示出了當前技術的子字節(jié)函數(shù)的ROM和查找表(多路復用器)實現(xiàn)方式和本發(fā)明的全仿射實現(xiàn)方式的比較。
圖3示出了與本發(fā)明的全仿射變換一起使用的ROM或查找表。
圖4示出了全仿射組合邏輯的網(wǎng)表。
本發(fā)明部分基于如下事實,即矩陣方程(1.5)和(1.6)從最后一行開始每一行是從前一行左移一位。在本發(fā)明中,把每個矩陣的第一行稱為“負載模式(load pattern)”。于是仿射變換矩陣的“負載模式”是{10001111},逆仿射變換矩陣的“負載模式”是{00100101}。注意每個“負載模式”中0的數(shù)目是奇數(shù),且是在本發(fā)明的系統(tǒng)和方法中能夠將兩個變換合并為一個電路的過程中,0的數(shù)目是一個很重要的特性。
如果每個仿射變換都如Daemen和Rijmen建議的使用異或門電路實現(xiàn),則電路方程如下仿射變換方程b′0=5(b0ρb4ρb5ρb6ρb7)b′1=5(b0ρb1ρb5ρb6ρb7)b′2=(b0ρb1ρb2ρb6ρb7)b′3=(b0ρb1ρb2ρb3ρb7) (1.7)b′4=(b0ρb1ρb2ρb3ρb4)b′5=5(b1ρb2ρb3ρb4ρb5)b′6=5(b2ρb3ρb4ρb5ρb6)b′7=(b3ρb4ρb5ρb6ρb7)注意每個方程有奇數(shù)個且數(shù)目相同的項5個。向量的相加決定一些方程求反。所以每個方程中的項的數(shù)目由“負載模式”決定。求反的數(shù)目由被稱為“負載向量”的向量的相加決定。
逆仿射變換方程
b′0=5(b2ρb5ρb7)b′1=(b0ρb3ρb6)b′2=5(b1ρb4ρb7)b′3=(b0ρb2ρb5)(1.8)b′4=(b1ρb3ρb6)b′5=(b2ρb4ρb7)b′6=(b0ρb3ρb5)b′7=(b1ρb4ρb6)每個方程有奇數(shù)個且數(shù)目相同的項3個。向量的相加決定一些方程求反。所以每個方程中的項的數(shù)目由“負載模式”決定。求反的數(shù)目由向量的相加來決定。
這個相加向量現(xiàn)在也可以作為“負載向量”使用。觀察兩組方程,似乎其中沒有要合并的公共邏輯。如果用所包含的“負載模式”來重寫方程并且使用向量的相加來確定求反,則顯示出一個公共電路。這利用異或操作的特性來實現(xiàn),這些特性是ABC=CBA (1.9)A0=A (2.0)A1=-A (2.1)AA=0 (2.2)在一個優(yōu)選實施例中,實現(xiàn)仿射和逆仿射變換兩者的電路包括乘法逆元素ROM,并且代表這兩種變換的邏輯表示如下,以p表示“負載模式”且v表示“負載向量”。例如,仿射矩陣的方程七變?yōu)槿缦耣′7=[(b0≅p1)ρ(b1≅p2)ρ(b2≅p3)ρ(b3≅p4)ρ(b4≅p5)ρ(b5≅p6)ρ(b6≅p7)ρ(b7≅p0)]ρv7]]>(2.3)示例的數(shù)目已經(jīng)減半。由于p和b的與操作產(chǎn)生0,所以該方程對于仿射和逆仿射變換都起作用。因為b與1XOR(異或)總是得到b的反,所以在必要時,每次使用v7都對該方程求反。
比較使用以兩種方式實現(xiàn)由ARS/Rijndael提案(FIPS197)建議的設計(1)128-條目、16-位字的ROM,和
(2)以多路復用器形式實現(xiàn)的128-條目、16-位字的查找表,所述ROM,多路復用器和本發(fā)明的全仿射電路實施例通過使用最大路徑分析而合成與同步。圖2給出了與ROM實現(xiàn)方式的比較結果,其中給出了門電路的尺寸以及微米級的尺寸。沒有考慮凈面積,因為線路負載模型隨不同技術而不同。
一個ROM或查找表的優(yōu)選實施例包含圖3中示出的十六進制的值。
圖4顯示一個優(yōu)選實施例的全仿射組合邏輯的網(wǎng)表。用于該實現(xiàn)實現(xiàn)的編碼包含在附錄A中。
本發(fā)明適用于所有能夠安全通信的系統(tǒng)和設備中,包括安全網(wǎng)絡處理器,安全鍵盤設備,磁卡讀卡機設備,智能卡讀卡機設備和無線802.11設備。
以上描述的實施例只是典型例子,對本領域的技術人員來說它們的修改和變化顯而易見。在不偏離附屬權利要求中包含的本發(fā)明的范圍的情況下,可以對以上描述的實施例做出各種修改。
附錄ARTL用于實現(xiàn)仿射,所有的電路如下‘時間量程10ms/10nsmodule aes_affine_all(byteOut,//輸出字節(jié)byteIn,//輸入字節(jié)enCrypt//1=加密 0=解密);//----------------------------------------//端口//----------------------------------------
input enCrypt;input[7:0]byteIn;output[7:0]byteOut;//邏輯歸約wire[4:0]byteOut_int;wire
y_inv,y,y_int;wand byteOut_7_0,byteOut_7_1,byteOut_7_2,byteOut_7_3,byteOut_7_4,byteOut_7_5,byteOut_7_6,byteOut_7_7;wand byteOut_4_0,byteOut_4_1,byteOut_4_2,byteOut_4_3,byteOut_4_4,byteOut_4_5,byteOut_4_6,byteOut_4_7;wandbyteOut_int_4_0,byteOut_int_4_1,byteOut_int_4_2,byteOut_int_4_3,byteOut_int_4_4,byteOut_int_4_5,byteOut_int_4_6,byteOut_int_4_7;wandbyteOut_int_3_0,byteOut_int_3_1,byteOut_int_3_2,byteOut_int_3_3,byteOut_int_3_4,byteOut_int_3_5,byteOut_int_3_6,byteOut_int_3_7;wand byteOut_3_0,byteOut_3_1,byteOut_3_2,byteOut_3_3,byteOut_3_4,byteOut_3_5,byteOut_3_6,byteOut_3_7;wandbyteOut_int_2_0,byteOut_int_2_1,byteOut_int_2_2,byteOut_int_2_3,byteOut_int_2_4,byteOut_int_2_5,byteOut_int_2_6,byteOut_int_2_7;wandbyteOut_int_1_0,byteOut_int_1_1,byteOut_int_1_2,byteOut_int_1_3,byteOut_int_1_4,byteOut_int_1_5,byteOut_int_1_6,byteOut_int_1_7;wandbyteOut_int_0_0,byteOut_int_0_1,byteOut_int_0_2,byteOut_int_0_3,byteOut_int_0_4,byteOut_int_0_5,byteOut_int_0_6,byteOut_int_0_7;assign y_inv=8’b00100101;assign y=8’b10001111;assign y_int=(enCrypt)?y:y_inv;assign byteOut_7_0=byteIn
;assign byteOut_7_0=y(tǒng)_int[1];assign byteOut_7_1=byteIn[1];assign byteOut_7_1=y(tǒng)_int[2];assign byteOut_7_2=byteIn[2];assign byteOut_7_2=y(tǒng)_int[3];assign byteOut_7_3=byteIn[3];assign byteOut_7_3=y(tǒng)_int[4];assign byteOut_7_4=byteIn[4];assign byteOut_7_4=y(tǒng)_int[5];assign byteOut_7_5=byteIn[5];assign byteOut_7_5=y(tǒng)_int[6];assign byteOut_7_6=byteIn[6];assign byteOut_7_6=y(tǒng)_int[7];assign byteOut_7_7=byteIn[7];assign byteOut_7_7=y(tǒng)_int
;assign byteOut[7]=byteOut_7_0^byteOut_7_1^byteOut_7_2^byteOut_7_3^byteOut_7_4^byteOut_7_5^byteOut_7_6^byteOut_7_7;assign byteOut_int_4_0=byteIn
;assign byteOut_int_4_0=y(tǒng)_int[2];assign byteOut_int_4_1=byteIn[1];
assign byteOut_int_4_1=y(tǒng)_int[3];assign byteOut_int_4_2=byteIn[2];assign byteOut_int_4_2=y(tǒng)_int[4];assign byteOut_int_4_3=byteIn[3];assign byteOut_int_4_3=y(tǒng)_int[5];assign byteOut_int_4_4=byteIn[4];assign byteOut_int_4_4=y(tǒng)_int[6];assign byteOut_int_4_5=byteIn[5];assign byteOut_int_4_5=y(tǒng)_int[7];assign byteOut_int_4_6=byteIn[6];assign byteOut_int_4_6=y(tǒng)_int
;assign byteOut_int_4_7=byteIn[7];assign byteOut_int_4_7=y(tǒng)_int[1];assign byteOut_int[4]=byteOut_int_4_0^byteOut_int_4_1^byteOut_int_4_2^byteOut_int_4_3^byteOut_int_4_4^byteOut_int_4_5^byteOut_int_4_6^byteOut_int_4_7;assign byteOut_int_3_0=byteIn
;assign byteOut_int_3_0=y(tǒng)_int[3];assign byteOut_int_3_1=byteIn[1];assign byteOut_int_3_1=y(tǒng)_int[4];assign byteOut_int_3_2=byteIn[2];assign byteOut_int_3_2=y(tǒng)_int[5];assign byteOut_int_3_3=byteIn[3];assign byteOut_int_3_3=y(tǒng)_int[6];assign byteOut_int_3_4=byteIn[4];assign byteOut_int_3_4=y(tǒng)_int[7];assign byteOut_int_3_5=byteIn[5];assign byteOut_int_3_5=y(tǒng)_int
;assign byteOut_int_3_6=byteIn[6];assign byteOut_int_3_6=y(tǒng)_int[1];assign byteOut_int_3_7=byteIn[7];assign byteOut_int_3_7=y(tǒng)_int[2];assign byteOut_int[3]=byteOut_int_3_0^byteOut_int_3_1^byteOut_int_3_2^byteOut_ int_3_3^byteOut_int_3_4^byteOut_int_3_5^byteOut_int_3_6^byteOut_int_3_7;assign byteOut_4_0=byteIn
;assign byteOut_4_0=y(tǒng)_int[4];assign byteOut_4_1=byteIn[1];assign byteOut_4_1=y(tǒng)_int[5];assign byteOut_4_2=byteIn[2];assign byteOut_4_2=y(tǒng)_int[6];assign byteOut_4_3=byteIn[3];assign byteOut_4_3=y(tǒng)_int[7];assign byteOut_4_4=byteIn[4];assign byteOut_4_4=y(tǒng)_int
;assign byteOut_4_5=byteIn[5];assign byteOut_4_5=y(tǒng)_int[1];assign byteOut_4_6=byteIn[6];assign byteOut_4_6=y(tǒng)_int[2];assign byteOut_4_7=byteIn[7];assign byteOut_4_7=y(tǒng)_int[3];
assign byteOut[4]=byteOut_4_0^byteOut_4_1^byteOut_4_2^byteOut_4_3^byteOut_4_4^byteOut_4_5^byteOut_4_6^byteOut_4_7;assign byteOut_3_0=byteIn
;assign byteOut_3_0=y(tǒng)_int[5];assign byteOut_3_1=byteIn[1];assign byteOut_3_1=y(tǒng)_int[6];assign byteOut_3_2=byteIn[2];assign byteOut_3_2=y(tǒng)_int[7];assign byteOut_3_3=byteIn[3];assign byteOut_3_3=y(tǒng)_int
;assign byteOut_3_4=byteIn[4];assign byteOut_3_4=y(tǒng)_int[1];assign byteOut_3_5=byteIn[5];assign byteOut_3_5=y(tǒng)_int[2];assign byteOut_3_6=byteIn[6];assign byteOut_3_6=y(tǒng)_int[3];assign byteOut_3_7=byteIn[7];assign byteOut_3_7=y(tǒng)_int[4];assign byteOut[3]=byteOut_3_0^byteOut_3_1^byteOut_3_2^byteOut_3_3^byteOut_3_4^byteOut_3_5^byteOut_3_6^byteOut_3_7;assign byteOut_int_2_0=byteIn
;assign byteOut_int_2_0=y(tǒng)_int[6];assign byteOut_int_2_1=byteIn[1];assign byteOut_int_2_1=y(tǒng)_int[7];assign byteOut_int_2_2=byteIn[2];assign byteOut_int_2_2=y(tǒng)_int
;assign byteOut_int_2_3=byteIn[3];assign byteOut_int_2_3=y(tǒng)_int[1];assign byteOut_int_2_4=byteIn[4];assign byteOut_int_2_4=y(tǒng)_int[2];assign byteOut_int_2_5=byteIn[5];assign byteOut_int_2_5=y(tǒng)_int[3];assign byteOut_int_2_6=byteIn[6];assign byteOut_int_2_6=y(tǒng)_int[4];assign byteOut_int_2_7=byteIn[7];assign byteOut_int_2_7=y(tǒng)_int[5];assign byteOut_int[2]=(~byteOut_int_2_0&byteOut_int_2_1|~byteOut_int_2_1&
byteOut_int_2_0)^(~byteOut_int_2_2&byteOut_int_2_3|~byteOut_int_2_3&byteOut_int_2_2)^(~byteOut_int_2_4&byteOut_int_2_5|~byteOut_int_2_5&byteOut_int_2_4)^(~byteOut_int_2_6&byteOut_int_2_7|~byteOut_int_2_7&byteOut_int_2_6);assign byteOut_int_1_0=byteIn
;assign byteOut_int_1_0=y(tǒng)_int[7];assign byteOut_int_1_1=byteIn[1];assign byteOut_int_1_1=y(tǒng)_int
;assign byteOut_int_1_2=byteIn[2];assign byteOut_int_1_2=y(tǒng)_int[1];assign byteOut_int_1_3=byteIn[3];assign byteOut_int_1_3=y(tǒng)_int[2];
assign byteOut_int_1_4=byteIn[4];assign byteOut_int_1_4=y(tǒng)_int[3];assign byteOut_int_1_5=byteIn[5];assign byteOut_int_1_5=y(tǒng)_int[4];assign byteOut_int_1_6=byteIn[6];assign byteOut_int_1_6=y(tǒng)_int[5];assign byteOut_int_1_7=byteIn[7];assign byteOut_int_1_7=y(tǒng)_int[6];assign byteOut_int[1]=byteOut_int_1_0^byteOut_int_1_1^byteOut_int_1_2^byteOut_int_1_3^byteOut_int_1_4^byteOut_int_1_5^byteOut_int_1_6^byteOut_int_1_7;assign byteOut_int_0_0=byteIn
;assign byteOut_int_0_0=y(tǒng)_int
;assign byteOut_int_0_1=byteIn[1];assign byteOut_int_0_1=y(tǒng)_int[1];assign byteOut_int_0_2=byteIn[2];assign byteOut_int_0_2=y(tǒng)_int[2];assign byteOut_int_0_3=byteIn[3];assign byteOut_int_0_3=y(tǒng)_int[3];assign byteOut_int_0_4=byteIn[4];assign byteOut_int_0_4=y(tǒng)_int[4];assign byteOut_int_0_5=byteIn[5];assign byteOut_int_0_5=y(tǒng)_int[5];assign byteOut_int_0_6=byteIn[6];assign byteOut_int_0_6=y(tǒng)_int[6];assign byteOut_int_0_7=byteIn[7];assign byteOut_int_0_7=y(tǒng)_int[7];assign byteOut_int
=byteOut_int_0_0^byteOut_int_0_1^byteOut_int_0_2^byteOut_int_0_3^byteOut_int_0_4^byteOut_int_0_5^byteOut_int_0_6^byteOut_int_0_7;assign byteOut[6]=(enCrypt)?~byteOut_int[4]byteOut_int[4];assign byteOut[5]=(enCrypt)?~byteOut_int[3]byteOut_int[3];assign byteOut[2]=(enCrypt)?byteOut_int[2]~byteOut_int[2];assign byteOut[1]=(enCrypt)?~byteOut_int[1]byteOut_int[1];assign byteOut
=~byteOut_int
;endmodule
權利要求
1.一種執(zhí)行Rijndael塊密碼的子字節(jié)函數(shù)的設備,包括通過組合第一和第二變換構造的S箱,其中第一變換是一個查找表(300),第二變換是執(zhí)行仿射和逆仿射變換這二者的全仿射變換。
2.依照權利要求1所述的設備,其中查找表(300)是在有限域GF(28)中的乘法逆元素,其中的{00}映射到自身;和全仿射變換使用組合邏輯電路(400)實現(xiàn)。
3.依照權利要求2所述的設備,其中查找表(300)用只讀存儲器(ROM)實現(xiàn);和組合邏輯電路(400)實現(xiàn)下面方程b′0=[(b0≅p0)ρ(b1≅p1)ρ(b2≅p2)ρ(b3≅p3)ρ(b4≅p4)ρ(b5≅p5)ρ(b6≅p6)ρ(b7≅p7)]ρv0]]>b′1=[(b0≅p7)ρ(b1≅p0)ρ(b2≅p1)ρ(b3≅p2)ρ(b4≅p3)ρ(b5≅p4)ρ(b6≅p5)ρ(b7≅p6)]ρv1]]>b′2=[(b0≅p6)ρ(b1≅p7)ρ(b2≅p0)ρ(b3≅p1)ρ(b4≅p2)ρ(b5≅p3)ρ(b6≅p4)ρ(b7≅p5)]ρv2]]>b′3=[(b0≅p5)ρ(b1≅p6)ρ(b2≅p7)ρ(b3≅p0)ρ(b4≅p1)ρ(b5≅p2)ρ(b6≅p3)ρ(b7≅p4)]ρv3]]>b′4=[(b0≅p4)ρ(b1≅p5)ρ(b2≅p6)ρ(b3≅p7)ρ(b4≅p0)ρ(b5≅p1)ρ(b6≅p2)ρ(b7≅p3)]ρv4]]>b′5=[(b0≅p3)ρ(b1≅p4)ρ(b2≅p5)ρ(b3≅p6)ρ(b4≅p7)ρ(b5≅p0)ρ(b6≅p1)ρ(b7≅p2)]ρv5]]>b′6=[(b0≅p2)ρ(b1≅p3)ρ(b2≅p4)ρ(b3≅p5)ρ(b4≅p6)ρ(b5≅p7)ρ(b6≅p0)ρ(b7≅p1)]ρv6]]>b′7=[(b0≅p1)ρ(b1≅p2)ρ(b2≅p3)ρ(b3≅p4)ρ(b4≅p5)ρ(b5≅p6)ρ(b6≅p7)ρ(b7≅p0)]ρv7]]>其中p=p0p1p2p3p4p5p6p7作為負載模式,該負載模式由用于仿射變換的{10001111}和用于逆仿射變換的{00100101}組成,v=v0v1v2v3v4v5v6v7作為負載向量,該負載向量由用于仿射變換的{11000110}和用于逆仿射變換的{10100000}組成。
4.一種用于加密和解密數(shù)據(jù)的設備,包括數(shù)據(jù)處理模塊,被安排來執(zhí)行字節(jié)置換,其中該數(shù)據(jù)處理模塊的至少一部分包括查找表(300),存儲該查找表的存儲裝置,和具有共享邏輯的電路(400),用于執(zhí)行既完成仿射轉換也完成逆仿射轉換的單變換。
5.依照權利要求4所述的設備,其中所述查找表(300)是有限域GF(28)的乘法逆元素。
6.依照權利要求5所述的設備,其中所述查找表(300)用只讀存儲器(ROM)實現(xiàn)。
7.依照權利要求4所述的設備,其中所述查找表(300)用只讀存儲器(ROM)實現(xiàn)。
8.依照權利要求4所述的設備,其中該設備包括安排在數(shù)據(jù)處理流水線中的數(shù)據(jù)處理模塊的多個實例。
9.依照權利要求4所述的設備,其中該設備被安排為依照Rijndael塊密碼執(zhí)行加密或解密,其中所述數(shù)據(jù)處理模塊被安排成實現(xiàn)一次Rijndael回合。
10.依照權利要求9所述的設備,其中數(shù)據(jù)處理模塊被安排為通過使用查找表實現(xiàn)Rijndael回合的子字節(jié)變換,該變換由用于加密的仿射變換和用于解密的逆仿射變換組成。
11.依照權利要求10所述的設備,其中所述查找表(300)用只讀存儲器(ROM)實現(xiàn)。
12.一種用于執(zhí)行Rijndael塊密碼回合的子字節(jié)函數(shù)的設備,該設備包括S箱,S箱由以下的組合構成,在有限域GF(28)中獲得乘法逆元素的裝置,和執(zhí)行全仿射變換的裝置,全仿射變換是由仿射和逆仿射變換組成的單仿射變換。
13.依照權利要求12所述的設備,其中用于獲得乘法逆元素的所述裝置是查找表(300),用于執(zhí)行全仿射變換的裝置是組合邏輯電路(400)。
14.一種用于執(zhí)行Rijndael塊密碼的Rijndael回合的子字節(jié)函數(shù)的方法,該方法包括以下步驟創(chuàng)建用于有限域GF(28)中的乘法逆元素的查找表(300);提供由仿射和逆仿射變換組成為單仿射變換的全仿射變換,;組成由查找表(300)和全仿射變換構成的S箱;使用組成的S箱執(zhí)行非線形字節(jié)置換。
15.權利要求14的方法,其中所述提供步驟進一步包括提供執(zhí)行所述單仿射變換的共享邏輯電路(400)的步驟。
16.權利要求14的方法,進一步包括在只讀存儲器(ROM)中存儲查找表(300)的步驟。
17.權利要求16的方法,其中所述提供步驟進一步包括實現(xiàn)執(zhí)行單仿射變換的共享邏輯電路(400)的步驟。
18.權利要求14的方法,其中所述查找表(300)是在有限域GF(28)中的乘法逆元素,其中的{00}映射到自身;所述提供步驟進一步包括實現(xiàn)執(zhí)行所述單仿射變換的組合邏輯電路(400)的步驟。
全文摘要
提供一種用于高級加密標準子字節(jié)函數(shù)的小型硬件實現(xiàn)方式,該實現(xiàn)方式在單個全仿射變換中使用乘法逆元素ROM執(zhí)行仿射變換和逆仿射變換。邏輯電路明顯減小,且最大路徑延遲與多路復用器實現(xiàn)方式相比大大地減小了,與ROM實現(xiàn)方式相比略微大些。
文檔編號H04L9/06GK1788449SQ200380105837
公開日2006年6月14日 申請日期2003年11月28日 優(yōu)先權日2002年12月13日
發(fā)明者B·C·塞克斯頓 申請人:皇家飛利浦電子股份有限公司