分組密碼及五種工作模式、DES和AES

一、流密碼(Stream Cipher)

每次加密數據流的一位或一個字節
古典流密碼的例子有:密鑰自動產生的Vigenère密碼和Vernam密碼。
理想情況下,可以使用一次一密版本的Vernam密碼,其中密鑰流和明文位流一樣長。如果密鑰流是隨機的,除非是獲得了密鑰流,否則這個密碼是不可破的。然而,密鑰流必須提前以某種獨立、安全的信道提供給雙方。
實際上,位流必須以算法程序的方式實現,從而雙方都可以生產具有密碼學意義的位流。兩個用戶只需要共享生成密鑰,則可以生產密鑰流。

二、分組密碼(Block Cipher)

將一個明文分組作爲整體加密,並且通常得到的是與明文等長的密文分組
典型的分組大小是64位或128位
與流密碼一樣,兩個用戶要共享一個對稱加密密鑰
分組密碼作用在n位明文分組上,產生n位密文分組,共有2n個不同的明文分組。由於加密是可逆的(即可以解密),每一個明文分組將唯一對應一個密文分組,這樣的變換稱爲可逆變換或非奇異變換。
對於n位的代替分組密碼,密鑰的規模是nX2n位。
一般來說,分組密碼的應用範圍比流密碼廣泛。絕大多數基於網絡的對稱密碼應用使用的是分組密碼。
在這裏插入圖片描述

三、Feistel分組密碼

現在使用的大多數對稱分組加密算法都是基於Feistel分組密碼結構的。
Feistel密碼:交替使用代替(換成別的)和置換(只是順序變了)
基於1945年Shannon理論的Feistel密碼結構,仍是當前使用的大多數重要對稱密碼的基本結構
Shannon引進混淆擴散這兩個術語來刻畫任何密碼系統的兩個基本構件,爲了對付基於統計分析方法的密碼分析

  • 擴散:使明文的統計特徵消散在密文中,可以通過讓每個明文數字儘可能地影響多個密文數字獲得,等價於說每個密文數字被許多明文數字影響。(儘可能地使明文和密文間的統計關係變得複雜)
  • 混淆:儘可能地使密文和加密密鑰間的統計關係變得複雜,即使攻擊者擁有一些密文的統計特徵信息,利用密鑰產生密文的方法的複雜性使得推導密鑰極其困難。

Feidtel加密和解密(16輪):
在這裏插入圖片描述
Feistel結構的具體實現依賴於以下參數和特徵
分組長度:分組長度越長意味着安全性越高,但會降低加、解密的速度,這種安全性的增加來自更好的擴散性(傳統上,64位的長度比較合理,在分組密碼設計裏比較常見,高級加密標準中採用128位的分組長度)
密鑰長度:密鑰長度越長意味着安全性越高,但會降低加、解密的速度,這種安全性的增加來自更好的抗窮舉攻擊能力和更好的混淆性(64位的密鑰不太夠,一般使用的密鑰長度是128位)
迭代輪數:Feistel密碼的本質在於單輪不能提供足夠的安全性而多輪加密可以取得很高的安全性,迭代輪數的典型值是16
子密鑰產生算法:子密鑰產生越複雜,密碼分析就越困難
輪函數F:輪函數越複雜,抗攻擊的能力就越強
快速軟件加解密:很多情況下,加密算法被嵌入到應用程序中,以避免硬件實現的麻煩,因此,算法執行的速度很重要
簡化分析難度:算法描述起來簡潔清楚,那麼分析其脆弱性也就容易一些,可以開發出更強的算法(DES並沒有容易的分析方法)

Feistel結構示例:
在這裏插入圖片描述

四、分組密碼的設計原理

Feistel密碼的強度來自於3個方面:迭代輪數、函數F、密鑰使用算法
迭代輪數(Number of rounds):迭代輪數越多,密碼分析越困難。一般,迭代輪數的選擇標準是使密碼分析的難度大於簡單窮舉攻擊的難度
函數F(Round function F):Feistel密碼的核心是函數F,函數F給Feistel密碼注入了混淆的成分,難以破解由F實現的這個代替密碼函數的作用,F的明顯標準是非線性的。F的非線性成分越多,任何形式的分析就會越困難。越難將F近似表示爲某些線性等式,F的非線性度就越高。
密鑰擴展算法(Key schedule algorithm):對於任何Feistel分組密碼,密鑰被用來爲每輪迭代產生一個子密鑰。一般,子密鑰的選擇應該加大推導子密鑰及密鑰種子的難度。Adams建議,密鑰擴展算法至少應保證密鑰和密文符合嚴格雪崩標準(SAC)和位獨立標準(BIC)(兩個標準是爲了加強混淆的有效性。SAC:若S盒的輸入的任意一位發生變化,輸出的任意一位發生變化的可能性爲二分之一。BIC:對任意的i,j,k,輸入中的一位i發生變換,輸出中的j,k的變化是彼此無關的)。

