本發(fā)明涉及到sm9的解密領(lǐng)域,特別是涉及到一種sm9解密方法和裝置。
背景技術(shù):
sm9標識密碼算法是一種基于雙線性對的標識密碼算法,它可以把用戶的身份標識用以生成用戶的公、私密鑰對,主要用于數(shù)字簽名、數(shù)據(jù)加密、密鑰交換以及身份認證等。
技術(shù)實現(xiàn)要素:
本發(fā)明的主要目的為提供一種解密簡單安全的sm9解密方法和裝置。
為了實現(xiàn)上述發(fā)明目的,本發(fā)明提出一種sm9解密方法,包括:
s1:解密客戶端獲取其標識對應(yīng)的標識私鑰s_a的第一分片子密鑰m,其中,所述標識私鑰s_a的第二分片子密鑰n由所述解密客戶端對應(yīng)的解密服務(wù)端獲?。黄渲?,密鑰生成中心隨機選擇主密鑰,生成系統(tǒng)參數(shù)組;
s2:從解密服務(wù)端獲得密文c和n的部分數(shù)據(jù)解密密鑰種子t_s;
s3:從密文c和m獲得部分數(shù)據(jù)解密密鑰種子t_c;根據(jù)t_s和t_c恢復(fù)完整的解密密鑰種子t,并使用t對密文進行完整解密;
進一步地,所述系統(tǒng)參數(shù)組包括<e,e,p1,p2,[s]p1,g=e(p1,[s]p2),h>,其中,e為橢圓曲線,e代表二元映射e:g1·g2→gt,g1和g2為橢圓曲線e上的兩個點群,g1是一個階為q的循環(huán)群,g2是一個冪為q群,其子群階為q,q為素數(shù),p1∈g1,p2∈g2,e(p1,[s]p2)=e(p1,p2)s,主密鑰包括s,[s]p2表示s個p2相加,h為消息映射函數(shù),用于將比特串映射到[1,q-1]上;
進一步地,在s1中,所述標識私鑰s_a通過以下公式計算獲得:
s_a=[s/(h(1||id_a)+s)]p2。
進一步地,在s1中,所述第二分片子密鑰n和第一分片子密鑰m的獲取方法,包括:
所述第一分片子密鑰m和第二分片子密鑰n的獲取方法,包括:
方法1)、所述解密客戶端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送n到解密服務(wù)端;或者,
方法2)、所述解密服務(wù)端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端;或者,
方法3)、所述解密服務(wù)端生成秘密kdfs,根據(jù)派生函數(shù)f,派生a=f(kdfs,fi),計算n=[a]p1或n=[a][s]p1;其中fi包括標識id_a、請求時間t、請求次數(shù)j;f是標準的密鑰派生函數(shù)kdf、哈希函數(shù)或加密函數(shù)中的一種,計算m=s_a-n,發(fā)送m到解密客戶端;或者,
方法4)、利用不同于所述解密客戶端和解密服務(wù)端的第三方隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端;或者,
方法5)、利用不同于所述解密客戶端和解密服務(wù)端的第三方生成秘密kdft,根據(jù)派生函數(shù)f,派生a=f(kdft,fi),計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端。
進一步地,,在s2中,所述解密密鑰種子t_s的獲取方法,包括:
解密客戶端獲得密文c后將其解析為<c1,c2,c3>;
將id_a與c1發(fā)送到所述解密服務(wù)端;
通過解密服務(wù)端將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;若否,則解密失敗,否則計算t_s=e(x,n);
進一步地,在s3,包括:
將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;若
是,則計算t_c=e(x,m);
計算w=t_c*t_s;將w的數(shù)據(jù)類型轉(zhuǎn)換為比特串u;
k1||k2=kdf(c1||u);
計算m=c2⊕k1;
計算c'=mac(k2,m);
檢驗c'=c3是否成立,若成立,則驗證通過,輸出m;否則驗證失敗,輸出錯誤。
本發(fā)明還提供一種sm9解密裝置,包括:
第一獲取單元,用于解密客戶端獲取其標識對應(yīng)的標識私鑰s_a的第一分片子密鑰m,其中,所述標識私鑰s_a的第二分片子密鑰n由所述解密客戶端對應(yīng)的解密服務(wù)端獲?。黄渲?,密鑰生成中心隨機選擇主密鑰,生成系統(tǒng)參數(shù)組;
第二獲取單元,用于從解密服務(wù)端獲得密文c和n的部分數(shù)據(jù)解密密鑰種子t_s;
獲取解密單元,用于從密文c和m獲得部分數(shù)據(jù)解密密鑰種子t_c;根據(jù)t_s和t_c恢復(fù)完整的解密密鑰種子t,并使用t對密文進行完整解密;
進一步地,所述系統(tǒng)參數(shù)組包括<e,e,p1,p2,[s]p1,g=e(p1,[s]p2),h>,其中,e為橢圓曲線,e代表二元映射e:g1·g2→gt,g1和g2為橢圓曲線e上的兩個點群,g1是一個階為q的循環(huán)群,g2是一個冪為q群,其子群階為q,q為素數(shù),p1∈g1,p2∈g2,e(p1,[s]p2)=e(p1,p2)s,主密鑰包括s,[s]p2表示s個p2相加,h為消息映射函數(shù),用于將比特串映射到[1,q-1]上;
進一步地,在s1中,所述標識私鑰s_a通過以下公式計算獲得:
s_a=[s/(h(1||id_a)+s)]p2。
進一步地,所述第一獲取單元,包括:
分片子密鑰獲取模塊,用于所述解密客戶端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送n到解密服務(wù)端;或者,用于所述解密服務(wù)端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端;或者,用于所述解密服務(wù)端生成秘密kdfs,根據(jù)派生函數(shù)f,派生a=f(kdfs,fi),計算n=[a]p1或n=[a][s]p1;其中fi包括標識id_a、請求時間t、請求次數(shù)j;f是標準的密鑰派生函數(shù)kdf、哈希函數(shù)或加密函數(shù)中的一種,計算m=s_a-n,發(fā)送m到解密客戶端;或者,用于利用不同于所述解密客戶端和解密服務(wù)端的第三方隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端;或者,用于利用不同于所述解密客戶端和解密服務(wù)端的第三方生成秘密kdft,根據(jù)派生函數(shù)f,派生a=f(kdft,fi),計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端。
進一步地,所述第二獲取單元,包括:
解析模塊,用于解密客戶端獲得密文c后將其解析為<c1,c2,c3>;
發(fā)送模塊,用于將id_a與c1發(fā)送到所述解密服務(wù)端;
t_s獲取模塊,用于通過解密服務(wù)端將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;若否,則解密失敗,否則計算t_s=e(x,n);
進一步地,所述獲取解密單元,包括:
第一檢驗?zāi)K,用于將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x
∈g1是否成立;若是,則計算t_c=e(x,m);
第一計算模塊,用于計算w=t_c*t_s;將w的數(shù)據(jù)類型轉(zhuǎn)換為比特串u;
第二計算模塊,用于k1||k2=kdf(c1||u);
第三計算模塊,用于計算m=c2⊕k1;
第四計算模塊,用于計算c'=mac(k2,m);
第二檢驗?zāi)K,用于檢驗c'=c3是否成立,若成立,則驗證通過,輸出m;否則驗證失敗,輸出錯誤。
本發(fā)明的sm9解密方法和裝置,在解密過程中,需要獲取到第一分片子密鑰m和第二分片子密鑰n,然后利用m和n,以及密文c恢復(fù)解密密鑰種子t,并使用t對密文進行完整解密,方法簡單、安全。
附圖說明
圖1為本發(fā)明一實施例的sm9解密方法的流程示意圖;
圖2為本發(fā)明一實施例的解密密鑰種子t_s的獲取方法的流程示意圖;
圖3為本發(fā)明一實施例的sm9解密方法的步驟s3的具體流程示意圖;
圖4為本發(fā)明一實施例的sm9解密裝置的結(jié)構(gòu)示意框圖;
圖5為本發(fā)明一實施例的第一獲取單元的結(jié)構(gòu)示意框圖;
圖6為本發(fā)明一實施例的第二獲取單元的結(jié)構(gòu)示意框圖;
圖7為本發(fā)明一實施例的獲取解密單元的結(jié)構(gòu)示意框圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
參照圖1,本發(fā)明實施例提供一種sm9解密方法,包括步驟:
s1:解密客戶端獲取其標識對應(yīng)的標識私鑰s_a的第一分片子密鑰m,其中,所述標識私鑰s_a的第二分片子密鑰n由所述解密客戶端對應(yīng)的解密服務(wù)端獲??;其中,密鑰生成中心隨機選擇主密鑰,生成系統(tǒng)參數(shù)組。
本步驟中,上述所述系統(tǒng)參數(shù)組包括<e,e,p1,p2,[s]p1,g=e(p1,[s]p2),h>,其中,e為橢圓曲線,e代表二元映射e:g1·g2→gt,g1和g2為橢圓曲線e上的兩個點群,g1是一個階為q的循環(huán)群,g2是一個冪為q群,其子群階為q,q為素數(shù),p1∈g1,p2∈g2,e(p1,[s]p2)=e(p1,p2)s,主密鑰包括s,[s]p2表示s個p2相加,h為消息映射函數(shù),用于將比特串映射到[1,q-1]上。上述標識私鑰s_a通過以下公式計算獲得s_a=[s/(h(1||id_a)+s)]p2。
本步驟中,上述第一分片子密鑰m和第二分片子密鑰n的獲取方法,包括多種,如下:
方法1)、所述解密客戶端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送n到解密服務(wù)端;或者,
方法2)、所述解密服務(wù)端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端;或者,
方法3)、所述解密服務(wù)端生成秘密kdfs,根據(jù)派生函數(shù)f,派生a=f(kdfs,fi),計算n=[a]p1或n=[a][s]p1;其中fi包括標識id_a、請求時間t、請求次數(shù)j;f是標準的密鑰派生函數(shù)kdf、哈希函數(shù)或加密函數(shù)中的一種,計算m=s_a-n,發(fā)送m到解密客戶端;或者,
方法4)、利用不同于所述解密客戶端和解密服務(wù)端的第三方隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端;或者,
方法5)、利用不同于所述解密客戶端和解密服務(wù)端的第三方生成秘密kdft,根據(jù)派生函數(shù)f,派生a=f(kdft,fi),計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端。
s2:從解密服務(wù)端獲得密文c和n的部分數(shù)據(jù)解密密鑰種子t_s。
參照圖2,本步驟中,上述解密密鑰種子t_s的獲取方法,包括:
s21、解密客戶端獲得密文c后將其解析為<c1,c2,c3>;
s22、將id_a與c1發(fā)送到所述解密服務(wù)端;
s23、通過解密服務(wù)端將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;
s24、若否,則解密失敗,否則計算t_s=e(x,n)。
s3:從密文c和m獲得部分數(shù)據(jù)解密密鑰種子t_c;根據(jù)t_s和t_c恢復(fù)完整的解密密鑰種子t,并使用t對密文進行完整解密。
參照圖3,本步驟中,具體過程為:
s31、將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;
s32,若否,則解密失?。?/p>
s33,若是,則計算t_c=e(x,m);
s34、計算w=t_c*t_s;將w的數(shù)據(jù)類型轉(zhuǎn)換為比特串u;
s35、k1||k2=kdf(c1||u);
s36、計算m=c2⊕k1;
s37、計算c'=mac(k2,m);
s38、檢驗c'=c3是否成立,若成立,則驗證通過,輸出m;否則驗證失敗,輸出錯誤。
本發(fā)明實施例的sm9解密方法,在解密過程中,需要獲取到第一分片子密鑰m和第二分片子密鑰n,其中然后第一分片子密鑰m和第二分片子密鑰n組合成id_a對應(yīng)的標識私鑰s_a;利用m和n,以及密文c恢復(fù)解密密鑰種子t,并使用t對密文進行完整解密,方法簡單、安全。
參照圖4,本發(fā)明還提供一種sm9解密裝置,包括:
第一獲取單元10,用于解密客戶端獲取其標識對應(yīng)的標識私鑰s_a的第一分片子密鑰m,其中,所述標識私鑰s_a的第二分片子密鑰n由所述解密客戶端對應(yīng)的解密服務(wù)端獲?。黄渲?,密鑰生成中心隨機選擇主密鑰,生成系統(tǒng)參數(shù)組。
在上述第一獲取單元10中,上述系統(tǒng)參數(shù)組包括<e,e,p1,p2,[s]p1,g=e(p1,[s]p2),h>,其中,e為橢圓曲線,e代表二元映射e:g1·g2→gt,g1和g2為橢圓曲線e上的兩個點群,g1是一個階為q的循環(huán)群,g2是一個冪為q群,其子群階為q,q為素數(shù),p1∈g1,p2∈g2,e(p1,[s]p2)=e(p1,p2)s,主密鑰包括s,[s]p2表示s個p2相加,h為消息映射函數(shù),用于將比特串映射到[1,q-1]上。
參照圖5,上述第一獲取單元10,包括:s_a計算模塊11,用于計算s_a=[s/(h(1||id_a)+s)]p2。
分片子密鑰獲取模塊12,用于所述解密客戶端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送n到解密服務(wù)端;或者,用于所述解密服務(wù)端隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端;或者,用于所述解密服務(wù)端生成秘密kdfs,根據(jù)派生函數(shù)f,派生a=f(kdfs,fi),計算n=[a]p1或n=[a][s]p1;其中fi包括標識id_a、請求時間t、請求次數(shù)j;f是標準的密鑰派生函數(shù)kdf、哈希函數(shù)或加密函數(shù)中的一種,計算m=s_a-n,發(fā)送m到解密客戶端;或者,用于利用不同于所述解密客戶端和解密服務(wù)端的第三方隨機生成g1中的一個元素n,隨機生成1<a<q,計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端;或者,用于利用不同于所述解密客戶端和解密服務(wù)端的第三方生成秘密kdft,根據(jù)派生函數(shù)f,派生a=f(kdft,fi),計算n=[a]p1或n=[a][s]p1,計算m=s_a-n,發(fā)送m到解密客戶端,發(fā)送n到解密服務(wù)端。
第二獲取單元20,用于從解密服務(wù)端獲得密文c和n的部分數(shù)據(jù)解密密鑰種子t_s。
參照圖6,上述第二獲取單元20,包括:
解析模塊21,用于解密客戶端獲得密文c后將其解析為<c1,c2,c3>;
發(fā)送模塊22,用于將id_a與c1發(fā)送到所述解密服務(wù)端;
t_s獲取模塊23,用于通過解密服務(wù)端將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;若否,則解密失敗,否則計算t_s=e(x,n)。
獲取解密單元30,用于從密文c和m獲得部分數(shù)據(jù)解密密鑰種子t_c;根據(jù)t_s和t_c恢復(fù)完整的解密密鑰種子t,并使用t對密文進行完整解密。
參照圖7,上述獲取解密單元30,包括:
第一檢驗?zāi)K31,用于將c1的數(shù)據(jù)類型轉(zhuǎn)換為橢圓曲線e上的點x,檢驗x∈g1是否成立;若是,則計算t_c=e(x,m);
第一計算模塊32,用于計算w=t_c*t_s;將w的數(shù)據(jù)類型轉(zhuǎn)換為比特串u;
第二計算模塊33,用于k1||k2=kdf(c1||u);
第三計算模塊34,用于計算m=c2⊕k1;
第四計算模塊35,用于計算c'=mac(k2,m);
第二檢驗?zāi)K36,用于檢驗c'=c3是否成立,若成立,則驗證通過,輸出m;否則驗證失敗,輸出錯誤。
本發(fā)明實施例的sm9解密裝置,在解密過程中,需要獲取到第一分片子密鑰m和第二分片子密鑰n,其中然后第一分片子密鑰m和第二分片子密鑰n組合成id_a對應(yīng)的標識私鑰s_a;利用m和n,以及密文c恢復(fù)解密密鑰種子t,并使用t對密文進行完整解密,方法簡單、安全。
以上所述僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。