分組密碼(四)AES演算法① — 密碼學複習(七)

不愛學習的Shirley發表於2021-09-27

  介紹完S-PN型結構之後,下面介紹AES演算法。由於內容比較多所以將其分為兩篇來介紹,本篇主要講AES的歷史時間節點、產生背景、與DES的對比、演算法框圖(粗略)以及一些數學基礎

  7.1 AES的歷史時間節點及產生背景

  7.1.1 AES的歷史時間節點

  1997年,美國政府(NIST)向社會公開徵集高階資料加密標準(AES):

    第一輪:1998年8月20日從應徵的21個演算法中選出15個演算法。

    第二輪:1999年8月又選中其中5個演算法。

    第三輪:2000年10月2日再選出1個演算法。

  2001年11月26日,NIST接受其為標準。

  7.1.2 AES的產生背景

  ① 1984年12月,里根總統下令由國家安全域性(NSA)研製新密碼標準,以取代DES.

  ② 1991年新密碼開始試用並徵求意見。但其有如下特點:

    ·不公開演算法,只提供晶片;

    ·新密碼設計成雙刃劍,它是安全的。但通過法律允許可破譯監聽

    ·民眾要求公開演算法,並去掉法律監督。

  ③ 1994年,頒佈新密碼標準EES.

  ④ 1995年5月,貝爾實驗室博士生M.Blaze在PC機上用45分鐘攻擊法律監督欄位獲得成功。

  ⑤ 1995年7月,美國政府放棄用EES加密資料。

  ⑥ 1997年,美國政府向社會公開徵集AES.

  ⑦ 從DES到AES反映了美國商用密碼政策的變化。

    公開徵集DES(成功)  ->  祕密設計EES(不成功)  ->  公開徵集AES(成功)

  這說明:① 商用密碼應當堅持公開設計、公佈演算法的政策,這是商用密碼的客觀規律。

       ② 群眾的力量是偉大的。

  7.1.3 AES的設計要求

  ① 安全性:可以抵抗目前所有的已知攻擊。

  ② 實用性:適應各種應用環境,加解密速度快。

  ③ 擴充套件性:分組長度和金鑰長度可擴充套件,可以適應社會對保密性不斷提高的需求。

 

  7.2 AES與DES的對比

  在講述具體的演算法之前,讓我們來看一下AES和DES的對比。

 

 

  7.3 AES演算法框圖

  接下來讓我們看一下AES演算法的框圖,可以看到AES演算法中也有S盒,但要注意這裡的S盒和DES演算法中的S盒並不一樣,具體內容將在後面詳細闡述。

 

  7.4 數學基礎

  由於AES中涉及到一些計算需要一些簡單的數學基礎,下面將對其進行簡單講解。

  7.4.1 AES的基礎域是有限域GF(28)

  • 一個位元組的全體256種取值構成一個GF(28)
  • 一個GF(2)上的8次既約多項式可以生成一個GF(28)
  • GF(28)的全體元素構成加法交換群
  • GF(28)的非零元素構成乘法交換群 (這意味著有生成元)
  • GF(28)中的元素有多種表示:

位元組:GF(28)={(a7,a6,a5,...,a1,a0)|ai∈GF(2)}

多項式形式:GF(28)={a7x7+a6x6+a5x5+...+a1x+a0|ai∈GF(2)}

指數形式:GF(28)*={α01,...,α254},α是一個本原元。(去掉零元素是乘法迴圈群,其餘元素都可以用生成元來表示)

對數形式:GF(28)*={0,1,2,...,254}

  • GF(28)的特徵為2. 

  7.4.2 AES的GF(28)表示

  AES採用GF(2)上既約多項式m(x)生成GF(28):

m(x)=x8+x4+x3+x+1

  • GF(28)的元素採用GF(2)上的多項式表示:

  位元組B=b7b6b5b4b3b2b1b0可表示成GF(2)上的多項式:b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0.

  例:57 = 0101 0111 多項式表示為:x6+x4+x2+x+1.

  • 加法:兩個元素多項式的係數按位模2加

  例:57 + 83 = D4

    (x6+x4+x2+x+1)+(x7+x+1) = x7+x6+x4+x2

    而x7+x6+x4+x2對應1101 0100,即D4.

  • 乘法:兩個元素多項式相乘,模m(x)

  例:57 × 83 = C1

    (x6+x4+x2+x+1)×(x7+x+1) = x13+x7+x6+x11+x5+x4+x9+x3+x2+x8+x2+x+x7+x+1

                       = x13+x11+x9+x8+x6+x5+x4+x3+1

                       = x7+x6+1    mod x8+x4+x3+x+1

  • 乘法單位元:位元組01 多項式表示為:1
  • 乘法逆元

    設a(x)的逆元為b(x),則a(x)b(x)=1 mod m(x)

    可根據Euclid演算法可求出b(x).

  • x乘法xtime:用x乘GF(28)的元素

  例:xtime(57) = x (x6+x4+x2+x+1) = x7+x5+x3+x2+x

    xtime(83) = x(x7+x+1)= x8+x2+x mod m(x) = x7+x4+x3+1

  若x7的係數為0,則為簡單相乘,係數左移;若x7的係數為1,則乘後取模m(x),即乘後減去x8+x4+x3+x+1.

  • 多項式求逆

  下面通過一個例子來說明多項式求逆的方法:

  在求解後還可以將兩者相乘看結果是否mod m(x)與1同餘,如果是則所求結果正確。這個寫法是參考:手動推導計算AES中的s盒的輸出

 

  7.4.3 AES的字表示與運算

  • AES資料處理單位是位元組

  一個字 = 4個位元組 = 32位元

  一個字可以表示為係數取自GF(28)上的次數低於4次的多項式。

  例:字 57 83 4A D1 -> 57x3+83x2+4Ax+D1

  • 字加法:兩多項式係數按位模2加(不進位)

  例:(57x3+83x2+4Ax+D1)+(Ax3+B3x2+EF)=5Dx3+30x2+4Ax+3F.

  • 字乘法:設a和c是兩個字,a(x)和c(x)是其字多項式。AES定義a和c的乘積b為

b(x) = a(x)c(x)   mod x4+1

  設:a(x)=a3x3+a2x2+a1x+a0

    c(x)=c3x3+c2x2+c1x+c0

    b(x)=b3x3+b2x2+b1x+b0

  則 b(x) = a(x)c(x) mod x4+1為:

    b= a0c0+a3c1+a2c2+a1c3

    b= a1c0+a0c1+a3c2+a2c3

    b= a2c0+a1c1+a0c2+a3c3

    b= a3c0+a2c1+a1c2+a0c3

  寫成矩陣的形式:

  注意:①x4+1是可約多項式,字c(x)不一定有逆。

      ②但AES選擇的c(x)有逆,c(x)=03x3+01x2+01x+02.(0多1少,速度快)

      ③c(x)有逆的條件是(x4+1,c(x))=1

  • 字的x乘法:設b(x)是一個字,p(x)=xb(x) mod x4+1

  寫成矩陣的形式:

  注意:因為模x4+1,字的x乘法相當於按位元組迴圈移位。

  7.4.4 AES的資料處理方式

  AES的資料處理方式有:按位元組處理按字處理按狀態處理

  狀態:

  • 加解密過程中的中間資料
  • 以位元組為元素的矩陣或二維陣列
  • 符號:Nb——明密文所含的字數;Nk——金鑰所含的字數;Nr——迭代輪數。

參考部落格:

[1] 手動推導計算AES中的s盒的輸出

相關文章