馬莉媛,黃 勃
(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201600)
隨著移動(dòng)設(shè)備的普及以及互聯(lián)網(wǎng)的快速發(fā)展,信息安全成為日益重要的話題。密碼技術(shù)作為解決信息安全問(wèn)題的有效手段,被廣泛應(yīng)用于各種業(yè)務(wù)場(chǎng)景。為了滿足應(yīng)用對(duì)信息安全中消息完整性和真實(shí)性的基本需求,SM2橢圓曲線公鑰密碼算法應(yīng)運(yùn)而生。SM2密碼算法作為我國(guó)公鑰密碼算法標(biāo)準(zhǔn),包括了數(shù)字簽名算法、密鑰交換協(xié)議和公鑰加密算法。SM2數(shù)字簽名算法要求計(jì)算簽名時(shí)需要完整的私鑰信息,因此,私鑰安全性是算法安全的基礎(chǔ)。由于移動(dòng)設(shè)備易丟失且安全防護(hù)等級(jí)較低,因此存儲(chǔ)在這些設(shè)備中的私鑰面臨巨大的安全風(fēng)險(xiǎn)。
為了增強(qiáng)SM2數(shù)字簽名算法的私鑰安全性,研究人員提出了一些基于兩方協(xié)作的SM2數(shù)字簽名算法。基于SM2的協(xié)作簽名算法將簽名私鑰拆分成2個(gè)部分,分別交由兩方來(lái)保管,通過(guò)采用零知識(shí)證明、比特承諾、同態(tài)加密等密碼學(xué)技術(shù)保證了只有合法的通信雙方才能安全地協(xié)作產(chǎn)生完整的SM2簽名,任何一方都不能單獨(dú)恢復(fù)出完整的簽名私鑰[1]。文獻(xiàn)[2]在2020年公開(kāi)了一種SM2協(xié)作簽名方案,需要通過(guò)2輪通信完成簽名計(jì)算。文獻(xiàn)[3]提出一種SM2協(xié)作簽名協(xié)議,并通過(guò)零知識(shí)證明和比特承諾等技術(shù),保證只有合法的協(xié)作雙方能夠完成協(xié)作簽名計(jì)算。
目前提出的SM2協(xié)作簽名應(yīng)用中,服務(wù)端通常采用專用密碼機(jī)等硬件,協(xié)助終端設(shè)備完成協(xié)作簽名計(jì)算[4]。近年來(lái),隨著云計(jì)算技術(shù)快速發(fā)展,云服務(wù)逐漸成為各行各業(yè)依賴的基礎(chǔ)設(shè)施。與傳統(tǒng)的專用服務(wù)器部署方式相比,云服務(wù)具備按需部署、動(dòng)態(tài)擴(kuò)展、降低成本等優(yōu)勢(shì)。但SM2協(xié)作簽名作為密碼應(yīng)用,它要求運(yùn)行環(huán)境必須安全可信且能夠保護(hù)密鑰等機(jī)密性數(shù)據(jù),進(jìn)而保證密碼算法的安全性。針對(duì)云服務(wù)中數(shù)據(jù)的安全性,云廠商們提出了各自的解決方案,如華為云通過(guò)《華為云隱私保護(hù)白皮書(shū)》[5]和《華為云數(shù)據(jù)安全白皮書(shū)》[6]中介紹的方法,構(gòu)建了一個(gè)高安全等級(jí)的云服務(wù)。盡管云廠商使用一系列措施構(gòu)建安全可靠的云服務(wù),卻仍無(wú)法達(dá)到密碼應(yīng)用所需的安全運(yùn)行環(huán)境。
面對(duì)潛在的惡意云服務(wù),密碼應(yīng)用需要通過(guò)其他技術(shù),使它能夠在不可信的云服務(wù)中構(gòu)建安全可靠的運(yùn)行環(huán)境,這一需求可以由軟件保護(hù)擴(kuò)展(software guard extension, SGX)技術(shù)實(shí)現(xiàn)[7-8]。文獻(xiàn)[9]提出使用SGX技術(shù)解決密鑰管理服務(wù)(key management service ,KMS)中主密鑰在可信部署和使用中的問(wèn)題,提高了KMS主密鑰的安全性。文獻(xiàn)[10]為了解決聯(lián)盟鏈審計(jì)需求與用戶隱私信息保護(hù)之間的矛盾,提出一種使用SGX技術(shù)的可追溯匿名方案。文獻(xiàn)[11]提出一種基于SGX技術(shù)保護(hù)Ansible自動(dòng)化運(yùn)維工具配置信息的方案,提高工具的安全性。文獻(xiàn)[12]設(shè)計(jì)了一種基于離散對(duì)數(shù)問(wèn)題的有序多重?cái)?shù)字簽名方案,將該方案用于文件的多個(gè)用戶順序簽名。文獻(xiàn)[13]針對(duì)污染和重放攻擊提出一個(gè)新的多源網(wǎng)絡(luò)編碼簽名算法,利用同態(tài)加密算法構(gòu)造簽名方案來(lái)抵御污染攻擊,通過(guò)引入消息代的序號(hào),防止代間的重放攻擊,并且采用線性計(jì)算方法來(lái)減少節(jié)點(diǎn)的驗(yàn)證時(shí)間,降低了對(duì)節(jié)點(diǎn)計(jì)算能力的要求,特別適合于無(wú)線傳感器網(wǎng)絡(luò)或自組織網(wǎng)絡(luò)。文獻(xiàn)[14]提出將簽名私鑰拆分成2個(gè)部分,通過(guò)零知識(shí)證明等密碼學(xué)技術(shù)保證只有合法的通信才能安全地協(xié)作產(chǎn)生完整的SM2簽名,且交互次數(shù)少、協(xié)作簽名效率高。文獻(xiàn)[15]提出一種基于SM2的雙方共同簽名協(xié)議,適用于單個(gè)服務(wù)節(jié)點(diǎn)服務(wù)大量客戶端的場(chǎng)景,如5G環(huán)境下的物聯(lián)網(wǎng)場(chǎng)景。文獻(xiàn)[16]提出一種基于密鑰分割和國(guó)家標(biāo)準(zhǔn)SM2簽名算法的可信第三方證明簽名方案,來(lái)提高數(shù)字簽名密鑰保存安全性和簽名效率問(wèn)題。
本文的目標(biāo)是提出一種更高效的SM2協(xié)作簽名算法,并基于SGX技術(shù)提出將該算法與云服務(wù)結(jié)合的應(yīng)用部署方案。
SM2是一種基于橢圓曲線的非對(duì)稱國(guó)產(chǎn)密碼算法。通過(guò)該算法,簽名方使用私鑰完成簽名計(jì)算,驗(yàn)簽方使用對(duì)應(yīng)的公鑰驗(yàn)證簽名的正確性。
1.1.1 公開(kāi)參數(shù)
在使用SM2進(jìn)行簽名和驗(yàn)簽之前,參與計(jì)算的各方需要設(shè)定相同的公開(kāi)參數(shù)。其中包括a、b、n、q、E和G。其中q是有限域Fq的規(guī)模,即有限域Fq中元素的數(shù)目;a、b是有限域Fq中的2個(gè)元素;E表示由a和b定義在有限域Fq上的一條橢圓曲線;G=(xG,yG)是橢圓曲線E的基點(diǎn);n為基點(diǎn)G的階。
1.1.2 密鑰生成
隨機(jī)生成私鑰dA,且dA∈[1,q-1];
計(jì)算公鑰PA=dAG。
1.1.3 簽名計(jì)算
設(shè)待簽名消息為M,根據(jù)以下步驟對(duì)M完成簽名計(jì)算。
1)計(jì)算M的摘要值e=Hash(M);
2)從隨機(jī)數(shù)生成器獲取隨機(jī)數(shù)k,且k∈[1,n-1];
3)計(jì)算R=(x1,y1)=k×G;
4)計(jì)算r=(e+x1)modn,r≠0且r+k≠n;
5)計(jì)算s=(1+dA)-1(k-rd)modn;
6)獲得消息M的簽名結(jié)果(r,s)。
1.1.4 簽名驗(yàn)證
驗(yàn)簽方根據(jù)收到的消息M′和簽名結(jié)果(r′,s′),按照以下步驟進(jìn)行驗(yàn)簽計(jì)算。
1)計(jì)算消息M′的摘要值e′=Hash(M′);
2)計(jì)算t=(r′+s′)modn,若t=0,則驗(yàn)簽不通過(guò);
本文基于游戲的2PC(secure two-party computation)安全證明模型[18],針對(duì)協(xié)作簽名算法設(shè)計(jì)安全性證明框架,并通過(guò)密鑰生成預(yù)言機(jī)和簽名預(yù)言機(jī)證明算法的安全性。
定義1給定一個(gè)數(shù)字簽名算法π,如果概率多項(xiàng)式時(shí)間敵手Adv在已知安全參數(shù)κ的情況下,以簽名消息對(duì)(M,σ)為輸入,在經(jīng)過(guò)多項(xiàng)式次訓(xùn)練后,存在一個(gè)可以忽略的概率ε偽造一個(gè)有效且新的簽名消息對(duì)(M*,σ*),那么該簽名算法是可證明安全的,即
Pr[SignAdv,π(1κ)=1]≤ε
(1)
定義2給定一個(gè)協(xié)作簽名算法∏,該算法是數(shù)字簽名算法π通過(guò)變換得到的,如果概率多項(xiàng)式時(shí)間敵手在至多腐化一個(gè)參與方b(b∈{C,S})的情況下,按照協(xié)議流程與誠(chéng)實(shí)參與方完成多項(xiàng)式次交互后,存在一個(gè)可以忽略的概率ε偽造一個(gè)有效且新的簽名消息對(duì)(M*,σ*),那么該協(xié)作簽名算法是可證明安全的,即
(2)
Intel在酷睿六代處理器中首次引入SGX技術(shù)。在SGX的威脅模型中,僅當(dāng)前應(yīng)用是可信的,其他包括運(yùn)行在高特權(quán)級(jí)的應(yīng)用均不可信。應(yīng)用程序可以使用SGX擴(kuò)展指令,創(chuàng)建受保護(hù)的私有內(nèi)存區(qū)域,該私有內(nèi)存區(qū)域僅允許應(yīng)用自身訪問(wèn),其他應(yīng)用無(wú)法訪問(wèn),以此保護(hù)應(yīng)用數(shù)據(jù)的安全性[19]。針對(duì)應(yīng)用數(shù)據(jù)靜態(tài)存儲(chǔ)時(shí)的安全性保護(hù),SGX提供了封裝和解封指令。封裝指令用于將私有內(nèi)存中需要持久化存儲(chǔ)的應(yīng)用數(shù)據(jù)加密,并將密文結(jié)果保存在本地。當(dāng)應(yīng)用再次使用該數(shù)據(jù)時(shí),需要通過(guò)解封指令重新得到數(shù)據(jù)的明文信息。
SM2協(xié)作密鑰生成算法由客戶端C與服務(wù)端S按照以下流程共同完成。
1)C向S發(fā)送Hello請(qǐng)求,開(kāi)始協(xié)作密鑰生成流程;
2)S隨機(jī)生成d2∈[1,q-1],并計(jì)算P2=d2×G,將P2發(fā)送給C;
3)C隨機(jī)生成d1∈[1,q-1],并計(jì)算P1=d1×G;然后計(jì)算公鑰PA=d1×P2+P1+P2;
4)協(xié)作簽名算法允許使用一次協(xié)作密鑰生成的結(jié)果,完成多次協(xié)作簽名計(jì)算,因此C和S分別保存(d1,P2,PA)和d2。
設(shè)待簽名消息為M,參與協(xié)作簽名生成算法的雙方為客戶端C和服務(wù)端S,簽名生成過(guò)程如圖1所示。
圖1 協(xié)作簽名生成過(guò)程圖Fig.1 Collaborative signature generation flow diagram
雙方完成協(xié)作簽名具體過(guò)程說(shuō)明如下
1)C計(jì)算待簽名消息M的摘要值e=Hash(M),然后隨機(jī)生成k1,計(jì)算Q1=k1×(G+P2),并將e和Q1發(fā)送給S;
2)S隨機(jī)生成k2,并計(jì)算(x1,y1)=k2×G+Q1,然后計(jì)算r=(e+x1)modn,s2=(1+d2)-1(k2+s2-rd1)modn,并將r和s2發(fā)送給C;
3)C計(jì)算s=(1+d1)-1(k1+s2-rd1)modn,得到簽名結(jié)果(r,s)。
根據(jù)協(xié)作密鑰生成算法,公鑰PA為
PA=d1×P2+P1+P2
(3)
C和S分別隨機(jī)產(chǎn)生的子私鑰d1、d2和私鑰dA滿足關(guān)系
dA=d1+d2+d1d2
(4)
根據(jù)協(xié)作簽名生成算法,點(diǎn)(x1,y1)為
(x1,y1)=k1G+k1d2G+k2G
(5)
C和S分別產(chǎn)生的隨機(jī)數(shù)k1、k2和k,滿足關(guān)系
k=k1+k2+k1d2
(6)
SM2簽名計(jì)算公式可以進(jìn)行如下變換
(x1,y1)=kG=k1G+k1d2G+k2G
r=(e+x1)modn
s=(1+d1+d2+d1d2)-1
(k1+k2+k1k2-rd1-rd2-rd1d2)=
(1+d1)-1[k1+(1+d2)-1(k2-rd2)-rd1]=
(1+d1)-1[k1+s2-rd1]
(7)
上述變換過(guò)程驗(yàn)證了本文提出的SM2協(xié)作簽名算法的正確性。
目前已有的協(xié)作簽名應(yīng)用,通常使用專用密碼機(jī)等硬件部署于服務(wù)端?;赟M2協(xié)作簽名算法,本文設(shè)計(jì)一種與云計(jì)算技術(shù)結(jié)合的應(yīng)用部署方案。為了能夠在云服務(wù)中部署SM2協(xié)作簽名應(yīng)用的服務(wù)端,本方案使用SGX技術(shù)在不可信的云服務(wù)中構(gòu)建可信執(zhí)行環(huán)境,并在可信環(huán)境中運(yùn)行與服務(wù)端密碼計(jì)算相關(guān)的程序,以此保護(hù)機(jī)密數(shù)據(jù)不被云服務(wù)中的惡意攻擊竊取或破壞。這些惡意攻擊包括惡意的操作系統(tǒng)直接訪問(wèn)應(yīng)用內(nèi)存數(shù)據(jù)、管理員物理方式讀取數(shù)據(jù)等。由客戶端對(duì)服務(wù)端進(jìn)行遠(yuǎn)程鑒別,使得客戶端能夠確定服務(wù)端身份,服務(wù)端密碼計(jì)算部分由SGX平臺(tái)保護(hù)。同時(shí),在遠(yuǎn)程鑒別過(guò)程中,基于SM2和SM4密碼算法進(jìn)行安全邏輯信道建立,最終客戶端和服務(wù)端會(huì)共享一份SM4密鑰,該密鑰可以用來(lái)保護(hù)后續(xù)協(xié)作簽名過(guò)程中的通信數(shù)據(jù)。本文假設(shè)客戶端為可信設(shè)備,由數(shù)據(jù)所有者持有,因此客戶端數(shù)據(jù)保護(hù)不在本文討論范圍內(nèi)?;赟GX云端SM2協(xié)作簽名框架如圖2所示。圖2中,虛線標(biāo)明的是本應(yīng)用需要實(shí)現(xiàn)的模塊。整個(gè)協(xié)作簽名主要由3部分組成,說(shuō)明如下。
圖2 基于SGX云端SM2協(xié)作簽名應(yīng)用框架圖Fig.2 SM2 collaboration signature system frame diagram based on SGX in cloud
1)客戶端??蛻舳送ㄟ^(guò)訪問(wèn)部署在云中的服務(wù)端,完成遠(yuǎn)程鑒別、安全信道建立、協(xié)作簽名初始化和協(xié)作簽名計(jì)算,并將需要存儲(chǔ)的數(shù)據(jù)通過(guò)存儲(chǔ)模塊以文件或數(shù)據(jù)庫(kù)等方式保存在本地。其中遠(yuǎn)程鑒別模塊完成對(duì)服務(wù)端的遠(yuǎn)程鑒別,協(xié)作簽名模塊完成協(xié)作簽名相關(guān)計(jì)算,安全信道模塊基于SM2、SM4密碼算法提供安全通信的功能,網(wǎng)絡(luò)模塊提供與服務(wù)端網(wǎng)絡(luò)通信功能。
2)服務(wù)端不可信部分(簡(jiǎn)稱為不可信部分)。不可信部分完成所有除密碼計(jì)算之外的服務(wù)端工作,如接收和發(fā)送網(wǎng)絡(luò)數(shù)據(jù)、數(shù)據(jù)持久化存儲(chǔ)等。其中Ocall接口模塊中定義了可信部分依賴的外部函數(shù),本應(yīng)用中可信部分需要依賴不可信部分提供的存儲(chǔ)功能。
3)服務(wù)端可信部分(簡(jiǎn)稱為可信部分)。可信部分完成所有密碼計(jì)算相關(guān)的工作,如密鑰生成、協(xié)作簽名計(jì)算、數(shù)據(jù)封裝等。其中協(xié)作簽名模塊是可信部分的核心模塊,該模塊實(shí)現(xiàn)了SM2協(xié)作簽名算法;遠(yuǎn)程鑒別模塊用來(lái)生成提供給客戶端的身份報(bào)告quote,客戶端可以通過(guò)quote鑒別服務(wù)端身份;安全信道模塊提供與客戶端的安全通信功能;Ecall接口模塊中定義了可信部分提供給外部的入口函數(shù),不可信部分只能通過(guò)定義的接口進(jìn)入可信部分,完成相應(yīng)的操作,并在操作完成后回到不可信部分。
由于服務(wù)端可信部分運(yùn)行在SGX構(gòu)建的可信環(huán)境中,所以云服務(wù)中包括操作系統(tǒng)在內(nèi)的其他應(yīng)用,均無(wú)法直接訪問(wèn)可信部分的任何信息,進(jìn)而保護(hù)了可信部分中應(yīng)用數(shù)據(jù)的機(jī)密性和完整性。
本節(jié)針對(duì)基于SGX云端SM2協(xié)作簽名方案進(jìn)行測(cè)試評(píng)估,測(cè)試對(duì)象為服務(wù)端,包括功能和性能測(cè)試,以及安全性分析。
功能測(cè)試使用SM2協(xié)作簽名應(yīng)用客戶端導(dǎo)出的公鑰,驗(yàn)證協(xié)作簽名結(jié)果(r,s),以此判斷方案的正確性。
為了完成功能測(cè)試,需要實(shí)現(xiàn)標(biāo)準(zhǔn)SM2數(shù)字簽名算法,并按照文獻(xiàn)[11]提供的示例數(shù)據(jù),測(cè)試該算法簽名和驗(yàn)證功能的正確性,然后將標(biāo)準(zhǔn)SM2數(shù)字簽名算法中的公共參數(shù)設(shè)置為SM2協(xié)作簽名算法中的參數(shù)值,執(zhí)行SM2協(xié)作簽名計(jì)算。標(biāo)準(zhǔn)SM2數(shù)字簽名算法使用客戶端導(dǎo)出公鑰,對(duì)協(xié)作簽名結(jié)果進(jìn)行驗(yàn)證,若驗(yàn)證通過(guò),則本方案功能正確,否則錯(cuò)誤。本方案針對(duì)功能正確性測(cè)試了1 000次,驗(yàn)證簽名通過(guò)1 000次,不通過(guò)0次,通過(guò)率為100%,表明本方案能夠計(jì)算得到正確的SM2數(shù)字簽名結(jié)果。
SM2協(xié)作簽名的服務(wù)端利用SGX技術(shù)在不可信的云服務(wù)中創(chuàng)建可信運(yùn)行環(huán)境,進(jìn)而保護(hù)了應(yīng)用數(shù)據(jù)的安全性,但也因此引入了額外的性能開(kāi)銷。為了能夠得到性能損耗情況,首先實(shí)現(xiàn)一個(gè)標(biāo)準(zhǔn)的SM2協(xié)作簽名算法,該算法流程盡量與本方案保持一致,減小實(shí)驗(yàn)誤差,然后在相同的環(huán)境中,分別運(yùn)行2個(gè)程序若干次,統(tǒng)計(jì)程序的運(yùn)行時(shí)間,通過(guò)比較得到本方案的性能開(kāi)銷。本文方案測(cè)試結(jié)果如圖3所示,橫坐標(biāo)表示運(yùn)行的次數(shù),縱坐標(biāo)表示運(yùn)行的時(shí)間,實(shí)線為基于SGX云端SM2協(xié)作簽名程序后,執(zhí)行時(shí)間,虛線為標(biāo)準(zhǔn)的SM2協(xié)作簽名程序執(zhí)行時(shí)間。通過(guò)測(cè)試發(fā)現(xiàn),引入SGX的SM2協(xié)作簽名程序執(zhí)行時(shí)間大約增加了15%—25%,相較于應(yīng)用安全性的顯著提高,該性能開(kāi)銷在可接受的范圍。
圖3 性能測(cè)試結(jié)果Fig.3 Performance test results
本文假設(shè)云服務(wù)是惡意的,它可以直接訪問(wèn)系統(tǒng)中任意設(shè)備中的應(yīng)用數(shù)據(jù)。同時(shí),假設(shè)Intel SGX是安全的,無(wú)法通過(guò)軟件或硬件的方式被破壞。
基于SGX的SM2協(xié)作簽名服務(wù)端由不可信和可信2部分組成。不可信部分的程序和數(shù)據(jù)位于普通內(nèi)存中,用于完成網(wǎng)絡(luò)、文件操作等處理,所有數(shù)據(jù)均為非機(jī)密數(shù)據(jù),直接暴露在惡意云服務(wù)中對(duì)應(yīng)用不會(huì)產(chǎn)生安全威脅;可信部分位于使用SGX擴(kuò)展指令創(chuàng)建的安全內(nèi)存中,用于處理所有涉及機(jī)密數(shù)據(jù)的密碼計(jì)算,惡意云服務(wù)無(wú)法直接訪問(wèn)這塊內(nèi)存空間,故程序運(yùn)行時(shí)的數(shù)據(jù)安全性得以保證。應(yīng)用中部分機(jī)密數(shù)據(jù)需要持久化存儲(chǔ)在云服務(wù)中,所有機(jī)密數(shù)據(jù)在從可信部分傳遞至不可信部分前,都需要執(zhí)行SGX提供的封裝操作。對(duì)于封裝數(shù)據(jù)只有在可信部分執(zhí)行SGX解封操作,才能恢復(fù)出原始數(shù)據(jù),惡意云服務(wù)無(wú)法通過(guò)讀取靜態(tài)存儲(chǔ)設(shè)備獲得機(jī)密數(shù)據(jù),因此保護(hù)了應(yīng)用靜態(tài)數(shù)據(jù)的安全性。
以上分析表明,基于SGX云端SM2協(xié)作簽名方案可以有效避免應(yīng)用數(shù)據(jù)遭到惡意云服務(wù)的竊取和破壞,密碼應(yīng)用安全性得到增強(qiáng)。
本文基于SGX技術(shù),提出了一種將SM2協(xié)作簽名算法與云計(jì)算結(jié)合的應(yīng)用實(shí)施方案,有效地解決了密碼應(yīng)用部署在不可信云服務(wù)中面臨的數(shù)據(jù)安全問(wèn)題。測(cè)試和分析表明,本方案在性能開(kāi)銷可接受的范圍內(nèi),增強(qiáng)了應(yīng)用數(shù)據(jù)在云服務(wù)中動(dòng)態(tài)運(yùn)行和靜態(tài)存儲(chǔ)時(shí)的安全性,為密碼應(yīng)用遷移上云提出了一個(gè)安全有效的解決方案。