馮 琦 何德彪 羅 敏 李 莉
1(武漢大學國家網絡安全學院 武漢 430072) 2(密碼科學技術國家重點實驗室 北京 100878)
根據GSMA移動智庫(GSMA intelligence)實時數據[1],目前全球有超過51.3億人擁有移動設備(即全球66.53%的人口擁有移動設備,如手機、平板電腦或支持蜂窩網絡的物聯網設備).通常情況下,移動設備通過無線通信與各種服務提供者(如數字貨幣交易所、DNS、網絡購物等)進行通信.然而,開放的網絡連接和簡單的設備安全部署使得移動設備極易成為網絡攻擊的目標.因此,服務提供商在提供服務之前,往往需要移動設備向服務器做身份認證,以保證移動網絡服務的安全性和可靠性.
數字簽名伴隨著網絡安全的需求而出現,其作用類似于傳統的手書簽名或印章的電子標記,可以在網絡世界中達到與手寫簽名類似的作用,在信息安全,包括身份鑒別、數據完整性、抗抵賴性等方面,特別是在大型網絡安全通信中的密鑰分配、身份鑒別及電子商務系統中具有重要作用.相較于其他公鑰密碼體制,橢圓曲線密碼體制(elliptic curve cryptography, ECC)[2]的安全性可以歸約到橢圓曲線群上的離散對數困難問題,同時具有密鑰長度短、計算速度快等優點,適用于資源受限的移動設備.
在數字簽名中,密鑰是實施安全身份和消息認證的基礎,而密鑰泄露往往給網絡攻擊者可乘之機,例如當密鑰泄露并且數字簽名被應用于惡意軟件時,它會欺騙掃描下載的瀏覽器過濾器和防病毒軟件,讓設備認為它來自可信媒介[3].在移動互聯網環境中的移動設備,例如智能手機、平板電腦等終端設備自身也存在一些安全隱患:1)移動設備易丟失或被盜,導致內部包含的密鑰易丟失或被竊取;2)移動設備搭載的操作系統及第三方程序可能存在漏洞,易被攻擊者利用從而實現冷啟動等攻擊,導致用戶密鑰信息泄露;3)移動設備可能包含惡意軟件,導致用戶執行數字簽名時數據被攻擊者截獲.
傳統的密鑰安全解決方案有2種:1)將密鑰存儲在外部硬件令牌(U盾、智能卡等),但存在攜帶不便且成本高的問題,難以應用到移動設備中;2)使用協同簽名的思想[4],即存在2個及以上設備分別存儲密鑰的一部分,數字簽名由參與方協同完成,任何參與方都無法掌握完整密鑰,這種方法有效保證了在單個設備被惡意實體控制的情況下用戶密鑰的安全性.
SM2是中國基于橢圓曲線的公鑰密碼標準,由國家密碼管理局于2010年發布,相關標準為“GMT0003—2012《SM2橢圓曲線公鑰密碼算法》”[5],目前是中國國家密碼標準(GBT 32918—2016),其中數字簽名算法同時還收錄于國際標準ISOIEC 14888—3:2018《信息安全技術帶附錄的數字簽名第3部分:基于離散對數的機制》中.中國二代身份證已全面使用SM2數字簽名技術提供身份鑒別.此外,《中國人民共和國密碼法》第二十七條明確了關鍵信息基礎設施應當使用商用密碼進行保護,網絡產品及服務相關密碼國產化成為大勢所趨.因此,本文針對SM2簽名算法設計協同簽名協議,為SM2簽名密鑰的安全存儲和使用提供一種高效的解決思路.
本文的主要貢獻有3個方面:
1) 針對移動互聯網環境下的特殊需求,設計一種輕量級的非平衡SM2協同簽名方案,客戶端在服務器的幫助下協同完成簽名,且不暴露密鑰信息.
2) 對設計的協同簽名協議提供了完整的安全性證明,結果表明我們所提方案可以有效保護SM2簽名密鑰.
3) 相關功能、性能的測試結果表明提出的SM2兩方協同簽名以較小的性能代價提高了密鑰的安全性,具有較好的應用價值.
基于門限秘密共享的分布式簽名由Shamir教授于1979年提出[6],經過持續的研究已經有豐富的理論成果.最初的門限秘密共享指的是n個實體分別持有私鑰的一部分,當且僅當超過閾值t個被分割密鑰才可以恢復完整私鑰,完成簽名或解密操作.但是一旦私鑰被恢復,持有完整私鑰的那一方就可以在其他實體不知曉的情況下任意使用私鑰,帶來極大的安全隱患.
因此,MacKenzie和Reiter教授[7]首次提出針對DSAECDSA的兩方簽名協議,私鑰同樣是分割存放在2個實體中,但是簽名操作無須私鑰恢復,而是通過雙方交互式協議的方式完成,同時保證了協議執行過程中沒有泄露雙方持有私鑰碎片的信息.隨后,經由Gennaro和Boneh等學者[8-9]的努力,DSAECDSA簽名協議得到(t,n)門限框架上的擴展.但是他們使用的分布式Paillier密鑰生成使得整體性能較差,Lindell教授[4]于2017年在密碼學會議CRYPTO上發表了一個改進的兩方ECDSA協同簽名方案,僅依賴Paillier的同態加密功能,完成2個實體協同產生公鑰和簽名的過程,極大提高了協同簽名的性能.
自此,門限簽名以其優越的密鑰保護特性受到學者們的廣泛關注.Doerner等學者[10]提出了基于秘密共享和不經意傳輸協議的(2,n)門限ECDSA簽名方案和(t,n)門限ECDSA簽名方案.與以往使用同態加密的方案相比,Doerner等學者[10]使用基于Simplest Oblivious Transfer[11]和KOS[12]的隱私乘法協議,在計算性能方面做出了優化.同年,Gennaro等人[13]和Lindell等學者[14]分別發表了新的(t,n)門限ECDSA簽名方案,并在基于模擬的模型下證明了協議的安全性.
此外,國內外學者還提出了針對其他密碼算法的密鑰安全解決方案.Frederiksen等學者[15]提出了一種相對高效的兩方RSA密鑰生成方案.但是,該方案需要多次使用Paillier同態加密算法,帶來較高的通信和計算開銷,而且無法擴展到多方框架.針對IEEE P1363標準中基于身份的數字簽名,Zhang和He等學者[16-17]先后設計了2種兩方協同簽名方案,前者仍沿用基于同態加密的方法實現密鑰的安全保護,而后者在此基礎上取消了同態加密的協助,極大提升了協同簽名的速度.隨后,Feng等學者[18]利用加法秘密共享的思路,將IEEE P1363標準中基于身份的數字簽名協議擴展到了多方.
針對中國數字簽名標準SM2,Zhang等學者[19]提出了SM2數字簽名算法的兩方協同簽名方案,但是簽名過程中同樣需要使用Paillier同態加密操作,方案的執行效率較低.尚銘等學者[20]設計的SM2門限密碼算法,因其交互次數過多而導致計算和通信代價相對較大.綜上所述,國內外學者在基于門限簽名的密鑰保護方面已經取得一定的研究成果,但這些成果難以適用于計算和存儲資源受限的移動終端.
本節我們主要介紹與論文設計方案相關的基礎知識.
根據《SM2橢圓曲線公鑰密碼算法》規范,SM2數字簽名的定義為:

