高級加密標準AES外文翻譯_第1頁
高級加密標準AES外文翻譯_第2頁
高級加密標準AES外文翻譯_第3頁
高級加密標準AES外文翻譯_第4頁
高級加密標準AES外文翻譯_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、加密它:用新的高級加密標準(aes)保持你的數據安全james mccaffrey 摘要 aes(the advanced encryption standard)是美國國家標準與技術研究所用于加密電子數據的規范。它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法。本文展示了aes的概貌并解析了它使用的算法。包括一個完整的c#實現和加密.net數據的舉例。在讀完本文后你將能用aes加密、測試 基于aes的軟件并能在你的系統中使用aes加密。美國國家標準與技術研究所(nist)在2002年5月26日建立了新的高級數據加密標準(aes)規范。本文中我將提供一個用c#編寫的的能運行的 a

2、es 實現,并詳細解釋到底什么是 aes 以及編碼是如何工作的。我將向您展示如何用 aes 加密數據并擴展本文給出的代碼來開發一個商業級質量的 aes 類。我 還將解釋怎樣把 aes 結合到你的軟件系統中去和為什么要這么做,以及如何測試基于 aes 的軟件。aes 是一個新的可以用于保護電子數據的加密算法。明確地說,aes 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節)分組加密和解密數據。與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和解密數據。通過分組密碼返回的加密數據 的位數與輸入數據相同。迭代加密使用一個循環結

3、構,在該循環中重復置換(permutations )和替換(substitutions)輸入數據。figure 1 顯示了 aes 用192位密鑰對一個16位字節數據塊進行加密和解密的情形。aes算法概述 aes 算法是基于置換和代替的。置換是數據的重新排列,而代替是用一個單元數據替換另一個。aes 使用了幾種不同的技術來實現置換和替換。為了闡明這些技術,讓我們用 figure 1 所示的數據討論一個具體的 aes 加密例子。下面是你要加密的128位值以及它們對應的索引數組:00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff0 1 2 3 4 5 6

4、 7 8 9 10 11 12 13 14 15192位密鑰的值是:00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 170 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23figure 2 s-盒( sbox )當 aes 的構造函數(constructor)被調用時,用于加密方法的兩個表被初始化。第一個表是代替盒稱為s-盒。它是一個1616的矩陣。s-盒的前五行和前五列如 figure 2 所示。在幕后,加密例程獲取該密鑰數組并用它來生

5、成一個名為w的密鑰調度表,figure 3 所示。figure 3 密鑰調度表(key sched)w 最初的 nk (6) 行被作為種子,用原始密鑰值(0x00 到0x17)。剩余行從種子密鑰來產生。變量 nk 代表以 32 位字為單位的種子密鑰長度。稍后我分析 aes 實現時你將清楚地看到 w 是怎樣產生的。 關鍵是這里現在有許多密鑰使用而不只是一個。這些新的密鑰被稱為輪密鑰(round keys)以將它們與原始種子密鑰區別開來。figure 4 state (態)數組aes 加密例程開始是拷貝 16 字節的輸入數組到一個名為 state (態)的 44 字節矩陣中。(參見 figure

6、4)。aes 加密算法 取名為 cipher,它操作 state,其過程描述的偽代碼參見 figure 5 。在規范中,加密算法實現的一個預備的處理步驟被稱為 addroundkey(輪密鑰加)。addroundkey 用密鑰調度表中的前四行對 state 矩陣實行一個字節一個字節的異或(xor)操作,并用輪密鑰表 wc,r 異或 輸入 stater,c。舉個例子,如果 state 矩陣的第一行保存的字節是 00, 44, 88, cc ,第一列密鑰調度表是 00, 04, 08, 0c ,那么新的 state0,2 值是用 w2,0( 0x08 或 0x80 )異或 state0,2(0x8

7、8)的結果:1 0 0 0 1 0 0 00 0 0 0 1 0 0 0 xor1 0 0 0 0 0 0 0aes 算法的主循環對 state 矩陣執行四個不同的操作,在規范中被稱為 subbytes(字節替換)、shiftrows(行位移變換)、mixcolumns(列混合變換) 和 addroundkey。除了每次循環 addroundkey 都被調用并使用密鑰調度表的下面四行外,addroundkey 與預備處理步驟中的 addroundkey 相同。subbytes 例程是一個代替操作,它將 state 矩陣中的每個字節替換成一個由 sbox 決定的新字節。比如,如果 state0,

