本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別是涉及一種基于余數(shù)系統(tǒng)的商密SM2加密算法的白盒軟件實(shí)現(xiàn)方法。
背景技術(shù):
隨著網(wǎng)絡(luò)和計(jì)算機(jī)技術(shù)應(yīng)用的快速發(fā)展,信息安全問題已經(jīng)成為關(guān)乎國計(jì)民生的大事。公鑰密碼學(xué)是當(dāng)今社會(huì)信息安全技術(shù)的核心,它不僅可以實(shí)現(xiàn)加密功能,而且可以實(shí)現(xiàn)數(shù)字簽名、身份認(rèn)證、消息認(rèn)證等功能,因此被廣泛應(yīng)用于電子郵件、數(shù)字內(nèi)容分發(fā)、網(wǎng)絡(luò)交易、電子政務(wù)等應(yīng)用中。公鑰密碼中私鑰的安全性是保證眾多應(yīng)用安全的基礎(chǔ)。然而,在一個(gè)不可信任的環(huán)境中,例如手機(jī)、智能卡等,軟件加解密的動(dòng)態(tài)過程對(duì)于攻擊者是可見的,他們很容易就獲得密鑰信息。2002年,Chow等人提出了白盒攻擊環(huán)境的概念,允許攻擊者對(duì)加密軟件及其運(yùn)行環(huán)境擁有完全的控制能力、與軟件的執(zhí)行者擁有同等的權(quán)利,這與實(shí)際生活中的安全威脅相吻合。
對(duì)密碼算法的實(shí)現(xiàn)主要有硬件和軟件兩種方式。采用硬件的方式存在著使用成本高、通用性較差等問題。采用軟件的方式,密鑰將會(huì)出現(xiàn)在計(jì)算平臺(tái)的內(nèi)存中,攻擊者可通過惡意軟件等方式獲取密鑰,不能應(yīng)對(duì)已有的白盒攻擊。目前,主要采用云端協(xié)作和密鑰分散存儲(chǔ)的方式來減輕密碼算法軟件實(shí)現(xiàn)過程中的密鑰安全問題。然而,云端協(xié)作的方式并不能抵抗本地密鑰的泄露問題,同時(shí)還需要解決云端與終端的身份識(shí)別問題;密鑰分散存儲(chǔ)的方式雖然可以減輕密鑰靜態(tài)存儲(chǔ)時(shí)被泄露的風(fēng)險(xiǎn),但密鑰在密碼算法運(yùn)行時(shí)必須合成,這將導(dǎo)致完整的密鑰信息出現(xiàn)在內(nèi)存中。
SM2算法是國家商用密碼管理局制定的商用公鑰密碼標(biāo)準(zhǔn),廣泛應(yīng)用于國內(nèi)的電子商務(wù)、電子政務(wù)等領(lǐng)域。為了保護(hù)SM2加密算法軟件實(shí)現(xiàn)過程中私鑰的安全,設(shè)計(jì)高效、易用、且能抵抗白盒攻擊的SM2加密算法是十分必要的。
技術(shù)實(shí)現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種基于余數(shù)系統(tǒng)的商密SM2加密算法的白盒軟件實(shí)現(xiàn)方法,其特征在于,包括如下步驟:
步驟一:選取一個(gè)余數(shù)系統(tǒng),該余數(shù)系統(tǒng)的余數(shù)基為β=(p1,p2,...,pt),基β的動(dòng)態(tài)范圍滿足ω=p1p2p3…pt≤2512;預(yù)先生成客戶端私鑰dA,將dA在β這組基下表示為dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;預(yù)先確定密文信息C,所述C=C1||C2||C3,客戶端和云服務(wù)器端預(yù)先確定β與dA作為橢圓曲線系統(tǒng)參數(shù)、確定橢圓曲線的基點(diǎn)G,其階數(shù)為n。
步驟二:從密文C中提取出C1;驗(yàn)證C1是否為橢圓曲線上的非無窮遠(yuǎn)點(diǎn),如果是的話則將C1發(fā)送給云服務(wù)器端,否則跳出本流程;
步驟三:云服務(wù)器端產(chǎn)生一個(gè)隨機(jī)數(shù)k,且k∈[1,n-1]。
步驟四:云服務(wù)器端計(jì)算橢圓曲線上的點(diǎn)P,P=[k]*C1。
步驟五:云服務(wù)器端計(jì)算k模n的逆k-1,即:k*k-1=1mod n。將k-1在β這組基下表示為其中i=1、2......t。
步驟六:云服務(wù)器端將k-1用非線性變換s1,s2,...,st進(jìn)行混淆;即并將P和發(fā)送給客戶端。
步驟七:客戶端通過查找密鑰表Tablei計(jì)算其中為si的逆變換,所述Tablei是通過遍歷ki的所有可能值,計(jì)算制作出的密鑰表,i=1、2......t,私鑰信息dA,i隱藏在密鑰表中。
步驟八:客戶端利用中國剩余定理恢復(fù)出v;
步驟九:客戶端計(jì)算v′=v mod n。
步驟十:客戶端計(jì)算橢圓曲線點(diǎn)(x2,y2)=[v′]*P。
步驟十一:客戶端計(jì)算t=KDF(x2||y2,klen),其中KDF()為密鑰分發(fā)函數(shù),klen為明文M的比特長(zhǎng)度。若t≠0,從密文C中提取出C2,計(jì)算否則跳出本流程。
步驟十二:計(jì)算u=Hash(x2||M′||y2)。
步驟十三:從密文C中提取出C3,若u=C3,則M′為明文。
進(jìn)一步的,步驟三中,云服務(wù)器端利用隨機(jī)數(shù)發(fā)生器產(chǎn)生隨機(jī)數(shù)k。
本發(fā)明的有益效果為:
(1)終端在進(jìn)行解密運(yùn)算過程中,內(nèi)存等硬件設(shè)備中不會(huì)出現(xiàn)私鑰的完整明文,確保的密碼算法運(yùn)行的白盒攻擊安全。
(2)該解密算法表的大小為68.75KB,存儲(chǔ)空間要求較小。
(3)該加密算法和標(biāo)準(zhǔn)SM2加密算法效率基本一致,實(shí)用性較高。
(4)通過使用白盒軟件實(shí)現(xiàn)SM2解密算法可降低商用密碼算法的使用成本,擴(kuò)大商用密碼算法的使用范圍。
(5)使用白盒軟件算法在確保加解密安全的同時(shí),通用性較強(qiáng),對(duì)運(yùn)行平臺(tái)硬件沒有任何特殊需求。
附圖說明
圖1為本發(fā)明的流程圖。
具體實(shí)施方式
本發(fā)明的設(shè)計(jì)構(gòu)思為:針對(duì)商密SM2加密算法在不可信任環(huán)境中運(yùn)行的私鑰安全問題,提出一種基于查找表和置亂混淆等技術(shù)的SM2加密算法的白盒軟件實(shí)現(xiàn)方案。該方案采用云加端的方式實(shí)現(xiàn),能有效的保護(hù)終端私鑰在存儲(chǔ)和運(yùn)行時(shí)的安全,且能直接與標(biāo)準(zhǔn)SM2加密算法結(jié)合使用。此外,本專利采用余數(shù)系統(tǒng)理論對(duì)大整數(shù)運(yùn)算進(jìn)行分解,從而降低查找表的大小,減小算法所需的存儲(chǔ)空間。
本申請(qǐng)基于國家商用密碼標(biāo)準(zhǔn)SM2加密算法進(jìn)行構(gòu)建,技術(shù)方案需要三類輔助函數(shù):密碼雜湊函數(shù)、密鑰派生函數(shù)和隨機(jī)數(shù)發(fā)生器,這三類函數(shù)的選取和標(biāo)準(zhǔn)SM2加密算法相同,沿用標(biāo)準(zhǔn)SM2加密算法中的記號(hào):
dA:表示用戶(即客戶端)A的私鑰。
G:表示橢圓曲線的一個(gè)基點(diǎn),其階數(shù)為n。
Hv():表示消息摘要長(zhǎng)度為v比特的密碼雜湊函數(shù)。
KDF():表示密鑰派生函數(shù)。
M:表示明文信息。
C=C1||C2||C3:表示密文信息。
為了降低白盒SM2算法需要的存儲(chǔ)空間,本申請(qǐng)采用余數(shù)系統(tǒng)理論對(duì)大整數(shù)運(yùn)算進(jìn)行分解,從而降低查找表的大小。
余數(shù)系統(tǒng)的定義可以描述為:現(xiàn)假設(shè)存在一個(gè)余數(shù)系統(tǒng),它是由一組互為質(zhì)數(shù)的余數(shù)基β={m1,m2,...,mk}來確定的,M=m1m2…mk為這組基的動(dòng)態(tài)范圍。對(duì)于任意整數(shù)x≤M,可以在β這組基下唯一表示為(x1,x2,...,xk),其中xi為x對(duì)mi的求模結(jié)果,記為對(duì)余數(shù)系統(tǒng)而言,只有當(dāng)整數(shù)x在動(dòng)態(tài)范圍之內(nèi)才存在唯一的表示,利用中國剩余定理可以恢復(fù)出x,其中Mi=M/mi,為Mi在模mi下的逆。
假設(shè)整數(shù)x、y在基β下分別表示為x=(x1,x2,...,xk)和y=(y1,y2,...,yk),則:
其中可為+或—或*運(yùn)算。
下面結(jié)合圖1對(duì)本發(fā)明的實(shí)現(xiàn)步驟進(jìn)行詳細(xì)說明。
步驟一:選取一個(gè)余數(shù)系統(tǒng),該余數(shù)系統(tǒng)的余數(shù)基為β=(p1,p2,...,pt),基β的動(dòng)態(tài)范圍滿足ω=p1p2p3…pt≤2512;預(yù)先生成客戶端私鑰dA,將dA在β這組基下表示為dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;預(yù)先確定密文信息C,所述C=C1||C2||C3,客戶端和云服務(wù)器端預(yù)先確定β與dA作為橢圓曲線系統(tǒng)參數(shù)、確定橢圓曲線的基點(diǎn)G,其階數(shù)為n。
云服務(wù)器端為執(zhí)行解密算法的協(xié)同方,主要為客戶端解密時(shí)提供一個(gè)混淆私鑰的隨機(jī)因子??蛻舳耸菆?zhí)行解密算法的用戶,其運(yùn)行環(huán)境是不可信的。
步驟二:從密文C中提取出C1。驗(yàn)證C1是否為橢圓曲線上的非無窮遠(yuǎn)點(diǎn),如果是的話則將C1發(fā)送給云服務(wù)器端,否則跳出本流程。
步驟三:云服務(wù)器端利用隨機(jī)數(shù)發(fā)生器產(chǎn)生一個(gè)隨機(jī)數(shù)k,且k∈[1,n-1]。
步驟四:云服務(wù)器端計(jì)算橢圓曲線上的點(diǎn)P,P=[k]*C1。
步驟五:云服務(wù)器端計(jì)算k模n的逆k-1,即:k*k-1=1mod n。將k-1在β這組基下表示為其中i=1、2......t。
步驟六:云服務(wù)器端將k-1用非線性變換s1,s2,...,st進(jìn)行混淆;即并將P和發(fā)送給客戶端。
步驟七:客戶端通過查找密鑰表Tablei計(jì)算其中為si的逆變換,所述Tablei
是通過遍歷ki的所有可能值,計(jì)算制作出的密鑰表,i=1、2......t,私鑰信息dA,i隱藏在密鑰表中。
步驟八:客戶端利用中國剩余定理恢復(fù)出v。
步驟九:客戶端計(jì)算v′=v mod n。
步驟十:客戶端計(jì)算橢圓曲線點(diǎn)(x2,y2)=[v′]*P。
步驟十一:客戶端計(jì)算t=KDF(x2||y2,klen),其中KDF()為密鑰分發(fā)函數(shù),klen為明文M的比特長(zhǎng)度。若t≠0,從密文C張?zhí)崛〕鯟2,計(jì)算否則跳出本流程。
步驟十二:計(jì)算u=Hash(x2||M′||y2)。
步驟十三:從密文C中提取出C3,若u=C3,則M′為明文。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明提供了一種基于余數(shù)系統(tǒng)的商密SM2加密算法的白盒軟件實(shí)現(xiàn)方法,其特征在于,包括如下步驟:
步驟一:選取一個(gè)余數(shù)系統(tǒng),該余數(shù)系統(tǒng)的余數(shù)基為β=(p1,p2,...,pt),基β的動(dòng)態(tài)范圍滿足ω=p1p2p3…pt≤2512;預(yù)先生成客戶端私鑰dA,將dA在β這組基下表示為dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;預(yù)先確定密文信息C,所述C=C1||C2||C3,客戶端和云服務(wù)器端預(yù)先確定β與dA作為橢圓曲線系統(tǒng)參數(shù)、確定橢圓曲線的基點(diǎn)G,其階數(shù)為n。
步驟二:從密文C中提取出C1;驗(yàn)證C1是否為橢圓曲線上的非無窮遠(yuǎn)點(diǎn),如果是的話則將C1發(fā)送給云服務(wù)器端,否則跳出本流程;
步驟三:云服務(wù)器端產(chǎn)生一個(gè)隨機(jī)數(shù)k,且k∈[1,n-1]。
步驟四:云服務(wù)器端計(jì)算橢圓曲線上的點(diǎn)P,P=[k]*C1。
步驟五:云服務(wù)器端計(jì)算k模n的逆k-1,即:k*k-1=1mod n。將k-1在β這組基下表示為其中i=1、2......t。
步驟六:云服務(wù)器端將k-1用非線性變換s1,s2,...,st進(jìn)行混淆;即并將P和發(fā)送給客戶端。
步驟七:客戶端通過查找密鑰表Tablei計(jì)算其中為si的逆變換,所述Tablei
是通過遍歷ki的所有可能值,計(jì)算制作出的密鑰表,i=1、2......t,私鑰信息dA,i隱藏在密鑰表中。
步驟八:客戶端利用中國剩余定理恢復(fù)出v;
步驟九:客戶端計(jì)算v′=v mod n。
步驟十:客戶端計(jì)算橢圓曲線點(diǎn)(x2,y2)=[v′]*P。
步驟十一:客戶端計(jì)算t=KDF(x2||y2,klen),其中KDF()為密鑰分發(fā)函數(shù),klen為明文M的比特長(zhǎng)度。若t≠0,從密文C中提取出C2,計(jì)算否則跳出本流程。
步驟十二:計(jì)算u=Hash(x2||M′||y2)。
步驟十三:從密文C中提取出C3,若u=C3,則M′為明文。
進(jìn)一步的,步驟三中,云服務(wù)器端利用隨機(jī)數(shù)發(fā)生器產(chǎn)生隨機(jī)數(shù)k。
本發(fā)明的有益效果為:
(1)終端在進(jìn)行解密運(yùn)算過程中,內(nèi)存等硬件設(shè)備中不會(huì)出現(xiàn)私鑰的完整明文,確保的密碼算法運(yùn)行的白盒攻擊安全。
(2)該解密算法表的大小為68.75KB,存儲(chǔ)空間要求較小。
(3)該加密算法和標(biāo)準(zhǔn)SM2加密算法效率基本一致,實(shí)用性較高。
(4)通過使用白盒軟件實(shí)現(xiàn)SM2解密算法可降低商用密碼算法的使用成本,擴(kuò)大商用密碼算法的使用范圍。
(5)使用白盒軟件算法在確保加解密安全的同時(shí),通用性較強(qiáng),對(duì)運(yùn)行平臺(tái)硬件沒有任何特殊需求。
附圖說明
圖1為本發(fā)明的流程圖。
具體實(shí)施方式
本發(fā)明的設(shè)計(jì)構(gòu)思為:針對(duì)商密SM2加密算法在不可信任環(huán)境中運(yùn)行的私鑰安全問題,提出一種基于查找表和置亂混淆等技術(shù)的SM2加密算法的白盒軟件實(shí)現(xiàn)方案。該方案采用云加端的方式實(shí)現(xiàn),能有效的保護(hù)終端私鑰在存儲(chǔ)和運(yùn)行時(shí)的安全,且能直接與標(biāo)準(zhǔn)SM2加密算法結(jié)合使用。此外,本專利采用余數(shù)系統(tǒng)理論對(duì)大整數(shù)運(yùn)算進(jìn)行分解,從而降低查找表的大小,減小算法所需的存儲(chǔ)空間。
本申請(qǐng)基于國家商用密碼標(biāo)準(zhǔn)SM2加密算法進(jìn)行構(gòu)建,技術(shù)方案需要三類輔助函數(shù):密碼雜湊函數(shù)、密鑰派生函數(shù)和隨機(jī)數(shù)發(fā)生器,這三類函數(shù)的選取和標(biāo)準(zhǔn)SM2加密算法相同,沿用標(biāo)準(zhǔn)SM2加密算法中的記號(hào):
dA:表示用戶(即客戶端)A的私鑰。
G:表示橢圓曲線的一個(gè)基點(diǎn),其階數(shù)為n。
Hv():表示消息摘要長(zhǎng)度為v比特的密碼雜湊函數(shù)。
KDF():表示密鑰派生函數(shù)。
M:表示明文信息。
C=C1||C2||C3:表示密文信息。
為了降低白盒SM2算法需要的存儲(chǔ)空間,本申請(qǐng)采用余數(shù)系統(tǒng)理論對(duì)大整數(shù)運(yùn)算進(jìn)行分解,從而降低查找表的大小。
余數(shù)系統(tǒng)的定義可以描述為:現(xiàn)假設(shè)存在一個(gè)余數(shù)系統(tǒng),它是由一組互為質(zhì)數(shù)的余數(shù)基β={m1,m2,...,mk}來確定的,M=m1m2…mk為這組基的動(dòng)態(tài)范圍。對(duì)于任意整數(shù)x≤M,可以在β這組基下唯一表示為(x1,x2,...,xk),其中xi為x對(duì)mi的求模結(jié)果,記為對(duì)余數(shù)系統(tǒng)而言,只有當(dāng)整數(shù)x在動(dòng)態(tài)范圍之內(nèi)才存在唯一的表示,利用中國剩余定理可以恢復(fù)出x,其中Mi=M/mi,為Mi在模mi下的逆。
假設(shè)整數(shù)x、y在基β下分別表示為x=(x1,x2,...,xk)和y=(y1,y2,...,yk),則:
其中可為+或—或*運(yùn)算。
下面結(jié)合圖1對(duì)本發(fā)明的實(shí)現(xiàn)步驟進(jìn)行詳細(xì)說明。
步驟一:選取一個(gè)余數(shù)系統(tǒng),該余數(shù)系統(tǒng)的余數(shù)基為β=(p1,p2,...,pt),基β的動(dòng)態(tài)范圍滿足ω=p1p2p3…pt≤2512;預(yù)先生成客戶端私鑰dA,將dA在β這組基下表示為dA=(dA,1,dA,2,...,dA,t),其中dA,i=dAmodpi,i=1,...,t;預(yù)先確定密文信息C,所述C=C1||C2||C3,客戶端和云服務(wù)器端預(yù)先確定β與dA作為橢圓曲線系統(tǒng)參數(shù)、確定橢圓曲線的基點(diǎn)G,其階數(shù)為n。
云服務(wù)器端為執(zhí)行解密算法的協(xié)同方,主要為客戶端解密時(shí)提供一個(gè)混淆私鑰的隨機(jī)因子??蛻舳耸菆?zhí)行解密算法的用戶,其運(yùn)行環(huán)境是不可信的。
步驟二:從密文C中提取出C1。驗(yàn)證C1是否為橢圓曲線上的非無窮遠(yuǎn)點(diǎn),如果是的話則將C1發(fā)送給云服務(wù)器端,否則跳出本流程。
步驟三:云服務(wù)器端利用隨機(jī)數(shù)發(fā)生器產(chǎn)生一個(gè)隨機(jī)數(shù)k,且k∈[1,n-1]。
步驟四:云服務(wù)器端計(jì)算橢圓曲線上的點(diǎn)P,P=[k]*C1。
步驟五:云服務(wù)器端計(jì)算k模n的逆k-1,即:k*k-1=1mod n。將k-1在β這組基下表示為其中i=1、2......t。
步驟六:云服務(wù)器端將k-1用非線性變換s1,s2,...,st進(jìn)行混淆;即并將P和發(fā)送給客戶端。
步驟七:客戶端通過查找密鑰表Tablei計(jì)算其中為si的逆變換,所述Tablei
是通過遍歷ki的所有可能值,計(jì)算制作出的密鑰表,i=1、2......t,私鑰信息dA,i隱藏在密鑰表中。
步驟八:客戶端利用中國剩余定理恢復(fù)出v。
步驟九:客戶端計(jì)算v′=v mod n。
步驟十:客戶端計(jì)算橢圓曲線點(diǎn)(x2,y2)=[v′]*P。
步驟十一:客戶端計(jì)算t=KDF(x2||y2,klen),其中KDF()為密鑰分發(fā)函數(shù),klen為明文M的比特長(zhǎng)度。若t≠0,從密文C張?zhí)崛〕鯟2,計(jì)算否則跳出本流程。
步驟十二:計(jì)算u=Hash(x2||M′||y2)。
步驟十三:從密文C中提取出C3,若u=C3,則M′為明文。