期末複習:信息安全(五)

高級加密標準AES

1997年9月12日,美國聯邦登記處公佈了正是整機AES候選算法的通告,基本要求是:比三重DES快、至少與三重DES一樣安全、數據分組長度爲128比特、密鑰長度爲128/192/256比特
⭐️AES的總體描述
AES具有128bit的分組長度,三種可選的密鑰長度, 128bit、192bit和256bit。AES是一個迭代型密碼,輪數Nr依賴於密鑰長度。密鑰和128bit、192bit、256bit時,輪數分別爲10、12、14,算法執行過程如下:

  1. 給定一個明文x,將State初始化爲x,並進行AddRoundKey操作,將RoundKey和State異或。
  2. 對前Nr-1輪中的每一輪,用S盒對進行一次代換操作,稱爲SubBytes;對State做一置換ShiftRows;再對State做一次操作MixColumns;然後進行AddRoundKey操作。
  3. 依次進行SubBytes、 ShiftRows和AddRoundKey操作。
  4. 將State定義爲密文。
    🌸字節代換、行移位、列混淆、密鑰加
    ⭐️AES的參數
    假定一個字是32位,不論密鑰長度是多少,分組長度都是128bit,即4個字,如下所示:
    在這裏插入圖片描述
    ⭐️AES算法結構
    在這種密碼的每一輪中,輪輸入首先被一個由子密鑰控制的可逆函數S作用,然後再對所的結果置換(或可逆線性變換)P作用。S和P分別被稱爲混亂層擴散層主要起混亂(密鑰和密文的關係複雜)和擴散(明文和密文的關係複雜)作用。
    在這裏插入圖片描述
    🌸AES算法的輪變換中沒有Feistel結構,輪變換是由三個不同的可逆一致變換組成,稱之爲層:
  • 線性混合層(行移位和列混合):確保多倫至上的高度擴散。
  • 非線性層(字節替換):S-盒的並行應用。
  • 密鑰加層:輪密鑰簡單地異或到中間狀態上。
    在這裏插入圖片描述
    ⭐️AES-128加解密過程
    在這裏插入圖片描述
    Add round key:輪密鑰加,將明文與密文異或,影響下一輪的明文。
    Substitue bytes:字節代換。

⭐️AES算法描述

//假設:State表示數據,以及每一輪的中間結果RoundKey表示每一輪對應的子密鑰。算法如下:
第一輪之前執行AddRoundKey(State,RoundKey)
     Round(State,RoundKey) {
          ByteSub(State);  ShiftRow(State);
 	             MixColumn(State);	               AddRoundKey(State,RoundKey);
               }
               FinalRound(State,RoundKey) {
               ByteSub(State);  ShiftRow(State);
               AddRoundKey(State,RoundKey);
               }

最後一輪沒有進行列混淆操作。
AES中的操作都是以字節爲基礎,所有用到的變量都由適當數量的字節組成。明文x包括16個字節x0,…x15。State用如下矩陣表示:
在這裏插入圖片描述
在這裏插入圖片描述

  • 字節代替
    字節代替是一個非線性的字節代替,獨立地在每個狀態字節上進行運算,代替表(S-盒)是可逆的,是一個16x16的矩陣。
    在這裏插入圖片描述
    在這裏插入圖片描述
    舉例:
    (查表即可)在這裏插入圖片描述
    注意:高位表示行數,低位表示列數。
  • 行移位變換
    在這裏插入圖片描述
    舉例:
    在這裏插入圖片描述
  • 列混合變換:
    代替操作,將狀態的列看作有限域GF(28)上的四維向量並被有限域GF(28)上的一個固定可逆方針A乘。每一列和矩陣相乘得到列混淆的結果。
    在這裏插入圖片描述
  • 輪密鑰加:一個簡單的按位異或的操作
    在這裏插入圖片描述
    ⭐️AES的密鑰調度
    輪密鑰是通過密鑰調度算法從密鑰中產生,包括兩個組成部分:密鑰擴展和輪密鑰選取
    基本原理如下:
    所有輪密鑰比特的總數等於分組長度乘輪數加1。(如128比特的分組長度和10輪迭代,共需要128×11=1408比特的密鑰)。
    將密碼密鑰擴展成一個擴展密鑰。
    輪密鑰按下述方式從擴展密鑰中選取:第一個輪密鑰由開始Nb個字組成,第二個輪密鑰由接下來的Nb個字組成,如此繼續下去。
    🌸AES的密鑰擴展
    輪密鑰的並聯叫做擴展密鑰,供包含44個字,表示爲:w0,…w43,在這裏的每一個wi,都是一個字。
    在這裏插入圖片描述
    在這裏插入圖片描述
    🌸AES中的g變換
    Rotword執行一字節循環左移:[b0,b1,b2,b3] → [b1,b2,b3,b0]
    Subword執行使用S-盒實行字節替換
    前兩步的結果XOR與輪常數Rcon[j]
    在這裏插入圖片描述
    舉例:
    在這裏插入圖片描述
    緩存–>左移–>查詢S-盒表–>查Rcon表–> 與Rcon異或–>再將結果與上一行同樣位置的數值進行異或