8、1的值是 0x40 如果你想找到它的代替者,你取 state0,1 的值 (0x40) 并讓 x 等于左邊的數字(4)并讓 y 等于右邊的數字(0)。然后你用 x 和 y 作為索引 進到 sbox 表中尋找代替值,如 figure 2 所示。shiftrows 是一個置換操作,它將 state 矩陣中的字節向左旋轉。figure 6 示范了 shiftrows 如何操作 state。state 的第0行被向左旋轉0個位置,state 的第1行被向左旋轉1個位置,state 的第2行被向左旋轉2個位置,而 state 的第3行被向左旋轉3個 位置。figure 6 對 state 進行 shif

9、trows 操作mixcolumns 是一個代替操作,它是理解 aes 算法時最具技巧(或者說是最需要動腦筋的部分)的部分。它用 state 字節列的值進行數學域加和域乘的結果代替每個字節。我將在下一節中 詳細解釋專門的域加和域乘細節。假設 state0,1 的值是0x09,并且列1上的其它值分別為 0x60,0xe1 和 0x04,那么state0,1的新值計算如下:state0,1 = (state0,1 * 0x01) + (state1,1 * 0x02) +(state2,1 * 0x03) +(state3,1 * 0x01)= (0x09 * 0x01) + (0x60 * 0x

10、02) + (0xe1 * 0x03) +(0x04 * 0x01)= 0x57此處加法和乘法是專門的數學域操作,而不是平常整數的加法和乘法。subbytes、shiftrows、mixcolumns 和 addroundkey 四個操作在一個執行 nr 次的循環里被調用,nr 為給定密鑰大小的輪數減 1。加密算法使用的輪數要么是10,12,要么是14,這依賴于種子密鑰長度是128位、192 位還是 256 位。在這個例子中,因為 nr 等于12, 則這四個操作被調用11次。該迭代完成后,在拷貝 state 矩陣到輸出參數前,加密算法調用 subbytes、shiftrows 和 addrou

11、ndkey 后結束。大致說來,aes 加密算法的核心有四個操作。addroundkey 使用從種子密鑰值中生成的輪密鑰代替 4 組字節。subbytes 替換用一個代替表 替換單個字節。shiftrows 通過旋轉 4字節行 的 4 組字節進行序列置換。mixcolumns 用域加和域乘的組合來替換字節。有限域gf(28)的加法和乘法正如你所看到的,aes 加密算法使用相當簡單明了的技術來代替和置換,除 mixcolumns 例程以外。mixcolumns 使用特殊的加法和乘法。aes 所用的加法和乘法是基于數學(譯者注:近世代數)的域論。尤其是 aes 基于有限域gf(28)。gf(28)由

12、一組從 0x00 到 0xff 的256個值組成,加上加法和乘法,因此是(28)。gf代表伽羅瓦域,以發明這一理論的數學家的名字命名。gf(28) 的一個特性是一個加法或乘法的操作的結果必須是在0x00 . 0xff這組數中。雖然域論是相當深奧的,但gf(28)加法的最終結果卻很簡單。gf(28) 加法就是異或(xor)操作。然而,gf(28)的乘法有點繁難。正如你稍后將在 c# 實現中所看到的,aes的加密和解密例程需要知道怎樣只用七個常量 0x01、0x02、0x03、0x09、0x0b、0x0d 和 0x0e 來相乘。所以我不全面介紹gf(28)的乘法,而只是針對這七種特殊情況進行說明。

13、在gf(28)中用0x01的乘法是特殊的;它相當于普通算術中用1做乘法并且結果也同樣任何值乘0x01等于其自身。現在讓我們看看用0x02做乘法。和加法的情況相同,理論是深奧的,但最終結果十分簡單。只要被乘的值小于0x80,這時乘法的結果就是該值左移1比特位。如果被乘的值大于或等于0x80,這時乘法的結果就是左移1比特位再用值0x1b異或。它防止了“域溢出”并保持乘法的乘積在范圍以內。一旦你在gf(28)中用0x02建立了加法和乘法,你就可以用任何常量去定義乘法。用0x03做乘法時,你可以將 0x03 分解為2的冪之和。為了用 0x03 乘以任意字節b, 因為 0x03 = 0x02 + 0x0

14、1,因此:b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01)這是可以行得通的,因為你知道如何用 0x02 和 0x01 相乘和相加,同哩,用0x0d去乘以任意字節b可以這樣做: b * 0x0d = b * (0x08 + 0x04 + 0x01) = (b * 0x08) + (b * 0x04) + (b * 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01)在加解密算法中,aes mixcolumns 例程的其它乘法遵循大體相同的模式,如下所示: b

