本發(fā)明屬于信息安全領域,更具體地,涉及一種客戶端和服務端協(xié)作生成數(shù)字簽名的方法。
背景技術:
目前,業(yè)務系統(tǒng)多采用基于數(shù)字證書的公鑰基礎設施(Public Key Infrastructure,簡稱PKI)系統(tǒng)來保障業(yè)務數(shù)據(jù)安全,數(shù)字證書是由證書授權(Certificate Authority,簡稱CA)或第三方CA簽發(fā)的,以數(shù)字證書為核心的公鑰密碼機制可以對網(wǎng)絡上傳輸?shù)男畔⑦M行加密和解密、數(shù)字簽名和驗證,以確保網(wǎng)絡上傳遞消息的機密性、完整性以及交易實體的真實性,以及簽名的不可否認性,進而保障網(wǎng)絡應用的安全性。
在以數(shù)字證書為核心的PKI系統(tǒng)中,數(shù)字簽名由客戶端調用用戶數(shù)字證書對應的私鑰來獨立計算完成。常用的數(shù)字簽名算法包括RSA簽名算法和基于橢圓曲線密碼的數(shù)字簽名算法,其中基于橢圓曲線密碼的數(shù)字簽名算法包括國際上使用最廣泛的橢圓曲線數(shù)字簽名算法(Elliptic Curve Digital Signature Algorithm,簡稱ECDSA)和中國國家密碼標準的SM2數(shù)字簽名算法。
然而,上述數(shù)字簽名算法存在以下幾個技術問題:
第一,數(shù)字證書對應的用戶私鑰是由用戶生成,并由用戶保管,容易被黑客竊取,為了保障用戶私鑰的安全,目前通行的做法是使用專門的硬件安全設備(譬如智能卡、U盾、智能密鑰設備等)來存儲和保護用戶私鑰,但這就要求用戶必須購買并隨身攜帶該硬件安全設備才能完成數(shù)字簽名操作,從而既增加了用戶使用的成本,也增加了用戶使用的復雜度。
第二,由于用戶私鑰是存儲在客戶端,并在客戶端使用,因此用戶可以隨時生成數(shù)字簽名;如果用戶丟失數(shù)字證書,或因用戶離職需要作廢數(shù)字證書,服務端不能及時將用戶私鑰的客戶端部分作廢,并終止用戶的簽名操作。
技術實現(xiàn)要素:
針對現(xiàn)有技術的以上缺陷或改進需求,本發(fā)明提供了一種客戶端和服務端協(xié)作生成數(shù)字簽名的方法,其目的在于,解決現(xiàn)有方法中存在的用戶必須隨身攜帶硬件安全設備以完成數(shù)字簽名操作所造成的用戶使用復雜度高,以及客戶端密鑰不能被及時作廢所導致用戶的簽名操作不能被終止的技術問題。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種客戶端和服務端協(xié)作生成數(shù)字簽名方法,包括以下步驟:
(1)客戶端接收來自外部應用的數(shù)字簽名請求,并根據(jù)該數(shù)字簽名請求發(fā)送簽名原文m和用戶個人識別信息ID給服務端,其中該用戶個人識別信息ID可包括用戶名,和/或客戶端使用公鑰密碼算法對其自身生成的第一私鑰d1進行處理后得到的第一公鑰P1;
(2)服務端根據(jù)用戶個人識別信息ID檢測用戶私鑰是否已經(jīng)被撤銷,如果沒有被撤銷則進入步驟(3),否則過程結束;
(3)服務端根據(jù)接收到的用戶個人識別信息ID在其自身中查找對應的第二私鑰d2,利用該第二私鑰d2對簽名原文m進行數(shù)字簽名,以生成第一簽名信息S1,并將第一簽名信息S1發(fā)送給客戶端;
(4)客戶端利用第一私鑰d1對簽名原文m和第一簽名信息S1的組合進行數(shù)字簽名,以生成完整簽名信息S,并將完整簽名信息S返回給外部應用。
優(yōu)選地,生成第一簽名信息S1的步驟如下:
(3-1)根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(d2,m)*G
或根據(jù)個人用戶識別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(ID,d2,m)*G
其中H表示哈希算法,G為數(shù)字簽名算法采用的橢圓曲線的基點,*表示橢圓曲線的點乘運算;
(3-2)將計算獲得的橢圓曲線點P2賦值給第一簽名信息S1。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并獲得橢圓曲線上的點k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點k*G和第一簽名信息獲取橢圓曲線點P1=k*G+S1,其中+表示橢圓曲線的點加運算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點P1和用戶個人識別信息獲取簽名結果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用戶個人識別信息的摘要值;x1表示P1點的橫坐標,y1表示P1點的縱坐標;
(4-4)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-3)得到的簽名結果第一要素r獲取簽名結果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-5)將步驟(4-3)獲得的簽名結果第一要素r和步驟(4-4)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)和第一簽名信息獲取橢圓曲線點P1=k*S1,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)中獲得的橢圓曲線點P1和用戶個人識別信息獲取簽名結果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用戶個人識別信息的摘要值;x1表示P1點的橫坐標,y1表示P1點的縱坐標;
(4-3)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-2)得到的簽名結果第一要素r獲取簽名結果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-4)將步驟(4-2)獲得的簽名結果第一要素r和步驟(4-3)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,則步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并獲得橢圓曲線上的點k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點k*G和第一簽名信息獲取橢圓曲線點P1=k*G+S1,其中+表示橢圓曲線的點加運算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點P1獲取簽名結果第一要素r=x1mod n,其中x1表示P1點的橫坐標;
(4-4)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-3)得到的簽名結果第一要素r獲取簽名結果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-5)將步驟(4-3)獲得的簽名結果第一要素r和步驟(4-4)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,則步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)和第一簽名信息獲取橢圓曲線點P1=k*S1,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)中獲得的橢圓曲線點P1獲取簽名結果第一要素r=x1mod n,其中x1表示P1點的橫坐標;
(4-3)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-2)得到的簽名結果第一要素r獲取簽名結果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-4)將步驟(4-2)獲得的簽名結果第一要素r和步驟(4-3)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
優(yōu)選地,生成第一簽名信息S1的步驟如下:
(3-1)根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(d2,m)*G
或根據(jù)個人用戶識別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(ID,d2,m)*G
(3-2)將計算獲得的橢圓曲線點P2的橫坐標x2賦值給第一簽名信息S1。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)獲取橢圓曲線點P1=k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)用戶個人識別信息、橢圓曲線上的點P1和第一簽名信息S1獲取簽名結果第一要素r=(e+x1+S1)mod n;
(4-3)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-2)得到的簽名結果第一要素r獲取簽名結果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-4)將步驟(4-2)獲得的簽名結果第一要素r和步驟(4-3)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
優(yōu)選地,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)獲取橢圓曲線點P1=k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)橢圓曲線上的點P1和第一簽名信息S1獲取簽名結果第一要素r=(x1+S1)mod n;
(4-3)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-2)得到的簽名結果第一要素r獲取簽名結果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-4)將步驟(4-2)獲得的簽名結果第一要素r和步驟(4-3)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
按照本發(fā)明的另一方面,提供了一種客戶端和服務端協(xié)作生成數(shù)字簽名方法,包括以下步驟:
(1)客戶端接收來自外部應用的數(shù)字簽名請求,并根據(jù)該數(shù)字簽名請求發(fā)送簽名原文和用戶個人識別信息給服務端,其中該用戶個人識別信息可包括用戶名,和/或客戶端使用公鑰密碼算法對其自身生成的第一私鑰d1進行處理后得到的第一公鑰P1;
(2)服務端根據(jù)用戶個人識別信息檢測用戶私鑰是否已經(jīng)被撤銷,如果沒有被撤銷則進入步驟(3),否則過程結束;
(3)服務端根據(jù)接收到的用戶個人識別信息在其自身中查找對應的第二私鑰d2,利用該第二私鑰d2對簽名原文進行數(shù)字簽名,以生成第一簽名信息S1,并將第一簽名信息S1發(fā)送給客戶端;
(4)客戶端利用第一私鑰d1對簽名原文進行數(shù)字簽名,以生成第二簽名信息S2,將第一簽名信息S1和第二簽名信息S2合成為完整簽名信息S,并將完整簽名信息S返回給外部應用。
總體而言,通過本發(fā)明所構思的以上技術方案與現(xiàn)有技術相比,能夠取得下列有益效果:
1、本發(fā)明的方法由于采用了客戶端和服務端同時生成和保存部分的用戶私鑰,且客戶端和服務端中任意一方均不能單獨合成完整的用戶私鑰,從而保證了用戶私鑰的安全性,即使用戶私鑰的客戶端部分(即第一私鑰)被黑客竊取,該黑客也根本無法恢復出完整的用戶私鑰;
2、本發(fā)明的方法由于采用了客戶端和服務端同時參與簽名運算流程,用戶私鑰的客戶端部分(即第一私鑰)和服務端部分(即第二私鑰)均只在滿足條件下參與簽名運算,以生成部分簽名,且客戶端和服務端中任意一方均不能生成完整的簽名,從而保證了用戶簽名的安全性。
3、本發(fā)明中的用戶私鑰是以分散的方式被保存,客戶端不需要專門的硬件安全設備來保存用戶私鑰,從而能夠保證完整的用戶私鑰的安全性,同時本發(fā)明用戶的使用復雜度低。
4、本發(fā)明通過采用服務器參與簽名運算,并在簽名之前檢測用戶私鑰有無被撤銷,如果被撤銷則終止簽名,從而保證了用戶私鑰使用的時效性。
附圖說明
圖1是根據(jù)本發(fā)明第一實施方式的客戶端和服務端協(xié)作生成數(shù)字簽名的方法的流程圖。
圖2是根據(jù)本發(fā)明第二實施方式的客戶端和服務端協(xié)作生成數(shù)字簽名的方法的流程圖。
具體實施方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術特征只要彼此之間未構成沖突就可以相互組合。
如圖1所示,本發(fā)明客戶端和服務端協(xié)作生成數(shù)字簽名方法包括以下步驟:
(1)客戶端接收來自外部應用的數(shù)字簽名請求,并根據(jù)該數(shù)字簽名請求發(fā)送簽名原文和用戶個人識別信息給服務端;具體而言,該用戶個人識別信息可包括用戶名,和/或客戶端使用公鑰密碼算法對其自身生成的第一私鑰d1進行處理后得到的第一公鑰P1,其中第一私鑰d1可以是客戶端隨機生成并保存,或者客戶端通過執(zhí)行密鑰派生函數(shù)生成;外部應用可以是外部的app應用、web應用、各種進程等;
(2)服務端根據(jù)用戶個人識別信息檢測用戶私鑰是否已經(jīng)被撤銷,如果沒有被撤銷則進入步驟(3),否則過程結束;具體而言,服務端查看該個人識別信息中對應的標識信息,該標識信息能夠標識用戶私鑰是否已經(jīng)被撤銷;
(3)服務端根據(jù)接收到的用戶個人識別信息在其自身中查找對應的第二私鑰d2,利用該第二私鑰d2對簽名原文進行數(shù)字簽名,以生成第一簽名信息S1,并將第一簽名信息S1發(fā)送給客戶端;其中該第二私鑰d2是用戶首次在服務端注冊階段,由服務端隨機生成并保存,或者服務端通過執(zhí)行密鑰派生函數(shù)生成;
具體而言,根據(jù)本發(fā)明的一種實施方式,生成第一簽名信息S1的步驟如下:
首先,根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(d2,m)*G
或根據(jù)個人用戶識別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(ID,d2,m)*G
其中H表示哈希算法,G為數(shù)字簽名算法采用的橢圓曲線的基點,*表示橢圓曲線的點乘運算;
其次,將計算獲得的橢圓曲線點P2賦值給第一簽名信息S1。
根據(jù)本發(fā)明的另一種實施方式,生成第一簽名信息S1的步驟如下:
首先,根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(d2,m)*G
或根據(jù)個人用戶識別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點P2:
P2=H(ID,d2,m)*G
其次,將計算獲得的橢圓曲線點P2的橫坐標x2賦值給第一簽名信息S1。
(4)客戶端利用第一私鑰d1對簽名原文和第一簽名信息S1的組合進行數(shù)字簽名,以生成完整簽名信息S,并將完整簽名信息S返回給外部應用。
作為本發(fā)明的進一步改進,本發(fā)明的方法還可以包括在上述步驟(1)之后,步驟(2)之前的以下步驟:
(1’)服務端根據(jù)用戶個人識別信息對用戶進行身份驗證;身份驗證包括要求用戶提供PIN碼信息、語音信息、指紋信息、人臉信息、虹膜信息中任意一種或幾種的組合,然后對該信息進行驗證。
作為本發(fā)明的進一步改進,本發(fā)明的方法還可以包括在上述步驟(3)之后,步驟(4)之前的以下步驟:
(3’)客戶端根據(jù)用戶個人識別信息對用戶進行身份驗證,身份驗證包括要求用戶提供PIN碼信息、語音信息、指紋信息、人臉信息、虹膜信息中任意一種或幾種的組合,然后對該信息進行驗證。
作為本發(fā)明的另一種實施方式,如圖2所示,上述步驟(4)也可被替換為:
(4’)客戶端利用第一私鑰d1對簽名原文進行數(shù)字簽名,以生成第二簽名信息S2,將第一簽名信息S1和第二簽名信息S2合成為完整簽名信息S,并將完整簽名信息S返回給外部應用。
在本發(fā)明一個實施方式中,若步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,則上述步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],其中n為使用的數(shù)字簽名算法中橢圓曲線的階,并獲得橢圓曲線上的點k*G;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點k*G和第一簽名信息獲取橢圓曲線點P1=k*G+S1,其中+表示橢圓曲線的點加運算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點P1和用戶個人識別信息獲取簽名結果第一要素r=(e+x1)mod n,其中e=H(Z||m),H表示哈希運算,Z表示用戶個人識別信息的摘要值;x1表示P1點的橫坐標,y1表示P1點的縱坐標;
(4-4)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-3)得到的簽名結果第一要素r獲取簽名結果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-5)將步驟(4-3)獲得的簽名結果第一要素r和步驟(4-4)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
作為本發(fā)明的進一步改進,上述步驟(4-1)和步驟(4-2)也可被替換為下述步驟:
(4-1’)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)和第一簽名信息獲取橢圓曲線點P1=k*S1;
作為本發(fā)明的進一步改進,上述步驟(4-1)、步驟(4-2)和步驟(4-3)也可被替換為下述步驟:
(4-1”)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)獲取橢圓曲線點P1=k*G;
(4-2”)根據(jù)用戶個人識別信息、橢圓曲線上的點P1和第一簽名信息S1獲取簽名結果第一要素r=(e+x1+S1)mod n;
在本發(fā)明一個實施方式中,若步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,則上述步驟(4)具體包括以下子步驟:
(4-1)生成隨機數(shù)k∈[1,n-1],并獲得橢圓曲線上的點k*G;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點k*G和第一簽名信息獲取橢圓曲線點P1=k*G+S1,其中+表示橢圓曲線的點加運算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點P1獲取簽名結果第一要素r=x1mod n,其中x1表示P1點的橫坐標;
(4-4)根據(jù)第一私鑰d1、隨機數(shù)k、步驟(4-3)得到的簽名結果第一要素r獲取簽名結果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-5)將步驟(4-3)獲得的簽名結果第一要素r和步驟(4-4)中獲得的簽名結果第二要素s合成,以得到完整簽名信息S。
作為本發(fā)明的進一步改進,上述步驟(4-1)和步驟(4-2)也可被替換為下述步驟:
(4-1’)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)和第一簽名信息獲取橢圓曲線點P1=k*S1;
作為本發(fā)明的進一步改進,上述步驟(4-1)、步驟(4-2)和步驟(4-3)也可被替換為下述步驟:
(4-1”)生成隨機數(shù)k∈[1,n-1],并根據(jù)該隨機數(shù)獲取橢圓曲線點P1=k*G;
(4-2”)根據(jù)橢圓曲線上的點P1和第一簽名信息S1獲取簽名結果第一要素r=(x1+S1)mod n。
本領域的技術人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。