G是G上階為n的基點(生成元).
H:{0,1}*→Zn是輸出整數的Hash函數,H256:{0,1}*→{0,1}256是輸出256 b比特串的Hash函數.
SM2私鑰表示為隨機數d←RZn,對應的公鑰為Ppub=d×G.消息M∈{0,1}*的SM2數字簽名σ=(r,s)的生成步驟如下:
1) 計算e=H(Z‖M),其中Z=H256(ENTL‖ID‖a‖b‖xG‖yG‖xpub‖ypub)是將用戶字節長度為ENTL的身份標識符ID,橢圓曲線參數a,b,G的坐標xG,yG和公鑰Ppub的坐標xpub,ypub使用Hash函數計算而來的256 b長的Hash值;
2) 生成隨機數k←Zn;
3) 計算(x1,y1)=R=k×G;
4) 計算r=(e+x1) modn,s=(1+d)-1×(k-r×d) modn.若r=0,r+k=n或s=0則返回第2)步.
5) 簽名結果為σ=(r,s).
安全兩方計算(secure two-party computation, 2PC)由姚期智教授于1986年提出[21-22],是指2個參與方在無須進行數據歸集的情況下完成數據協同計算,同時保護數據所有方的原始數據隱私.協議雙方在數據保留在各自本地的情況下,執行既定的計算邏輯并獲得計算結果,其隱私性要求為:在計算完成后,計算雙方除了自己的輸入數據、自己輸入數據相關的中間結果和輸出結果外,無法獲知任何額外的有效信息.針對簽名算法的形式化描述為:計算雙方分別持有私鑰d1,d2,當確定待簽名消息M后,共同計算簽名邏輯fsign(M,d1,d2),得到正確的簽名值σ=(r,s).
該過程要求2PC簽名協議滿足:
1) 數據隱私性.協議執行過程中的中間數據及結果都不會泄露關于d1,d2的相關信息.
2) 健壯性.誠實執行協議后,參與方輸出正確的簽名結果σ.
3) 兼容性.不改變簽名結果的形式,使用原始驗證算法可正確完成簽名驗證.
這3點可以保證數字簽名過程中所需滿足的密鑰保護要求,以及2PC簽名協議在工程化實現中所需達到的便捷性.
本節詳細描述了安全性證明所基于的安全模型和本文方案的設計目標.
本文協議的安全性證明框架是基于游戲的MPC安全證明模型[23-24],即通過構造模擬協議,利用與敵手的交互,將安全性歸約到原始簽名方案的安全假設.
1) 通信模型
假設系統參數(以及SM2的標準參數)可以通過高效、安全的方式傳遞給所有參與方.此外,還有一個連接著2個參與方的點對點通道來承載協議的交互.
2) 敵手能力