15、* 0x09 = b * (0x08 + 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x01)b * 0x0b = b * (0x08 + 0x02 + 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02) + (b * 0x01)b * 0x0e = b * (0x08 + 0x04 + 0x02) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x02)總之,在gf(28)中,加法是異或操作。其乘法將分解成加法和用0x02做的乘法,而用0x02做的乘法是

16、一個有條件的左移1比特位。aes規范中包括大量 有關gf(28)操作的附加信息。密鑰擴展aes加密和解密算法使用了一個由種子密鑰字節數組生成的密鑰調度表。aes規范中稱之為密鑰擴展例程(keyexpansion)。從本質上講,從一個原始密鑰中生成多重密鑰以代替使用單個密鑰大大增加了比特位的擴散。雖然不是無法抵御的困難,但理解 keyexpansion 仍是 aes 算法中的一個難點。keyexpansion 例程高級偽代碼如下所示: keyexpansion(byte key, byte4 w) copy the seed key into the first rows of w for ea

17、ch remaining row of w use two of the previous rows to create a new row “用前面兩行來產生一個新行”(“use two of the previous rows to create a new row”)的例程用到了兩個子 例程,rotword 和 subword 以及一個名為“rcon”的常數表(作為“輪常數”)。讓我們先來逐個看一下這三東西,然后再回到整個 keyexpansion 的討論中來。rotword 例程很簡單。它接受一個4個字節的數組并將它們向左旋轉一個位置。因為輪調度表 w 有四列,rotword 將 w的

18、1行左旋。注意 keyexpansion 使用的這個 rotword 函數與加密算法使用的 shiftrows (行位移變換)例程非常相似,只是它 處理的是單行密鑰調度 w,而不是整個加密狀態表 state。subword 例程使用替換表 sbox 對一給定的一行密鑰調度表 w 進行逐字節替換。keyexpansion 操作中的替換實際上就像在加密算法中的 替換一樣。被代替的輸入字節被分成 (x,y) 對,它被當作進入替換表 sbox 的索引。舉例來說,0x27的代替結果是 x2 和 y7,并且 sbox2,7 返回 0xcc。keyexpansion 例程使用一個被稱為輪常數表的數組 rco