⭐️分組密碼的工作模式
分組密碼在加密時明文分組的長度是固定的,而實用中待加密消息的數據量是不定的,數據格式可能是多種多樣的。爲了能在各種應用場合安全地使用分組密碼,通常對不同的使用目的運用不同的工作模式。
一個分組密碼的工作模式就是以該分組密碼爲基礎構造的一個密碼系統
目前已提出許多種分組密碼的工作模式,如電碼本(ECB)、密碼分組鏈接(CBC)、密碼反饋(CFB)、輸 出反饋(OFB)、級連(CM)、計數器、分組鏈接(BC)、擴散密碼分組鏈接(PCBC)、明文反饋(PFB) 、非 線性函數輸出反饋(OFBNLF)等模式。

  • ECB模式
    ECB(Electronic Codebook)模式是最簡單的運行模式,它一次對一個64比特長的明文分組加密,而且每次的加密密鑰都相同。
    在這裏插入圖片描述
    優點:
    (1) 實現簡單
    (2) 不同明文分組的加密不存在依賴關係,可並行實施,尤其是硬件實現時速度很快
    缺點:
    不同的明文分組之間的加密獨立進行,造成相同明文分組對應相同密文分組,因而不能隱蔽明文分組的統計規律和結構規律,不能抵抗替換攻擊。
    典型應用:
  1. 用於隨機數的加密保護;
  2. 用於單分組明文的加密。
  • 密碼分組連接(CBC)模式
    爲了克服ECB的安全性缺陷,希望設計一個工作模式,可以使得當同一個明文分組重複出現時產生不同的密文分組
    一個簡單的方法是密碼分組鏈接,從而使輸出不僅與當前輸入有關,而且與以前輸入和輸出有關。
    一種簡單的方案就是密碼分組鏈接(Cipher Block Chaining)模式。
    每次加密使用同一密鑰,加密算法的輸入是當前明文前一次密文組的異或。因此加密算法的輸入與明文分組之間 不再有固定的關係,所以重複的明文分組不會在密文中暴露。
    在這裏插入圖片描述
    解密時,每一個密文分組被解密後,再與前一個密文分組異或來產生明文分組。即:DK[Ci]⊕Ci-1=DK[EK[Ci-1⊕Pi]]⊕Ci-1=Ci-1⊕Pi⊕Ci-1=Pi
    這裏Ci=EK[Ci-1⊕Pi],i=1,2,…,N。
    爲產生第一個密文分組 ,需要一個初始向量C0=Vi 與第一個明文分組異或。解密時,Vi與解密算法的第一輸出進行異或以恢復第一個明文分組。
    Vi對於收發雙方都應是已知的。爲使安全性程度最高,Vi應像密鑰一樣被保護。
    🌸CBC的特點
    明文塊的統計特性得到了隱蔽。
    由於在密文CBC模式中,各密文塊不僅與當前明文塊有關,而且還與以前的明文塊及初始化向量有關,從而使明文的統計規律在密文中得到了較好的隱蔽。
    具有有限的(兩步)錯誤傳播特性。
    一個密文塊的錯誤將導致兩個密文塊不能正確脫密。
    具有自同步功能
    密文出現丟塊和錯塊不影響後續密文塊的脫密。若從第t塊起密文塊正確,則第t+1個明文塊就能正確求出。
    明文分組中一位出錯,將影響該分組的密文及其以後的所有密文分組
    典型應用:
  1. 數據加密; 2) 完整性認證和身份認證;
    完整性認證的含義
    完整性認證是一個“用戶”檢驗它收到的文件是否遭到第三方有意或無意的篡改。
    利用CBC模式可實現報文的完整性認證
    目的:檢查文件在(直接或加密)傳輸和存儲中是否遭到有意或無意的篡改
    例:電腦彩票的防僞技術
    方法:
  2. 選擇一個分組密碼算法和一個認證密鑰,存於售票機內
  3. 將電腦彩票上的重要信息,如彩票期號、彩票號碼、彩票股量、售票單位代號等重要信息按某個約定的規則作爲彩票資料明文
  4. 對彩票資料明文擴展一個校驗碼分組後,利用認證密鑰和分組密碼算法對之加密,並將得到的最後一個分組密文作爲認證碼打印於彩票上面;
    認證過程:
    執行3),並將計算出的認證碼與彩票上的認證碼比較,二者一致時判定該彩票是真彩票,否則判定該彩票是假彩票。
  • 密碼反饋模式(FCB)
    若待加密消息需按字符、字節或比特處理時,可採用CFB模式。並稱帶加密消息按j比特處理的CFB模式爲j比特CFB模式。
    設傳送的每個單元(如一個字符)是j 比特長,通常取 j =8,與CBC模式一樣,明文單元被鏈接在一起,使得密文是前面所有明文的函數。
    加密時,加密算法的輸入是64比特移位寄存器,其初值爲某個初始向量Vi。
    加密算法輸出的最左(最高有效位) j比特與明文的第一個單元P1異或,產生出密文的第一個單元C1,並傳送該單元。
    然後將移位寄存器的內容左移j位並將C1送入移位寄存器的最右邊(最低有效位)j位。
    這一過程持續進行直到明文的所有單元都被加密爲止。
    在這裏插入圖片描述
    優點:
  1. 這是將分組密碼當作序列密碼(數據以位或者字節形式到達)使用的一種方式,
    2)加密、解密都需要用到分組加密器;
    2)明文發生錯誤,錯誤會傳播;
  2. 如果密文發生傳輸錯誤,只會影響它出現在移位寄存器期間解密的8個字節的數據得不到正確解密,8個字節一過,後面明文可以得到正確的解密結果。
    缺點:
    比較浪費,因爲每輪加解密中都丟棄了大部分結果,通常只保留了的S爲爲1個字節。
  • 輸出反饋模式(OFB)
    OFB 模式在結構上類似於CFB。不同之處
  1. OFB模式將加密算法的輸出反饋到移位寄存器,而CFB模式是將密文單元反饋到移位寄存器。
  2. OFB針對明文和密文分組運算,而CFB僅對S位的子集運算
    在這裏插入圖片描述
    優點:
    1)傳輸過程中的比特錯誤不會被傳播。
    例如C1中出現一比特錯誤,在解密結果中 只有P1受影響,以後各明文單元則不受影響 。而在CFB中, C1也作爲移位寄存器的輸入,因此它的一比特錯誤會影響解 密結果中各明文單元的值。
    解密中密文的1比特也隻影響明文的1個錯誤
    2).分組密碼轉化爲流模式;
    3).可以及時加密傳送小於分組的數據;
    缺點:難於檢測密文是否被篡改。
    適用於傳輸語音圖像
  • 計數器模式(CTR)
    對一系列輸入數據塊(稱爲計數)進行加密,產生一系列的輸出塊,輸出塊與明文異或得到密文。
    應用於ATM網絡安全及IPSec中
    密碼算法產生一個16 字節的僞隨機碼塊流,僞隨機碼塊與輸入的明文進行異或運算後產生密文輸出。密文與同樣的僞隨機碼進行異或運算後可以重產生明文。
    在這裏插入圖片描述
    使用與明文分組規模相同的計數器長度
    處理效率高(並行計算)
    預處理可以極大提高吞吐量:算法和加密盒的輸出不依靠明文和密文的輸入
    可以隨機對任意一個密文分組進行解密處理,對該密文分組的處理與其他密文無關(第i塊解密不依賴第i-1塊)
    實現的簡單性,只是異或,且無解密算法
    適用於實時性和速度要求較高的場合
  • 流密碼:RC4
    RC4由RSA三人組中的頭號人物Ronald Rivest在1987年設計的密鑰長度可變的流加密算法簇。
    和DES算法一樣,是一種對稱加密算法。
    算法的速度可以達到DES加密的10倍左右,且具有很高級別的非線性 。
    可變密鑰長度,可變範圍爲1-256字節(8-2048比特)
    以隨機置換爲基礎。密鑰長度是可變的,RC4起初是用於保護商業機密的。但是在1994年9月,它的算法被髮布在互聯網上,也就不再有什麼商業機密了
    用途廣泛,常用於SSL/TLS,IEEE 802.11無線語句網標準的一部分WEP(Wired Equivalent Privacy)協議和新Wifi受保護訪問協議(WPA)中。
    1、密鑰流:RC4算法的關鍵是根據明文和密鑰生成相應的密鑰流,密鑰流的長度和明文的長度是對應的,也就是說明文的長度是500字節,那麼密鑰流也是500字節。當然,加密生成的密文也是500字節,因爲密文第i字節=明文第i字節^密鑰流第i字節;
    2、狀態向量S:長度爲256,S[0],S[1]…S[255]。每個單元都是一個字節,算法運行的任何時候,S都包括0-255的8比特數的排列組合,只不過值的位置發生了變換;
    3、臨時向量T:長度也爲256,每個單元也是一個字節。如果密鑰的長度是256字節,就直接把密鑰的值賦給T,否則,輪轉地將密鑰的每個字節賦給T;
    4、密鑰K:長度爲1-256字節,注意密鑰的長度keylen與明文長度、密鑰流的長度沒有必然關係,通常密鑰的長度趣味16字節(128比特)。
    在這裏插入圖片描述
//第一部分:初始化算法(KSA) 
1、初始化S和T
for i=0 to 255 do
   S[i]=i;
   T[i]=K[ i mod keylen ];
2、初始排列S
j=0;
for i=0 to 255 do
   j= ( j+S[i]+T[i])mod256;
   swap(S[i],S[j]);
//第二部分:僞隨機子密鑰流生成算法
3、產生密鑰流
i,j=0;
for r=0 to len do  //r爲明文長度,r字節
   i=(i+1) mod 256;
   j=(j+S[i])mod 256;
   swap(S[i],S[j]);
   t=(S[i]+S[j])mod 256;
   k[r]=S[t]; 

在這裏插入圖片描述
分組密碼工作模式一覽

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章