3) 安全目標



(1)
協同簽名方案的定義為分布式簽名生成方法,而輸出的簽名在原驗證算法下也是有效的.由此同樣可以定義協同簽名方案的存在性不可偽造.

與EU-CMA定義不同的是,敵手可以看到腐化方的密鑰生成和簽名協議實例的視圖.定義2遵循基于游戲的MPC安全證明模型.此外,基于現有框架[26],可以將本文設計的協議擴展到一個更強的基于模擬的安全性證明,但是復雜度也有相應地增加.
本文將基于零知識證明理想功能,承諾-零知識證明理想功能完成SM2兩方協同簽名的構造以及安全性證明.





② 當接收到來自U(或S)的指令(decom-proof,sid).如果查詢到(sid,U(或S),x)則向另一參與方S(或U)發送(decom-proof,sid,x).
DLOG={(G,G,n,P,w)|P=w×G},
其中,G是群G上階為n的生成元.關于DLOG的證明可以使用經典的Sigma協議[27],同時利用Fiat-Shamir框架[28]實現非交互式的零知識證明.此外,任意一個通用可組合安全的承諾方案[29-30]均可以滿足本文關于安全性的需求,例如在隨機諭言機下,使用一個Hash函數H和隨機數r即可定義關于x的承諾Com(x)=H(x,r).
在本文設計的協議中,生成SM2數字簽名涉及2個參與方:客戶端U和服務器S.協議內容包括密鑰生成協議和協同簽名協議,其中密鑰生成協議執行一次,協同簽名協議可以執行若干次.我們并未改變SM2簽名方案的系統參數及橢圓曲線,關于SM2的系統初始化部分則可參考《SM2橢圓曲線公鑰密碼算法》規范.
SM2密鑰生成算法由客戶端U和服務器S共同參與完成.具體流程圖如圖1所示:

Fig. 1 The workflow of distributed key generation protocol圖1 密鑰生成協議流程圖
1)U→S:{IDU,承諾}


2)S→U:{DS,π2}

3)U→S:{DU,π1}

4)U和S輸出公鑰:
客戶端U和服務器S在本階段利用密鑰生成階段的密鑰信息,協同產生關于消息M的SM2簽名,并由客戶端U輸出最終簽名結果.具體流程圖如圖2所示.
1)U→S:{e,承諾}
①U計算e=H(Z‖M),生成隨機數kU←Zn,計算KU=kU×G.