19、n。這些常數都是4個字節,每一個與密鑰調度表的某一行相匹配。aes 的 keyexpansion 例程需要11個輪常數。你可以在 figure 7 中看到這些常數清單。每個輪常數的最左邊的字節是gf(28)域中2的冪次方。它的另一個表示方法是其每個值是前一個值乘上0x02,正如前一部分討論 gf(28) 乘法 時所描述的那樣。注意 0x80 0x02 = 0x1b 是 0x80 左移1個比特位后緊接著與 0x1b 進行異或,如前所述。現在讓我們更進一步看看 keyexpansion 內幕中的循環。這里所用的偽碼比以前更為詳細,這個循環是:for (row = nk; row 操作符右移 4 位

20、將得到 x 索引,并且與 0000 1111 進行邏輯與得到 y 值。雖然有些長,但比實際代碼更可讀,我可以象下面這樣:int x = word0 4;int y = word0 & 0x0f;byte substitute = this.sboxx,y;result0 = substitute;代替我原來用的代碼:result0 = this.sbox word0 4, word0 & 0x0f ;總的來說,aes 構造函數接受一個密鑰的長度為128,192 或 256 位和一個字節數組種子密鑰值。構造函數為輸入塊長度,種子密鑰長度 以及加密算法的輪數賦值,并將種子密鑰拷貝到一個名為 key

21、 的數據成員中。構造函數還創建了四個表:兩個由加密和解密方法使用的替換表,一個輪常數表,和一個輪密鑰的密鑰調度表。用c#編寫的 aes cipher 方法cipher方法如 figure 11 所示。它真的非常簡單,因為它分出了大部分的工作給私有方法addroundkey, subbytes, shiftrows 和 mixcolumns。cipher 方法以拷貝明文輸入數組到狀態矩陣 state 為開始。最初調用 addroundkey 之后,cipher 方法比總輪數少迭代一次。在最后一輪時,正如規范中所說的那樣,mixcolumns 調用被省略了。addroundkey 和 subbyt

22、es 私有方法的代碼如 figure 12 所示。addroundkey 方法需要知道它處在那一輪,以便它正確引用4行密鑰調度數組 w。請注意 stater,c 是用 wc,r 來異或并不是wr,c。subbytes 方法從輸入字節中提取索引,與 keyexpansion 方法中所用的右移4位和 0x0f 屏蔽技術相同。shiftrows 方法的代碼如 figure 13 所示。回想一下,shiftrows(可能叫做 rotaterows 更好)將 row0 向左旋轉 0 個位置,將 row1 向左旋轉 1 位置等等。把 state 拷貝到 temp 矩陣之后,然后用下面的這行代碼實現轉換:t

23、his.stater, (c + r) % nb = tempr,c;這里利用%操作符的優點抱合一行。mixcolumns 方法(figure 14)用gf(28)加和乘,以字節列中所有其它值的線性組合對每一個字節進行替換。乘法所用的常量系數基于域論的,并且是0x01, 0x02或 0x03中的任意一個值。給定某一列 c ,其替代式如下:state0,c = 0x02 * state0,c +0x03 * state1,c +0x01 * state2,c +0x01 * state3,c state1,c = 0x01 * state0,c +0x02 * state1,c+0x03 * s

24、tate2,c+ 0x01 * state3,cstate2,c = 0x01 * state0,c + 0x01 * state1,c +0x02 * state2,c +0x03 * state3,cstate3,c = 0x03*state0,c+0x01 * state1,c+0x01*state2,c+0x02 * state3,c這些表達式稍微有些長,因此我決定編寫返回 gf(28)與 0x01,0x02 和 0x03 之乘積的私有輔助函數。這些輔助函數非常短。例如,一個字節 b 被 0x03 域乘的代碼如下: return (byte) ( (int)gfmultby02(b)

25、(int)b );正如我前面討論的,被 0x02 乘是所有 gf(28) 乘法的基本操作。我調用了我的 gfmultby02 方法,我改變了使用與規范相同的方法命名慣例,規范上稱此例程為 xtime。cipher 方法其輸入反復應用四個操作來產生加密的輸出。addroundkey 用源于單個原始種子密鑰的多重輪密鑰來替代字節。subbytes 用某個替換表中的值替代字節。shiftrows 用移動字節行置換字節,而 mixcolumns 用某一列的域加和乘法值來替代字節。用c#編寫 aes invcipher 方法aes 解密算法背后的基本原則很簡單:解密一個加密塊,也就是以反向順序還原(un

26、do)每個操作。盡管這是基本概念,但仍有幾個細節要處理。aes規范稱解密例程為 invcipher,而不是 decipher 或 decrypt 中的一個。這是 aes 背后的數學基礎的反映,它基于可逆的數學操作。如果你將這個代碼和 cipher 代碼比較的話,你會看到它比你預期的漂亮很多,但是有兩點例外。首先,在 invcipher 方法中逆方法調用(如 invsubbytes)順序并不完全與在 cipher 方法中相應調用(如 subbytes)的逆向順序正好相同。其次,invcipher 調用的是一個 addroundkey 方法而不是 invaddroundkey 方法。值得注意的是

27、invcipher 算法用密鑰調度表并不是從較高編號的索引處開始向下處理至第0行。invsubbytes,invshiftrows 和 invmixcolumns 方法的代碼和與之有關的 subbytes,shiftrows和 mixcolumns 方法的代碼非常接近。invsubbytes 方法幾乎就是 subbytes 方法,只是它用逆替換表 isbox 而不是 sbox 表。正如你可能猜測到的,isbox 就是還原任何被 sbox 處理的對應操作。比如,如果你有字節 b 等于 0x20,并在 sbox 中找到其代替值,你得到 0xb7。如果你在 isbox 中找到 0xb7的替代值,你便

28、可得到 0x20。相似地,invshiftrows 方法還原 shiftrows 方法 row0 被右移了 0 個位置,row1 被右移了 1個位置,row2 被右移了 2 個位置,而 row3 被右移了 3個位置。invmixcolumns 方法還原 mixcolumns 的工作,但沒有用顯而易見的方法。回想一下,mixcolumns 用原始字節列中的字節線性組合替換狀態矩陣中的每個字節,并且系數是 0x01,0x02,和 0x03,域論再一次得到應用。它證明逆運算是相似的,只是被 0x09,0x0b,0x0d 和 0x0e 乘,如下所示: state0,c = 0x0e * state0,

29、c +0x0b * state1,c + 0x0d * state2,c + 0x09 * state3,cstate1,c = 0x09 * state0,c +0x0e * state1,c +0x0b * state2,c +0x0d * state3,cstate2,c = 0x0d * state0,c +0x09 * state1,c +0x0e * state2,c +0x0b * state3,cstate3,c = 0x0b * state0,c +0x0d * state1,c +0x09 * state2,c +0x0e * state3,c 對于 mixcolumns

