專利名稱:一種簽名方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種簽名方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)的發(fā)展,電子商務(wù)越來越發(fā)達(dá),網(wǎng)上支付成為了人們生活中不可缺少的一部分,為了方便用戶消費(fèi),各大金融機(jī)構(gòu)紛紛發(fā)行USB Key0USB Key是ー種USB接ロ的數(shù)字簽名設(shè)備,在進(jìn)行網(wǎng)上交易時(shí),USB Key接收到交易數(shù)據(jù)后從中提取關(guān)鍵數(shù)據(jù)等待用戶確認(rèn),當(dāng)用戶確認(rèn)之后,USB Key首先對交易數(shù)據(jù)進(jìn)行哈希運(yùn)算,然后對得到的哈希值進(jìn)行數(shù)字簽名,再將簽名結(jié)果返回。對方接收到簽名結(jié)果后,使用用戶證書和交易數(shù)據(jù)驗(yàn)證簽名結(jié)果,當(dāng)驗(yàn)證通過表示用戶確認(rèn)了該交易。數(shù)字簽名是當(dāng)前最安全的網(wǎng)絡(luò)身份確認(rèn)手段,具有不可抵賴性。目前USBKey產(chǎn)品RSA解決方案中大多是采用的摘要算法的不同區(qū)分普通簽名和交易簽名,已達(dá)到防止騙簽的可能性。但是在SM2解決方案中由于SM2簽名的摘要算法只能為SM3算法,因此無法通過摘要算法的不同來進(jìn)行區(qū)別,無法實(shí)現(xiàn)防止騙簽的目的。
發(fā)明內(nèi)容
本發(fā)明的目的是為了克服現(xiàn)有技術(shù)的不足,提供一種簽名方法及裝置。本發(fā)明提供的技術(shù)方案如下:一種簽名方法,包括:步驟Al:設(shè)備上電,進(jìn)行初始化;步驟A2:當(dāng)接收到上位機(jī)下發(fā)的指令時(shí)判斷其是否為計(jì)算簽名指令,是則執(zhí)行步驟A3,否則根據(jù)接收到的指令進(jìn)行相應(yīng)操作;步驟A3:對所述計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對所述報(bào)文信息解析得到報(bào)文信息解析結(jié)果;步驟A4:判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則執(zhí)行步驟A5,否則執(zhí)行步驟AlO ;步驟A5:根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第ー預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù);步驟A6:檢測所述按鍵標(biāo)識的值,如為第二預(yù)設(shè)字符則執(zhí)行步驟A7,如為第一預(yù)設(shè)字符則執(zhí)行步驟A9;步驟A7:輸出所述關(guān)鍵數(shù)據(jù),并等待用戶確認(rèn);步驟AS:當(dāng)接收到按鍵信息時(shí),檢測所述按鍵信息的類型,如為確認(rèn)鍵則根據(jù)第ニ預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2,如為取消鍵則輸出取消信息,返回步驟A2,如為翻頁鍵則返回步驟A7 ;
步驟A9:使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2;步驟AlO:根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2。其中,所述步驟A2中如接收到上位機(jī)下發(fā)的設(shè)置算法指令,則根據(jù)接收到的指令進(jìn)行相應(yīng)操作包括:步驟Cl:對接收到的所述設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟C2,否則報(bào)錯(cuò),返回步驟A2 ;步驟C2:保存解析得到的密鑰信息,給所述上位機(jī)返回成功響應(yīng),返回步驟A2。其中,所述用戶公鑰和用戶私鑰是根據(jù)所述密鑰信息獲取得到的。其中,所述判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確。其中,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之前包括:判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。其中,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之前還包括:判斷所述用戶私鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。其中,所述判斷參數(shù)是否正確具體為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。其中,所述生成第一計(jì)算結(jié)果之前包括:判斷所述用戶公鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷執(zhí)行權(quán)限是否滿足,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;所述根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果之前包括:判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。其中,在所述步驟A7和步驟AS之間,包括:判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息,是則執(zhí)行步驟AS,否則報(bào)錯(cuò),返回步驟A2。其中,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名與所述將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī)之間包括:判斷簽名是否成功,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。一種簽名方法,包括:步驟S1:設(shè)備上電,進(jìn)行初始化;步驟S2:等待接收信息,當(dāng)接收到上位機(jī)下發(fā)的指令信息時(shí)執(zhí)行步驟S3,當(dāng)接收到按鍵信息時(shí)執(zhí)行步驟Sll ;步驟S3:檢測接收到的所述指令的類型,如為報(bào)文解析指令則執(zhí)行步驟S4 ;如為計(jì)算簽名指令則執(zhí)行步驟S7,如為獲取簽名結(jié)果指令則執(zhí)行步驟S12,如為其他指令則進(jìn)行相應(yīng)操作;步驟S4:根據(jù)所述報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則執(zhí)行步驟S5,如為證書下載簽名指令需求則執(zhí)行步驟S6 ;步驟S5:對所述交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果,并判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存所述按鍵標(biāo)識的值,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存,根據(jù)所述交易簽名及登錄簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存,給所述上位機(jī)返回成功響應(yīng),返回步驟S2 ;否則報(bào)錯(cuò),返回步驟S2 ;步驟S6:根據(jù)所述證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述證書下載簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將所述按鍵標(biāo)識的值置為第一預(yù)設(shè)字符,并給所述上位機(jī)返回成功響應(yīng),返回步驟S2 ;步驟S7:對所述計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則執(zhí)行步驟S8,否則報(bào)錯(cuò),返回步驟S2 ;步驟S8:判斷所述按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則執(zhí)行步驟S10,否則執(zhí)行步驟S9 ;步驟S9:將所述保存的關(guān)鍵數(shù)據(jù)輸出并等待用戶確認(rèn),給上位機(jī)返回成功響應(yīng),返回步驟S2 ;步驟SlO:根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟S2 ;步驟Sll:檢測所述按鍵信息的類型,如為取消鍵則輸出取消信息,返回步驟S2 ;如為翻頁鍵則輸出所述關(guān)鍵數(shù)據(jù),返回步驟S2 ;如為確認(rèn)鍵,則根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果,返回步驟S2 ;步驟S12:判斷是否存在所述簽名結(jié)果,是則將所述簽名結(jié)果返回給上位機(jī),返回步驟S2,否則報(bào)錯(cuò),返回步驟S2。其中,在所述步驟S3中如檢測接收到的指令的類型為設(shè)置算法指令則執(zhí)行步驟S13 ;步驟S13:對所述設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟S14,否則報(bào)錯(cuò),返回步驟S2 ;步驟S14:保存解析得到的密鑰信息,給所述上位機(jī)返回成功響應(yīng),返回步驟S2。其中,所述用戶公鑰和所述用戶私鑰是根據(jù)所述密鑰信息獲取得到的。其中,所述判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確。其中,所述進(jìn)行初始化包括:將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值;所述步驟S13之前包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟S13,否則報(bào)錯(cuò),返回步驟S2 ;所述步驟S14還包括:將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第二預(yù)設(shè)值;
所述步驟S4之前還包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第二預(yù)設(shè)值,是則執(zhí)行步驟S4,否則報(bào)錯(cuò),返回步驟S2 ;所述步驟S5判斷為是時(shí)還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值,判斷為否時(shí)還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值;所述步驟S6還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值;所述步驟S7之前包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第三預(yù)設(shè)值,是則執(zhí)行步驟S7,否則報(bào)錯(cuò),返回步驟S2 ;所述步驟S9還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第四預(yù)設(shè)值;所述步驟SlO還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值;所述步驟Sll之前還包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第四預(yù)設(shè)值,是則執(zhí)行步驟S11,否則報(bào)錯(cuò),返回步驟S2 ;所述步驟Sll中檢測按鍵信息的類型為確認(rèn)鍵后還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第五預(yù)設(shè)值;檢測按鍵信息的類型為取消鍵后還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值;所述步驟S12具體包括:步驟S12-1:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第五預(yù)設(shè)值,是則執(zhí)行步驟S12-2,否則報(bào)錯(cuò),返回步驟S2 ;步驟S12-2:判斷所述獲取簽名結(jié)果指令是否合法,是則將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值,將所述簽名結(jié)果返回給上位機(jī),返回步驟S2,否則報(bào)錯(cuò),返回步驟S2 ;所述報(bào)錯(cuò)包括:輸出錯(cuò)誤信息,將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值。其中,所述步驟S7中判斷解析結(jié)果是否符合計(jì)算條件,具體包括:判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。其中,所述判斷參數(shù)是否正確具體為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。其中,在所述步驟S5和步驟S6中給所述上位機(jī)返回成功響應(yīng)的同時(shí)將所述哈希結(jié)果一起返回給所述上位機(jī)。其中,在所述步驟S5和所述步驟S6之前還包括:判斷解析條件是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。其中,所述判斷解析條件是否合法具體包括:判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷執(zhí)行權(quán)限是否滿足,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷所述用戶公鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。其中,所述根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之后包括:判斷簽名是否成功,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。一種簽名裝置,包括:接收模塊,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息;
第一判斷模塊,用于判斷所述接收模塊接收到的指令是否為計(jì)算簽名指令;第一解析模塊,用于當(dāng)所述第一判斷模塊判斷為是時(shí)對所述計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對所述報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果;第二判斷模塊,用于判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識;第一獲取計(jì)算模塊,用于當(dāng)所述第二判斷模塊判斷為是時(shí)根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果;提取模塊,用于從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù);第一檢測模塊,用于檢測所述按鍵標(biāo)識的值;輸出模塊,用于輸出所述關(guān)鍵數(shù)據(jù),還用于輸出提示信息;第二檢測模塊,用于當(dāng)接收模塊接收到按鍵信息時(shí),檢測所述按鍵信息的類型;簽名模塊,用于當(dāng)所述第一檢測模塊檢測為第一預(yù)設(shè)字符或所述第二檢測模塊檢測為確認(rèn)鍵時(shí)根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名;第二獲取計(jì)算模塊,用于當(dāng)所述第二判斷模塊判斷為否時(shí)根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名;發(fā)送模塊,用于向所述上位機(jī)返回響應(yīng)和簽名得到的簽名結(jié)果。其中,該裝置還包括:第二解析模塊,用于對所述接收模塊接收到的設(shè)置算法指令進(jìn)行解析;第三判斷模塊,用于判斷所述第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求;設(shè)置模塊,用于當(dāng)所述第三判斷模塊判斷為是時(shí)設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法;保存模塊,用于保存所述第二解析模塊解析得到的密鑰信息。其中,該裝置還包括獲取模塊,用于根據(jù)所述密鑰信息獲取得到所述用戶公鑰和用戶私鑰。其中,所述第三判斷模塊具體用于判斷參數(shù)是否正確。其中,該裝置還包括:第四判斷模塊,用于判斷參數(shù)是否正確;第五判斷模塊,用于判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法。其中,該裝置還包括第六判斷模塊,用于判斷所述用戶私鑰是否有效。其中,該裝置還包括:第七判斷模塊,用于判斷所述用戶公鑰是否有效;用于判斷執(zhí)行權(quán)限是否滿足;第八判斷模塊,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法。其中,所述第二檢測模塊還用于判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息。其中,該裝置還包括第九判斷模塊,用于判斷簽名是否成功。一種簽名裝置,包括:接收模塊,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息;第一檢測模塊,用于當(dāng)所述接收模塊接收到上位機(jī)下發(fā)的指令信息時(shí)檢測接收到的所述指令的類型,如為報(bào)文解析指令則觸發(fā)第二檢測模塊工作;如為計(jì)算簽名指令則觸發(fā)解析判斷模塊工作,如為獲取簽名結(jié)果指令則觸發(fā)第三判斷模塊工作;所述第二檢測模塊,根據(jù)所述報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則第一解析模塊工作,如為證書下載簽名指令需求則第二獲取計(jì)算模塊工作;所述第一解析模塊,用于對所述交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果;第一判斷模塊,用于判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存提取模塊工作;所述保存提取模塊,用于保存所述按鍵標(biāo)識的值,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存;第一獲取計(jì)算模塊,用于根據(jù)所述交易簽名及登錄簽名指令的格式獲取對應(yīng)的第ー預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存;所述第二獲取計(jì)算模塊,用于根據(jù)所述證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述證書下載簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將所述按鍵標(biāo)識的值置為第一預(yù)設(shè)字符;所述解析判斷模塊,用于對所述計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則第二判斷模塊工作;所述第二判斷模塊,用于判斷所述按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則簽名模塊工作,否則輸出模塊工作;所述輸出模塊,用于輸出所述保存的關(guān)鍵數(shù)據(jù),還用于輸出提示信息;所述簽名模塊,用于根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名;第二檢測模塊,用于當(dāng)所述接收模塊接收到按鍵信息時(shí)檢測所述按鍵信息的類型,如為確認(rèn)鍵,則簽名保存模塊工作;所述簽名保存模塊,用于根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果;所述第三判斷模塊,用于判斷是否存在所述簽名結(jié)果,是則發(fā)送模塊將所述保存的簽名結(jié)果返回給所述上位機(jī);所述發(fā)送模塊,用于向所述上位機(jī)返回響應(yīng)和所述簽名結(jié)果。其中,該裝置還包括:第二解析模塊,用于當(dāng)所述第一檢測模塊檢測為設(shè)置算法指令時(shí)對所述設(shè)置算法指令進(jìn)行解析;第四判斷模塊,用于判斷所述第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置模塊工作;所述設(shè)置模塊,用于設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法;
保存模塊,用于保存所述第二解析模塊解析得到的所述密鑰信息。其中,該裝置還包括獲取模塊,用于根據(jù)所述密鑰信息獲取得到所述用戶公鑰和所述用戶私鑰。其中,所述第四判斷模塊具體用于判斷參數(shù)是否正確。其中,該裝置還包括:設(shè)置狀態(tài)模塊:用于將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值或第二預(yù)設(shè)值或第三預(yù)設(shè)值或第四預(yù)設(shè)值或第五預(yù)設(shè)值;第五判斷模塊,用于判斷所述狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第二預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第三預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第四預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第五預(yù)設(shè)值;所述第三判斷模塊還用于判斷所述獲取簽名結(jié)果指令是否合法。其中,所述解析判斷模塊包括:解析単元,用于對所述計(jì)算簽名指令進(jìn)行解析;第一判斷単元,用于判斷參數(shù)是否正確;第二判斷単元,用于判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法。其中,所述發(fā)送模塊還用于將所述哈希結(jié)果返回給所述上位機(jī)。其中,該裝置還包括第六判斷模塊,用于判斷解析條件是否合法,是則所述第一解析模塊工作。其中,所述第六判斷模塊包括:第五判斷単元,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法;第六判斷単元,用于判斷執(zhí)行權(quán)限是否滿足;第七判斷単元,用于判斷所述用戶公鑰是否有效。其中,該裝置還包括第七判斷模塊,用于判斷簽名是否成功。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn):本發(fā)明的技術(shù)方案中根據(jù)報(bào)文格式的不同區(qū)分簽名需求,不同的簽名需求根據(jù)不同的用戶ID來計(jì)算第一計(jì)算結(jié)果值,從而達(dá)到防止騙簽的目的。
圖1為本發(fā)明實(shí)施例一提供的一種簽名方法流程圖;圖2為本發(fā)明實(shí)施例ニ提供的一種簽名方法流程圖;圖3-圖7為本發(fā)明實(shí)施例三提供的一種簽名方法流程圖;圖8為本發(fā)明實(shí)施例四提供的一種簽名裝置方框圖;圖9為本發(fā)明實(shí)施例五提供的一種簽名裝置方框圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
實(shí)施例一本發(fā)明實(shí)施例一提供了一種簽名方法,智能密鑰設(shè)備已與上位機(jī)建立了連接,其中設(shè)置算法、解析報(bào)文和計(jì)算簽名的過程可以通過一條指令實(shí)現(xiàn),也可以通過兩條指令實(shí)現(xiàn),或者通過三條指令實(shí)現(xiàn),本實(shí)施例方法以通過一條指令實(shí)現(xiàn)為例來說明,如圖1所示,包括:步驟Al:設(shè)備上電,進(jìn)行初始化;步驟A2:當(dāng)接收到上位機(jī)下發(fā)的指令時(shí)判斷其是否為計(jì)算簽名指令,是則執(zhí)行步驟A3,否則根據(jù)接收到的指令進(jìn)行相應(yīng)操作;步驟A3:對計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對報(bào)文信息解析得到報(bào)文信息解析結(jié)果;步驟A4:判斷報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則執(zhí)行步驟A5,否則執(zhí)行步驟A12 ;步驟A5:根據(jù)計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果;本實(shí)施例中,步驟A5中根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果具體包括:根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰進(jìn)行計(jì)算,并判斷是否計(jì)算成功,是則生成第一計(jì)算結(jié)果,執(zhí)行步驟A6,否則報(bào)錯(cuò),返回步驟A2 ;在步驟A5之前還包括:步驟A5-1:判斷用戶公鑰是否有效,是則執(zhí)行步驟A5-2,否則報(bào)錯(cuò),返回步驟A2 ;步驟A5-2:判斷執(zhí)行權(quán)限是否滿足,是則步驟A5,否則報(bào)錯(cuò),返回步驟A2 ;本實(shí)施例中的步驟A5-1和步驟A5-2的執(zhí)行過程沒有先后順序;其中,判斷執(zhí)行權(quán)限是否滿足具體為:判斷PIN碼校驗(yàn)操作是否成功執(zhí)行;具體的,本實(shí)施例中的用戶公鑰是SM2公鑰;步驟A6:根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果;本實(shí)施例中的第一預(yù)設(shè)算法為SM3算法;本實(shí)施例中在步驟A6之前包括:判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;步驟A7:從報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù);步驟AS:檢測按鍵標(biāo)識的值,如為Y則執(zhí)行步驟A9,如為N則執(zhí)行步驟All ;步驟A9:輸出關(guān)鍵數(shù)據(jù),并等待用戶確認(rèn);步驟AlO:當(dāng)接收到按鍵信息時(shí),檢測按鍵信息的類型,如為確認(rèn)鍵則執(zhí)行步驟All,如為取消鍵則輸出取消信息,返回步驟A2,如為翻頁鍵則返回步驟A9 ;在本實(shí)施例中,如關(guān)鍵數(shù)據(jù)的長度大于顯示屏的顯示區(qū)域,則會分頁顯示,當(dāng)接收到翻頁鍵的按鍵信息時(shí)會顯示下一屏數(shù)據(jù);優(yōu)選的,在本實(shí)施例中的步驟A9和步驟AlO之間還包括:判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息,是則執(zhí)行步驟A10,否則報(bào)錯(cuò),返回步驟A2 ;步驟All:使用用戶私鑰對哈希結(jié)果進(jìn)行簽名,將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),返回步驟A2 ;
本實(shí)施例中,在步驟All之前還包括:判斷用戶私鑰是否有效,是則執(zhí)行步驟All,否則報(bào)錯(cuò),返回步驟A2;具體的,本實(shí)施例中的用戶私鑰為SM2私鑰;在步驟All之前還包括:判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷當(dāng)前有效簽名算法是否為第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;其中,判斷參數(shù)是否正確具體為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;在將簽名結(jié)果和成功響應(yīng)返回給上位機(jī)之前還包括:判斷簽名是否成功,是則將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),返回步驟A2,否則報(bào)錯(cuò),返回步驟A2 ;步驟A12:根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果;具體的,該步驟中的根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果包括:根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰進(jìn)行計(jì)算,并判斷是否計(jì)算成功,是則生成第一計(jì)算結(jié)果,執(zhí)行步驟A13,否則報(bào)錯(cuò),返回步驟A2 ;在步驟A12之前還包括:步驟A12-1:判斷用戶公鑰是否有效,是則執(zhí)行步驟A12-2,否則報(bào)錯(cuò),返回步驟A2 ;步驟A12-2:判斷執(zhí)行權(quán)限是否滿足,是則執(zhí)行步驟A12,否則報(bào)錯(cuò),返回步驟A2 ;本實(shí)施例中的步驟A12-1和步驟A12-2的執(zhí)行過程沒有先后順序;其中,判斷執(zhí)行權(quán)限是否滿足具體為:判斷PIN碼校驗(yàn)操作是否成功執(zhí)行;步驟A13:根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和計(jì)算簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果;本實(shí)施例中的第一預(yù)設(shè)算法為SM3算法;本實(shí)施例中在步驟A13之前包括:判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;步驟A14:根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),返回步驟A2 ;本實(shí)施例中,在步驟A14之前還包括:判斷用戶私鑰是否有效,是則執(zhí)行步驟A14,否則報(bào)錯(cuò),返回步驟A2;在步驟A14之前還包括:判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷當(dāng)前有效簽名算法是否為第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;其中,判斷參數(shù)是否正確具體為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;本實(shí)施例中,步驟A14中將簽名結(jié)果和成功響應(yīng)返回給上位機(jī)之前還包括:判斷簽名是否成功,是則將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),返回步驟A2,否則報(bào)錯(cuò),返回步驟A2。在本實(shí)施例中,在步驟A2中如接收到上位機(jī)下發(fā)的設(shè)置算法指令,則根據(jù)接收到的指令進(jìn)行相應(yīng)操作包括:步驟Cl:對接收到的設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟C2,否則報(bào)錯(cuò),返回步驟A2 ;在本實(shí)施例中,設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,當(dāng)前有效哈希算法為第ー預(yù)設(shè)算法,具體為:設(shè)置第二預(yù)設(shè)算法標(biāo)識和第一預(yù)設(shè)算法標(biāo)識;本實(shí)施例中的判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確;還包括:判斷解析得到的哈希算法標(biāo)識是否與第一預(yù)設(shè)算法匹配,是則設(shè)置第一預(yù)設(shè)算法標(biāo)識,繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷解析得到的簽名算法標(biāo)識是否與第二預(yù)設(shè)算法匹配,是則設(shè)置第二預(yù)設(shè)算法標(biāo)識,繼續(xù),否則報(bào)錯(cuò),返回步驟A2。判斷參數(shù)是否正確的具體實(shí)現(xiàn)方法可參照步驟All和步驟A14,在此不再贅述;步驟C2:保存解析得到的密鑰信息,給上位機(jī)返回成功響應(yīng),返回步驟A2 ;本實(shí)施例中的密鑰信息包括密鑰ID和密鑰用途,用戶公鑰和用戶私鑰是根據(jù)密鑰ID和密鑰用途獲取到的。實(shí)施例ニ本發(fā)明實(shí)施例ニ提供了一種簽名方法,智能密鑰設(shè)備已與上位機(jī)建立了連接,如圖2所示,包括:步驟S1:設(shè)備上電,進(jìn)行初始化;步驟S2:等待接收信息,當(dāng)接收到上位機(jī)下發(fā)的指令信息時(shí)執(zhí)行步驟S3,當(dāng)接收到按鍵信息時(shí)執(zhí)行步驟Sll ;步驟S3:檢測接收到的指令的類型,如為報(bào)文解析指令則執(zhí)行步驟S4 ;如為計(jì)算簽名指令則執(zhí)行步驟S7,如為獲取簽名結(jié)果指令則執(zhí)行步驟S12 ;如果接收到的指令是上述三種指令之外的其他指令則進(jìn)行相應(yīng)操作;步驟S4:根據(jù)報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則執(zhí)行步驟S5,如為證書下載簽名指令需求則執(zhí)行步驟S6 ;步驟S5:對交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果,并判斷報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存按鍵標(biāo)識的值,從報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存,根據(jù)交易簽名及登錄簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存,給上位機(jī)返回成功響應(yīng),返回步驟S2 ;否則報(bào)錯(cuò),返回步驟S2 ;本實(shí)施例中的按鍵標(biāo)識的值為Y或N ;在給上位機(jī)返回成功響應(yīng)的同時(shí)也可將哈希結(jié)果一起返回;本實(shí)施例中的第一預(yù)設(shè)算法為SM3算法;在步驟S5之前還包括:判斷解析條件是否合法,是則執(zhí)行步驟S5,否則報(bào)錯(cuò),返回步驟S2 ;本實(shí)施例中的判斷解析條件是否合法具體包括:
判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷執(zhí)行權(quán)限是否滿足,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷用戶公鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;其中,判斷執(zhí)行權(quán)限是否滿足具體為:判斷PIN碼校驗(yàn)操作是否成功執(zhí)行;步驟S6:根據(jù)證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將按鍵標(biāo)識置為第一預(yù)設(shè)字符,并給上位機(jī)返回成功響應(yīng),返回步驟S2 ;本實(shí)施例中的第一預(yù)設(shè)字符為N ;在給上位機(jī)返回成功響應(yīng)的同時(shí)也可將哈希結(jié)果一起返回;在步驟S6之前還包括:判斷解析條件是否合法,是則執(zhí)行步驟S6,否則報(bào)錯(cuò),返回步驟S2 ;本實(shí)施例中的判斷解析條件是否合法的實(shí)現(xiàn)方式與步驟S5中的相同,在此不再贅述;步驟S7:對接收到的計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則執(zhí)行步驟S8,否則報(bào)錯(cuò),返回步驟S2 ;判斷解析結(jié)果是否符合計(jì)算條件,具體包括:判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷當(dāng)前有效簽名算法是否為第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;其中,判斷參數(shù)是否正確的實(shí)現(xiàn)方法為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;步驟S8:判斷按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則執(zhí)行步驟S10,否則執(zhí)行步驟S9 ;步驟S9:將保存的關(guān)鍵數(shù)據(jù)輸出并等待用戶確認(rèn),給上位機(jī)返回成功響應(yīng),返回步驟S2 ;步驟SlO:根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對保存的哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),返回步驟S2 ;本實(shí)施例中將簽名結(jié)果和成功響應(yīng)返回給上位機(jī)之前還包括:判斷簽名是否成功,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;在步驟SlO之前還包括:判斷用戶私鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;步驟Sll:檢測按鍵信息的類型,如為取消鍵則輸出取消信息,返回步驟S2 ;如為翻頁鍵則輸出關(guān)鍵數(shù)據(jù),返回步驟S2;如為確認(rèn)鍵,則根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果,返回步驟S2 ;本實(shí)施例中的第二預(yù)設(shè)算法為SM2算法;根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果,具體包括:根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對保存的哈希結(jié)果進(jìn)行簽名,判斷簽名是否成功,是則保存簽名結(jié)果,返回步驟S2,否則報(bào)錯(cuò),返回步驟S2 ;
本實(shí)施例中在簽名完成后,還可以在動態(tài)令牌上輸出簽名操作完成信息;步驟S12:判斷是否存在簽名結(jié)果,是則將簽名結(jié)果返回給上位機(jī),返回步驟S2,否則報(bào)錯(cuò),返回步驟S2;本實(shí)施例提供的方法中如果在接收到按鍵信息之后緊接著接收到獲取簽名結(jié)果指令則直接將保存的簽名結(jié)果返回給上位機(jī),如果在接收到按鍵信息之后接收到其他指令則會報(bào)錯(cuò)。本實(shí)施例提供的方法在步驟S3中如檢測接收到的指令的類型為設(shè)置算法指令則執(zhí)行步驟S13 ;步驟S13:對設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟S14,否則報(bào)錯(cuò),返回步驟S2;具體的,本實(shí)施例中判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確;還可以包括:判斷解析得到的哈希算法標(biāo)識是否與第一預(yù)設(shè)算法匹配,是則設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;判斷解析得到的簽名算法標(biāo)識是否與第二預(yù)設(shè)算法匹配,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ;其中,判斷參數(shù)是否正確的實(shí)現(xiàn)方法可參照步驟S7,在此不再贅述;步驟S14:保存解析得到的密鑰信息,給上位機(jī)返回成功響應(yīng),返回步驟S2 ;本實(shí)施例中的密鑰信息包括密鑰ID和密鑰用途;本實(shí)施例中的第二預(yù)設(shè)算法標(biāo)識具體為SM2簽名算法標(biāo)識,第一預(yù)設(shè)算法標(biāo)識為SM3哈希算法標(biāo)識;本實(shí)施例中的用戶公鑰和用戶私鑰具體為SM2的公鑰和SM2私鑰,均是根據(jù)密鑰ID和密鑰用途獲取得到的。本實(shí)施例的方法還可以通過狀態(tài)機(jī)的狀態(tài)來實(shí)現(xiàn),其實(shí)現(xiàn)方案除了本實(shí)施例方法,還包括以下操作:進(jìn)行初始化包括:將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值;步驟S13之前包括:判斷狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟S13,否則報(bào)錯(cuò),返回步驟S2;步驟S14還包括:將狀態(tài)機(jī)的狀態(tài)設(shè)為第二預(yù)設(shè)值;步驟S4之前還包括:判斷狀態(tài)機(jī)的狀態(tài)是否為第二預(yù)設(shè)值,是則執(zhí)行步驟S4,否則報(bào)錯(cuò),返回步驟S2;步驟S5判斷為是時(shí)還包括將狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值,判斷為否時(shí)還包括將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值;步驟S6還包括將狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值;步驟S7之前包括:判斷狀態(tài)機(jī)的狀態(tài)是否為第三預(yù)設(shè)值,是則執(zhí)行步驟S7,否則報(bào)錯(cuò),返回步驟S2;步驟S9還包括將狀態(tài)機(jī)的狀態(tài)設(shè)為第四預(yù)設(shè)值;步驟SlO還包括將狀態(tài)機(jī)的狀態(tài)改為第一預(yù)設(shè)值;
步驟Sll之前還包括:判斷狀態(tài)機(jī)的狀態(tài)是否為第四預(yù)設(shè)值,是則執(zhí)行步驟S11,否則報(bào)錯(cuò),返回步驟S2;步驟Sll中檢測按鍵信息的類型為確認(rèn)鍵后還包括將狀態(tài)機(jī)的狀態(tài)設(shè)為第五預(yù)設(shè)值;檢測按鍵信息的類型為取消鍵后還包括將狀態(tài)機(jī)的狀態(tài)改為第一預(yù)設(shè)值;步驟S12具體包括:步驟S12-1:判斷狀態(tài)機(jī)的狀態(tài)是否為第五預(yù)設(shè)值,是則將執(zhí)行步驟S12-2,否則報(bào)錯(cuò),返回步驟S2;步驟S12-2:判斷獲取簽名結(jié)果指令是否合法,是則給上位機(jī)返回保存的簽名結(jié)果和成功響應(yīng),將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值,返回步驟S2,否則報(bào)錯(cuò),返回步驟S2 ;所述報(bào)錯(cuò)包括:輸出錯(cuò)誤信息,將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值。本實(shí)施例中第一預(yù)設(shè)值、第二預(yù)設(shè)值、第三預(yù)設(shè)值、第四預(yù)設(shè)值、第五預(yù)設(shè)值分別為0、1、2、3、4,0表示當(dāng)前操作為設(shè)置算法操作、I表示當(dāng)前操作為報(bào)文解析操作、2表示當(dāng)前操作為計(jì)算簽名操作、3表示當(dāng)前計(jì)算簽名操作需要用戶確認(rèn)才能進(jìn)行、4表示當(dāng)前操作為獲取簽名結(jié)果操作。實(shí)施例三本發(fā)明實(shí)施例三提供了一種簽名方法,智能密鑰設(shè)備已與上位機(jī)建立了連接,其中設(shè)置算法、解析報(bào)文、計(jì)算簽名和獲取簽名都通過各自不同的指令來實(shí)現(xiàn)的,如圖3-圖7所示,本實(shí)施例方法包括:步驟301:設(shè)備上電,進(jìn)行初始化;具體的,在本實(shí)施例中,設(shè)備在進(jìn)行初始化時(shí)將數(shù)據(jù)包標(biāo)識設(shè)置為1,將狀態(tài)機(jī)的狀態(tài)設(shè)置為0 ;步驟302:等待接收信息,當(dāng)接收到上位機(jī)下發(fā)的信息時(shí)執(zhí)行步驟303,當(dāng)接收到按鍵信息時(shí)執(zhí)行步驟345 ;在本實(shí)施例中,如在預(yù)設(shè)時(shí)間內(nèi)接收到按鍵信息,則從步驟302跳轉(zhuǎn)到步驟345 ;步驟303:檢測接收到的指令類型,如為設(shè)置算法指令則執(zhí)行步驟304,如為報(bào)文解析指令則執(zhí)行步驟310 ;如為計(jì)算簽名指令則執(zhí)行步驟337,如為獲取簽名結(jié)果指令則執(zhí)行步驟353 ;具體的,本實(shí)施例中根據(jù)APDU指令的指令頭不同區(qū)別接收到的指令類型,如接收到00 22 41 B6則為設(shè)置算法指令;如接收到00 2A 90 80/81/82則為報(bào)文解析指令;如接收到00 2A 9E 00則為計(jì)算簽名指令;如接收到80 38 00 00則為獲取簽名結(jié)果指令;步驟304:判斷狀態(tài)機(jī)的狀態(tài)是否為0,是則執(zhí)行步驟305,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟305:對設(shè)置算法指令進(jìn)行解析,并判斷參數(shù)是否正確,是則執(zhí)行步驟306,否則報(bào)錯(cuò),返回步驟302;本實(shí)施例中,判斷參數(shù)是否正確包括:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束;判斷算法模版長度是否為0,是則報(bào)錯(cuò),返回步驟302,否則繼續(xù);在本實(shí)施例中如卡內(nèi)文件系統(tǒng)創(chuàng)建了則表示當(dāng)前key已被生產(chǎn)過;步驟306:判斷解析得到的哈希算法標(biāo)識是否與SM3算法匹配,是則設(shè)置當(dāng)前有效哈希算法為SM3算法,執(zhí)行步驟307,否則報(bào)錯(cuò),返回步驟302 ;步驟307:判斷解析得到的簽名算法標(biāo)識是否與SM2算法匹配,是則設(shè)置當(dāng)前有效簽名算法為SM2算法,執(zhí)行步驟308,否則報(bào)錯(cuò),返回步驟302 ;步驟308:根據(jù)解析得到的密鑰ID和密鑰用途讀取密鑰信息,保存密鑰ID和密鑰用途;具體的,本實(shí)施例中的密鑰信息為密鑰描述信息,包括密鑰地址、密鑰用途、密鑰使用更新權(quán)限;步驟309:設(shè)置狀態(tài)機(jī)的狀態(tài)為I,給上位機(jī)返回成功響應(yīng),返回步驟302 ;步驟310:判斷狀態(tài)機(jī)的狀態(tài)是否為1,是則執(zhí)行步驟311,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟311:根據(jù)報(bào)文指令格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則執(zhí)行步驟312,如為證書下載簽名指令需求則執(zhí)行步驟325 ;具體的,本實(shí)施例中的證書下載簽名需求和交易簽名及登錄簽名的區(qū)別是通過COS指令中第四字節(jié)上的參數(shù)不同來區(qū)別的,如參數(shù)為80則為交易簽名及登錄簽名指令,如參數(shù)為82則為證書下載簽名指令,如參數(shù)為81則為RSA普通簽名;RSA普通簽名不在本專利保護(hù)范圍之內(nèi),故不再進(jìn)行詳述;例如,本實(shí)施例中的交易簽名指令中數(shù)據(jù)域的報(bào)文信息具體為:く?xml version="l.0" encoding="utf8" >〈Trade〉<Body><AuthRequestl234567890XAuthRequestHeadXAuthVersion>1002</AuthVers ionX/AuthRequestHeadXAuthReque s tBody><AuthName>CBANK_CRED I TCARD</AuthNameXDefaul tCardNoX/DefaultCardNoXAuthRequestDataX/AuthRequestDataX/AuthRequestBodyX/AuthRequestl234567890X/Body><SignTime>llllllll</SignTime><Padding>********〈/Padding><Flag>Y</Flag>〈Show〉帳號:9558820200009280365\r\n 金額:1.00 RMB\r\n 姓名:張三〈/Show〉〈/Trade〉例如,本實(shí)施例中的登錄簽名指令中數(shù)據(jù)域的報(bào)文信息具體為:く?xml version="l.0" encoding="utf8" >〈Trade〉<Body><AuthRequestl234567890XAuthRequestHeadXAuthVersion>1002</AuthVers ionX/AuthRequestHeadXAuthReque s tBody><AuthName>CBANK_CRED I TCARD</AuthNameXDefaul tCardNoX/DefaultCardNoXAuthRequestDataX/AuthRequestDataX/AuthRequestBodyX/AuthRequestl234567890X/Body><SignTime>llllllll</SignTime><Padding>********〈/Padding><Flag>N</Flag> 〈Show〉帳號:9558820200009280365\r\n 金額:1.00 RMB\r\n 姓名:張三〈/Show〉
〈/Trade〉步驟312:判斷當(dāng)前有效哈希算法是否為SM3算法,是則執(zhí)行步驟313,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟313:判斷接收到的指令數(shù)據(jù)包是否為第一包數(shù)據(jù),是則執(zhí)行步驟314,否則執(zhí)行步驟320 ;在本實(shí)施例中,步驟313具體為:判斷預(yù)先設(shè)置的數(shù)據(jù)包標(biāo)識是否為1,是則接收到的指令數(shù)據(jù)包為第一包數(shù)據(jù),需將數(shù)據(jù)包標(biāo)識修改為其他數(shù)據(jù),具體的本實(shí)施例中修改為2 ;步驟314:判斷執(zhí)行權(quán)限是否滿足,是則執(zhí)行步驟315,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中步驟314具體為:判斷PIN碼校驗(yàn)操作是否成功執(zhí)行,是則執(zhí)行權(quán)限滿足,否則執(zhí)行權(quán)限不滿足;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟315:根據(jù)交易簽名及登錄簽名指令的格式獲取對應(yīng)的登錄/交易用戶ID,根據(jù)密鑰信息中的密鑰地址讀取用戶公鑰;具體的,在本實(shí)施例中,在本實(shí)施例的指令之前上位機(jī)通過發(fā)送的APDU指令進(jìn)行設(shè)置登錄/交易用戶ID,登錄/交易用戶ID為16字節(jié)長的數(shù)據(jù);用戶公鑰用xA、yA表示;在本實(shí)施例中,登錄/交易用戶ID具體為1234567812345678 ;步驟316:判斷用戶公鑰是否有效,是則執(zhí)行步驟317,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,在該步驟中,判斷SM2公鑰的前三個(gè)字節(jié)數(shù)據(jù)是否均為0,是則無效,否則有效;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟317:將登錄/交易用戶ID和用戶公鑰傳送給第一底層函數(shù)進(jìn)行計(jì)算,接收并檢測第一底層函數(shù)的返回值,如返回值為正確,則獲取第一底層函數(shù)計(jì)算得到的第一計(jì)算結(jié)果,執(zhí)行步驟318,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中第一底層函數(shù)是根據(jù)登錄/交易用戶ID和用戶公鑰計(jì)算Z值的函數(shù);第一計(jì)算結(jié)果即為Z值;第一底層函數(shù)計(jì)算得到第一計(jì)算結(jié)果的過程具體為:步驟317-1:獲取系統(tǒng)曲線的第一參數(shù)、第二參數(shù)和基點(diǎn)坐標(biāo);具體的,本實(shí)施例中第一參數(shù)記為a、第二參數(shù)記為b、基點(diǎn)坐標(biāo)記為xe、yG ;步驟317-2:計(jì)算用戶ID的比特長度;本實(shí)施例中的比特長度為2個(gè)字節(jié)的數(shù)據(jù),記為ENTL ;步驟317-3:將比特長度、用戶ID、第一參數(shù)、第二參數(shù)、基點(diǎn)橫坐標(biāo)、基點(diǎn)縱坐標(biāo)、用戶公鑰橫坐標(biāo)、用戶公鑰縱坐標(biāo)順序組合,進(jìn)行運(yùn)算,得到Z值;具體的,本實(shí)施例中的得到的Z = SM3 (ENTL | | ID | a | | b | | xG | | yG | | xA | | yA);具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟318:將第一計(jì)算結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確,則獲取第二底層函數(shù)得到的中間結(jié)果并保存,執(zhí)行步驟319,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;
本實(shí)施例中,第二底層函數(shù)是調(diào)用SM3算法進(jìn)行計(jì)算的函數(shù);具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟319:對交易簽名及登錄簽名指令中的報(bào)文信息進(jìn)行解析,從解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存,將保存的中間結(jié)果和解析結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則獲取第二底層函數(shù)得到結(jié)果并用其更新保存的中間結(jié)果,給上位機(jī)返回成功響應(yīng),返回步驟302,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟320:判斷接收到的指令數(shù)據(jù)包是否為最后一包數(shù)據(jù),是則執(zhí)行步驟321,否則執(zhí)行步驟324 ;本實(shí)施例中,通過指令的頭部判斷是否為最后ー包數(shù)據(jù),如接收到的指令的頭部為00 2a則為最后一包數(shù)據(jù),如接收到的指令的頭部為10 2a則不是最后ー包數(shù)據(jù);步驟321:判斷解析結(jié)果中是否有按鍵標(biāo)識,是則保存按鍵標(biāo)識的值,執(zhí)行步驟322,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,按鍵標(biāo)識是在最后ー個(gè)數(shù)據(jù)包中解析得到的,也可以是在前幾個(gè)數(shù)據(jù)包中解析得到的;當(dāng)按鍵標(biāo)識的值為Y吋,則在接收到計(jì)算簽名指令后需先將關(guān)鍵數(shù)據(jù)輸出,只有用戶確認(rèn)后才進(jìn)行簽名操作,當(dāng)按鍵標(biāo)識的值為N時(shí),在接收到計(jì)算簽名指令后直接進(jìn)行簽名操作;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟322:對交易簽名及登錄簽名指令中的報(bào)文信息進(jìn)行解析,從解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存,將保存的中間結(jié)果和解析結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則執(zhí)行步驟323,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟323:獲取第二底層函數(shù)得到的哈希結(jié)果并保存,設(shè)置狀態(tài)機(jī)的狀態(tài)為2,并給上位機(jī)返回成功響應(yīng),返回步驟302 ;步驟324:對交易簽名及登錄簽名指令中的報(bào)文信息進(jìn)行解析并從解析結(jié)果中提取關(guān)鍵數(shù)據(jù),將保存的中間結(jié)果和解析結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則獲取第二底層函數(shù)得到結(jié)果并用其更新保存的中間結(jié)果,給上位機(jī)返回成功響應(yīng),返回步驟302,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中,對報(bào)文信息解析得到的關(guān)鍵數(shù)據(jù)進(jìn)行保存用于在步驟340中輸出;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;如本實(shí)施例中為交易簽名指令則解析得到的報(bào)文信息為:3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 636f 64 69 6e 67 3d 22 75 74 66 38 22 3f 3e Od Oa 3c 54 72 61 64 65 3e Od Oa 3c
426f 64 79 3e 3c 41 75 74 68 52 65 71 75 65 73 74 31 32 33 34 35 36 37 38 3930 3e 3c 41 75 74 68 52 65 71 75 65 73 74 48 65 61 64 3e 3c 41 75 74 68 56 65
7273 69 6f 6e 3e 31 30 30 32 3c 2f 41 75 74 68 56 65 72 73 69 6f 6e 3e 3c 2f41 75 74 68 52 65 71 75 65 73 74 48 65 61 64 3e 3c 41 75 74 68 52 65 71 75 65
7374 42 6f 64 79 3e 3c 41 75 74 68 4e 61 6d 65 3e 43 42 41 4e 4b 5f 43 52 4544 49 54 43 41 52 44 3c 2f 41 75 74 68 4e 61 6d 65 3e 3c 44 65 66 61 75 6c 74
4361 72 64 4e 6f 3e 3c 2f 44 65 66 61 75 6c 74 43 61 72 64 4e 6f 3e 3c 41 75
7468 52 65 71 75 65 73 74 44 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 75 65 7374 44 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 75 65 73 74 42 6f 64 79 3e 3c 2f
4175 74 68 52 65 71 75 65 73 74 31 32 33 34 35 36 37 38 39 30 3e 3c 2f 42 6f64 79 3e Od Oa 3c 53 69 67 6e 54 69 6d 65 3e 31 31 31 31 31 31 31 31 3c 2f 5369 67 6e 54 69 6d 65 3e Od Oa 3c 50 61 64 64 69 6e 67 3e 2a 2a 2a 2a 2a 2a 2a2a 3c 2f 50 61 64 64 69 6e 67 3e Od Oa 3c 46 6c 61 67 3e 59 3c 2f 46 6c 61 673e Od Oa 3c 53 68 6f 77 3e e5 b8 90 e5 8f b7 ef be 9a 39 35 35 38 38 32 30 3230 30 30 30 39 32 38 30 33 36 35 5c 72 5c 6e e9 87 91 e9 a2 9d ef be 9a 31 2e30 30 20 52 4d 42 5c 72 5c 6e e5 a7 93 e5 90 8d ef be 9a e5 be aO e4 b8 89 3c2f 53 68 6f 77 3e Od Oa 3c 2f 54 72 61 64 65 3e ;從交易簽名指令中報(bào)文信息的解析結(jié)果中提取出來的關(guān)鍵數(shù)據(jù)為:帳號:9558820200009280365金額:1.0O RMB姓名:張三;在步驟323 中保存的哈希結(jié)果為 1D11F667F21612416793C77D0B232B5B3CAE426D79E5A47A342196F8B82C6IED ;如本實(shí)施例中為登錄簽名指令則解析得到的報(bào)文信息為:3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 636f 64 69 6e 67 3d 22 75 74 66 38 22 3f 3e Od Oa 3c 54 72 61 64 65 3e Od Oa 3c
426f 64 79 3e 3c 41 75 74 68 52 65 71 75 65 73 74 31 32 33 34 35 36 37 38 3930 3e 3c 41 75 74 68 52 65 71 75 65 73 74 48 65 61 64 3e 3c 41 75 74 68 56 65
7273 69 6f 6e 3e 31 30 30 32 3c 2f 41 75 74 68 56 65 72 73 69 6f 6e 3e 3c 2f41 75 74 68 52 65 71 75 65 73 74 48 65 61 64 3e 3c 41 75 74 68 52 65 71 75 65
7374 42 6f 64 79 3e 3c 41 75 74 68 4e 61 6d 65 3e 43 42 41 4e 4b 5f 43 52 45
4449 54 43 41 52 44 3c 2f 41 75 74 68 4e 61 6d 65 3e 3c 44 65 66 61 75 6c 74
4361 72 64 4e 6f 3e 3c 2f 44 65 66 61 75 6c 74 43 61 72 64 4e 6f 3e 3c 41 75
7468 52 65 71 75 65 73 74 44 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 75 65 7374 44 61 74 61 3e 3c 2f 41 75 74 68 52 65 71 75 65 73 74 42 6f 64 79 3e 3c 2f41 75 74 68 52 65 71 75 65 73 74 31 32 33 34 35 36 37 38 39 30 3e 3c 2f 42 6f64 79 3e Od Oa 3c 53 69 67 6e 54 69 6d 65 3e 31 31 31 31 31 31 31 31 3c 2f 5369 67 6e 54 69 6d 65 3e Od Oa 3c 50 61 64 64 69 6e 67 3e 2a 2a 2a 2a 2a 2a 2a2a 3c 2f 50 61 64 64 69 6e 67 3e Od Oa 3c 46 6c 61 67 3e 4e 3c 2f 46 6c 61 673e Od Oa 3c 53 68 6f 77 3e e5 b8 90 e5 8f b7 ef be 9a 39 35 35 38 38 32 30 3230 30 30 30 39 32 38 30 33 36 35 5c 72 5c 6e e9 87 91 e9 a2 9d ef be 9a 31 2e30 30 20 52 4d 42 5c 72 5c 6e e5 a7 93 e5 90 8d ef be 9a e5 be aO e4 b8 89 3c2f 53 68 6f 77 3e Od Oa 3c 2f 54 72 61 64 65 3e ;在步驟323 中保存的哈希結(jié)果為 EAD7ADFC92F646E5474AF55E5E20F458E310AB4D1679CDB4BF6777BA1BF53D9B ;步驟325:判斷當(dāng)前有效哈希算法是否為SM3算法,是則執(zhí)行步驟326,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟326:判斷接收到的指令數(shù)據(jù)包是否為第一包數(shù)據(jù),是則執(zhí)行步驟327,否則執(zhí)行步驟333 ;在本實(shí)施例中,步驟326具體為:判斷預(yù)先設(shè)置的數(shù)據(jù)包標(biāo)識是否為1,是則接收到的指令數(shù)據(jù)包為第一包數(shù)據(jù),將數(shù)據(jù)包標(biāo)識修改為其他數(shù)據(jù),具體的本實(shí)施例中修改為2 ;步驟327:判斷執(zhí)行權(quán)限是否滿足,是則執(zhí)行步驟328,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中步驟327具體為:判斷PIN碼校驗(yàn)操作是否成功執(zhí)行,是則執(zhí)行權(quán)限滿足,否則執(zhí)行權(quán)限不滿足;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟328:根據(jù)證書下載簽名指令的格式獲取對應(yīng)的證書用戶ID,根據(jù)密鑰信息中的密鑰地址讀取用戶公鑰,判斷用戶公鑰是否有效,是則執(zhí)行步驟329,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,在該步驟中獲取的用戶ID為證書下載用戶ID,具體為1234567890123456 ;在本實(shí)施例的指令之前上位機(jī)通過發(fā)送的APDU指令進(jìn)行設(shè)置證書下載用戶ID,證書下載用戶ID為16字節(jié)長的數(shù)據(jù);用戶公鑰用xA、yA表示;本實(shí)施例中,該步驟的判斷用戶公鑰是否有效實(shí)現(xiàn)過程與步驟316相同,在此不再贅述;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟329:將證書用戶ID和用戶公鑰傳送給第一底層函數(shù)進(jìn)行計(jì)算,接收并檢測第一底層函數(shù)的返回值,如返回值為正確則執(zhí)行步驟330,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中的計(jì)算過程與步驟317中相同,在此不再贅述;具體的,在該步驟中報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟330:獲取第一底層函數(shù)計(jì)算得到的第一計(jì)算結(jié)果;步驟331:將第一計(jì)算結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則獲取第二底層函數(shù)得到的中間結(jié)果并保存,執(zhí)行步驟332,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中,第二底層函數(shù)是調(diào)用SM3算法進(jìn)行計(jì)算的函數(shù);具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟332:將證書下載簽名指令中的報(bào)文信息和保存的中間結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則獲取第二底層函數(shù)得到結(jié)果并用其更新保存的中間結(jié)果,給上位機(jī)返回成功響應(yīng),返回步驟302,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;
具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;例如本實(shí)施例中,證書下載簽名指令中的報(bào)文信息為:01 02 03 04 05 06 07 0809 Oa Ob Oc Od Oe Of 10 3C 54 3E 3C 44 3E 3C 4D 09 OA 3C 54 3E 3C 44 3E ;步驟333:判斷接收到的指令數(shù)據(jù)包是否為最后一包數(shù)據(jù),是則執(zhí)行步驟334,否則執(zhí)行步驟336 ;本實(shí)施例中,該步驟的判斷過程與步驟320的判斷過程相同;步驟334:將證書下載簽名指令中的報(bào)文信息和保存的中間結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則執(zhí)行步驟335,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟335:獲取第二底層函數(shù)得到的哈希結(jié)果并保存,設(shè)置按鍵標(biāo)識的值為N,并設(shè)置狀態(tài)機(jī)的狀態(tài)為2,給上位機(jī)返回成功響應(yīng),返回步驟302 ;在本實(shí)施例中,下載證書簽名指令處理過程中的哈希結(jié)果為:22771593DCEA1401C33B0DD3B5624DA6300456D60CA6B2337004A46805084013 ;步驟336:將證書下載簽名指令中的報(bào)文信息和保存的中間結(jié)果傳送給第二底層函數(shù)進(jìn)行SM3運(yùn)算,接收并檢測第二底層函數(shù)的返回值,如返回值為正確則獲取第二底層函數(shù)得到結(jié)果并用其更新保存的中間結(jié)果,給上位機(jī)返回成功響應(yīng),返回步驟302 ;如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟337:判斷狀態(tài)機(jī)的狀態(tài)是否為2,是則執(zhí)行步驟338,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟338:對計(jì)算簽名指令進(jìn)行解析,并判斷參數(shù)是否正確,是則執(zhí)行步驟339,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中,該步驟的判斷參數(shù)是否正確的方法可參考步驟305的實(shí)現(xiàn)方法;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟339:判斷當(dāng)前有效簽名算法是否為SM2算法,是則執(zhí)行步驟340,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中的簽名算法標(biāo)識是在步驟305中解析得到保存下來的; 具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟340:檢測按鍵標(biāo)識的值,如為Y則執(zhí)行步驟341,如為N則執(zhí)行步驟343 ;本實(shí)施例中的按鍵標(biāo)識的值是在步驟321中解析保存下來的或者是在步驟335中設(shè)置的;步驟341:將保存的關(guān)鍵數(shù)據(jù)通過顯示屏輸出等待用戶確認(rèn);本實(shí)施例中的關(guān)鍵數(shù)據(jù)是在步驟313-步驟324中解析得到保存下來的;具體的,本是實(shí)施例中顯示屏輸出的關(guān)鍵數(shù)據(jù)為:帳號:9558820200009280365金額:1.00 RMB姓名:張三;步驟342:將簽名標(biāo)識置位,并設(shè)置狀態(tài)機(jī)的狀態(tài)為3,打開超時(shí)定時(shí)器,給上位機(jī)返回預(yù)設(shè)響應(yīng)數(shù)據(jù),返回步驟302 ;本實(shí)施例中預(yù)設(shè)響應(yīng)數(shù)據(jù)為9001 ;步驟343:根據(jù)保存的密鑰ID和密鑰用途打開保存密鑰的文件,并從中讀取用戶私鑰,并判斷用戶私鑰是否有效,是則執(zhí)行步驟344,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中,判斷用戶私鑰前三個(gè)字節(jié)數(shù)據(jù)是否均為0,是則無效,否則有效;本實(shí)施例中的密鑰ID和密鑰用途是在步驟305中解析得到的,與步驟308中的一致;具體的,將狀態(tài)機(jī)的狀態(tài)設(shè)為0的同時(shí)將數(shù)據(jù)包標(biāo)識設(shè)為I ;步驟344:將保存的哈希結(jié)果傳送給第三底層函數(shù)進(jìn)行簽名,接收并檢測返回的返回值,如返回值為正確則獲取第三底層函數(shù)得到的簽名結(jié)果,并將簽名結(jié)果和成功響應(yīng)返回給上位機(jī),設(shè)置狀態(tài)機(jī)的狀態(tài)為0,返回步驟302,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;本實(shí)施例中第三底層函數(shù)為使用用戶私鑰進(jìn)行簽名的函數(shù);本實(shí)施例中,如狀態(tài)機(jī)的狀態(tài)為0說明本次簽名完成;本實(shí)施例中,如返回值為正確則表示簽名成功,將數(shù)據(jù)包標(biāo)識置為I ;如返回值為錯(cuò)誤則表示簽名失敗,將數(shù)據(jù)包標(biāo)識置為I ;例如,在本實(shí)施例中對登錄簽名指令處理過程中保存的哈希結(jié)果(EAD7ADFC92F646E5474AF55E5E20F458E310AB4D1679CDB4BF6777BA1BF53D9B)進(jìn)行簽名得到的簽名結(jié)果為 A8034EA77A0E7045E7DF3D9FBCEC928F2FB7030267867369CFFAAC183F9205FB3359361F81D6FB5343D1A603CB4BC6ADC436D626E65A202FBEC6A0AAA720EB21 ;例如,在本實(shí)施例中對證書下載簽名指令處理過程中保存的哈希結(jié)果(22771593DCEA1401C33B0DD3B5624DA6300456D60CA6B2337004A46805084013)進(jìn)行簽名得到的簽名結(jié)果為 70284EF196140D6EAFD7EC7BBA0087BC284F73C3C66A87848E9697D51954B389CE91589EC6050E89D6DE76D508EB74C248C3D3C423537202BE9694E7D754DC48 ;步驟345:判斷狀態(tài)機(jī)的狀態(tài)是否為3,是則執(zhí)行步驟346,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟346:根據(jù)關(guān)聯(lián)引腳電平變化監(jiān)測按鍵類型,如為翻頁鍵則通過顯示屏輸出關(guān)鍵數(shù)據(jù),返回步驟302 ;如為取消鍵則執(zhí)行步驟347,如為確認(rèn)鍵則執(zhí)行步驟348 ;步驟347:通過顯示屏輸出交易取消信息,設(shè)置狀態(tài)機(jī)的狀態(tài)為0,清除本次簽名的相關(guān)變量,返回步驟302;本實(shí)施例中的相關(guān)變量包括:數(shù)據(jù)包標(biāo)識,液晶顯示屏的顯示控制變量;步驟348:判斷簽名標(biāo)識是否置位,是則執(zhí)行步驟349,否則報(bào)錯(cuò),將狀態(tài)機(jī)狀態(tài)改為0,返回步驟302 ;步驟349:設(shè)置狀態(tài)機(jī)的狀態(tài)為4,并判斷是否設(shè)置成功,是則執(zhí)行步驟350,否則報(bào)錯(cuò),將狀態(tài)機(jī)狀態(tài)改為0,返回步驟302 ;本實(shí)施例中,狀態(tài)機(jī)的狀態(tài)為4時(shí),表示下次接收到獲取簽名結(jié)果的指令時(shí),將步驟352中保存的簽名結(jié)果返回給上位機(jī);步驟350:根據(jù)保存的密鑰ID和密鑰用途打開保存密鑰的文件,并從中讀取用戶私鑰,并判斷用戶私鑰是否有效,是則執(zhí)行步驟351,否則報(bào)錯(cuò),將狀態(tài)機(jī)狀態(tài)改為O,返回步驟302 ;具體的,本實(shí)施例中的用戶公鑰和用戶私鑰分別為SM2公鑰和SM2私鑰;本實(shí)施例中的判斷過程與步驟343相同;步驟351:將保存的哈希結(jié)果傳送給第三底層函數(shù)進(jìn)行簽名,接收并檢測返回的返回值,如返回值為正確則執(zhí)行步驟352,如返回值為錯(cuò)誤則報(bào)錯(cuò),將狀態(tài)機(jī)狀態(tài)改為0,返回步驟302 ;具體的,本實(shí)施例中,該步驟中對交易簽名指令處理過程中保存的哈希結(jié)果(1D11F667F21612416793C77D0B232B5B3CAE426D79E5A47A342196F8B82C61ED)進(jìn)行簽名得到的簽名結(jié)果為:CF6CE03F72A0CD704DDCEA7AC987A53882C1B9D5214ADFB052174F07CDD5D0383655A8D94E412380A5A5025DCD70EF63C58B2BB6D43166CE737AA68F4EF65C0A ;步驟352:獲取簽名結(jié)果并保存,通過顯示屏輸出簽名操作完成信息,返回步驟302 ;本實(shí)施例中步驟347還可以在步驟346之后的任意時(shí)刻執(zhí)行;如在步驟348與步驟349之間,或步驟349與步驟350之間,或步驟350之后執(zhí)行。步驟353:判斷狀態(tài)機(jī)的狀態(tài)是否為4,是則執(zhí)行步驟354,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;步驟354:判斷接收到的獲取簽名結(jié)果指令是否合法,是則執(zhí)行步驟355,否則報(bào)錯(cuò),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302 ;具體的,在本實(shí)施例中,如接收到的獲取簽名結(jié)果指令為80 38 00 00 00 02 00,
則表示該指令合法;步驟355:將保存的簽名結(jié)果和成功響應(yīng)返回給上位機(jī),將狀態(tài)機(jī)的狀態(tài)設(shè)為0,返回步驟302。本實(shí)施例中的方法的實(shí)現(xiàn)過程中,將設(shè)置算法、解析報(bào)文和進(jìn)行簽名通過三條指令來實(shí)現(xiàn),在設(shè)置算法過程中將相應(yīng)的SM2密鑰信息獲取到。在報(bào)文解析過程中,通過cos指令第四字節(jié)上的數(shù)據(jù)區(qū)分證書下載簽名指令需求和交易簽名及登錄簽名指令需求,如第四字節(jié)數(shù)據(jù)為80則表示進(jìn)行交易簽名及登錄簽名需求,對報(bào)文進(jìn)行解析并對解析結(jié)果進(jìn)行SM3運(yùn)算;如第四字節(jié)數(shù)據(jù)為82則表示進(jìn)行證書下載簽名需求,對接收到的報(bào)文直接進(jìn)行SM3運(yùn)算;而在交易簽名及登錄簽名的報(bào)文解析過程,根據(jù)報(bào)文的格式將交易簽名和登錄簽名區(qū)別開來,如果報(bào)文中存在<Flag>Y〈/Flag>,則表示是交易簽名,后續(xù)簽名過程需要按鍵確認(rèn),如果報(bào)文中存在<Flag>N〈/Flag>,則表示是登錄簽名,后續(xù)簽名過程無需按鍵確認(rèn),并設(shè)置一個(gè)標(biāo)識如flag來表示是否需要按鍵。不管是哪種簽名需求,只要cos解析到是第一包數(shù)據(jù)(數(shù)據(jù)包標(biāo)識為1),則首先會計(jì)算Z值(用戶ID是提前用另外一條cos指令設(shè)置的),并對Z值進(jìn)行SM3運(yùn)算,然后再對傳入的數(shù)據(jù)繼續(xù)進(jìn)行SM3運(yùn)算,直到最后ー包數(shù)據(jù)(前兩個(gè)字節(jié)為00 2a),將最后得到的SM3哈希結(jié)果保存并返回(證書下載簽名需將flag設(shè)置為無需按鍵)。在簽名過程中,根據(jù)是否需要按鍵標(biāo)識來區(qū)分是否需要按鍵,如果無需按鍵,則將保存的SM3哈希結(jié)果進(jìn)行SM2簽名運(yùn)算,并直接返回簽名結(jié)果。如果需要按鍵,則顯示屏顯示交易內(nèi)容,并等待按鍵,在接收到按鍵確認(rèn)后,才真正進(jìn)行簽名操作,有效防止騙簽。實(shí)施例四
本發(fā)明實(shí)施例四提供了一種簽名裝置,如圖8所示,包括:接收模塊401,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息;第一判斷模塊402,用于判斷接收模塊401接收到的指令是否為計(jì)算簽名指令;第一解析模塊403,用于當(dāng)?shù)谝慌袛嗄K402判斷為是時(shí)對計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對報(bào)文信息解析得到報(bào)文信息解析結(jié)果;第二判斷模塊404,用于判斷報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識;第一獲取計(jì)算模塊405,用于當(dāng)?shù)诙袛嗄K404判斷為是時(shí)根據(jù)計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果;提取模塊406,用于從報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù);第一檢測模塊407,用于檢測按鍵標(biāo)識的值;輸出模塊408,用于輸出關(guān)鍵數(shù)據(jù),還用于輸出提不信息;本實(shí)施例中的提示信息包括取消信息、錯(cuò)誤信息等;第二檢測模塊409,用于當(dāng)接收模塊401接收到按鍵信息時(shí),檢測按鍵信息的類型;本實(shí)施例中的第二檢測模塊還用于判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息;簽名模塊410,用于當(dāng)?shù)谝粰z測模塊407檢測為第一預(yù)設(shè)字符或第二檢測模塊409檢測為確認(rèn)鍵時(shí)根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對哈希結(jié)果進(jìn)行簽名;第二獲取計(jì)算模塊411,用于當(dāng)?shù)诙袛嗄K404判斷為否時(shí)根據(jù)計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對哈希結(jié)果進(jìn)行簽名;發(fā)送模塊412,用于向上位機(jī)返回響應(yīng)和簽名得到的簽名結(jié)果;本實(shí)施例中的響應(yīng)包括成功響應(yīng)、取消響應(yīng)、錯(cuò)誤響應(yīng)等。本發(fā)明實(shí)施例中的接收模塊401還可以接收到設(shè)置算法指令,則該裝置還包括:第二解析模塊,用于對接收模塊401接收到的設(shè)置算法指令進(jìn)行解析;第三判斷模塊,用于判斷第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求;本實(shí)施例中的第三判斷模塊具體用于判斷參數(shù)是否正確,具體為:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建;判斷解析得到的算法信息是否合法。設(shè)置模塊,用于當(dāng)?shù)谌袛嗄K判斷為是時(shí)設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法;保存模塊,用于保存第二解析模塊解析得到的密鑰信息。本實(shí)施例中的裝置還包括獲取模塊,用于根據(jù)密鑰信息獲取用戶私鑰和用戶公鑰。本實(shí)施例中的裝置還包括:第四判斷模塊,用于判斷參數(shù)是否正確;本實(shí)施例中的第四判斷模塊與第三判斷模塊的功能的具體實(shí)現(xiàn)過程相同;第五判斷模塊,用于判斷當(dāng)前有效簽名算法是否為第二預(yù)設(shè)算法。還包括:第六判斷模塊,用于判斷用戶私鑰是否有效;
本實(shí)施例中的裝置還可以包括:第七判斷模塊,用于判斷用戶公鑰是否有效;用于判斷執(zhí)行權(quán)限是否滿足;第八判斷模塊,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法。還包括第九判斷模塊,用于判斷簽名是否成功,如成功則該裝置通過發(fā)送模塊412將簽名結(jié)果返回給上位機(jī)。本實(shí)施例的裝置根據(jù)報(bào)文中是否有按鍵標(biāo)識和按鍵標(biāo)識的不同值區(qū)分簽名需求,不同的簽名需求根據(jù)不同的用戶ID來計(jì)算第一計(jì)算結(jié)果值,從而達(dá)到防止騙簽的目的。實(shí)施例五本發(fā)明實(shí)施例五提供了一種簽名裝置,如圖9所示,包括:接收模塊501,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息;第一檢測模塊502,用于當(dāng)接收模塊501接收到上位機(jī)下發(fā)的指令信息時(shí)檢測接收到的指令的類型,如為報(bào)文解析指令則觸發(fā)第二檢測模塊503工作;如為計(jì)算簽名指令則觸發(fā)解析判斷模塊509工作,如為獲取簽名結(jié)果指令則觸發(fā)第三判斷模塊515工作;第二檢測模塊503,根據(jù)報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則第一解析模塊504工作,如為證書下載簽名指令需求則第二獲取計(jì)算模塊508工作;第一解析模塊504,用于對交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果;第一判斷模塊505,用于判斷報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存提取模塊506工作;保存提取模塊506,用于保存按鍵標(biāo)識的值,從報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存;第一獲取計(jì)算模塊507,用于根據(jù)交易簽名及登錄簽名指令的格式獲取對應(yīng)的第ー預(yù)設(shè)用戶ID,根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存;第二獲取計(jì)算模塊508,用于根據(jù)證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對第一計(jì)算結(jié)果和證書下載簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將按鍵標(biāo)識的值置為第一預(yù)設(shè)字符;解析判斷模塊509,用于對計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則第二判斷模塊510工作;具體的,本實(shí)施例中的解析判斷模塊509包括:解析単元,用于對計(jì)算簽名指令進(jìn)行解析;第一判斷単元,用于判斷參數(shù)是否正確;第二判斷単元,用于判斷當(dāng)前有效簽名算法是否為第二預(yù)設(shè)算法;第二判斷模塊510,用于判斷按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則簽名模塊512工作,否則輸出模塊511工作;輸出模塊511,用于輸出保存的關(guān)鍵數(shù)據(jù),還用于輸出提示信息;簽名模塊512,用于根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對保存的哈希結(jié)果進(jìn)行簽名;第二檢測模塊513,用于當(dāng)接收模塊501接收到按鍵信息時(shí)檢測按鍵信息的類型,如為確認(rèn)鍵則簽名保存模塊514工作;簽名保存模塊514,用于根據(jù)第二預(yù)設(shè)算法使用私鑰對保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果;第三判斷模塊515,用于判斷是否存在簽名結(jié)果,是則發(fā)送模塊516將保存的簽名結(jié)果返回給上位機(jī);發(fā)送模塊516,用于向上位機(jī)返回響應(yīng)和簽名結(jié)果;本實(shí)施例中的發(fā)送模塊516還用于將哈希結(jié)果返回給上位機(jī)。本實(shí)施例中的裝置還包括:第二解析模塊,用于當(dāng)?shù)谝粰z測模塊502檢測為設(shè)置算法指令時(shí)對設(shè)置算法指令進(jìn)行解析;第四判斷模塊,用于判斷第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置模塊工作;具體的,本實(shí)施例中,第四判斷模塊具體用于判斷參數(shù)是否正確,具體包括:判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建;判斷解析得到的算法信息是否合法;設(shè)置模塊,用于設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法;保存模塊,用于保存第二解析模塊解析得到的密鑰信息。該裝置還可以包括獲取模塊,用于根據(jù)密鑰信息獲取得到用戶公鑰和用戶私鑰。如本裝置簽名是通過狀態(tài)機(jī)的方案來實(shí)現(xiàn),則該裝置還包括:設(shè)置狀態(tài)模塊:用于將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值或第二預(yù)設(shè)值或第三預(yù)設(shè)值或第四預(yù)設(shè)值或第五預(yù)設(shè)值;第五判斷模塊,用于判斷狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值、判斷狀態(tài)機(jī)的狀態(tài)是否為第ニ預(yù)設(shè)值、判斷狀態(tài)機(jī)的狀態(tài)是否為第三預(yù)設(shè)值、判斷狀態(tài)機(jī)的狀態(tài)是否為第四預(yù)設(shè)值、判斷狀態(tài)機(jī)的狀態(tài)是否為第五預(yù)設(shè)值;第三判斷模塊還用于判斷獲取簽名結(jié)果指令是否合法。還包括第六判斷模塊,用于判斷解析條件是否合法,是則第一解析模塊504工作,第六判斷模塊具體包括:第五判斷単元,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法;第六判斷単元,用于判斷執(zhí)行權(quán)限是否滿足;第七判斷単元,用于判斷用戶公鑰是否有效。本實(shí)施例中的裝置還可以包括第七判斷模塊,用于在進(jìn)行簽名后判斷簽名是否成功。本實(shí)施例的裝置根據(jù)報(bào)文格式的不同區(qū)分簽名需求,不同的簽名需求根據(jù)不同的用戶ID來計(jì)算第一計(jì)算結(jié)果值,從而達(dá)到防止騙簽的目的。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種簽名方法,其特征在于,包括: 步驟Al:設(shè)備上電,進(jìn)行初始化; 步驟A2:當(dāng)接收到上位機(jī)下發(fā)的指令時(shí)判斷其是否為計(jì)算簽名指令,是則執(zhí)行步驟A3,否則根據(jù)接收到的指令進(jìn)行相應(yīng)操作; 步驟A3:對所述計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對所述報(bào)文信息解析得到報(bào)文信息解析結(jié)果; 步驟A4:判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則執(zhí)行步驟A5,否則執(zhí)行步驟AlO ; 步驟A5:根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù); 步驟A6:檢測所述按鍵標(biāo)識的值,如為第二預(yù)設(shè)字符則執(zhí)行步驟A7,如為第一預(yù)設(shè)字符則執(zhí)行步驟A9; 步驟A7:輸出所述關(guān)鍵數(shù)據(jù),并等待用戶確認(rèn); 步驟AS:當(dāng)接收到按鍵信息時(shí),檢測所述按鍵信息的類型,如為確認(rèn)鍵則根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2,如為取消鍵則輸出取消信息,返回步驟A2,如為翻頁鍵則返回步驟A7 ; 步驟A9:使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2 ; 步驟AlO:根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟A2。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟A2中如接收到上位機(jī)下發(fā)的設(shè)置算法指令,則根據(jù)接收到的指令進(jìn)行相應(yīng)操作包括: 步驟Cl:對接收到的所述設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟C2,否則報(bào)錯(cuò),返回步驟A2 ; 步驟C2:保存解析得到的密鑰信息,給所述上位機(jī)返回成功響應(yīng),返回步驟A2。
3.如權(quán)利要求2所述的方法,其特征在于,所述用戶公鑰和用戶私鑰是根據(jù)所述密鑰信息獲取得到的。
4.如權(quán)利要求3所述的方法,其特征在于,所述判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確。
5.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之前包括: 判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ; 判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。
6.如權(quán)利要求5所述的方法,其特征在于,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之前還包括:判斷所述用戶私鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。
7.如權(quán)利要求4或5所述的方法,其特征在于,所述判斷參數(shù)是否正確具體為: 判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束; 判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
8.如權(quán)利要求1所述的方法,其特征在于,所述生成第一計(jì)算結(jié)果之前包括:判斷所述用戶公鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2 ;判斷執(zhí)行權(quán)限是否滿足,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2; 所述根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果之前包括:判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。
9.如權(quán)利要求1所述的方法,其特征在于,在所述步驟A7和步驟AS之間,包括:判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息,是則執(zhí)行步驟AS,否則報(bào)錯(cuò),返回步驟A2。
10.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名與所述將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī)之間包括:判斷簽名是否成功,是則繼續(xù),否則報(bào)錯(cuò),返回步驟A2。
11.一種簽名方法,其特征在于,包括: 步驟S1:設(shè)備上電,進(jìn)行初始化; 步驟S2:等待接收信息,當(dāng)接收`到上位機(jī)下發(fā)的指令信息時(shí)執(zhí)行步驟S3,當(dāng)接收到按鍵信息時(shí)執(zhí)行步驟Sll ; 步驟S3:檢測接收到的所述指令的類型,如為報(bào)文解析指令則執(zhí)行步驟S4 ;如為計(jì)算簽名指令則執(zhí)行步驟S7,如為獲取簽名結(jié)果指令則執(zhí)行步驟S12,如為其他指令則進(jìn)行相應(yīng)操作; 步驟S4:根據(jù)所述報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則執(zhí)行步驟S5,如為證書下載簽名指令需求則執(zhí)行步驟S6 ; 步驟S5:對所述交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果,并判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存所述按鍵標(biāo)識的值,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存,根據(jù)所述交易簽名及登錄簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第ー預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存,給所述上位機(jī)返回成功響應(yīng),返回步驟S2 ;否則報(bào)錯(cuò),返回步驟S2 ; 步驟S6:根據(jù)所述證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第ニ預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述證書下載簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將所述按鍵標(biāo)識的值置為第一預(yù)設(shè)字符,并給所述上位機(jī)返回成功響應(yīng),返回步驟S2 ; 步驟S7:對所述計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則執(zhí)行步驟S8,否則報(bào)錯(cuò),返回步驟S2 ; 步驟S8:判斷所述按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則執(zhí)行步驟S10,否則執(zhí)行步驟S9 ; 步驟S9:將所述保存的關(guān)鍵數(shù)據(jù)輸出并等待用戶確認(rèn),給上位機(jī)返回成功響應(yīng),返回步驟S2 ; 步驟SlO:根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名,并將簽名結(jié)果和成功響應(yīng)返回給所述上位機(jī),返回步驟S2 ; 步驟Sll:檢測所述按鍵信息的類型,如為取消鍵則輸出取消信息,返回步驟S2 ;如為翻頁鍵則輸出所述關(guān)鍵數(shù)據(jù),返回步驟S2 ;如為確認(rèn)鍵,則根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果,返回步驟S2 ; 步驟S12:判斷是否存在所述簽名結(jié)果,是則將所述簽名結(jié)果返回給上位機(jī),返回步驟S2,否則報(bào)錯(cuò),返回步驟S2。
12.如權(quán)利要求11所述的方法,其特征在于,在所述步驟S3中如檢測接收到的指令的類型為設(shè)置算法指令則執(zhí) 行步驟S13 ; 步驟S13:對所述設(shè)置算法指令進(jìn)行解析,并判斷解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法,執(zhí)行步驟S14,否則報(bào)錯(cuò),返回步驟S2 ; 步驟S14:保存解析得到的密鑰信息,給所述上位機(jī)返回成功響應(yīng),返回步驟S2。
13.如權(quán)利要求12所述的方法,其特征在于,所述用戶公鑰和所述用戶私鑰是根據(jù)所述密鑰信息獲取得到的。
14.如權(quán)利要求13所述的方法,其特征在于,所述判斷解析結(jié)果是否符合預(yù)設(shè)要求包括:判斷參數(shù)是否正確。
15.如權(quán)利要求12所述的方法,其特征在于,所述進(jìn)行初始化包括:將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值; 所述步驟S13之前包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值,是則執(zhí)行步驟S13,否則報(bào)錯(cuò),返回步驟S2; 所述步驟S14還包括:將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第二預(yù)設(shè)值; 所述步驟S4之前還包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第二預(yù)設(shè)值,是則執(zhí)行步驟S4,否則報(bào)錯(cuò),返回步驟S2; 所述步驟S5判斷為是時(shí)還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值,判斷為否時(shí)還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值; 所述步驟S6還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第三預(yù)設(shè)值; 所述步驟S7之前包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第三預(yù)設(shè)值,是則執(zhí)行步驟S7,否則報(bào)錯(cuò),返回步驟S2; 所述步驟S9還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第四預(yù)設(shè)值; 所述步驟SlO還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值; 所述步驟Sll之前還包括:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第四預(yù)設(shè)值,是則執(zhí)行步驟S11,否則報(bào)錯(cuò),返回步驟S2 ; 所述步驟Sll中檢測按鍵信息的類型為確認(rèn)鍵后還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為第五預(yù)設(shè)值;檢測按鍵信息的類型為取消鍵后還包括將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值; 所述步驟S12具體包括: 步驟S12-1:判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第五預(yù)設(shè)值,是則執(zhí)行步驟S12-2,否則報(bào)錯(cuò),返回步驟S2; 步驟S12-2:判斷所述獲取簽名結(jié)果指令是否合法,是則將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值,將所述簽名結(jié)果返回給上位機(jī),返回步驟S2,否則報(bào)錯(cuò),返回步驟S2 ; 所述報(bào)錯(cuò)包括:輸出錯(cuò)誤信息,將所述狀態(tài)機(jī)的狀態(tài)設(shè)為所述第一預(yù)設(shè)值。
16.如權(quán)利要求11所述的方法,其特征在于,所述步驟S7中判斷解析結(jié)果是否符合計(jì)算條件,具體包括: 判斷參數(shù)是否正確,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ; 判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
17.如權(quán)利要求14或16所述的方法,其特征在于,所述判斷參數(shù)是否正確具體為: 判斷卡內(nèi)文件系統(tǒng)是否創(chuàng)建,是則繼續(xù),否則報(bào)錯(cuò),結(jié)束; 判斷解析得到的算法信息是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
18.如權(quán)利要求11所述的方法,其特征在于,在所述步驟S5和步驟S6中給所述上位機(jī)返回成功響應(yīng)的同時(shí)將所述哈希結(jié)果一起返回給所述上位機(jī)。
19.如權(quán)利要求14所述的方法,其特征在干,在所述步驟S5和所述步驟S6之前還包括:判斷解析條件是否合法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
20.如權(quán)利要求19所述的方法,其特征在于,所述判斷解析條件是否合法具體包括: 判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ; 判斷執(zhí)行權(quán)限是否滿足, 是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2 ; 判斷所述用戶公鑰是否有效,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
21.如權(quán)利要求11所述的方法,其特征在于,所述根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述哈希結(jié)果進(jìn)行簽名之后包括:判斷簽名是否成功,是則繼續(xù),否則報(bào)錯(cuò),返回步驟S2。
22.—種簽名裝置,其特征在于,包括: 接收模塊,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息; 第一判斷模塊,用于判斷所述接收模塊接收到的指令是否為計(jì)算簽名指令; 第一解析模塊,用于當(dāng)所述第一判斷模塊判斷為是時(shí)對所述計(jì)算簽名指令進(jìn)行解析得到報(bào)文信息,對所述報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果; 第二判斷模塊,用于判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識; 第一獲取計(jì)算模塊,用于當(dāng)所述第二判斷模塊判斷為是時(shí)根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果; 提取模塊,用于從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù); 第一檢測模塊,用于檢測所述按鍵標(biāo)識的值; 輸出模塊,用于輸出所述關(guān)鍵數(shù)據(jù),還用于輸出提示信息; 第二檢測模塊,用于當(dāng)接收模塊接收到按鍵信息時(shí),檢測所述按鍵信息的類型; 簽名模塊,用于當(dāng)所述第一檢測模塊檢測為第一預(yù)設(shè)字符或所述第二檢測模塊檢測為確認(rèn)鍵時(shí)根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名; 第二獲取計(jì)算模塊,用于當(dāng)所述第二判斷模塊判斷為否時(shí)根據(jù)所述計(jì)算簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述哈希結(jié)果進(jìn)行簽名; 發(fā)送模塊,用于向所述上位機(jī)返回響應(yīng)和簽名得到的簽名結(jié)果。
23.如權(quán)利要求22所述的裝置,其特征在于,還包括: 第二解析模塊,用于對所述接收模塊接收到的設(shè)置算法指令進(jìn)行解析; 第三判斷模塊,用于判斷所述第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求; 設(shè)置模塊,用于當(dāng)所述第三判斷模塊判斷為是時(shí)設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法; 保存模塊,用于保存所述第二解析模塊解析得到的密鑰信息。
24.如權(quán)利要求23所述的裝置,其特征在于,還包括獲取模塊,用于根據(jù)所述密鑰信息獲取得到所述用戶公鑰和用戶私鑰。
25.如權(quán)利要求24所述的裝置,其特征在于,所述第三判斷模塊具體用于判斷參數(shù)是否正確。
26.如權(quán)利要求22所述的裝置,其特征在于,還包括: 第四判斷模塊,用于判斷參數(shù)是否正確; 第五判斷模塊,用于判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法。
27.如權(quán)利要求26所述的裝置,其特征在于,還包括第六判斷模塊,用于判斷所述用戶私鑰是否有效。
28.如權(quán)利要求22所述的裝置,其特征在于,還包括: 第七判斷模塊,用于判斷所述用戶公鑰是否有效;用于判斷執(zhí)行權(quán)限是否滿足; 第八判斷模塊,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法。
29.如權(quán)利要求22所述的裝置,其特征在于,所述第二檢測模塊還用于判斷在預(yù)設(shè)時(shí)間內(nèi)是否接收到按鍵信息。
30.如權(quán)利要求22所述的裝置,其特征在于,還包括第九判斷模塊,用于判斷簽名是否成功。
31.一種簽名裝置,其特征在于,包括: 接收模塊,用于接收上位機(jī)下發(fā)的指令和用戶的按鍵信息; 第一檢測模塊,用于當(dāng)所述接收模塊接收到上位機(jī)下發(fā)的指令信息時(shí)檢測接收到的所述指令的類型,如為報(bào)文解析指令則觸發(fā)第二檢測模塊工作;如為計(jì)算簽名指令則觸發(fā)解析判斷模塊工作,如為獲取簽名結(jié)果指令則觸發(fā)第三判斷模塊工作; 所述第二檢測模塊,根據(jù)所述報(bào)文解析指令的格式檢測簽名需求,如為交易簽名及登錄簽名指令需求則第一解析模塊工作,如為證書下載簽名指令需求則第二獲取計(jì)算模塊エ作; 所述第一解析模塊,用于對所述交易簽名及登錄簽名指令的報(bào)文信息進(jìn)行解析得到報(bào)文信息解析結(jié)果; 第一判斷模塊,用于判斷所述報(bào)文信息解析結(jié)果中是否有按鍵標(biāo)識,是則保存提取模塊工作; 所述保存提取模塊,用于保存所述按鍵標(biāo)識的值,從所述報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù)并保存;第一獲取計(jì)算模塊,用于根據(jù)所述交易簽名及登錄簽名指令的格式獲取對應(yīng)的第一預(yù)設(shè)用戶ID,根據(jù)所述第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述報(bào)文信息解析結(jié)果進(jìn)行計(jì)算得到哈希結(jié)果并保存; 所述第二獲取計(jì)算模塊,用于根據(jù)所述證書下載簽名指令的格式獲取對應(yīng)的第二預(yù)設(shè)用戶ID,根據(jù)所述第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,根據(jù)第一預(yù)設(shè)算法對所述第一計(jì)算結(jié)果和所述證書下載簽名指令中的報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果并保存,將所述按鍵標(biāo)識的值置為第一預(yù)設(shè)字符; 所述解析判斷模塊,用于對所述計(jì)算簽名指令進(jìn)行解析,并判斷解析結(jié)果是否符合計(jì)算條件,是則第二判斷模塊工作; 所述第二判斷模塊,用于判斷所述按鍵標(biāo)識的值是否為第一預(yù)設(shè)字符,是則簽名模塊工作,否則輸出模塊工作; 所述輸出模塊,用于輸出所述保存的關(guān)鍵數(shù)據(jù),還用于輸出提示信息; 所述簽名模塊,用于根據(jù)第二預(yù)設(shè)算法使用用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名; 第二檢測模塊,用于當(dāng)所述接收模塊接收到按鍵信息時(shí)檢測所述按鍵信息的類型,如為確認(rèn)鍵,則簽名保存模塊工作; 所述簽名保存模塊,用于根據(jù)第二預(yù)設(shè)算法使用所述用戶私鑰對所述保存的哈希結(jié)果進(jìn)行簽名并保存簽名結(jié)果; 所述第三判斷模塊,用于判斷是否存在所述簽名結(jié)果,是則發(fā)送模塊將所述保存的簽名結(jié)果返回給所述上位機(jī); 所述發(fā)送模塊,用于向所述上位機(jī)返回響應(yīng)和所述簽名結(jié)果。
32.如權(quán)利要求31所述的裝置,其特征在于,還包括: 第二解析模塊,用于當(dāng)所述第一檢測模塊檢測為設(shè)置算法指令時(shí)對所述設(shè)置算法指令進(jìn)行解析; 第四判斷模塊,用于判斷所述第二解析模塊的解析結(jié)果是否符合預(yù)設(shè)要求,是則設(shè)置模塊工作; 所述設(shè)置模塊,用于設(shè)置當(dāng)前有效簽名算法為第二預(yù)設(shè)算法,設(shè)置當(dāng)前有效哈希算法為第一預(yù)設(shè)算法; 保存模塊,用于保存所述第二解析模塊解析得到的所述密鑰信息。
33.如權(quán)利要求32所述的裝置,其特征在于,還包括獲取模塊,用于根據(jù)所述密鑰信息獲取得到所述用戶公鑰和所述用戶私鑰。
34.如權(quán)利要求33所述的裝置,其特征在于,所述第四判斷模塊具體用于判斷參數(shù)是否正確。
35.如權(quán)利要求32所述的裝置,其特征在于,還包括: 設(shè)置狀態(tài)模塊:用于將狀態(tài)機(jī)的狀態(tài)設(shè)為第一預(yù)設(shè)值或第二預(yù)設(shè)值或第三預(yù)設(shè)值或第四預(yù)設(shè)值或第五預(yù)設(shè)值; 第五判斷模塊,用于判斷所述狀態(tài)機(jī)的狀態(tài)是否為第一預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第二預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第三預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第四預(yù)設(shè)值、判斷所述狀態(tài)機(jī)的狀態(tài)是否為所述第五預(yù)設(shè)值;所述第三判斷模塊還用于判斷所述獲取簽名結(jié)果指令是否合法。
36.如權(quán)利要求34所述的裝置,其特征在于,所述解析判斷模塊包括: 解析単元,用于對所述計(jì)算簽名指令進(jìn)行解析; 第一判斷単元,用于判斷參數(shù)是否正確; 第二判斷単元,用于判斷當(dāng)前有效簽名算法是否為所述第二預(yù)設(shè)算法。
37.如權(quán)利要求31所述的裝置,其特征在于,所述發(fā)送模塊還用于將所述哈希結(jié)果返回給所述上位機(jī)。
38.如權(quán)利要求34所述的裝置,其特征在于,還包括第六判斷模塊,用于判斷解析條件是否合法,是則所述第一解析模塊工作。
39.如權(quán)利要求38所述的裝置,其特征在于,所述第六判斷模塊包括: 第五判斷単元,用于判斷當(dāng)前有效哈希算法是否為第一預(yù)設(shè)算法; 第六判斷単元,用于判斷執(zhí)行權(quán)限是否滿足; 第七判斷単元,用于判斷所述用戶公鑰是否有效 。
40.如權(quán)利要求31所述的裝置,其特征在于,還包括第七判斷模塊,用于判斷簽名是否成功。
全文摘要
本發(fā)明公開一種簽名方法及裝置,該方法包括對計(jì)算簽名指令中的報(bào)文信息進(jìn)行解析;如解析結(jié)果中有按鍵標(biāo)識,則根據(jù)第一預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,對第一計(jì)算結(jié)果和報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,從報(bào)文信息解析結(jié)果中提取關(guān)鍵數(shù)據(jù);當(dāng)按鍵標(biāo)識的值為第一預(yù)設(shè)字符時(shí)用用戶私鑰對哈希結(jié)果進(jìn)行簽名;當(dāng)按鍵標(biāo)識的值為第二預(yù)設(shè)字符時(shí)輸出關(guān)鍵數(shù)據(jù),在用戶確認(rèn)后再進(jìn)行簽名;如解析結(jié)果中無按鍵標(biāo)識,則根據(jù)第二預(yù)設(shè)用戶ID和用戶公鑰生成第一計(jì)算結(jié)果,對第一計(jì)算結(jié)果和報(bào)文信息進(jìn)行計(jì)算得到哈希結(jié)果,用用戶私鑰對哈希結(jié)果進(jìn)行簽名。本發(fā)明中不同的簽名需求根據(jù)不同的用戶ID來計(jì)算第一計(jì)算結(jié)果,從而達(dá)到防止騙簽的目的。
文檔編號G06F21/33GK103138937SQ20131006295
公開日2013年6月5日 申請日期2013年2月28日 優(yōu)先權(quán)日2013年2月28日
發(fā)明者陸舟, 于華章 申請人:飛天誠信科技股份有限公司