本發明涉及信息安全領域,尤其涉及一種交互式電子簽名方法。
背景技術:
隨著身份認證技術的發展與應用,電子簽名載體(如智能密鑰設備等)得到廣泛應用,如在網上銀行認證、網上證券交易認證等身份認證過程中,電子簽名載體成為用戶身份認證的工具。
現有技術中,數據在傳入電子簽名載體后,沒有進行數據驗證即進行簽名,如果數據在主機端被篡改,電子簽名載體就不能及時的識別錯誤數據,導致電子簽名載體執行了錯誤的簽名操作,而且現有的電子簽名載體中只有一個簽名證書,適用范圍窄,安全性低。
技術實現要素:
本發明的目的是為了解決現有技術中存在的問題,提供了一種交互式電子簽名方法。
本發明采用的技術方案是:一種交互式電子簽名方法,包括:
步驟S1:電子簽名載體上電初始化;
步驟S2:所述電子簽名載體等待接收主機下發的指令;
步驟S3:當所述電子簽名載體接收到簽名指令時,獲取并判斷待簽名數據和待簽名密鑰;
當所述待簽名數據為交互式簽名數據且所述待簽名密鑰為交互式簽名密鑰 時,執行步驟S4;
當所述待簽名數據為非交互式簽名數據且所述待簽名密鑰為非交互式簽名密鑰時,執行步驟S6;
步驟S4:所述電子簽名載體從所述交互式待簽名數據中獲取交互信息,顯示所述交互信息,并等待用戶按鍵確認,判斷在預設時間內是否接收到用戶按鍵確認,如果是,則執行步驟S5,否則報錯,返回步驟S2;
步驟S5:所述電子簽名載體根據所述交互式簽名數據、所述交互式簽名密鑰和內部保存的交互式證書,得到交互式簽名結果,并發送至所述主機,返回步驟S2;
步驟S6:所述電子簽名載體根據所述非交互式簽名數據、所述非交互式簽名密鑰和內部保存的非交互式證書,得到非交互式簽名結果,并發送至所述主機,返回步驟S2。
所述步驟S3,還包括:當所述待簽名數據為交互式簽名數據且所述待簽名密鑰為非交互式簽名密鑰時,對所述交互式簽名數據進行預處理,得到非交互式簽名數據,執行步驟S6。
所述步驟S3,還包括:當所述待簽名數據為交互式簽名數據且所述待簽名密鑰為非交互式簽名密鑰時,報錯,返回步驟S2。
所述步驟S3,還包括:當所述待簽名數據為非交互式簽名數據且所述待簽名密鑰為交互式簽名密鑰時,報錯,返回步驟S2。
所述步驟S3中,所述電子簽名載體獲取待簽名數據和待簽名密鑰,具體為:所述電子簽名載體從所述簽名指令中獲取待簽名數據和待簽名密鑰ID,根據所述待簽名密鑰ID從電子簽名載體中獲取對應保存的待簽名密鑰。
所述步驟S3之前還包括:當所述電子簽名載體接收到哈希指令時,從所述 哈希指令中獲取待簽名數據和待簽名密鑰ID,保存所述待簽名數據,并判斷所述待簽名密鑰ID,如果是交互式簽名密鑰ID,則根據所述待簽名密鑰ID獲取交互式簽名密鑰,將其作為已選定的待簽名密鑰,如果是非交互式簽名密鑰ID,則根據所述待簽名密鑰ID獲取非交互式簽名密鑰,將其作為已選定的待簽名密鑰;
所述步驟S3中,所述電子簽名載體獲取待簽名數據和待簽名密鑰,具體為:所述電子簽名載體獲取保存的待簽名數據和已選定的待簽名密鑰。
所述步驟S3之前還包括:
當所述電子簽名載體接收到設置安全環境指令,則從所述設置安全環境指令中獲取待簽名密鑰ID,判斷所述待簽名密鑰ID,如果是交互式簽名密鑰ID,則根據所述待簽名密鑰ID獲取交互式簽名密鑰,將其作為已選定的待簽名密鑰,如果是非交互式簽名密鑰ID,則根據所述待簽名密鑰ID獲取非交互式簽名密鑰,將其作為已選定的待簽名密鑰;
當所述電子簽名載體接收到哈希指令時,從所述哈希指令中獲取待簽名數據并保存;
所述步驟S3中,所述電子簽名載體獲取待簽名數據和待簽名密鑰,具體為:所述電子簽名載體獲取保存的待簽名數據和已選定的待簽名密鑰。
所述判斷所述待簽名密鑰ID,具體為:判斷所述待簽名密鑰ID的值,如果所述待簽名密鑰ID為第一預設值,則所述待簽名密鑰為交互式密鑰ID,如果所述待簽名密鑰ID為第二預設值,則所述待簽名密鑰為非交互式密鑰ID。
所述步驟S3中,所述電子簽名載體判斷待簽名數據,具體為:判斷所述待簽名數據是否符合預設報文格式,如果是,則所述待簽名數據為交互式簽名數據,否則所述待簽名數據為非交互式簽名數據。
當判定所述待簽名數據不符合預設報文格式時,還包括:判斷所述待簽名數據的長度是否為預設長度,如果是,則所述待簽名數據為非交互式簽名數據,否則對所述待簽名數據進行預處理,將預處理結果作為非交互式簽名數據。
所述步驟S5中,所述電子簽名載體根據所述交互式簽名數據、所述交互式簽名密鑰和內部保存的交互式證書,得到交互式簽名結果,具體包括:
步驟b1:所述電子簽名載體對所述交互式簽名數據進行預處理,得到交互式預處理結果,并根據所述交互式簽名密鑰獲取對應的交互式證書,從所述交互式證書中獲取交互式證書ID;
步驟b2:所述電子簽名載體應用第一預設簽名算法,對所述交互式證書ID、所述交互式預處理結果和所述交互式簽名密鑰進行處理,得到交互式簽名結果。
所述電子簽名載體對所述交互式簽名數據進行預處理,具體為:
步驟a1:所述電子簽名載體根據預設哈希算法,對所述交互式簽名數據進行哈希運算,得到哈希結果;
步驟a2:所述電子簽名載體將所述預設哈希算法的算法標識與所述哈希結果進行拼接,得到拼接結果;
步驟a3:所述電子簽名載體根據預設長度,對所述拼接結果進行補位。
所述步驟S6中,所述電子簽名載體根據所述非交互式簽名數據、所述非交互式簽名密鑰和內部保存的非交互式證書,得到非交互式簽名結果,具體包括:所述電子簽名載體根據所述非交互式簽名密鑰獲取對應的非交互式證書,從所述非交互式證書中獲取非交互式證書ID,應用第二預設簽名算法,對所述非交互式簽名數據、所述非交互式證書ID和所述非交互式簽名密鑰進行處理,得到非交互式簽名結果。
所述步驟S4具體包括:所述電子簽名載體從所述交互式待簽名數據中獲取 交互信息,顯示所述交互信息,并等待用戶按鍵確認,判斷在預設時間內是否接收到用戶按鍵確認,如果是接收到按鍵確認,則執行步驟S5;如果接收到按鍵取消,則將所述交互式待簽名數據刪除,并向所述主機返回簽名失敗響應,返回步驟S2;如果未接收到按鍵,則將所述交互式待簽名數據刪除,并向所述主機返回超時響應,返回步驟S2。
所述方法還包括:
步驟a1:所述主機接收到簽名結果時,獲取已保存的所述待簽名數據和與所述待簽名密鑰對應的簽名公鑰,將所述待簽名數據、所述簽名結果和所述簽名公鑰發送至服務器;
步驟a2:所述服務器判斷所述待簽名數據和所述簽名公鑰,如果所述待簽名數據和所述簽名公鑰均為交互式,則執行步驟a3,如果所述待簽名數據和所述簽名公鑰均為非交互式時,則執行步驟a4,否則報錯,結束;
步驟a3:所述服務器應用第一預設哈希算法對所述待簽名數據進行哈希運算,得到第一結果,并根據第一預設解密算法,應用所述簽名公鑰對所述簽名結果進行解密,得到第二結果,執行步驟a5;
步驟a4:所述服務器應用第二預設哈希算法對所述待簽名數據進行哈希運算,得到第一結果,并根據第二預設解密算法,應用所述簽名公鑰對所述簽名結果進行解密,得到第二結果,執行步驟a5;
步驟a5:所述服務器判斷所述第一結果與所述第二結果是否相同,如果是,則執行步驟a6,否則結束;
步驟a6:所述服務器向所述主機返回驗證成功響應,結束。
本發明取得的有益效果是:采用本發明的技術方案,能夠實現一個電子簽 名載體中具有兩種簽名方式,交互式簽名和非交互式簽名,而且每種簽名對應各自的證書和密鑰,保證了簽名的安全性。
附圖說明
為了更清楚的說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1是本發明實施例1提供的一種交互式電子簽名方法流程圖;
圖2是本發明實施例2提供的另一種交互式電子簽名方法流程圖;
圖3是本發明實施例3提供的再一種交互式電子簽名方法流程圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
實施例1
本發明實施例1提供了一種交互式電子簽名方法,如圖1所示,包括:
步驟101:電子簽名載體上電初始化;
步驟102:電子簽名載體等待接收主機下發的指令;
步驟103:當電子簽名載體接收到簽名指令時,獲取并判斷待簽名數據和待簽名密鑰;
當待簽名數據為交互式簽名數據且待簽名密鑰為交互式簽名密鑰時,執行步驟104;
當待簽名數據為非交互式簽名數據且待簽名密鑰為非交互式簽名密鑰時,執行步驟106;
當待簽名數據為交互式簽名數據且待簽名密鑰為非交互式簽名密鑰時,對交互式簽名數據進行預處理,得到非交互式簽名數據,執行步驟106;
本實施例中,當待簽名數據為交互式簽名數據且待簽名密鑰為非交互式簽名密鑰時,還可以不進行操作,直接報錯,返回步驟102;
當待簽名數據為非交互式簽名數據且待簽名密鑰為交互式簽名密鑰時,報錯,返回步驟102;
本實施例中,獲取待簽名數據和待簽名密鑰,具體為:從接收到的簽名指令中獲取待簽名數據和待簽名密鑰ID,根據待簽名密鑰ID獲取對應的待簽名密鑰;
在步驟S3之前,還包括:電子簽名載體接收到哈希指令時,從哈希指令中獲取待簽名數據和待簽名密鑰ID,保存待簽名數據,根據待簽名密鑰ID獲取對應的待簽名密鑰,并作為已選定的待簽名密鑰;則步驟S3中,獲取待簽名數據和待簽名密鑰,具體為:獲取保存的待簽名數據和已選定的待簽名密鑰;
在步驟S3之前,還包括:電子簽名載體接收到設置安全環境指令時,從設置安全環境指令中獲取待簽名密鑰ID,根據待簽名密鑰ID獲取對應的待簽名密鑰,將其作為已選定的待簽名密鑰;在步驟S3之前,還包括:電子簽名載體接收到哈希指令時,從哈希指令中獲取待簽名數據并保存,則步驟S3中,獲取待簽名數據和待簽名密鑰,具體為:獲取保存的待簽名數據和已選定的待簽名密鑰;
步驟104:電子簽名載體從交互式待簽名數據中獲取交互信息,顯示交互信息,并等待用戶按鍵確認,判斷在預設時間內是否接收到用戶按鍵確認,如果是,則執行步驟105,否則報錯,返回步驟102;
步驟105:電子簽名載體根據交互式簽名數據、交互式簽名密鑰和內部保存的交互式證書,得到交互式簽名結果,并發送至主機,返回步驟102;
步驟106:電子簽名載體根據非交互式簽名數據、非交互式簽名密鑰和內部保存的非交互式證書,得到非交互式簽名結果,并發送至主機,返回步驟102。
實施例2
本發明實施例2提供了一種交互式電子簽名方法,如圖2所示,包括:
步驟201:電子簽名載體上電初始化;
本實施例中,電子簽名載體與主機連接上電,進行初始化;
步驟202:電子簽名載體等待接收主機發送的指令,當接收到指令時,判斷指令類型,如果是簽名指令,則執行步驟203,如果是其他指令,則執行相應操作,返回相應響應,返回步驟202;
本實施例中,優選的,電子簽名載體判斷接收到的指令的前兩個字節,如果是第一預設值,則為簽名指令,其中,優選第一預設值為0x80F0;
步驟203:電子簽名載體從簽名指令中獲取待簽名數據和待簽名密鑰ID;
步驟204:電子簽名載體判斷待簽名數據是否符合預設報文格式,如果是,則執行步驟205,否則執行步驟215;
本實施例中,預先約定,如果待簽名數據符合預設報文格式,則待簽名數據為交互式簽名數據;
優選的,預設報文格式為XML報文格式;
例如,得到的交互式簽名數據為:
<?xml version="1.0"encoding="utf-8"?>
<SignData>
<Fields>
<PayerAccountNoName=:“收款賬號”:>6221286897001736<PayerAccountNo>
<PayerAccountName name=“收款戶名:”>李四<PayerAccountName>
<TrsAmount name=“交易金額:”>100</TrsAmount>
</Fields>
</SignData>
步驟205:電子簽名載體判斷待簽名密鑰ID的值,如果為第一預設值,則執行步驟206,如果為第二預設值,則執行步驟216;
本實施例中,預先約定,如果待簽名密鑰ID的值為第一預設值,則待簽名密鑰ID為交互式簽名密鑰ID,如果待簽名密鑰ID的值為第二預設值,則待簽名密鑰ID為非交互式簽名密鑰ID;
優選的,第一預設值為00,第二預設值為01。
步驟206:電子簽名載體對待簽名數據進行解析,從解析結果中獲取交互信息;
例如,從待簽名數據中獲取到的交互信息為:
收款賬號:6221286897001736
收款戶名:李四
交易金額:200
步驟207:電子簽名載體顯示交互信息,并等待用戶按鍵確認;
步驟208:電子簽名載體判斷在預設時間內是否接收到用戶的按鍵信息,如果是按鍵確認,則執行步驟211,如果是按鍵取消,則執行步驟209,如果未接收到按鍵,則執行步驟210;
優選的,預設時間為10分鐘;
步驟209:電子簽名載體將待簽名數據刪除,向主機返回取消簽名響應,返回步驟202;
步驟210:電子簽名載體將待簽名數據刪除,向主機返回超時響應,返回步驟202;
步驟211:電子簽名載體應用第一預設算法對待簽名數據進行預處理,得到交互式預處理結果;
優選的,第一預設算法為SM3算法,除此之外還可以為MD5算法等;
本實施例中,應用預設算法對待簽名數據進行預處理,具體為:
步驟211-1:電子簽名載體根據預設哈希算法,對待簽名數據進行哈希運算,得到哈希結果;
步驟211-2:電子簽名載體將預設哈希算法的算法標識與哈希結果進行拼接,得到拼接結果;
步驟211-3:電子簽名載體根據預設長度,對拼接結果進行補位,得到交互式預處理結果。
步驟212:電子簽名載體根據待簽名密鑰ID獲取對應的交互式簽名密鑰和交互式證書,從交互式證書中獲取交互式證書ID;
優選的,電子簽名載體在證書簽發時,將交互式證書和交互式簽名密鑰保存至一號容器中,將非交互式證書和非交互式簽名密鑰保存至二號容器中;
本實施例中,還可以為:電子簽名載體從簽名指令中獲取容器ID,根據容 器ID查找對應的容器,從容器中獲取保存的簽名密鑰和證書;
其中,步驟211和步驟212無先后順序,可同時執行。
步驟213:電子簽名載體應用第一預設簽名算法,對交互式證書ID、交互式預處理結果和交互式簽名密鑰進行簽名計算,得到交互式簽名結果;
本實施例中,優選的,第一預設簽名算法為SM2算法,除此之外,還可以為RSA算法等;
步驟214:電子簽名載體根據交互式簽名結果生成交互式簽名成功響應,并返回給主機,返回步驟202;
步驟215:電子簽名載體判斷待簽名數據的長度是否為預設長度,如果是,則執行步驟217,否則執行步驟216;
本實施例中,如果待簽名數據的長度為預設長度,則該待簽名數據為經過預處理的數據,否則為未經過預處理的數據,執行步驟216;
優選的,預設長度為32字節;
步驟216:電子簽名載體應用第二預設算法對待簽名數據進行預處理,得到非交互式待簽名數據,執行步驟217;
步驟217:電子簽名載體根據待簽名密鑰ID,獲取對應的非交互式密鑰和非交互式證書,從非交互式證書中獲取非交互式證書ID;
優選的,電子簽名載體在證書簽發時,將交互式證書和交互式簽名密鑰保存至一號容器中,將非交互式證書和非交互式簽名密鑰保存至二號容器中;
本實施例中,還可以為:電子簽名載體從簽名指令中獲取容器ID,根據容器ID查找對應的容器,從容器中獲取保存的簽名密鑰和證書。
步驟218:電子簽名載體應用第二預設簽名算法,對非交互式證書ID、待簽名數據和非交互式簽名密鑰進行簽名計算,得到非交互式簽名結果;
本實施例中,優選的,預設簽名算法為RSA算法,除此之外,還可以為SM2算法等;
步驟219:電子簽名載體根據非交互式簽名結果生成非交互式簽名成功響應,并返回給主機,返回步驟202。
本實施例中,交互式簽名采用的第一預設簽名算法與非交互式簽名采用的第二預設簽名算法可以是同一種算法,也可以是兩種不同的算法,具體組合方式如下:
1、非交互式簽名方式中第一預設簽名算法為第一預設算法(如SM2算法),交互式簽名方式中第二預設簽名算法也為第一預設算法(如SM2算法);
2、非交互式簽名方式中第一預設簽名算法為第二預設算法(如RSA算法),交互式簽名方式中第二預設簽名算法也為第二預設算法(如RSA算法);
3、非交互式簽名方式中第一預設簽名算法為第二預設算法(如RSA算法),交互式簽名方式中第二預設簽名算法為第一預設算法(如SM2算法);
4、非交互式簽名方式中第一預設簽名算法為第一預設算法(如SM2算法),交互式簽名方式中第二預設簽名算法為第二預設算法(如RSA算法)。
實施例3
本發明實施例3提供了一種交互式電子簽名方法,如圖3所示,包括:
步驟301:電子簽名載體上電初始化;
步驟302:電子簽名載體等待接收主機下發的指令;
步驟303:電子簽名載體根據接收到的指令,判斷指令類型,如果設置安全環境指令,則執行步驟304,如果哈希指令,則執行步驟309,如果是簽名指令,則執行步驟310;
優選的,如果指令的前兩個字節為0x80A0,則為設置安全環境指令,如果指令的前兩個字節為0x80B0,則為哈希指令,如果指令的前兩個字節為0x80F0,則為簽名指令。
步驟304:電子簽名載體從設置安全環境指令中獲取待簽名密鑰ID;
步驟305:電子簽名載體判斷待簽名密鑰ID,如果為第一預設值,則執行步驟306,如果是第二預設值,則執行步驟307;
本實施例中,預先約定,如果待簽名密鑰ID的值為第一預設值,則待簽名密鑰ID為交互式簽名密鑰ID,如果待簽名密鑰ID的值為第二預設值,則待簽名密鑰ID為非交互式簽名密鑰ID;
優選的,第一預設值為00,第二預設值為01。
步驟306:電子簽名載體根據待簽名密鑰ID獲取對應保存的交互式簽名密鑰,將其作為已選定的待簽名密鑰,執行步驟308;
優選的,電子簽名載體在證書簽發時,將交互式證書和交互式簽名密鑰保存至一號容器中,將非交互式證書和非交互式簽名密鑰保存至二號容器中;
本實施例中,還可以為:電子簽名載體從設置安全環境指令中獲取容器ID,根據容器ID查找對應的容器,從容器中獲取保存的簽名密鑰和證書;
步驟307:電子簽名載體根據待簽名密鑰ID獲取對應保存的非交互式簽名密鑰,將其作為已選定的待簽名密鑰,執行步驟308;
步驟308:電子簽名載體向主機返回設置成功響應,返回步驟302;
步驟309:電子簽名載體從哈希指令中獲取待簽名數據,將待簽名數據保存,向主機返回成功響應,返回步驟302;
步驟310:電子簽名載體獲取保存的待簽名數據和已選定的待簽名密鑰,判斷待簽名數據和待簽名密鑰,根據判斷結果執行對應的簽名操作,得到簽名結 果,將簽名結果返回至主機,返回步驟302;
本實施例中,根據判斷結果執行對應的簽名操作的具體操作與實施例2中步驟204至步驟219相同,在此不再贅述。
本實施例中,步驟303至步驟310還可以替換為:
步驟303-1:電子簽名載體根據接收到的指令,判斷指令類型,如果是哈希指令,則執行步驟304-1,如果是簽名指令,則執行步驟305-1;
步驟304-1:電子簽名載體從哈希指令中獲取待簽名數據和待簽名密鑰ID,將待簽名數據保存,并根據待簽名密鑰ID獲取對應的簽名密鑰,將其作為已選定的待簽名密鑰,向主機返回成功響應,返回步驟302;
步驟305-1:電子簽名載體獲取保存的待簽名數據和已選定的待簽名密鑰,判斷待簽名數據和待簽名密鑰,根據判定結果執行相應的簽名操作,得到簽名結果,向主機返回簽名結果,返回步驟302。
本發明中,電子簽名載體簽名完成向主機返回簽名結果以后,還包括:
步驟a1:主機接收到簽名結果時,獲取已保存的待簽名數據和與待簽名密鑰對應的簽名公鑰,將待簽名數據、簽名結果和簽名公鑰發送至服務器;
步驟a2:服務器判斷待簽名數據和簽名公鑰,如果待簽名數據和簽名公鑰均為交互式,則執行步驟a3,如果待簽名數據和簽名公鑰均為非交互式時,則執行步驟a4,否則報錯,結束;
步驟a3:服務器應用第一預設哈希算法對待簽名數據進行哈希運算,得到第一結果,并根據第一預設解密算法,應用簽名公鑰對所述簽名結果進行解密,得到第二結果,執行步驟a5;
步驟a4:服務器應用第二預設哈希算法對待簽名數據進行哈希運算,得到 第一結果,并根據第二預設解密算法,應用簽名公鑰對所述簽名結果進行解密,得到第二結果,執行步驟a5;
步驟a5:服務器判斷第一結果與第二結果是否相同,如果是,則執行步驟a6,否則結束;
步驟a6:服務器向所述主機返回驗證成功響應,結束。
以上所述,僅為本發明較佳的具體實施方式,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明公開的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應該以權利要求的保護范圍為準。