30、方法,我決定專門寫一個輔助函數,而不是內聯展開已經較長的表達式或寫一個普通的乘法輔助函數。讓我向你展示一下我示如何編寫這個任何字節 b 被常數 0x0e (在10進制中的14)乘的函數,像任何數字一樣,數字 14 可以被表示成 2 的冪的和,因此,14 等于 2 + 4 + 8。并且 4 等于 2 的平方,8 等于 2 的立方,你可以將14表示為 2 + 22 + 23。記住加法就是 gf(28)中上的異或(),既然我已經有了 gfmultby02 函數,我可以用它得到我的結果: return (byte)( (int)gfmultby02(gfmultby02(gfmultby02(b) /

31、* 23 + */ (int)gfmultby02(gfmultby02(b) /* 22 + */ (int)gfmultby02(b) ); /* 2 */用于 aes 加密算法的所有的操作都是可逆的,因此解密算法本質上是加密的所有操作的倒轉。使用 aes 類用c#實現 aes 的特色之一就簡單。看看 figure 15,它是我用來生成輸出 figure 1 的代碼。聲明了 16 字節 明文輸入硬代碼值和 24 字節(192位)的種子密鑰后,一個 aes 對象被初始化,加密 cipher 方法 將明文加密成為密文,然后再用 invcipher 將密文解密。非常清楚和簡單。因為 aes 對象

32、針對字節數組進行處理,你可以輕松地用它處理.net的其它數據類型。我創建了一個基于 windows 的小demo程序,它接受一個 單純的字符串有 8 個字符 (16-byte) ,對它進行加密和解密處理。運行畫面如 figure 16。figure 16 加密 demo 程序因為加密和解密例程都需要知道用戶定義的密鑰長度,我把它當作一個類范圍的變量來聲明,像這樣: private aes.keysize keysize;注意種子密鑰并不是由用戶定義的。這個 demo 程序用一個“空密鑰”(null key)作為種子密鑰,通過為構造函數提供一個啞參數 new byte16 使得它全部由零字節組成

33、。啞參數的長度是不相關的,因為種子密鑰還是要被初始化為零。空密鑰加密和解密是一個容易和有效的辦法來阻止外界對數據偶然的檢查。在 system.text 中的 encoding.unicode.getbytes和encoding.unicode.getstring 方法使得將一個.net 字符串轉換成一個字節數組變得非常容易,反之亦然。實現選擇現在讓我們看看本文 aes 實現中出現的一些重要的變量,本文提供的代碼可能出現的擴展,以及針對 aes 的密碼分析學攻擊。和我曾經處理的任何代碼一樣,aes 算法也可以用其它可選的途徑來實現。為什么這很重要呢?aes 被試圖廣泛應用于各種系統,從只有很少內

34、存容量的智能卡(smart cards)到大型的多處理器主機系統。在許多情況下,性能是關鍵因素,并且有時內存或處理器資源是有限的。事實上,aes 的每個例程都能針對非常昂貴的內存資源進行性能優化,反之亦然。比如,為替換表sbox 分配 256 個值看起來好像很簡單直白。但是,這些值是基于 gf(28) 理論的,它們都可以用編程方式來生成。逆向替換表和輪常數表也是如此。可選實現另外一個有趣的可能性是 cipher 和 invcipher 方法所用的 gf(28) 乘法。我的實現代碼是一個被 0x02 乘的基本函數,而后是六個調用 gfmultby02 的附加函數。另一個可能性應該是寫一個一般的乘

35、法函數,并用它代替我目前實現的七個單獨函數。另一個極端是你可以用被 0x01, 0x02, 0x03, 0x09, 0x0b, 0x0d 和 0x0e 乘好的所有 256 個可能的字節值構成的一個完整乘積表。此外,實現 gf(28) 乘法另一途徑是通過在兩個 256 個字節的數組里查找,通常稱為 alog 和 log,因為它們在 gf(28)中基于某些類似對數的方法。雖然這里給出的 aes 類完全能用于加密任何形式的.net數據,你可能考慮想用各種方法擴展它。首先,因為本文的重點在于清楚地解釋 aes,所有 錯誤檢查被剝離掉,以我的經驗,為某個象 aes 這樣的類添加合理數量的錯誤檢查將會產生

36、三倍的代碼量膨脹。因為 aes 使用了這么多的數組,需要做很多索引 邊界檢查。例如,所給出的構造函數甚至都不檢查種子密鑰參數的長度。你可能還考慮通過添加更多的特性來擴展 aes 類。最明顯的一個地方是添加加密和解密.net基本數據類型的方法,比如:system.string 和 system.int32。更加雄心勃勃的擴展可能會是實現一個 流數據加密類。aes 的安全性怎樣呢?這是一個很難回答的問題,但是一般多數人的意見是:它是目前可獲得的最安全的加密算法。aes 已被列為比任何現今其它加密算法更 安全的一種算法。在理論和實踐基礎上,aes 被認為是“安全的”,因為要破解它的話,唯一有效的方法

37、是強行(brute-force)生成所有可能的密鑰。 如果密鑰長度為 256 位,還沒有已知的攻擊可以在一個可接受的時間內破解 aes(即便在當今最快的系統上,它也要花費數年時間)。注意針對 aes 密碼最可能成功的攻擊來自一個允許時間選擇攻擊的弱實現。攻擊者用不同的密鑰并精確地測量出加密例程所需的時間。如果加密例程被粗心編碼 ,因此執行時間便依賴于密鑰值,它就有可能推導出有關密鑰的信息。在 aes 中,這種事情最可能發生在 mixcolumns 例程中,因為有域乘。 針對這種攻擊的兩個安全措施是加入虛指令,以便所以所有乘法都需要相同數量的指令,或者將域乘實現為一個查詢表,就象我前面描述的那樣

38、。aes 有許多種可能的實現,尤其是是使用查詢表而不是計算。本文提供的 aes 基本類可以被用于加解密任何形式的.net數據或 被擴展成一個具有更多功能的類。結束語新的 aes 將無疑成為加密所有形式電子信息的事實上的標準,取代 des。aes 加密的數據在某種意義上是牢不可破的,因為沒有已知的密碼分析攻擊可以解密 aes 密文,除非強行遍歷搜索所有可能的 256 位密鑰。我發現在 microsoft .net framework 上實現 aes 類的主要的障礙是官方文檔是以一個數學家的觀點,而不是以一個軟件開發者的觀點來寫的。尤其是該規范假定讀者十分熟悉 gf(28) 域,并省略了幾個正確實

39、現 aes 所必需的關于 gf(28) 乘法的關鍵事實。我在本文中試圖努力去掉 aes 的神秘面紗,特別是圍繞在 gf(28) 域乘法部分的。以 .net framework 庫的形式從 microsoft 以及第三方供應商處獲得對 aes 的廣泛支持只是一個時間問題。然而,處于種種理由,讓本文代碼作為你的技能儲備仍然是有價值的。這個實現尤其簡單,并且是低資源開銷。另外,閱讀并理解源代碼將使你能定制 aes 類且更有效地使用它的任何實現。在任何軟件設計過程中安全已不再是后顧之憂。aes 是一個重大進步,使用并理解它將大大增加軟件系統的可靠性和安全性。encrypt it:keep your d

40、ata secure with the new advanced encryption standardjames mccaffreysummarythe advanced encryption standard (aes) is a national institute of standards and technology specification for the encryption of electronic data. it is expected to become the accepted means of encrypting digital information, inc

41、luding financial, telecommunications, and government data. this article presents an overview of aes and explains the algorithms it uses. included is a complete c# implementation and examples of encrypting .net data. after reading this article you will be able to encrypt data using aes, test aes-base

42、d software, and use aes encryption in your systems.the national institute of standards and technology (nist) established the new advanced encryption standard (aes) specification on may 26, 2002. in this article i will provide a working implementation of aes written in c#, and a complete explanation

43、of exactly what aes is and how the code works. ill show you how to encrypt data using aes and extend the code given here to develop a commercial-quality aes class. ill also explain how and why to incorporate aes encryption into your software systems, and how to test aes-based software.note that the

44、code presented in this article and any other implementation based on this article is subject to applicable federal cryptographic module export controls (see commercial encryption export controls for the exact regulations).aes is a new cryptographic algorithm that can be used to protect electronic da

45、ta. specifically, aes is an iterative, symmetric-key block cipher that can use keys of 128, 192, and 256 bits, and encrypts and decrypts data in blocks of 128 bits (16 bytes). unlike public-key ciphers, which use a pair of keys, symmetric-key ciphers use the same key to encrypt and decrypt data. encrypted data returned by block ciphers have the same number of bits that the input data had. iterative ciphers use a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論