1.一種客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,包括以下步驟:
(1)客戶端接收來(lái)自外部應(yīng)用的數(shù)字簽名請(qǐng)求,并根據(jù)該數(shù)字簽名請(qǐng)求發(fā)送簽名原文m和用戶個(gè)人識(shí)別信息ID給服務(wù)端,其中該用戶個(gè)人識(shí)別信息ID可包括用戶名,和/或客戶端使用公鑰密碼算法對(duì)其自身生成的第一私鑰d1進(jìn)行處理后得到的第一公鑰P1;
(2)服務(wù)端根據(jù)用戶個(gè)人識(shí)別信息ID檢測(cè)用戶私鑰是否已經(jīng)被撤銷,如果沒(méi)有被撤銷則進(jìn)入步驟(3),否則過(guò)程結(jié)束;
(3)服務(wù)端根據(jù)接收到的用戶個(gè)人識(shí)別信息ID在其自身中查找對(duì)應(yīng)的第二私鑰d2,利用該第二私鑰d2對(duì)簽名原文m進(jìn)行數(shù)字簽名,以生成第一簽名信息S1,并將第一簽名信息S1發(fā)送給客戶端;
(4)客戶端利用第一私鑰d1對(duì)簽名原文m和第一簽名信息S1的組合進(jìn)行數(shù)字簽名,以生成完整簽名信息S,并將完整簽名信息S返回給外部應(yīng)用。
2.根據(jù)權(quán)利要求1所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,生成第一簽名信息S1的步驟如下:
(3-1)根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點(diǎn)P2:
P2=H(d2,m)*G
或根據(jù)個(gè)人用戶識(shí)別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點(diǎn)P2:
P2=H(ID,d2,m)*G
其中H表示哈希算法,G為數(shù)字簽名算法采用的橢圓曲線的基點(diǎn),*表示橢圓曲線的點(diǎn)乘運(yùn)算;
(3-2)將計(jì)算獲得的橢圓曲線點(diǎn)P2賦值給第一簽名信息S1。
3.根據(jù)權(quán)利要求2所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并獲得橢圓曲線上的點(diǎn)k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點(diǎn)k*G和第一簽名信息獲取橢圓曲線點(diǎn)P1=k*G+S1,其中+表示橢圓曲線的點(diǎn)加運(yùn)算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點(diǎn)P1和用戶個(gè)人識(shí)別信息獲取簽名結(jié)果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用戶個(gè)人識(shí)別信息的摘要值;x1表示P1點(diǎn)的橫坐標(biāo),y1表示P1點(diǎn)的縱坐標(biāo);
(4-4)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-3)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-5)將步驟(4-3)獲得的簽名結(jié)果第一要素r和步驟(4-4)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S。
4.根據(jù)權(quán)利要求2所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并根據(jù)該隨機(jī)數(shù)和第一簽名信息獲取橢圓曲線點(diǎn)P1=k*S1,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)中獲得的橢圓曲線點(diǎn)P1和用戶個(gè)人識(shí)別信息獲取簽名結(jié)果第一要素r=(e+x1)mod n,其中e=H(Z||m),Z表示用戶個(gè)人識(shí)別信息的摘要值;x1表示P1點(diǎn)的橫坐標(biāo),y1表示P1點(diǎn)的縱坐標(biāo);
(4-3)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-2)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-4)將步驟(4-2)獲得的簽名結(jié)果第一要素r和步驟(4-3)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S。
5.根據(jù)權(quán)利要求2所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,則步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并獲得橢圓曲線上的點(diǎn)k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)獲得的橢圓曲線上的點(diǎn)k*G和第一簽名信息獲取橢圓曲線點(diǎn)P1=k*G+S1,其中+表示橢圓曲線的點(diǎn)加運(yùn)算;
(4-3)根據(jù)步驟(4-2)中獲得的橢圓曲線點(diǎn)P1獲取簽名結(jié)果第一要素r=x1mod n,其中x1表示P1點(diǎn)的橫坐標(biāo);
(4-4)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-3)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-5)將步驟(4-3)獲得的簽名結(jié)果第一要素r和步驟(4-4)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S。
6.根據(jù)權(quán)利要求2所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,則步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并根據(jù)該隨機(jī)數(shù)和第一簽名信息獲取橢圓曲線點(diǎn)P1=k*S1,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)步驟(4-1)中獲得的橢圓曲線點(diǎn)P1獲取簽名結(jié)果第一要素r=x1mod n,其中x1表示P1點(diǎn)的橫坐標(biāo);
(4-3)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-2)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-4)將步驟(4-2)獲得的簽名結(jié)果第一要素r和步驟(4-3)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S。
7.根據(jù)權(quán)利要求1所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,生成第一簽名信息S1的步驟如下:
(3-1)根據(jù)第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點(diǎn)P2:
P2=H(d2,m)*G
或根據(jù)個(gè)人用戶識(shí)別信息ID、第二私鑰d2和簽名原文m并使用以下公式獲得橢圓曲線點(diǎn)P2:
P2=H(ID,d2,m)*G
(3-2)將計(jì)算獲得的橢圓曲線點(diǎn)P2的橫坐標(biāo)x2賦值給第一簽名信息S1。
8.根據(jù)權(quán)利要求7所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是SM2橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并根據(jù)該隨機(jī)數(shù)獲取橢圓曲線點(diǎn)P1=k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)用戶個(gè)人識(shí)別信息、橢圓曲線上的點(diǎn)P1和第一簽名信息S1獲取簽名結(jié)果第一要素r=(e+x1+S1)mod n;
(4-3)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-2)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=((1+d1)-1·(k-r·d1))mod n;
(4-4)將步驟(4-2)獲得的簽名結(jié)果第一要素r和步驟(4-3)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S。
9.根據(jù)權(quán)利要求7所述的客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在于,步驟(4)中使用的數(shù)字簽名算法是ECDSA橢圓曲線簽名算法,且步驟(4)具體包括以下子步驟:
(4-1)生成隨機(jī)數(shù)k∈[1,n-1],并根據(jù)該隨機(jī)數(shù)獲取橢圓曲線點(diǎn)P1=k*G,其中n為使用的數(shù)字簽名算法中橢圓曲線的階;
(4-2)根據(jù)橢圓曲線上的點(diǎn)P1和第一簽名信息S1獲取簽名結(jié)果第一要素r=(x1+S1)mod n;
(4-3)根據(jù)第一私鑰d1、隨機(jī)數(shù)k、步驟(4-2)得到的簽名結(jié)果第一要素r獲取簽名結(jié)果第二要素s=k-1·(e+r·d1)mod n;其中e等于H(m);
(4-4)將步驟(4-2)獲得的簽名結(jié)果第一要素r和步驟(4-3)中獲得的簽名結(jié)果第二要素s合成,以得到完整簽名信息S;
10.一種客戶端和服務(wù)端協(xié)作生成數(shù)字簽名方法,其特征在,包括以下步驟:
(1)客戶端接收來(lái)自外部應(yīng)用的數(shù)字簽名請(qǐng)求,并根據(jù)該數(shù)字簽名請(qǐng)求發(fā)送簽名原文和用戶個(gè)人識(shí)別信息給服務(wù)端,其中該用戶個(gè)人識(shí)別信息可包括用戶名,和/或客戶端使用公鑰密碼算法對(duì)其自身生成的第一私鑰d1進(jìn)行處理后得到的第一公鑰P1;
(2)服務(wù)端根據(jù)用戶個(gè)人識(shí)別信息檢測(cè)用戶私鑰是否已經(jīng)被撤銷,如果沒(méi)有被撤銷則進(jìn)入步驟(3),否則過(guò)程結(jié)束;
(3)服務(wù)端根據(jù)接收到的用戶個(gè)人識(shí)別信息在其自身中查找對(duì)應(yīng)的第二私鑰d2,利用該第二私鑰d2對(duì)簽名原文進(jìn)行數(shù)字簽名,以生成第一簽名信息S1,并將第一簽名信息S1發(fā)送給客戶端;
(4)客戶端利用第一私鑰d1對(duì)簽名原文進(jìn)行數(shù)字簽名,以生成第二簽名信息S2,將第一簽名信息S1和第二簽名信息S2合成為完整簽名信息S,并將完整簽名信息S返回給外部應(yīng)用。