,,
(1.西南科技大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,四川 621010; 2.北京市公安局 昌平分局警務(wù)支援大隊(duì),北京 102200)
伴隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展、智能手機(jī)迅速普及,各種移動(dòng)互聯(lián)網(wǎng)業(yè)務(wù)也迅速發(fā)展,如移動(dòng)電子商務(wù)、手機(jī)支付、手機(jī)閱讀、手機(jī)游戲、手機(jī)證券等[1]。移動(dòng)端作為一個(gè)開放性的輕量級(jí)設(shè)備,在密鑰傳輸、使用過程中所面臨的安全威脅更為嚴(yán)峻。因此,如何保證在移動(dòng)端安全地使用密鑰進(jìn)行數(shù)字簽名[2]成為了目前移動(dòng)安全應(yīng)用所面臨的關(guān)鍵問題。
目前為了解決常用的1024位RSA算法所面臨的嚴(yán)重安全威脅,國家密碼管理部門發(fā)布了以ECC算法為基礎(chǔ)的改進(jìn)密碼算法SM2橢圓曲線公鑰密碼算法[3]。該方案的正確性、效率和安全性上都優(yōu)于傳統(tǒng)RSA和ECC算法。為了在移動(dòng)設(shè)備上使用基于SM2的數(shù)字簽名[4],并且符合《電子簽名法》私鑰只能由合法用戶持有并受此用戶控制的規(guī)定,本文在尚銘等人[5]提出的SM2橢圓曲線門限密碼算法和基于多項(xiàng)式的可驗(yàn)證門限密碼技術(shù)[6]的基礎(chǔ)上提出了一種適用于移動(dòng)終端數(shù)字簽名系統(tǒng)的可驗(yàn)證SM2橢圓曲線門限密碼方案并通過實(shí)現(xiàn)該方案,證明本文提出的可驗(yàn)證SM2門限簽名系統(tǒng)方案,在增加可接受時(shí)間消耗的同時(shí),能抵御移動(dòng)終端環(huán)境下惡意敵手的欺騙攻擊以及合謀攻擊,更符合移動(dòng)數(shù)字簽名的安全需求。
SM2數(shù)字簽名算法是國家密碼安全局于2010年12月17日發(fā)布的基于橢圓曲線離散對數(shù)問題的數(shù)字簽名算法。可用于保證身份的真實(shí)性、數(shù)據(jù)完整性和行為的不可否認(rèn)性等。該算法中由一個(gè)簽名者對數(shù)據(jù)產(chǎn)生數(shù)字簽名,并由一個(gè)驗(yàn)證者驗(yàn)證數(shù)字簽名的可靠性。在使用該算法之前,各參與方需先設(shè)定相同的公開參數(shù),包括p、q、E和G,其中p是大素?cái)?shù),E是定義在有限域Fp上的橢圓曲線,G=(xG,yG)是E上q階的基點(diǎn)。其簽名過程如下[5]:
(1)密鑰生成階段,簽名者隨機(jī)選取秘密d,d∈[1,q-1],計(jì)算P=dG并將P作為公鑰公開,d作為私鑰保存。
(2)簽名生成階段,簽名者隨機(jī)選取隨機(jī)數(shù)k∈[1,q-1],計(jì)算kG=(x1,y1);隨后計(jì)算r=(Hash(m)+x1)modq,其中m為待簽名的消息,其中Hash(·)是單向哈希函數(shù);若r=0或者r+k=q,則需要重新選取隨機(jī)數(shù)k。最后計(jì)算簽名值s=(1+d)-1(k-rd)modq,若s=0,也必須重新選擇隨機(jī)數(shù)k;否則將(r,s)作為簽名結(jié)果。
(3)簽名驗(yàn)證階段,驗(yàn)證者接收到m和(r,s)后,首先檢查是否滿足r,s∈[1,q-1]且r+s≠q;然后計(jì)算(x'1,y'1)=sG+(r+s)P;r'=(Hash(m)+x'1)modq,判斷r'和r是否相等,若二者相等則簽名驗(yàn)證通過,否則驗(yàn)證失敗。
門限密碼方案[6]是指采用秘密分享技術(shù)將基本的密碼機(jī)制生成的結(jié)果(密鑰或者數(shù)字簽名等)分布于一定數(shù)量的參與者集合中,只有有效的參與者子集進(jìn)行聯(lián)合,才能恢復(fù)正確的密鑰或者發(fā)布有效的數(shù)字簽名,而不合法的參與者子集則無法通過偽造參數(shù)恢復(fù)出正確的密鑰或者產(chǎn)生有效數(shù)字簽名。門限密碼方案需要滿足以下兩個(gè)條件:
(1)每個(gè)參與者對密文或者消息應(yīng)使用自己的子密鑰進(jìn)行解密或簽名操作可以得到對應(yīng)的子明文或者子簽名消息,t個(gè)子明文或者子簽名消息可以恢復(fù)出原始明文或者數(shù)字簽名,而少于t分得子明文或者子簽名消息不能恢復(fù)出原始數(shù)據(jù);
(2)已知子明文或者子簽名消息不能獲取主密鑰與子密鑰之間的任何信息。
可驗(yàn)證門限密碼方案[6]是在通常的門限密碼方案的基礎(chǔ)上額外添加驗(yàn)證操作,從而解決不誠實(shí)分發(fā)者或參與者的問題。在可驗(yàn)證門限密碼方案中,分發(fā)者不但需要向其他參與者發(fā)布自己的秘密份額,還需要廣播自己對該秘密份額的證明,當(dāng)各個(gè)成員獲取其秘密份額時(shí),需要通過公開的證明對秘密份額的正確性進(jìn)行驗(yàn)證;在秘密重構(gòu)階段,每個(gè)參與者也需采用同樣的驗(yàn)證方法來對其他成員發(fā)布的秘密份額的正確性進(jìn)行校驗(yàn)??沈?yàn)證門限密碼方案可以抵御以下兩種攻擊:
(1)惡意的分發(fā)者在份額分發(fā)協(xié)議中向其他參與者發(fā)送錯(cuò)誤的秘密份額;
(2)惡意的參與者在秘密重構(gòu)協(xié)議中向其他參與者發(fā)布錯(cuò)誤的秘密份額。
(1)參與者集合執(zhí)行t階J-RSS和2t階J-ZSS分享份額分別為βi和αi;
(2)參與者Ui計(jì)算并廣播γi=βi(1+di)+αi;
(3)參與者Ui記錄γj(1≤j≤n),并通過插值公式恢復(fù)出γ=β(1+d);
(5)設(shè)從參與者集合U中選擇2t-1個(gè)簽名者,設(shè)簽名者集合為S={i1,i2,…,i2t-1},簽名者Ui(i∈S)執(zhí)行t階J-RSS,分享份額為ki,并廣播Ki=kiG;
(6)簽名者Ui執(zhí)行PM-SS得到kG=(x1,y1),并計(jì)算r=(Hash(m)+x1)modq;
(7)簽名者Ui計(jì)算簽名份額si=d'i(ki+r)-r,得到簽名s的分享份額si;
(8)至少2t-1個(gè)簽名者Ui通過廣播發(fā)布其簽名份額si;
(10)簽名者Ui通過對接收到的2t-1個(gè)正確的簽名份額進(jìn)行插值計(jì)算,得到簽名結(jié)果s=∑i∈Ssi,輸出(r,s)作為簽名者集合S對消息m的數(shù)字簽名。
(1)簽名驗(yàn)證者接收m和(r,s)后;
(2)驗(yàn)證者檢查是否滿足r,s∈[1,q-1]且r+s≠q;
(3)計(jì)算(x'1,y'1)=sG+(r+s)P;r'=(Hash(m)+x'1)modq,判斷r'和r是否相等,若二者相等則簽名驗(yàn)證通過,否則驗(yàn)證失敗。
基于可驗(yàn)證SM2門限移動(dòng)數(shù)字簽名系統(tǒng)結(jié)構(gòu)主要由移動(dòng)終端客戶端、通信服務(wù)隊(duì)列和密鑰管理服務(wù)器構(gòu)成,其各自作用如下。
(1)移動(dòng)終端:移動(dòng)終端作為客戶端,提供客戶端軟件,支持對客戶端密鑰的管理,包括:密鑰和簽名的生成、存儲(chǔ)、備份;為提高移動(dòng)終端應(yīng)用的安全性,防止java層代碼被反編譯,從而導(dǎo)致密鑰份額等內(nèi)容泄漏。移動(dòng)終端應(yīng)用代碼基于Android Studio NDK開發(fā)編譯生成可安裝APK文件,從而增強(qiáng)移動(dòng)客戶端的安全性。
(2)通信服務(wù)隊(duì)列:采用基于AMQP的消息通信服務(wù)RabbitMQ,提供分布式消息傳遞和消息隊(duì)列服務(wù),利用其高效可靠的消息傳遞機(jī)制為移動(dòng)終端和密鑰管理服務(wù)器提供快速穩(wěn)定的數(shù)據(jù)交換、份額分發(fā)、進(jìn)程間通信等服務(wù);
(3)密鑰管理服務(wù)器:配合移動(dòng)終端設(shè)備完成基于SM2的可驗(yàn)證數(shù)字簽名的生成、保存、備份等操作的服務(wù)器。密鑰管理服務(wù)代碼采用C++語言進(jìn)行開發(fā),其算法執(zhí)行內(nèi)容與移動(dòng)終端執(zhí)行內(nèi)容相同。
可驗(yàn)證SM2門限簽名系統(tǒng)為能夠移動(dòng)終端提供安全可靠的簽名服務(wù),根據(jù)改進(jìn)的可驗(yàn)證SM2門限簽名方案中的不同協(xié)議抽象出不同功能模塊,對應(yīng)分別是:(1)公私密鑰生成模塊;(2)數(shù)字簽名模塊;(3)數(shù)字簽名驗(yàn)證模塊。各個(gè)模塊的功能為:公私鑰密鑰生成模塊通過可驗(yàn)證門限密碼方案生成移動(dòng)終端簽名群的公私鑰;數(shù)字簽名模塊通過可驗(yàn)證門限簽名方案生成有效的SM2數(shù)字簽名;簽名驗(yàn)證模塊可對數(shù)字簽名模塊生成的SM2數(shù)字簽名的正確性、有效性進(jìn)行驗(yàn)證。各個(gè)模塊相互獨(dú)立,可以實(shí)現(xiàn)移動(dòng)終端在不同階段調(diào)用的需求。此系統(tǒng)中包含的算法的實(shí)現(xiàn)類圖如圖1所示。
圖1 可驗(yàn)證門限分散算法類圖
其中:cn_test_JniTest為移動(dòng)終端應(yīng)用采用NDK實(shí)現(xiàn)的JNI接口聲明,包括密鑰生成、簽名生成和簽名驗(yàn)證3個(gè)本地接口聲明,密鑰管理服務(wù)端則不包含此函數(shù);base為上述本地接口的對應(yīng)實(shí)現(xiàn);Participant為基于SM2的可驗(yàn)證門限簽名方案的具體實(shí)現(xiàn),包括門限密鑰份額生成、驗(yàn)證、重構(gòu)、數(shù)字簽名份額生成、驗(yàn)證、重構(gòu)以及數(shù)字簽名認(rèn)證等方法;XSSUtil為Shamir秘密分享的實(shí)現(xiàn),包括隨機(jī)秘密分享、零秘密分享、乘積秘密分享等過程的實(shí)現(xiàn);ECP為橢圓曲線點(diǎn)類;SM2為SM2密碼算法的相關(guān)函數(shù),包括SM2密鑰生成、SM2數(shù)字簽名生成、SM2數(shù)字簽名驗(yàn)證等方法;RabbitMQProp為消息傳遞服務(wù)組件RabbitMQ的基本配置,包括服務(wù)端地址、端口等信息、以及對通信隊(duì)列建立通信連接等方法;queueUtil為消息傳遞服務(wù)組件對消息隊(duì)列的處理方法,包括消息的收發(fā)等操作。
3.3.1 密鑰生成模塊
在本階段模塊的主要工作是產(chǎn)生數(shù)字簽名系統(tǒng)的公私鑰對,主要過程為通過多項(xiàng)式秘密分享的方式分享門限簽名密鑰份額,并獲取通過廣播多項(xiàng)式承諾值對密鑰份額的有效性進(jìn)行判斷。具體步驟為:
(1)移動(dòng)終端簽名應(yīng)用發(fā)起獲取公鑰申請,密鑰管理服務(wù)器獲得申請后根據(jù)門限值(t,n)創(chuàng)建n-1個(gè)密鑰服務(wù)進(jìn)程,并初始化數(shù)字簽名算法涉及的公開參數(shù)、創(chuàng)建通信服務(wù)隊(duì)列。
(2)移動(dòng)終端應(yīng)用與n-1個(gè)密鑰管理服務(wù)進(jìn)程同時(shí)執(zhí)行改進(jìn)SM2可驗(yàn)證門限密碼生成協(xié)議獲得系統(tǒng)公鑰以及各自持有的私鑰份額。主要函數(shù)過程如下:
void getPA(char *x,char *y,char *di, int t,int n,int playerno)
{
randomize();
Participant player=Participant(playerno,t,n);;
mpz_set_ui(init,playerno);
ECP PA;
player.generteKeyShares();
player.collectKeyShares();
player.varifyKeyShares();
player.getPA(&PA);
}
3.3.2 簽名生成模塊
(1)移動(dòng)終端簽名應(yīng)用發(fā)起數(shù)字簽名申請,密鑰管理服務(wù)器獲得數(shù)字簽名申請之后,創(chuàng)建n-1個(gè)密鑰服務(wù)簽名進(jìn)程,并載入對應(yīng)的私鑰份額;
void sign(char *e, char *r,char *s,char *x,char *y,char *di,int t,int n,int playerno,int U[])
{
randomize();
Participant player=Participant(playerno,t,n);
player.shareDi()
}
(3)選取其中(2t-2)個(gè)簽名進(jìn)程配合移動(dòng)終端應(yīng)用,作為簽名參與者執(zhí)行可驗(yàn)證SM2門限協(xié)議5~10步,生成并檢驗(yàn)數(shù)字簽名份額,在獲得2t-1個(gè)正確的數(shù)字簽份額后,移動(dòng)終端應(yīng)用通過差值公式生產(chǎn)對應(yīng)的數(shù)字簽名(r,s),主要函數(shù)過程為:
void sign(char *e, char *r,char *s,char *x,char *y,char *di,int t,int n,int playerno,int U[])
{
mpz_t r0,s0,di0,x0,y0;
mpz_init(r0);
mpz_init(s0);
mpz_init(di0);
EC_point PA;
PA.init();
mpz_set_str(PA.x,x,16);
mpz_set_str(PA.y,y,16);
mpz_set_str(di0,di,16);
player.generteSignShares(e0,U);
player.collectSignShares();
player.varifySignShares();
player.get_sign(&e0,&r0,&s0,U);
}
3.3.3 簽名驗(yàn)證模塊
在此階段模塊中主要實(shí)現(xiàn)對簽名結(jié)果的驗(yàn)證,驗(yàn)證過程由密鑰管理服務(wù)器執(zhí)行。具體步驟為:
(1)移動(dòng)終端應(yīng)用向密鑰管理服務(wù)器發(fā)起激活簽名驗(yàn)證進(jìn)程請求,密鑰管理服務(wù)器獲取驗(yàn)證請求之后創(chuàng)建簽名驗(yàn)證進(jìn)程,并載入相關(guān)參數(shù);
(2)密鑰管理服務(wù)器簽名驗(yàn)證進(jìn)程檢查(r,s)是否滿足r,s∈[1,q-1]且r+s≠q;若滿足參數(shù)條件,則計(jì)算基點(diǎn)(x'1,y'1)=sG+(r+s)P以及驗(yàn)證簽名值r'=(Hash(m)+x'1)modq,若r'與r是否一致,若二者相等則表明簽名沒有被篡改,否則簽名失效,并將結(jié)果返回至移動(dòng)終端應(yīng)用。主要函數(shù)過程為:
int verify(char *r,char *s,char *e,char *x,char *y)
{
mpz_t r0,s0,e0;;
mpz_init(r0);
mpz_init(s0);
mpz_init(e0);
EC_point PA;
PA.init();
mpz_set_str(PA.x,x,16);
mpz_set_str(PA.y,y,16);
mpz_set_str(r0,r,16);
mpz_set_str(s0,s,16);
mpz_set_str(e0,e,16);
if(SM2.verify(&r0,&s0,&e0,&PA)){
cout<<"簽名驗(yàn)證:通過!"< return 1; } else{ cout<<"簽名驗(yàn)證:未通過!"< return 0; } } 通常來講,門限簽名的正確性指的是通過簽名算法所生成的數(shù)字簽名結(jié)果必須通過對應(yīng)的簽名驗(yàn)證算法,而本文所提出的改進(jìn)的SM2可驗(yàn)證門限簽名方案中涉及密鑰份額、子簽名份額以及門限簽名,下面對這3個(gè)結(jié)果的正確性進(jìn)行論證。 定理1:在SM2可驗(yàn)證門限簽名方案的密鑰生成階段,參與者Uj能夠驗(yàn)證參與者Ui所發(fā)送的λij的真?zhèn)?,從而保證密鑰生成階段產(chǎn)生的參與者各自的私鑰份額是正確的。 證明:參與者Ui在密鑰生成階段會(huì)公開自己份額對應(yīng)的校驗(yàn)信息aikG(k=0,1,…,t),λijG可以寫成: λijG=fi(IDj)G=ai0G+ai1IDjG+ ai2IDj2G+…+aitIDjtG 根據(jù)參與者Ui公開的證明信息,參與者Uj可通過驗(yàn)證上式是否成立來驗(yàn)證參與者Ui所發(fā)送的份額參數(shù)λij的是否正確,從而保證獲取的份額參數(shù)是正確的,進(jìn)而保證參與者Uj通過差值計(jì)算獲得正確的私鑰份額。 定理2:在簽名份額生成過程,簽名者Uj能夠驗(yàn)證合法的簽名者Ui所發(fā)布的簽名份額信息si的真?zhèn)?,從而保證簽名者Uj獲取的簽名份額是正確的。 siDi(-1)+rDi(-1)-rG= [d'i(ki+r)-r)](d'i)-1G+rDi-1-rG= (ki+r-r(d'i)-1)G+rDi-1-rG=kiG+ rG-rDi-1+rDi-1-rG=kiG 而Ki=kiG,故Ki=siDi-1+rDi-1-rG成立,所以若子簽名份額能夠通過上式的校驗(yàn),則證明簽名參與者Uj獲取Ui簽名份額是正確的。 定理3:在數(shù)字簽名重構(gòu)過程中,簽名者通過差值公式計(jì)算得出的簽名值s是正確的。 證明:由SM2可驗(yàn)證門限簽名生成協(xié)議過程第(6)可得r=(Hash(m)+x1)modq,而(x1,y1)=kG式中k=∑i∈Ski,所以x即是點(diǎn)kG的x坐標(biāo)。由于: (k1+r,…,kt+r)?k+r, ((1+d1)-1,…(1+dt)-1)?(1+d)-1, 根據(jù)分散秘密重構(gòu)定理,在獲得2t-1個(gè)正確的簽名份額的條件下: s=∑i∈Ssi=(1+d)-1(k+r)-r,因此該簽名方案產(chǎn)生的數(shù)字簽名是正確的。 在本系統(tǒng)實(shí)現(xiàn)方案中通過可驗(yàn)證門限技術(shù)保證系統(tǒng)的安全性,以下將從防惡意敵手的欺騙攻擊和抗不安全集合的合謀攻擊兩個(gè)方面對該系統(tǒng)方案的系統(tǒng)的安全性能進(jìn)行論證。 定理1:本文提出的基于SM2的可驗(yàn)證簽名方案可以抵御欺騙攻擊。 定理2:本文提出的數(shù)字簽名方案可以抵御合謀攻擊。 證明:由Shamir秘密分享方案可知,在(t,n)門限的條件下,大于等于2t-1個(gè)成員可以通過合謀重構(gòu)Lagrange恢復(fù)出插值多項(xiàng)式f(x),由于IDi為公開信息,故合謀者可以獲得其他群成員Ui的秘密份額λi,但是根據(jù)子簽名si=(1+di)-1(ki+r)-r,合謀者無法獲得Ui的私鑰di,因此不能冒充群成員Ui對消息m生成對應(yīng)子簽名份額。所以本文提出的門限簽名方案是可以抵抗不安全集合的合謀攻擊。 基于第3章的系統(tǒng)設(shè)計(jì)模型,采用(t,n)門限集合為(2,3)的情況下,在表1所示系統(tǒng)設(shè)備上針對可驗(yàn)證SM2門限簽名系統(tǒng)方案和普通門限簽名方案進(jìn)行系統(tǒng)運(yùn)行效率測試,測試結(jié)果如圖2所示。其中系統(tǒng)參與者由一個(gè)移動(dòng)終端進(jìn)程和2個(gè)密鑰服務(wù)端進(jìn)程構(gòu)成,共同執(zhí)行改進(jìn)的可驗(yàn)證SM2門限簽名方案和普通簽名方案。圖2-a,b,c中縱坐標(biāo)表示分別運(yùn)行普通門限簽名方案和本文提出的SM2可驗(yàn)證門限簽名方案在100、200、300、400次運(yùn)行次數(shù)下不同進(jìn)程在門限簽名方案的3個(gè)階段的平均耗時(shí);橫坐標(biāo)A、B、C分別代表使用普通門限數(shù)字簽名方案的3個(gè)階段,分別為密鑰生成階段、簽名生成階段以及簽名驗(yàn)證階段,而A1、B1、C1分別代表使用可驗(yàn)證SM2門限數(shù)字簽名方案對應(yīng)的3個(gè)階段。圖2-d則為3個(gè)終端分別執(zhí)行兩種方案時(shí)各個(gè)階段的總平均時(shí)間消耗。 表1 系統(tǒng)設(shè)備配置參數(shù) 圖2 (2,3)條件下兩種方案的效率對比 根據(jù)圖2(a),(b),(c)可以看出在各個(gè)終端執(zhí)行兩種方案時(shí)的時(shí)間消耗與2(d)中的平均結(jié)果相差不大,證明本面向移動(dòng)終端的數(shù)字簽名系統(tǒng)在良好網(wǎng)絡(luò)環(huán)境下具有良好的穩(wěn)定性。根據(jù)圖2(d)中的數(shù)據(jù)可知在(2,3)條件下,未采用可驗(yàn)證方案的密鑰生成階段平均耗時(shí)約40.294 ms,簽名生成階段平均耗時(shí)約35.186 ms,簽名驗(yàn)證階段約為4.954 ms;采用可驗(yàn)證方案的密鑰生成階段平均耗時(shí)約47.711 ms,簽名生成階段平均耗時(shí)約37.687 ms,簽名驗(yàn)證階段約為5.148 ms。由此可以推論采用SM2可驗(yàn)證門限簽名方案在增強(qiáng)系統(tǒng)整體安全性和數(shù)字簽名正確性的基礎(chǔ)上同時(shí)也增加了一定的時(shí)間,但增加的時(shí)間消耗在可接受范圍。而面對移動(dòng)終端的開放性環(huán)境,對接收的消息做進(jìn)一步確認(rèn)是必要的,因此此方案具有一定的實(shí)用性和應(yīng)用價(jià)值。 本文提出的基于SM2的可驗(yàn)證門限簽名方案,每個(gè)參與者私鑰由參與者自己選擇,并根據(jù)可驗(yàn)證秘密分享過程對SM2數(shù)字簽名進(jìn)行可驗(yàn)證秘密分享。安全性分析表明在密鑰生成、簽名生成階段,利用公開信息進(jìn)行驗(yàn)證,可以有效避免惡意敵手或者參與者的欺詐,且可以抵御參與者合謀攻擊。因此,該方案具有良好的安全性。通過對系統(tǒng)功能的實(shí)現(xiàn)以及相關(guān)的測試,證實(shí)該系統(tǒng)方案的正確性和可靠性。結(jié)果證明,基于可驗(yàn)證SM2門限算法的移動(dòng)終端簽名系統(tǒng)滿足開放性移動(dòng)終端安全使用的需求,且相較于同類數(shù)字簽名方案更貼近實(shí)際環(huán)境,具有一定的實(shí)際應(yīng)用價(jià)值。4 系統(tǒng)分析與討論
4.1 正確性分析
4.2 安全性分析
4.3 效率分析
5 結(jié)語