孫曉峰,安永麗
(華北理工大學(xué)人工智能學(xué)院,唐山063010)
隨著社會的發(fā)展,信息傳遞的效率與日俱增,三千多年前商周時期的烽火臺就可以看作是敵情“有”和“無”兩種狀態(tài)的信息傳遞工具。19世紀(jì)以電磁波為載體的電話電報等技術(shù)蓬勃發(fā)展起來,世界逐步進入了信息時代。人類能夠直接閱讀并理解的信息被稱作明文,這些明文通過計算機進行傳輸?shù)倪^程中可能遭到竊聽、破壞和偽造。有必要通過技術(shù)手段保證信息傳輸?shù)陌踩?,最有效的方法便是采用加密技術(shù),將明文加密為密文,并保證只有信息的接收方才能將密文正確地解讀,從而避免數(shù)據(jù)被非法竊取、替換或使用[1]。
分組加密又稱為塊加密,明文在處理前按照固定的二進制位進行分組,通常可以并行處理。分組的長度過短則算法安全性不足,分組長度過長則算法的運行效率和存儲效率下降。分組密碼可應(yīng)用于諸多領(lǐng)域,但加解密之前必須將待處理數(shù)據(jù)進行分組和填充,如何處理長度過短或過長的原始數(shù)據(jù)就需要考慮分組密碼的工作模式[2]。完整的工作模式除基本密碼外,還包括一些反饋和簡單運算,不會損害基本密碼算法的安全性[3]。
雖然工作模式不會損害算法的安全性,但是模式的效率不應(yīng)該明顯的低于基礎(chǔ)的密碼。ECB模式的特點是中每個明文組獨立地以同一密鑰加密,與之對比CBC模式的每個明文組的每一位輸入還依賴于前一分組。ECB模式雖然實現(xiàn)簡單,但由于不具備反饋機制,相同的明文會被加密為相同的密文,存在安全隱患。CBC模式每一分組的每一位都依賴于前一加密分組的反饋,效率有所下降。需要一種工作模式對兩者進行綜合,揚長避短。
電子密碼本(ECB)模式是最簡單的分組工作模式,明文消息的分組長度固定,相同的明文分組永遠被加密成相同的密文分組。每個分組獨立加密解密,比較容易實現(xiàn)并行計算。但是ECB模式在加密長數(shù)據(jù)時由于無法隱蔽明文的信息特征,存在被攻擊者利用的安全隱患,更適合加密長度相對較短的數(shù)據(jù)。
與基礎(chǔ)算法相比,ECB工作模式能夠?qū)⑤斎氲拈L數(shù)據(jù)分割為多組,每組的長度固定為128位,最后不足的位數(shù)則采用規(guī)則進行填充使之滿足128位條件。這些固定長度的明文分組彼此之間互不影響,可以被獨立地加密,程序中按照數(shù)據(jù)的輸入順序依次加密。由于加密前不對分組進行其他處理,ECB模式的加密速度最快,也最容易運行。
加密采用遞歸方式進行,若分組長度小于等于16個字節(jié),則填充到16個字節(jié)后直接進行加密,否則將前16個字節(jié)和剩余字節(jié)分別調(diào)用加密函數(shù)。輸入的第17個字節(jié)在遞歸調(diào)用的函數(shù)中成為了第1個字節(jié),最終分組長度小于等于16字節(jié),將本組加密得到的密文合并到最終結(jié)果后退出遞歸調(diào)用,解密函數(shù)同理。若分組不足16字節(jié),需要按照一定規(guī)則填充至16字節(jié),程序中采用的填充規(guī)則是零填充,即添加一串二進制0。
密碼分組鏈接(CBC)模式是一種常用的工作模式,每一個分組的明文與前一個分組密文進行異或操作后再進行加密。對于加密的第一個分組,需要一個無需保密且數(shù)據(jù)無意義的初始化向量IV,將IV作為第一個分組之前的分組參與加密。這樣即使明文完全相同,應(yīng)用不同的初始化向量后被加密成的密文信息也會有所不同,具有更高的安全性。
CBC模式最大的變化就是引入了反饋機制,因此需要保存上一組加密后的密文,對于第一組明文來說則需要提供與分組長度相同的128位初始化向量IV。IV的取值沒有要求,一般使用時間標(biāo)記或一些隨機位串,程序中為便于加解密中使用,采用一串固定密文作為IV的密文。
有了初始化向量后,第一組數(shù)據(jù)在加密前需要與IV的密文進行按位異或,得到的結(jié)果作為明文進行加密,將加密結(jié)果保存至反饋寄存器。第二組明文在加密前與反饋寄存器中的第一組密文進行按位異或,得到的結(jié)果作為第二組明文進行加密,重復(fù)上述步驟直到加密完成整個輸入分組。在解密時,除密鑰外還需要提供初始化向量IV,第一組密文直接解密后與IV按位異或,恢復(fù)為原始明文,將第一組密文保存至反饋寄存器。第二組密文直接解密后與保存在反饋寄存器里的第一組密文按位異或,恢復(fù)為第二組明文,同時將第二組密文保存至反饋寄存器,反復(fù)操作直到解密完成。
CBC模式讓相同的明文分組可以被加密成不同的密文,提高了算法的安全性。但是每一組加密都依賴于上一組加密的密文,若在其中一組的加密過程中發(fā)生了錯誤,不僅這一組的密文出錯,該組后續(xù)所有分組的加密都將出錯,即存在錯誤擴散現(xiàn)象。分組之間的強關(guān)聯(lián)也使得CBC模式的加密和解密都必須按順序進行,無法進行并行處理,對加密效率有一定影響。
在改進的新型工作模式HCBC中,不是將反饋寄存器中的每一位都與明文進行異或,而是根據(jù)分組數(shù)量的不同自動調(diào)整異或的位數(shù),當(dāng)只有一個分組時與CBC模式相同,當(dāng)明文有兩個分組時,每隔1字節(jié)參與反饋,當(dāng)明文分組大于16組后,每組只有1字節(jié)參與反饋。程序中設(shè)置了異或操作中間隔的步長,步長與分組數(shù)量相關(guān),每組中參與反饋的字節(jié)數(shù)與分組數(shù)量的關(guān)系如下。
計算結(jié)果向上取整,這樣當(dāng)分組數(shù)量較少時,HCBC模式與CBC模式相似,每個明文分組中所有的字節(jié)全部參與反饋。當(dāng)分組數(shù)量增加時,HCBC模式中每個明文分組的反饋字節(jié)數(shù)不斷下降。當(dāng)分組數(shù)量較多時,每個明文分組中只有一個字節(jié)參與反饋。
AES加密算法應(yīng)用廣泛,其安全性及高效性是其他算法不可比擬的,并且在不同硬件和軟件運行環(huán)境下都有較好的性能[4]。為了進一步提高算法的效率,針對AES算法本身的效率優(yōu)化方案較多[5-8],本文則以AES算法為例,對分組加密的工作模式進行改進。在軟件中編寫代碼實現(xiàn)基本AES加密,并針對ECB模式、CBC模式和改進的HCBC模式編寫對應(yīng)工作模式的函數(shù)。
設(shè)待加密的明文字符串為HuabeiLigongDaxue,共計17個字節(jié)。使用1234567作為輸入的初始密鑰,在加密算法中自動擴展為128位二進制位。測試編寫的ECB模式、CBC模式和HCBC模式能否正常完成數(shù)據(jù)的加解密操作。加密程序接收三個參數(shù),分別為初始輸入的明文、初始輸入的密鑰和加密使用的工作模式名,初始輸入的字符在加密函數(shù)中被轉(zhuǎn)換為十進制進行存儲和計算。
ECB模式與基本AES算法相比只有一點區(qū)別,那就是需要對不足16字節(jié)的分組進行填充,填充的數(shù)據(jù)有多種標(biāo)準(zhǔn),在本程序中使用零填充。若明文長度剛好16字節(jié)的整數(shù)倍,為了避免與填充過的明文在解密時混淆,需要在這樣的明文最后額外補充16字節(jié)的填充數(shù)據(jù)。執(zhí)行加密程序?qū)γ魑倪M行加密,得到的密文是35E714C8C353A1FF30E9EB4AAAA739063C2952D8CD89ADECE57D0F9C5CA10C25,ECB模式加密程序運行結(jié)果見圖1。
圖1 ECB模式加密界面
在加密和解密過程中,加密方使用加密函數(shù)和加密密鑰對明文進行加密,解密方需要使用相同的加密函數(shù)和加密密鑰才能正確地還原明文[9]。解密中需要判斷最后的16字節(jié)是否由明文加密所得,若不是則需要摒棄該分組。利用加密前計算的總分組數(shù)目,可以區(qū)分最后的16字節(jié)是否需要摒棄。解密程序同樣接收三個參數(shù),分別為十六進制表示的密文、初始輸入的密鑰和解密使用的工作模式名,若解密工作模式與加密工作模式不匹配,則解密可能報錯或得到無意義的亂碼。將密文、初始密鑰和對應(yīng)的工作模式輸入解密程序中,以ECB模式解密后得到的明文為HuabeiLigongDaxue,與輸入的明文一致,算法可正常進行ECB工作模式的加解密操作。ECB模式解密程序運行結(jié)果見圖2。
圖2 ECB模式解密界面
用061B986F6609B97A7A9F1CAA988171D4作為初始化向量IV的密文,執(zhí)行CBC模式的程序進行加密,計算得到的密文為7161F4F1BA8D7F9D3BE24A190 B250000E38A5785088541324952E8D478F86868,CBC模式加密程序運行結(jié)果見圖3。
圖3 CBC模式加密界面
將密文、初始密鑰和IV輸入解密程序中。CBC模式解密程序結(jié)果見圖4。
圖4 CBC模式解密界面
使用061B986F6609B97A7A9F1CAA988171D4作為初始化向量IV的密文,執(zhí)行加密程序?qū)γ魑倪M行加密,密文為AEA50E86E7CCE2DBB4993FE305D1F7E1 C4569A2ED302FFCAB778EDC7180B7B8E。HCBC模式加密程序運行結(jié)果見圖5。
圖5 HCBC模式加密界面
將密文、初始密鑰和相同的初始化向量IV輸入解密程序中,得到的明文為HuabeiLigongDaxue,與輸入的明文一致。HCBC模式解密程序運行結(jié)果見圖6。
圖6 HCBC模式解密界面
HCBC模式改進了ECB模式中完全不包含反饋操作的缺陷,相鄰分組之間的加密結(jié)果會互相影響。分組數(shù)量在兩個以上時,不會像CBC模式那樣分組中的每個字節(jié)均參與反饋,因此HCBC模式的安全性介于ECB模式與CBC模式之間。
雖然理論上分組密碼的工作模式不會降低基礎(chǔ)加密算法的安全性,但理論和實際存在差距,導(dǎo)致這種差異的原因有三,一是對工作模式的錯誤應(yīng)用破壞了可證明安全性的前提,二是應(yīng)用超出了安全結(jié)論的適用范圍,三是論證的安全模型與實際情況存在差異[10]。
在空間占用方面,ECB模式下始終將明文填充到分組長度,不存在反饋操作,因此無需寄存器保存上一組的密文,需要的額外存儲空間最少。CBC模式需要保存上一組加密的密文用于本組的反饋操作,至少需要一個128位寄存器。HCBC模式在最壞情況下需要對分組中全部16個字節(jié)的密文進行存儲以用于反饋,為了保障算法穩(wěn)定運行,HCBC模式也至少需要一個128位寄存器。
在時間效率方面,三種工作模式都能順利的完成加密解密操作,分別用來加解密不同長度字節(jié)的數(shù)據(jù),在同一平臺相近時間內(nèi),使用軟件提供的運行并計時工具統(tǒng)計運行時間,結(jié)果取十次運行平均值,統(tǒng)計結(jié)果見表1。
表1 三種工作模式的運行效率對比/ms
在明文長度較少,分組數(shù)量僅有1組時,ECB模式加密速度最快,但三種工作模式的加密速度總體差異并不明顯,解密速度比加密速度略慢。當(dāng)明文長度中等,分組數(shù)量由4組增加到15組時,HCBC模式的加密速度介于ECB模式和CBC模式之間,每種工作模式的解密速度慢于加密速度。當(dāng)明文長度繼續(xù)增加到超過16組之后,HCBC模式的加密速度介于ECB模式和CBC模式之間且與ECB模式接近,三種工作模式的解密速度都明顯慢于加密速度。
本文通過介紹分組加密的ECB工作模式和CBC工作模式,綜合ECB模式操作簡便和CBC模式具備反饋的特點,提出一種根據(jù)分組數(shù)量不同自動調(diào)整每組中反饋字節(jié)數(shù)的新型工作模式HCBC。運行測試結(jié)果表明,在數(shù)據(jù)較少時,不同工作模式的速度差異不明顯。當(dāng)數(shù)據(jù)較多時,HCBC模式在保證每組至少有1字節(jié)參與反饋的條件下,加密速度與ECB模式接近,能夠綜合ECB模式效率高與CBC模式安全性高的優(yōu)勢。