高級加密標準

高級加密標準

密碼技術是信息安全技術的核心,它主要由密碼編碼技術和密碼分析技術兩個分支組成。這兩個分支既相互對立又相互依存,正是由於這種對立統一關係,才推動了密碼學自身的發展。

概述


密碼技術是信息安全技術的核心,它主要由密碼編碼技術和密碼分析技術兩個分支組成。密碼編碼技術的主要任務是尋求產生安全性高的有效密碼演演算法和協議,以滿足對消息進行加密或認證的要求。密碼分析技術的主要任務是破譯密碼或偽造認證信息,實現竊取機密信息或進行詐騙破壞活動。這兩個分支既相互對立又相互依存,正是由於這種對立統一關係,才推動了密碼學自身的發展。目前人們將密碼理論與技術分成兩大類,一類是基於數學的密碼理論與技術,包括公鑰密碼、分組密碼、序列密碼、認證碼、數字簽名、Hash 函數、身份識別、密鑰管理、PKI 技術、VPN 技術等;另一類是非數學的密碼理論與技術,包括信息隱藏、量子密碼、基於生物特徵的識別理論與技術等。
分組密碼屬於單鑰密碼演演算法,具有簡捷快速的特點,並且容易標準化,是目前軟硬體加密標準的主流。這種密碼演演算法的缺點是安全性比較難以證明,且存在一些比較成熟的攻擊方法,如差分密碼分析和線性密碼分析。對於分組密碼,密碼學家提出了許多設計方案,如著名的DES演演算法、AES演演算法等
隨著測試技術的發展,測試人員掌握一定的加密演演算法是勢在必行。本文就以高級加密標準演演算法(AES)為例來拋磚引玉,希望對測試工程師在測試過程中提供一定的幫助。

簡介


你也許目前還沒有注意到,網路硬體和軟體廠商最近已開始廣泛應用高級加密標準(AES) 。這使那些網路管理員陷入了有趣的困境,特別是那些對虛擬專用網應用或軟體感興趣的網路管理員。在本講座中,我們將討論你應該考慮的高級加密標準的一些問題,如果你正在考慮使用某些基於這個標準的產品的話。
加密演演算法讓人們擔心的兩個主要問題是安全和性能。在第一個案例中,我們有一個70年代的數據加密標準(DES)加密。在安全領域,一個協議的生命周期這樣長一般來說是件好事。不過,在數據加密標準的案例中,由於其瑕疵將多次重複地顯示出來,這樣長的生命期並不是件好事。
他的後續標準來得太晚了。這些瑕疵是各種類型的攻擊利用的基本的安全漏洞,其較短的密碼長度意味著蠻力攻擊能在非常短的時間內奏效。
高級加密標準演演算法從非常多方面解決了這些令人擔憂的問題。實際上,攻擊數據加密標準的那些手段對於高級加密標準演演算法本身並沒有效果。如果採用真正的128位加密技術甚至256位加密技術,蠻力攻擊要取得成功需要耗費相當長的時間。
雖然高級加密標準也有不足的一面,不過,他仍是個相對新的協議。因此,安全研究人員還沒有那麼多的時間對這種加密方法進行破解試驗。我們可能會隨時發現一種全新的攻擊手段會攻破這種高級加密標準。至少在理論上存在這種可能性。
當你考慮性能需求的時候,高級加密標準具有理論上的優勢,因為這種演演算法效率更高,特別是和3DES加密標準相比更是如此。然而,需要指出的是,在這種協議應用的早期階段,在硬體中對這種加密演演算法的支持還沒有像硬體支持老式的3DES演演算法那樣成熟。因此,你可能會發目前某些平台上,3DES在數據吞吐量方面仍比AES-256速度快。在有些平台上,AES-256的速度快一些。正如你懷疑的那樣,AES-128總是比AES-256速度快一些。在對各類廠商的市場營銷材料進行了快速調查之後發現,數據吞吐量的差別通常在10%至30%之間。
所以,同以往相同,各個機構採用這個新標準的合適的時間都是不同的。一些機構認為,額外的安全功能值得犧牲一點性能。有些機構需要做好預算才能購買新的支持高級加密標準的硬體產品。要記住,升級將會提高性能。在所有情況下,你在選擇一個產品之前都要做好充分的準備。

設計原則


AES是一種迭代分組密碼,採用的是代替置換網路(SPN)。將明文分組長度固定為128b,而且僅支持128,196或256b的密鑰長度,本章僅對密鑰長度為128b的情況進行討論。

AES加密


圖片
圖片
AES加密過程又包括一個作為初始輪的初始密鑰加法(AddRoundKey),接著進行9次輪變換(Round),最後再使用一個輪變換(FinalRound),如圖2.1 AES演演算法加密實現過程所示。
每一次Round均由SubBytes,ShiftRows,MixColumns和AddRoundKey共4個步驟構成,FinalRound包含除MixColumns這一步外的其他3個步驟。
輪變換及其每一步均作用在中間結果上,將該中間結果稱為狀態,可以形象地表示為一個4*4 B的矩陣。

密鑰擴展方案


圖片
圖片
AES演演算法中每輪加密的輪密鑰是利用密鑰擴展演演算法(KeyExpansion)對加密密鑰擴展得到的。密鑰擴展及輪密鑰選擇的原理是對加密密鑰擴展得到輪密鑰,輪密鑰的總位數等於分組長度乘以輪數加1;在密鑰擴展得到的輪密鑰中依次選取與分組長度相同數目的密鑰用於輪密鑰加運算。
圖片
圖片
原始密鑰有128位,排列成一個44矩陣。這個矩陣通過加入40多列進行了擴展,過程如下。記開始的4列為W(0)、W(1)、W(2)、W(3)新的列將遞歸地生成。假設W(i-1)及其之前的列已經定義了。如果i不是4的倍數,則
其中T(W(i-1))是對W(i-1)的變換。假設W(i-1)中的元素是a、b、c、d循環移位得到b、c、d、a。然後將這些位元組用s盒中相應的元素替代,得到4個位元組e、f、g、h。最後,計算有限域GF(28)中的常量。
這樣,列W(4), …,W(43)就從最開始的4列中生成了。
第i輪的輪密鑰有下面4列組成:
W(4i),W(4i + 1), W(4i + 2), W(4i + 3)