3.1.1 對稱加密的概述算法
對稱加密(也叫私鑰加密算法)指加密和解密使用相同密鑰的加密算法。它要求發送方和接收方在安全通訊以前,商定一個密鑰。對稱算法的安全性依賴於密鑰,泄漏密鑰就意味着任何人均可以對他們發送或接收的消息解密,因此密鑰的保密性對通訊的安全性相當重要。安全
對稱加密算法的優勢是計算量小、加密速度快、加密效率高。加密
不足之處是,參與方須要提早持有密鑰,一旦有人泄露則系統安全性被破壞;另外如何在不安全通道中提早分發密鑰也是個問題,密鑰管理很是困難。cdn
基於「對稱密鑰」的加密算法主要有DES、3DES(TripleDES)、AES、RC二、RC四、RC5和Blowfish等。本章將介紹最經常使用的對稱加密算法DES、3DES(TripleDES)和AES。加密過程如圖13.4所示.blog
圖3.1 加密解密ip
DES算法全稱爲Data Encryption Standard,即數據加密標準算法。DES是加密和解密使用相同密鑰的加密算法,也叫作單密鑰算法或私鑰加密算法,傳統密鑰算法。它是IBM公司於1975年研究成功並公開發表的。開發
DES算法的入口參數有三個:Key、Data、Mode。同步
l 其中Key是DES算法的工做密鑰,8個字節共64位;it
l Data是要被加密或被解密的數據;io
l Mode爲DES的工做方式,有兩種:加密或解密。
在沒有密鑰的狀況下,解密耗費時間很是長,基本上認爲沒有可能。加密解密耗時和須要加密的文本大小成正比,這是P問題。若是知道明文和對應的密文,求解所用的密鑰,這是NP問題。目前尚未NP的求解算法,可是很容易獲得驗證。想獲得NP的解,只能暴力破解(窮舉破解)窮舉驗證成爲對稱加密僅有的求解方式,求解時間呈指數級增加。
DES算法把64位的明文輸入塊變爲數據長度爲64位的密文輸出塊,其中8位爲奇偶校驗位,另外56位做爲密碼的長度。首先,DES把輸入的64位數據塊按位從新組合,並把輸出分爲L0、R0兩部分,每部分各長32位,並進行先後置換,最終由L0輸出左32位,R0輸出右32位
根據這個法則通過16次迭代運算後,獲得L1六、R16,將此做爲輸入,進行與初始置換相反的逆置換,即獲得密文輸出。DES算法具備極高的安全性,到目前爲止,除了用窮舉搜索法對DES算法進行攻擊外,尚未發現更有效的辦法。56位長密鑰的窮舉空間爲2^56,這意味着若是一臺計算機的速度是每秒種檢測100萬個密鑰,那麼它搜索徹底部密鑰就須要將近2285年的時間,所以DES算法是一種很可靠的加密方法。3DES密鑰是24字節,即192位二進制。
高級加密標準(英語:Advanced Encryption Standard,縮寫:AES),由美國國家標準與技術研究院(NIST)於2001年11月26日發佈,並在2002年5月26日成爲有效的標準。2006年,高級加密標準已然成爲對稱密鑰加密中最流行的算法之一。該算法與其餘對稱密碼算法相比更安全、效率更高等特色。
AES使用128位,192位或者256位的密鑰長度(密鑰分別是:16字節、24字節、32字節),使得它比密鑰長度爲56位的DES更健壯可靠。
2^64 = 18446744073709551616
2^64這個數大於全球小麥1000年的產量。若是1微秒驗證一個密碼(1秒驗證100萬個),窮舉須要費時58萬年。
2^256 約= 10 ^ 77
10^80 是當前人類可見宇宙中全部物質原子數目的總和。
AES的加密模式對應中文名稱如表所示。
加密模式(英文名稱及簡寫) |
中文名稱 |
Electronic Code Book(ECB) |
電子密碼本模式 |
Cipher Block Chaining(CBC) |
密碼分組連接模式 |
Cipher Feedback Mode(CFB) |
加密反饋模式 |
Output Feedback Mode(OFB) |
輸出反饋模式 |
ECB:最基本的加密模式,也就是一般理解的加密,相同的明文將永遠加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,通常狀況下不多用。
CBC:明文被加密前要與前面的密文進行異或運算後再加密,所以只要選擇不一樣的初始向量,相同的密文加密後會造成不一樣的密文,這是目前應用最普遍的模式。CBC加密後的密文是上下文相關的,但明文的錯誤不會傳遞到後續分組,但若是一個分組丟失,後面的分組將所有做廢(同步錯誤)。
CFB:相似於自同步序列密碼,分組加密後,按8位分組將密文和明文進行移位異或後獲得輸出同時反饋回移位寄存器,優勢最小能夠按字節進行加解密,也能夠是n位的,CFB也是上下文相關的,CFB模式下,明文的一個錯誤會影響後面的密文(錯誤擴散)。
OFB:將分組密碼做爲同步序列密碼運行,和CFB類似,不過OFB用的是前一個n位密文輸出分組反饋回移位寄存器,OFB沒有錯誤擴散問題。
進行DES、3DES和AES三種對稱加密算法時,常採用的是PKCS5Padding填充、Zeros填充(0填充)。
1. PKCS5Padding
每一個填充的字節都記錄了填充的總字節數
「a」填充後結果爲: [97 7 7 7 7 7 7 7]
「ab」填充後結果爲: [97 98 6 6 6 6 6 6]
「一a」填充後結果爲:[228 184 128 97 4 4 4 4]
2. ZerosPadding
所有填充爲0的字節
「a」填充後結果爲: [97 0 0 0 0 0 0 0]
「ab」填充後結果爲:[97 98 0 0 0 0 0 0]
「一a」填充後結果爲:[228 184 128 97 0 0 0 0]