五、數據加密標準(Data Encryption Standard,DES)

明文64位,密鑰64位(密鑰實際長度爲56位,8位用作奇偶校驗或隨意設置),密文64位
在這裏插入圖片描述
從上圖左半部分可見明文的處理經過三個階段:
64位明文經過初始置換IP被重新排列,進行16輪相同函數的作用,每輪作用都有置換和代替,最後一輪迭代的輸出有64位,它是輸入明文和密鑰的函數。左半部分和右半部分互換產生預輸出,最後預輸出再被與初始置換IP互逆的置換(IP)-1 作用產生64位的密文。
右半部分給出了使用56位密鑰的過程:
密鑰經過一個置換後,再經過循環左移和一個置換分別得到各輪的子密鑰(48位)用於各輪的迭代每輪的置換函數都一樣,但由於密鑰的循環移位使得各輪子密鑰互不相同。

六、計時攻擊

通過觀察算法的一個既定實現對多種密文解密所需時間,來獲得關於密鑰或明文的信息。
計時攻擊所利用的事實是加密算法和解密算法對於不同的輸入所花的時間有着細微的差別。
目前還不能成功攻擊DES,也不能攻擊3DES和AES。

七、多重加密與三重DES

1.雙重DES的加解密
密鑰長度爲56X2=112位
C=E(K2,E(K1,P))
在這裏插入圖片描述
P=D(K1,D(K2,C))
在這裏插入圖片描述
已知明文攻擊可以成功對付密鑰長度爲112位的雙重DES

2.使用兩個密鑰的三重DES
兩個密鑰,三次加密
運算過程:加密——解密——加密(EDE)
在這裏插入圖片描述
在這裏插入圖片描述
第二步採用解密運算並沒有什麼密碼學上的含義,僅僅是爲了使用三重DES的用戶可以利用該算法解密單DES加密的數據。

3.使用三個密鑰的三重DES
使用三個密鑰進行三次加密
3DES的密鑰長度爲56x3=168位
C=E(K3,D(K2,E(K1,P)))
若想和單DES兼容,只需設K3=K2或K1=K2就可以了

八、分組密碼的工作模式

在這裏插入圖片描述
(一)電碼本模式(ECB)
一次處理一組明文分塊,每次使用相同的密鑰分別對明文分組獨立加密
一段消息中有幾個相同的明文組,密文也將出現幾個相同的密文分組
需要填充
適合於數據較少的情況
應用:單個數據的安全傳輸(如:傳輸一個DES或AES密鑰)
對於很長的消息,ECB模型可能是不安全的。如果消息是非結構化的,密碼分析者可能利用這些規律性特徵來破譯。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

(二)密文分組鏈接模式(CBC)
加密算法的輸入是當前的明文組和上一個密文組的異或使用的密鑰相同,相當於將所有的明文組鏈接起來了,加密算法的每次輸入與本明文組沒有固定的關係。
解密時,每個密文組分別進行解密,再與上一塊密文異或就可恢復出明文
第一塊明文可以和一個初始向量IV異或後再加密,以產生第一個明文分組
解密時將第一塊密文解密的結果與IV異或而恢復出第一塊明文
IV是和密文具有相同長度的數據分組,IV必須爲收發雙方共享,但第三方不能預測,IV不能不經授權而修改
需要填充

應用:面向分組的通用傳輸、認證
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(三)密文反饋模式(CFB)
CFB、OFB、CTR均可將分組密碼當流密碼使用。流密碼不需要將明文填充到長度是分組長度的整數倍,且可實時操作。所以,待發送的字符流中任何一個字符都可以用面向字符的流密碼加密後立即發送。流密碼有個性質:密文與明文等長。
儘管CFB可以被視爲流密碼,但是它和流密碼的典型構造並不一致。典型的流密碼輸入某個初始值和密鑰,輸出位流,這個位流再和明文位進行異或運算。CFB模式中,與明文異或的位流是與明文相關的。
加密時多重密碼操作不能並行運行,解密時,如果輸入塊是首次建於IV和密文,那麼必需的密碼操作是可以並行的。
需要填充
加密算法的輸入是上一個密文,產生的僞隨機數和明文異或產生下一個輸出
在這裏插入圖片描述
應用:面向數據流的通用傳輸、認證
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(四)輸出反饋模式(OFB)
加密算法的輸入是上一層加密的輸出,且使用整個分組
OFB用加密函數的輸出填充移位寄存器,CFB是用密文單元來填充移位寄存器
OFB對整個明文和密文分組進行運算,而不是僅對s位的子集運算
需要一個初始化向量,IV必須是一個時變值,即對每次加密運算都是唯一的
不需要填充
錯誤不傳播
抗消息流篡改攻擊的能力不如CFB

