陳栩睿
(西南大學(xué)電子信息工程學(xué)院,重慶 400715)
隨著數(shù)字化信息技術(shù)的不斷發(fā)展,信息安全問題也日顯突出,企業(yè)或個(gè)人的部分敏感數(shù)據(jù)應(yīng)該加密保存或發(fā)布,在特定裝置中才能被解密使用,例如嵌入式設(shè)備的程序升級(jí)文件。同時(shí),移動(dòng)互聯(lián)網(wǎng)內(nèi)容消費(fèi)時(shí)代正在普及,越來越多的用戶愿意為優(yōu)質(zhì)內(nèi)容付費(fèi),企業(yè)或個(gè)人為保護(hù)自己的數(shù)字內(nèi)容不被竊取,需要對(duì)內(nèi)容進(jìn)行加密傳輸,最后在智能終端解密使用。另外,應(yīng)用中還要求數(shù)據(jù)解密過程應(yīng)盡量不消耗額外的硬件資源,否則會(huì)降低用戶的體驗(yàn)感。
目前,主流的加密方式有單密鑰模式、雙密鑰模式兩種。單密鑰模式采用的是對(duì)稱加密算法,即加密密鑰和解密密鑰相同,加密產(chǎn)生密文,其長(zhǎng)度和明文大致相同,一般包括 DES、3DES、AES等。雙密鑰模式也稱為公鑰模式,其采用的是非對(duì)稱加密算法,加密和解密所使用的是不同的密鑰,即通常所說的“公鑰”和“私鑰”,公鑰與私鑰是一對(duì),如果用公鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私鑰才能解密;如果用私鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公鑰才能解密。但嚴(yán)格意義上說,只能使用公鑰加密,使用私鑰來解密。而使用私鑰加密更多的起到簽名的作用,讓公鑰解密來驗(yàn)證身份,因?yàn)楣€是要傳遞的,有泄露風(fēng)險(xiǎn)。 RSA算法、 Elgamal算法、橢圓離散對(duì)數(shù)算法等就屬于雙密鑰模式。
然而,單密鑰加密方式中,由于加密和解密使用的是同一個(gè)密鑰,一旦加密方或解密方泄露了密鑰,就會(huì)喪失安全,因此,安全性較低。雙密鑰加密方式的計(jì)算壓力較大,而且,采用雙密鑰加密方式加密后,密文的數(shù)據(jù)長(zhǎng)度會(huì)增長(zhǎng),保存和傳輸壓力會(huì)加大。因此,上述傳統(tǒng)的主流加密方式不適用于嵌入式平臺(tái)的智能終端程序和文件的在線升級(jí)應(yīng)用。針對(duì)嵌入式平臺(tái)的智能終端中的程序和文件的在線升級(jí)應(yīng)用,本文提出了一種無密鑰的加解密方法及算法。
嵌入式平臺(tái)的智能終端中程序和文件在線升級(jí)的無密鑰加密方法,主要是在確保算法安全性的基礎(chǔ)上考慮算法的便捷性。本文提出的無密鑰加密方法是通過選用不同的摘要算法來得到類密鑰信息,并通過異或運(yùn)算來生成密文;同時(shí),通過選用相應(yīng)的長(zhǎng)度算法,來確保數(shù)據(jù)塊的分割不易被反譯識(shí)別。
具體過程是:先將程序和文件數(shù)據(jù)分割為n個(gè)不固定字節(jié)長(zhǎng)度的數(shù)據(jù)塊,自數(shù)據(jù)的起始到結(jié)尾依次為DB1、DB2……DBn,DBn的長(zhǎng)度為L(zhǎng)n,其中,n≥1。再從每個(gè)數(shù)據(jù)塊的起始地址開始,選取不少于一個(gè)字節(jié)作為頭部,DBn的頭部為Hn,數(shù)據(jù)塊的起始地址是通過迭代的方式獲取,即數(shù)據(jù)塊DBn的地址取決數(shù)據(jù)塊DBn-1的地址和長(zhǎng)度,數(shù)據(jù)塊DB1的起始地址為整個(gè)數(shù)據(jù)文件的首地址。
接著,從Hn任取不少于一個(gè)比特作為摘要算法的輸入元素Xn。然后,使用摘要算法fH(·)計(jì)算出每個(gè)數(shù)據(jù)塊頭部的類密鑰信息,再將該類密鑰信息與頭部明文進(jìn)行相應(yīng)的異或運(yùn)算,得到頭部密文。同時(shí),利用長(zhǎng)度算法fL(·)計(jì)算數(shù)據(jù)塊長(zhǎng)度,利用不同的摘要算法fK(·)計(jì)算數(shù)據(jù)塊內(nèi)所有字節(jié)數(shù)據(jù)流的摘要信息來作為數(shù)據(jù)塊內(nèi)的類密鑰信息,再利用該類密鑰信息與每一個(gè)字節(jié)數(shù)據(jù)進(jìn)行相應(yīng)的異或運(yùn)算得到密文。
圖1 數(shù)據(jù)塊及其頭部劃分示意圖
摘要算法主要是指數(shù)據(jù)摘要算法,它表示輸入任意長(zhǎng)度的數(shù)據(jù),輸出固定長(zhǎng)度的數(shù)據(jù),相同的輸入數(shù)據(jù)始終得到相同的輸出,不同的輸入數(shù)據(jù)盡量得到不同的輸出。數(shù)據(jù)摘要算法具有不可逆性,其主要功能有數(shù)據(jù)簽名、數(shù)據(jù)完整性驗(yàn)證等,這里我們主要是利用它來計(jì)算生成類密鑰信息。常用的數(shù)據(jù)摘要算法有:CRC、MD5、SHA等,可以根據(jù)實(shí)際應(yīng)用的便捷或復(fù)雜程度的要求進(jìn)行選擇。
解密方法與加密方法對(duì)稱,先提取第一個(gè)數(shù)據(jù)塊的頭部密文和元素,通過摘要算法計(jì)算出第一個(gè)數(shù)據(jù)塊的頭部明文,并通過長(zhǎng)度算法fL(·)計(jì)算第一個(gè)數(shù)據(jù)塊的長(zhǎng)度,然后計(jì)算第一個(gè)數(shù)據(jù)塊中除頭部外每一個(gè)字節(jié)的類密鑰信息和明文,接著再提取第二個(gè)數(shù)據(jù)塊的頭部密文和元素,依次進(jìn)行解密計(jì)算。
整個(gè)無密鑰加解密算法的具體流程如下:
(1)提取數(shù)據(jù)塊DB1的頭部H1。
(2)從H1中任意選不少于一個(gè)比特作為所選摘要算法的輸入元素X1,數(shù)據(jù)塊長(zhǎng)度和字節(jié)的類密鑰信息計(jì)算均以該元素作為輸入。
(3)按如下摘要算法計(jì)算 H1的類密鑰信息,并通過異或運(yùn)算得到密文C1:
式中,數(shù)據(jù)塊頭部密文摘要算法fH使用前一個(gè)數(shù)據(jù)塊的頭部密文Cn-1,計(jì)算本數(shù)據(jù)塊的頭部類密鑰信息,并通過與頭部明文Hn進(jìn)行異或運(yùn)算得到密文Cn。當(dāng)n=1時(shí),Cn-1即C0為一個(gè)約定的初值M。注意,使用頭部密文時(shí),不能覆蓋X1所在的比特位。
(4)計(jì)算數(shù)據(jù)塊DB1的長(zhǎng)度L1:
(5)計(jì)算數(shù)據(jù)塊DB1內(nèi)除頭部外的每一個(gè)字節(jié)Dk的類密鑰信息Sk和密文Ek,數(shù)據(jù)塊中每一個(gè)字節(jié)Dk使用不同的摘要算法,計(jì)算出第k個(gè)字節(jié)的類密鑰信息Sk:
(6)提取下一數(shù)據(jù)塊的頭部,重復(fù)步驟(2)-(5),直到所有數(shù)據(jù)塊加密完成即可。流程圖如圖2所示。
圖2 無密鑰加密算法流程圖
圖3 無密鑰解密算法流程圖
(1)從數(shù)據(jù)塊DB1的頭部中提取出密文C1。
(2)從數(shù)據(jù)塊DB1的頭部中提取出元素X1。
(3)按如下算法解密生成數(shù)據(jù)塊DB1的頭部明文H1:
其中,明文不覆蓋X1。
(4)計(jì)算數(shù)據(jù)塊 DB1長(zhǎng)度L1:
(5)計(jì)算數(shù)據(jù)塊DB1內(nèi)除頭部外的每一個(gè)字節(jié)密文Ek的類密鑰信息Sk,然后與密文Ek進(jìn)行異或運(yùn)算得到明文Dk:
(6)提取下一數(shù)據(jù)塊的頭部密文和元素,重復(fù)步驟(2)-(5),直到所有數(shù)據(jù)解密完成即可。流程圖如圖3所示。
由于該無密鑰加解密方法先將數(shù)據(jù)分割為n個(gè)不固定長(zhǎng)度的數(shù)據(jù)塊;再從每個(gè)數(shù)據(jù)塊的起始地址開始,選取不少于一個(gè)字節(jié)作為頭部;接著從數(shù)據(jù)塊的頭部中任取不少于一個(gè)比特作為摘要算法的輸入元素;然后使用摘要算法和異或運(yùn)算,從每個(gè)數(shù)據(jù)塊的頭部計(jì)算出頭部類密鑰信息和密文、數(shù)據(jù)塊長(zhǎng)度以及數(shù)據(jù)塊所有字節(jié)的類密鑰信息,使用該類密鑰信息與每一個(gè)字節(jié)的明文進(jìn)行異或運(yùn)算得到密文,從而完成加密。解密是通過與加密過程對(duì)稱的解密過程實(shí)現(xiàn)。這種加解密方法的加密過程中數(shù)據(jù)塊長(zhǎng)度和每個(gè)字節(jié)的類密鑰信息具備隨機(jī)性,所以逆向“碰撞”難以破解,而且本方法屬于算法流程不公開的加密方法,只是應(yīng)用在專屬的智能終端等設(shè)備上,并很好地利用了多種數(shù)據(jù)摘要算法,安全性高。
同時(shí),本方法按字節(jié)順序計(jì)算密文,不用緩存數(shù)據(jù),沒有復(fù)雜的運(yùn)算,計(jì)算壓力較小。另外,采用本方法加密后不會(huì)改變密文的數(shù)據(jù)長(zhǎng)度,從而不會(huì)增加數(shù)據(jù)的保存和傳輸壓力。我們已將該方法應(yīng)用于專用智能終端的嵌入式軟件的在線升級(jí)中,一年共完成了4版軟件的在線升級(jí),流程很順暢,用戶體驗(yàn)感很好,沒有發(fā)生軟件被破譯后盜用的現(xiàn)象。