go語言教程哪里有?Go從入門到精通系列視頻3.1 對稱加密算法

3.1.1對稱加密的概述

對稱加密(也叫私鑰加密算法)指加密和解密使用相同密鑰的加密算法。它要求發(fā)送方和接收方在安全通信之前,商定一個密鑰。對稱算法的安全性依賴于密鑰,泄漏密鑰就意味著任何人都可以對他們發(fā)送或接收的消息解密,所以密鑰的保密性對通信的安全性至關(guān)重要。

對稱加密算法的優(yōu)點(diǎn)是計算量小、加密速度快、加密效率高。

不足之處是,參與方需要提前持有密鑰,一旦有人泄露則系統(tǒng)安全性被破壞;另外如何在不安全通道中提前分發(fā)密鑰也是個問題,密鑰管理非常困難。

基于“對稱密鑰”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。本章將介紹最常用的對稱加密算法DES、3DES(TripleDES)和AES。加密過程如圖13.4所示.

圖3.1?加密解密



3.1.2DES和TripleDES算法

DES算法全稱為Data Encryption Standard,即數(shù)據(jù)加密標(biāo)準(zhǔn)算法。DES是加密和解密使用相同密鑰的加密算法,也叫做單密鑰算法或私鑰加密算法,傳統(tǒng)密鑰算法。它是IBM公司于1975年研究成功并公開發(fā)表的。

DES算法的入口參數(shù)有三個:Key、Data、Mode。

l其中Key是DES算法的工作密鑰,8個字節(jié)共64位;

l?Data是要被加密或被解密的數(shù)據(jù);

l?Mode為DES的工作方式,有兩種:加密或解密。

在沒有密鑰的情況下,解密耗費(fèi)時間非常長,基本上認(rèn)為沒有可能。加密解密耗時和需要加密的文本大小成正比,這是P問題。如果知道明文和對應(yīng)的密文,求解所用的密鑰,這是NP問題。目前還沒有NP的求解算法,但是很容易得到驗證。想得到NP的解,只能暴力破解(窮舉破解)窮舉驗證成為對稱加密僅有的求解方式,求解時間呈指數(shù)級增長。

DES算法把64位的明文輸入塊變?yōu)閿?shù)據(jù)長度為64位的密文輸出塊,其中8位為奇偶校驗位,另外56位作為密碼的長度。首先,DES把輸入的64位數(shù)據(jù)塊按位重新組合,并把輸出分為L0、R0兩部分,每部分各長32位,并進(jìn)行前后置換,最終由L0輸出左32位,R0輸出右32位

根據(jù)這個法則經(jīng)過16次迭代運(yùn)算后,得到L16、R16,將此作為輸入,進(jìn)行與初始置換相反的逆置換,即得到密文輸出。DES算法具有極高的安全性,到目前為止,除了用窮舉搜索法對DES算法進(jìn)行攻擊外,還沒有發(fā)現(xiàn)更有效的辦法。56位長密鑰的窮舉空間為2^56,這意味著如果一臺計算機(jī)的速度是每秒種檢測100萬個密鑰,那么它搜索完全部密鑰就需要將近2285年的時間,因此DES算法是一種很可靠的加密方法。3DES密鑰是24字節(jié),即192位二進(jìn)制。

3.1.3AES加密

高級加密標(biāo)準(zhǔn)(英語:Advanced Encryption Standard,縮寫:AES),由美國國家標(biāo)準(zhǔn)與技術(shù)研究院(NIST)于2001年11月26日發(fā)布,并在2002年5月26日成為有效的標(biāo)準(zhǔn)。2006年,高級加密標(biāo)準(zhǔn)已然成為對稱密鑰加密中最流行的算法之一。該算法與其他對稱密碼算法相比更安全、效率更高等特點(diǎn)。

AES使用128位,192位或者256位的密鑰長度(密鑰分別是:16字節(jié)、24字節(jié)、32字節(jié)),使得它比密鑰長度為56位的DES更健壯可靠。

2^64 = 18446744073709551616

2^64這個數(shù)大于全球小麥1000年的產(chǎn)量。如果1微秒驗證一個密碼(1秒驗證100萬個),窮舉需要費(fèi)時58萬年。

2^256?約= 10 ^ 77

10^80?是當(dāng)前人類可見宇宙中所有物質(zhì)原子數(shù)目的總和。

3.1.4AES的加密模式

AES的加密模式對應(yīng)中文名稱如表所示。

加密模式(英文名稱及簡寫)中文名稱

Electronic Code Book(ECB)電子密碼本模式

Cipher Block Chaining(CBC)密碼分組鏈接模式

Cipher Feedback Mode(CFB)加密反饋模式

Output Feedback Mode(OFB)輸出反饋模式

ECB:最基本的加密模式,也就是通常理解的加密,相同的明文將永遠(yuǎn)加密成相同的密文,無初始向量,容易受到密碼本重放攻擊,一般情況下很少用。

CBC:明文被加密前要與前面的密文進(jìn)行異或運(yùn)算后再加密,因此只要選擇不同的初始向量,相同的密文加密后會形成不同的密文,這是目前應(yīng)用最廣泛的模式。CBC加密后的密文是上下文相關(guān)的,但明文的錯誤不會傳遞到后續(xù)分組,但如果一個分組丟失,后面的分組將全部作廢(同步錯誤)。

CFB:類似于自同步序列密碼,分組加密后,按8位分組將密文和明文進(jìn)行移位異或后得到輸出同時反饋回移位寄存器,優(yōu)點(diǎn)最小可以按字節(jié)進(jìn)行加解密,也可以是n位的,CFB也是上下文相關(guān)的,CFB模式下,明文的一個錯誤會影響后面的密文(錯誤擴(kuò)散)。

OFB:將分組密碼作為同步序列密碼運(yùn)行,和CFB相似,不過OFB用的是前一個n位密文輸出分組反饋回移位寄存器,OFB沒有錯誤擴(kuò)散問題。

3.1.5填充方式

進(jìn)行DES、3DES和AES三種對稱加密算法時,常采用的是PKCS5Padding填充、Zeros填充(0填充)。

1. PKCS5Padding

每個填充的字節(jié)都記錄了填充的總字節(jié)數(shù)

“a”填充后結(jié)果為:?[97 7 7 7 7 7 7 7] ??

“ab”填充后結(jié)果為:?[97 98 6 6 6 6 6 6] ??

“一a”填充后結(jié)果為:[228 184 128 97 4 4 4 4]

2. ZerosPadding

全部填充為0的字節(jié)

“a”填充后結(jié)果為:?[97 0 0 0 0 0 0 0] ?

“ab”填充后結(jié)果為:[97 98 0 0 0 0 0 0] ?

“一a”填充后結(jié)果為:[228 184 128 97 0 0 0 0]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容