具有典型流密碼的結構
OFB一次加密一個明文分組,分組的典型長度是64或128位。許多流密碼一次加密一個字節。
應用:噪聲信道上的數據流的傳輸
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(五)計數器模式(CTR)
應用在ATM(異步傳輸模式)網絡安全與IPSec中
計數器使用與明文分組規模相同的長度
加密時,計數器加密後與明文分組異或得到密文分組沒有鏈接。解密使用具有相同值的計數器序列,用加密後的計數器的值與密文分組異或恢復明文分組。解密時必須知道初始計數器的值。初始計數器的值必須爲時變值。
保證計數器值唯一的一個辦法是每一個消息計數器都增加1
不需要填充

應用:面向數據流的通用傳輸、用於高速需求
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

九、AES

1.AES的結構(AES structure)

明文分組的長度爲128位即16字節
密鑰長度可以爲16、24、32字節(128、192、256位),根據密鑰的長度,算法被稱爲AES-128,AES-192,AES-256
輪數依賴於密鑰長度:16、24、32字節分別對應10、12、14輪
加密和解密算法的輸入是一個128位分組

AES的加密過程(AES encryption process)
在這裏插入圖片描述
AES parameters:
在這裏插入圖片描述

2.AES加密和解密(AES encryption and decryption)

在這裏插入圖片描述

  • AES的顯著特徵是它不是Feistel結構,在每一輪都使用代替和混淆將整個數據分組作爲一個單一的矩陣處理。
  • 輸入的密鑰被擴展成由44個32位字所組成的數組
  • 由4個不同的階段組成,包括一個置換和三個代替
    • 字節代替:用一個S盒完成分組的字節到字節的代替
    • 行移位:一個簡單的置換
    • 列混淆:利用域GF(28 )上的算術特性的一個代替
    • 輪密鑰加:當前分組和擴展密鑰的一部分進行按位異或
  • 算法結構簡單:對加解密操作,算法由輪密鑰加開始,執行9輪迭代運算,每輪包含所有四個階段的代替,接着是第10輪的3個階段
  • 僅在輪密鑰加階段使用密鑰
  • 算法以輪密鑰加開始,以輪密鑰加結束
  • 輪密鑰加實質上是一種Vernam密碼形式,就其本身是不難破譯的,另外三個階段(沒有提供算法的安全性)一起提供了混淆、擴散以及非線性功能
  • 每個階段均可逆
  • 解密算法按逆序方式利用了擴展密鑰。解密算法和加密算法不一樣,這是由AES的特定結構決定。加密和解密中密鑰擴展的形式一樣,但在解密中變換的順序與加密中變換的順序不同,缺點:對同時需要加解密的應用而言,需要兩個不同的軟件或固件模塊。
  • 加密和解密過程的最後一輪只包含3個階段,由AES的特定結構決定的,也是密碼算法可逆性的要求

3.AES的密鑰擴展(AES key expansion)

密鑰擴展算法用來防止已有的密碼分析攻擊,使用與輪相關的輪常量是爲了防止不同輪的輪密鑰產生方式上的對稱性或相似性。
輸入4個字(16字節),輸出一個44個字組成(176字節)的一維線性數組(11輪:爲初始輪密鑰加階段和算法中其他10輪中的每一輪提供4字的輪密鑰)。
輸入密鑰直接被複制到擴展密鑰數組的前4個字,然後每次用4個字填充擴展密鑰數組餘下的部分,每一個新增的字w[i]的值依賴於w[i-1]和w[i-4]。
在四種情形中,三組使用了異或。
對w數組中下標爲4的倍數的元素採用更復雜的函數來計算。

基本原理:

  • 知道密鑰或輪密鑰的部分位不能計算出輪密鑰的其他位
  • 是一個可逆的變換
  • 能夠在各種處理器上有效的執行
  • 使用輪變量來消除對稱性
  • 將密鑰的差異性擴散到輪密鑰中
  • 足夠的非線性以防止輪密鑰的差異完全由密鑰的差異決定
  • 易於描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章