2)S→U:{KS,π4}

3)U→S:{KU,π3}
4)U→S:{r,s′}
②S向U發送{r,s′}.
5)U輸出簽名σ:
①U計算s=dU×(s′+kU)-rmodn,令σ(r,s).
② 使用SM2簽名驗證算法,驗證σ是否為關于M的有效簽名.若驗證正確,那么U輸出簽名σ;否則U終止會話.

Fig. 2 The workflow of distributed signing protocol圖2 協同簽名協議流程圖
注:一次協同密鑰生成需要3次通信,協同簽名協議需要4次通信.若是在半誠實模型下,即參與方僅分析獲取的消息,但會誠實執行協議,那么就不需要承諾和零知識證明,此時一次協同密鑰生成僅需2次通信,協同簽名協議需要2次通信(步驟2和4可以合在一起,而KS也無需發送).
根據密鑰生成協議,有:
根據協同簽名協議,可得:



本文所設計的協同SM2簽名方案的安全性是基于原始SM2簽名方案的可證明安全性.



1) 模擬密鑰生成



2) 模擬協同簽名




3) 不可區分性分析

4) 偽造



1) 模擬密鑰生成



2) 模擬協同簽名




3) 不可區分性分析

4) 偽造


證畢.
本節針對第4節所設計的協同SM2簽名方案進行性能評估,此外還與原始SM2簽名方案做了比較.測試所基于的參數遵循《SM2橢圓曲線公鑰密碼算法》規范中關于素數域Fp上的橢圓曲線定義,橢圓曲線的階n為長度32 B的大整數,橢圓曲線點的長度為64 B(通過對坐標的壓縮可以簡化為33 B),Hash函數采用SM3算法.本文測試程序的構建基于開源密碼學庫MIRACL[31],測試環境為一臺配置有64位Window10操作系統,Intel?CoreTMi5-8265 CPU@1.60 GHz,8.00 GB RAM的惠普筆記本電腦.


Table 1 Runtime of Our Proposed Protocol表1 本文協議計算性能的評估結果 ms
接著,我們統計分析了協議在惡意模型和半誠實模型下的計算復雜度,如表2所示.根據協議設定,惡意模型下的密鑰生成過程中,客戶端與服務器之間相互發送一個橢圓曲線點和關于它的零知識證明,此外還有客戶端向服務器發送的承諾;而簽名比密鑰生成多了服務器向客戶端返回的(r,s′).表2所示的惡意模型通信復雜度中,括號中表示的是將橢圓曲線點進行壓縮以后的通信量.同樣,當去掉零知識證明后,通信復雜度也可以減到100 B以內.

Table 2 Communication Overhead of Our Proposed
總體來看,由于把私鑰求逆的步驟放在密鑰生成階段中,因此密鑰生成階段的計算復雜度相對較高.但是在實際生活中密鑰的生成并不頻繁.而本文簽名協議在客戶端的性能幾乎接近于原始SM2簽名,因此對于用戶設備來說有著非常小的計算壓力,由此可見本文設計的方案在非平衡的客戶端服務器構架中有較好的應用前景.
為了保護移動互聯網環境下用戶存儲于客戶端的SM2密鑰,本文基于協同簽名的思想,設計了一個輕量級的SM2兩方協同簽名方案,它允許客戶端和服務器在不泄露各自部分簽名密鑰的情況下共同完成SM2數字簽名,產生簽名的過程須由雙方同時參與,生成簽名的過程中也沒有恢復過完整的簽名密鑰,充分保證簽名密鑰的安全性.此外,我們將協同簽名的安全性歸約到標準SM2簽名,由此證明我們所提協議的安全性,即如果原始SM2是概率多項式時間不可偽造的,那么我們的協議也滿足概率多項式時間不可偽造性.最后,本文針對協議的正確性和性能完成了測試與評估.實驗結果表明,在半誠實模型下,客戶端計算量為4.381 ms,接近相同環境下客戶端執行一次原始SM2簽名的時間.特別地,協同簽名未改變簽名結果的格式以及簽名驗證算法,與標準SM2數字簽名算法具有很高的兼容性,因此在實際應用中具有廣泛的應用前景.