密碼學(xué)算法|對稱密碼算法
一、什么是對稱算法
不知道大家有沒有看過福爾摩斯探案中的《跳舞的人》,在這個故事中,斯蘭尼使用跳舞的小人替代字母表中的字符,實(shí)現(xiàn)消息的秘密傳遞。
這種方式其實(shí)屬于古典密碼學(xué)中的代換,只有對方同樣了解代換的規(guī)則,才能解出隱含的信息,同時也避免了不了解規(guī)則的人獲取其中的信息,是一種簡單的對稱算法。
而現(xiàn)代密碼學(xué)中的對稱算法,也是采用了類似的流程實(shí)現(xiàn)數(shù)據(jù)的保密:通信雙方alice和bob約定一個字符串作為密鑰,Alice使用密鑰,通過數(shù)學(xué)運(yùn)算,將明文轉(zhuǎn)換為密文交給bob,而bob使用相同的密鑰和數(shù)學(xué)運(yùn)算過程,獲取明文(注1)。
在使用對稱算法的過程中,alice發(fā)送的明文長度是不定的,但是雙方約定的密鑰長度是定長,如何使用定長的密鑰對不定長的明文進(jìn)行加密呢?
通常有兩種方法:將密鑰轉(zhuǎn)換為與明文相同長度-這種方法稱為序列密碼(也稱為流密碼),或者將明文進(jìn)行切割,切割的長度等于密鑰的長度-這種方式稱為分組密碼(也稱為塊密碼)
圖1序列密碼和分組密碼
二序列密碼
序列密碼單獨(dú)加密每個明文位,通過將密鑰序列中的每個位與每個明文位進(jìn)行異或操作實(shí)現(xiàn),解密過程也是如此。
從序列密碼的實(shí)現(xiàn)過程中可以發(fā)現(xiàn),其安全性取決于密鑰序列的安全性。
最理想的密鑰序列當(dāng)然是一次一密(OTP):每個密鑰序列要求完全隨機(jī);只能用于一個明文,不能重復(fù)使用;每次發(fā)送明文之前都要將密鑰序列安全的發(fā)給對方。
在現(xiàn)實(shí)應(yīng)用中,構(gòu)建完全符合OTP特征的密碼體系無疑是困難的(注2):
1)密鑰序列的長度完全等于明文長度,在明文長度足夠長的情況下,密鑰的產(chǎn)生是一個很困難的事情(宏思電子的高速隨機(jī)數(shù)源的速率也只有20Mbps)(注3);
2)能夠生成完全隨機(jī)的設(shè)備價(jià)格昂貴;
3)密鑰序列需要安全的進(jìn)行傳輸,而且每加密一次需要傳輸一次;
因此,在現(xiàn)代密碼學(xué)中,一般采用通過密鑰算法將固定長度的密鑰種子進(jìn)行分散,生成需求長度的密鑰序列。
圖2序列密碼加密過程
當(dāng)前比較流行的序列密碼算法有:RC4和ZUC,ZUC算法也叫祖沖之算法,由我國學(xué)者自主設(shè)計(jì)的加密和完整性算法,已經(jīng)被國際組織3GPP推薦為4G無線通信的第三套國際加密和完整性標(biāo)準(zhǔn)的候選算法。
三、分組密碼
在現(xiàn)實(shí)生活中,分組密碼的使用場景要比序列密碼更加廣泛,在通常的互聯(lián)網(wǎng)應(yīng)用中,通常使用分組密碼進(jìn)行數(shù)據(jù)保護(hù)。
分組密碼是指將需要進(jìn)行加密的明文分割成指定長度的分組,使用密鑰數(shù)據(jù)對每一個明文分組進(jìn)行進(jìn)行加密。
當(dāng)前比較常用的分組密碼算法為DES/3DES、AES,國內(nèi)也提出了與之對標(biāo)的算法SM1和SM4(國密算法會在后續(xù)有專門的文章介紹)
1)DES/3DES算法
DES算法是1977年由IBM提供,最初發(fā)布時,DES算法的有效期只有10年,但是由于DES算法良好的安全性,其得到了廣泛的應(yīng)用,有效期被推遲到新世紀(jì)初,之后才由AES替代。
DES算法通過IP置換的方式,將64bits明文分為兩部分32bits L0和32bits R0,然后分別帶入到Festiel網(wǎng)絡(luò)中,經(jīng)過16輪操作,進(jìn)行IP逆置換,獲得最終的密文,計(jì)算過程可參考下圖
(注:此處僅是簡單描述DES算法工作原理,如需深入了解,可在網(wǎng)上查找相關(guān)資料,也可自行進(jìn)行算法實(shí)現(xiàn))。
圖3 DES算法流程
在DES算法被公布不再安全的時候,人們提出了各種改進(jìn)方案,其中比較常用的方案就是三重DES(Triple DES),可以表示為:
圖4 3DES算法
在這個方案中,如果k1=k2=k3,則可以執(zhí)行單重DES運(yùn)算。
由于DES算法早就過了有效期,當(dāng)前的機(jī)器性能也能以很小的代價(jià)獲取相應(yīng)的密鑰數(shù)據(jù),所以DES/3DES算法已經(jīng)不再安全,盡量不要使用該算法
2)AES算法
為了應(yīng)對DES算法存在的問題,1997年,美國NIST開始征集新的對稱密碼算法,最終于2001年發(fā)布了新的對稱密碼算法標(biāo)準(zhǔn)-AES
AES是一種基于伽羅瓦域的多輪轉(zhuǎn)換運(yùn)算,支持128bits,192bits和256bits長度的密鑰,分組長度為128bits,且在軟硬件實(shí)現(xiàn)上更加高效,計(jì)算流程如下:
圖5 AES算法流程
從AES相關(guān)標(biāo)準(zhǔn)發(fā)布以來,眾多密碼領(lǐng)域的專家對AES進(jìn)行了廣泛研究,目前還沒有找到相對高效的攻擊方法。
最近幾年,AES已經(jīng)逐步取代DES,在多個領(lǐng)域使用
除了以上兩種比較常用的分組密碼算法外,還有PRESENT算法、RC6算法等,感興趣的朋友可以與筆者進(jìn)行交流或者在網(wǎng)絡(luò)上查找相關(guān)資源了解。
四、應(yīng)用
對稱算法主要應(yīng)用于數(shù)據(jù)的加密保護(hù),
如通信過程中安全信道數(shù)據(jù)的保護(hù),https網(wǎng)絡(luò)請求數(shù)據(jù),IM即時通訊聊天數(shù)據(jù),游戲交互數(shù)據(jù)保護(hù)等
如存儲介質(zhì)數(shù)據(jù)保護(hù):磁盤內(nèi)數(shù)據(jù)保護(hù),數(shù)據(jù)庫數(shù)據(jù)保護(hù)等
如智能終端數(shù)據(jù)保護(hù):智能卡內(nèi)數(shù)據(jù)保護(hù)等
五、問題
分組密碼中有一個要求,明文的長度要等于固定值(DES/3DES為64bits,AES為128bits),對于長度大于固定值得數(shù)據(jù),我們可以將其分割為對應(yīng)的長度,但明文數(shù)據(jù)長度不能夠整除時該如何處理剩余部分的數(shù)據(jù)呢?
或許我們需要有一種方法,使明文數(shù)據(jù)的長度滿足我們的需求
注:
1、在現(xiàn)代密碼學(xué)中,一般使用alice和bob分別指代通信雙方,Oscar指代惡意第三方
2、在量子密碼中,由于量子通信的特性,OTP或許會有新的發(fā)展
3、宏思電子為國內(nèi)主要的隨機(jī)數(shù)生成器廠商