專利名稱:一種簽名的實現(xiàn)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于信息安全領(lǐng)域,尤其涉及一種簽名的實現(xiàn)方法和裝置。
背景技術(shù):
目前,隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,信息安全性已成為亟待解決的問題。公鑰密碼體制中,解密和加密過程使用的密鑰不同,解密和加密可分離,通信雙方無須事先交換密鑰就可建立起保密通信,較好地解決了傳統(tǒng)密碼體制在網(wǎng)絡(luò)通信中出現(xiàn)的問題。另外,隨著電子商務(wù)的發(fā)展,網(wǎng)絡(luò)上資金的電子交易日益頻繁,如何防止信息的偽造和欺騙也成為非常重要的問題。數(shù)字簽名可以起到身份認(rèn)證,核準(zhǔn)數(shù)據(jù)完整性的作用。目前關(guān)于數(shù)字簽名的研究主要集中基于公鑰密碼體制的數(shù)字簽名。公鑰密碼體制的特點是為每個用戶產(chǎn)生一對密鑰即公鑰和私鑰;公鑰是公開的,私鑰是保密的;但是從公鑰推出私鑰是很困難的;A、B雙方通信時,A通過任何途徑取得B的公鑰,用B的公鑰加密信息。加密后的信息可通過任何不安全信道發(fā)送。B收到密文信息后,用自己私鑰解密恢復(fù)出明文。但是,目前公鑰體制簽名存在運算量較大,占用內(nèi)存空間較高,并且可識別性不高的缺點。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明提供了一種簽名的實現(xiàn)方法和裝置,以解決目前公鑰體制簽名的所存在運算量比較大,占用內(nèi)存空間較高,并且可識別性不高的缺點。本發(fā)明提供一種簽名的實現(xiàn)方法,包括步驟A 接收主機發(fā)送的簽名請求指令,并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;步驟B:判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,是則執(zhí)行步驟 C,否則判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符,是則執(zhí)行步驟E,如果所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串和第二預(yù)設(shè)字符串都不相符,則給主機返回錯誤提示 fn息;步驟C 根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù);步驟D 根據(jù)所述簽名標(biāo)識對應(yīng)的算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù),順序執(zhí)行步驟G ;步驟E 檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符,是則執(zhí)行步驟F,否則給主機返回錯誤提示信息;步驟F:根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù),順序執(zhí)行步驟 G ;步驟G 對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果,并將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。
其中,在接收到簽名請求指令和對所述簽名請求指令進行解析之間,還包括判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,能則并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,否則給主機返回錯誤提示信息。其中,所述判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,具體包括步驟Al 判斷所述簽名請求指令的總長度是否達到預(yù)設(shè)長度,是則繼續(xù),否則給主機返回錯誤提示信息;和/或步驟A2 從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值, 檢查所述簽名請求指令中預(yù)設(shè)位置之后的數(shù)據(jù)所占字節(jié)數(shù)是否與所述數(shù)據(jù)域長度值相符, 是則繼續(xù);否則給主機返回錯誤提示信息;和/或步驟A3 檢查所述簽名請求指令的最后三個字節(jié)是否全為0x00,是則繼續(xù),否則給主機返回錯誤提示信息。其中,所述步驟A中確定數(shù)據(jù)域的過程包括從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度數(shù)據(jù),對所述數(shù)據(jù)域長度數(shù)據(jù)進行處理生成數(shù)據(jù)域長度值,從所述簽名請求指令中的數(shù)據(jù)域長度數(shù)據(jù)之后的剩余數(shù)據(jù)中提取所述數(shù)據(jù)域長度值的數(shù)據(jù)作為數(shù)據(jù)域。其中,所述步驟C中確定簽名密鑰的存儲位置的過程包括步驟ClO 根據(jù)所述數(shù)據(jù)域中的前兩個字節(jié)數(shù)據(jù),檢索應(yīng)用對象,并判斷是否檢索到,是則執(zhí)行步驟Cl 1,否則給主機返回錯誤提示信息;步驟Cll 根據(jù)所述數(shù)據(jù)域中的第三和第四字節(jié)檢索容器對象,并判斷是否檢索到,是則執(zhí)行步驟C12,否則給主機返回錯誤提示信息;步驟C12 根據(jù)所述應(yīng)用對象和所述容器對象檢索對應(yīng)的存儲位置,并判斷所述存儲位置中是否存在與預(yù)設(shè)類型相符的簽名密鑰,是則繼續(xù)后續(xù)操作,否則給主機返回錯誤提示信息;所述步驟C中確定簽名標(biāo)識的過程包括步驟C20 根據(jù)所述數(shù)據(jù)域的第五到第八字節(jié)確定簽名標(biāo)識的長度;步驟C21 從所述數(shù)據(jù)域的第九字節(jié)開始提取相應(yīng)長度的數(shù)據(jù)作為簽名標(biāo)識;所述步驟C中確定待簽名原文數(shù)據(jù)的過程包括取所述數(shù)據(jù)域的所述簽名標(biāo)識之后的數(shù)據(jù)為所述待簽名原文數(shù)據(jù)。其中,所述步驟D包括步驟Dl 獲取第一參數(shù)、第二參數(shù)、第三參數(shù)和第四參數(shù),根據(jù)所述存儲位置獲取所述簽名密鑰的簽名公鑰;所述第一參數(shù)、所述第二參數(shù)和第四參數(shù)為一維數(shù)據(jù),所述簽名公鑰和所述第三參數(shù)為二維數(shù)據(jù);步驟D2 將所述數(shù)據(jù)域中的用戶標(biāo)識長度轉(zhuǎn)化為兩個字節(jié)的二進制數(shù)生成第一轉(zhuǎn)化值;步驟D3 將所述第一轉(zhuǎn)化值、所述數(shù)據(jù)域中的用戶標(biāo)識值、所述第一參數(shù)、所述第二參數(shù)、所述第三參數(shù)的橫坐標(biāo)、第三參數(shù)的縱坐標(biāo)、所述簽名公鑰的橫坐標(biāo)、簽名公鑰的縱坐標(biāo)依順序串聯(lián)拼接,得到第一拼接值;步驟D4 根據(jù)預(yù)設(shè)算法對所述第一拼接值進行計算,生成第一數(shù)據(jù);步驟D5 將所述第一數(shù)據(jù)和所述待簽名原文數(shù)據(jù)進行串聯(lián)拼接,生成待簽名數(shù)據(jù)。其中,當(dāng)所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串相符時,步驟G包括步驟Gl 對所述待簽名數(shù)據(jù)按照第一預(yù)設(shè)算法進行計算,生成第二數(shù)據(jù),將所述第二數(shù)據(jù)轉(zhuǎn)化為十進制數(shù)生成第二轉(zhuǎn)化值;步驟G2 生成第一隨機數(shù),根據(jù)所述第一隨機數(shù)和第三參數(shù)生成第一臨時參數(shù), 所述第一臨時參數(shù)為二維數(shù)據(jù);步驟G3 將所述第一臨時參數(shù)的橫坐標(biāo)轉(zhuǎn)化為十進制數(shù)得到第一點值,根據(jù)所述第二轉(zhuǎn)化值和所述第一點值生成第一取模值;根據(jù)所述第四參數(shù)和第一隨機數(shù)生成第三數(shù)據(jù);步驟G4:判斷所述第一取模值是否等于0或者所述第三數(shù)據(jù),是則返回步驟G2,否則執(zhí)行步驟G5;步驟G5 根據(jù)所述存儲位置獲取所述簽名密鑰的簽名私鑰,對所述簽名私鑰按照第二預(yù)設(shè)算法進行計算,生成第一運算值;根據(jù)所述簽名私鑰和所述第一取模值進行計算, 生成第二運算值;對所述第一運算值和第二運算值進行計算生成第二取模值;步驟G6 判斷所述第二取模值是否為0,是則返回步驟G2,否則執(zhí)行步驟G7 ;步驟G7 分別將所述第一取模值和所述第二取模值轉(zhuǎn)化為二進制數(shù),并將兩者的轉(zhuǎn)化結(jié)果分別作為簽名結(jié)果的橫坐標(biāo)和縱坐標(biāo);步驟G8 將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。其中,所述步驟F中確定簽名密鑰的存儲位置的過程包括步驟FlO 根據(jù)所述數(shù)據(jù)域中的前兩個字節(jié)數(shù)據(jù),檢索應(yīng)用對象,并判斷是否檢索到,是則執(zhí)行步驟Fl 1,否則給主機返回錯誤提示信息;步驟Fll 根據(jù)所述數(shù)據(jù)域中的第三和第四字節(jié)檢索容器對象,并判斷是否檢索到,是則執(zhí)行步驟F12,否則給主機返回錯誤提示信息;步驟F12 根據(jù)所述應(yīng)用對象和所述容器對象檢索對應(yīng)的存儲位置,并判斷所述存儲位置中是否存在與預(yù)設(shè)類型相符的簽名密鑰,是則繼續(xù)后續(xù)操作,否則給主機返回錯誤提示信息;所述步驟F中確定待簽名數(shù)據(jù)的過程包括取所述數(shù)據(jù)域的第四字節(jié)之后的數(shù)據(jù)為所述待簽名數(shù)據(jù)。其中,當(dāng)所述首部預(yù)設(shè)長度數(shù)據(jù)與第二預(yù)設(shè)字符串相符時,所述步驟G包括步驟Gl 獲取第三參數(shù)和第五參數(shù),并將所述第五參數(shù)轉(zhuǎn)化為二進制數(shù)生成第三轉(zhuǎn)化值;步驟G2 對所述待簽名數(shù)據(jù)按照第一預(yù)設(shè)算法進行計算,生成第一計算結(jié)果,將所述第一計算結(jié)果轉(zhuǎn)化為十進制數(shù)生成第四轉(zhuǎn)化值;步驟G3 生成第二隨機數(shù),根據(jù)所述第二隨機數(shù)和所述第三參數(shù)生成第二臨時參數(shù),將所述第二臨時參數(shù)的橫坐標(biāo)轉(zhuǎn)化為十進制數(shù)生成第二點值;步驟G4:根據(jù)所述第四轉(zhuǎn)化值和所述第二點值生成第三取模值,根據(jù)所述第三轉(zhuǎn)化值和所述第二隨機數(shù)生成第四數(shù)據(jù);步驟G5:判斷所述第三取模值是否等于0或者所述第四數(shù)據(jù),是則返回步驟G3,否則執(zhí)行步驟G6;
步驟G6 根據(jù)所述存儲位置獲取所述簽名密鑰的簽名私鑰,對所述簽名私鑰按照第二預(yù)設(shè)算法進行計算,生成第三運算值;根據(jù)所述簽名私鑰和所述第三取模值生成第四運算值;對所述第三運算值和所述第四運算值進行計算生成第四取模值;步驟G7 判斷所述第四取模值是否為0,是則返回步驟G3,否則執(zhí)行步驟G8 ;步驟G8 分別將所述第三取模值和第四取模值轉(zhuǎn)化為二進制數(shù),并將兩者的轉(zhuǎn)化結(jié)果分別作為簽名結(jié)果的橫坐標(biāo)和縱坐標(biāo);步驟G9 將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。本發(fā)明又提供一種簽名的實現(xiàn)裝置,包括通訊模塊,用于接收主機發(fā)送的簽名請求指令,用于給所述主機返回錯誤提示信息和符合第一預(yù)設(shè)格式的簽名結(jié)果;解析模塊,用于對所述簽名請求指令按照第二預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;第一判斷模塊,用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,還用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符;獲取模塊,當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù);當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù);預(yù)處理模塊用于當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,根據(jù)預(yù)設(shè)算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù);檢查模塊用于當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符;簽名模塊用于對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果。其中,所述裝置還包括第二判斷模塊用于判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析。其中,所述第二判斷模塊具體包括第一判斷單元,用于判斷所述簽名請求指令的總長度是否達到預(yù)設(shè)長度;確定單元用于從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值;第一檢查單元,用于檢查所述簽名請求指令的數(shù)據(jù)域長度之后的剩余數(shù)據(jù)長度是否與所述數(shù)據(jù)域長度值相符;第三檢查單元,用于檢查簽名請求指令的最后三個字節(jié)是否全為0x00。本發(fā)明的有益效果是本申請的實現(xiàn)方案相對現(xiàn)有技術(shù)的簽名方法具有速度快、 安全性能高、內(nèi)存資源要求低的特點;同時在簽名過程由于公鑰和用戶標(biāo)識的參與,又提高了簽名的安全性和可識別性。
圖1是本實施例2提供的一種簽名的實現(xiàn)方法流程圖;圖2是本實施例3提供的對待簽名原文數(shù)據(jù)進行預(yù)處理和簽名的流程圖3是本實施例4提供的對預(yù)處理后的數(shù)據(jù)進行簽名的流程圖;圖4是本實施例5提供的一種簽名的實現(xiàn)裝置的方框圖。
具體實施例方式以下實施例為本發(fā)明所介紹的詳細(xì)實現(xiàn)過程,下面結(jié)合附圖對優(yōu)選的實施例進行詳細(xì)說明。本發(fā)明提供的實施例中,實現(xiàn)簽名操作的主體為簽名裝置,主機和簽名裝置中所有的數(shù)據(jù)都是以二進制比特串的形式存在的,在簽名裝置中進行的所有操作都是對二進制比特串的操作。為了便于說明本實施例中所有提供的方法,將實施例中所有除整數(shù)類型之外的數(shù)據(jù)均以十六進制的形式進行表示。實施例1本實施例1提供了一種簽名的實現(xiàn)方法,包括如下步驟步驟A 接收主機發(fā)送的簽名請求指令,并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;本實施例中,在進行解析之前還包括判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,能則并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,否則給主機返回錯誤提示信息。步驟B:判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,是則執(zhí)行步驟 C,否則判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符,是則執(zhí)行步驟E,如果所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串和第二預(yù)設(shè)字符串都不相符,則給主機返回錯誤提示 fn息;在本實施例中,如果所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串和第二預(yù)設(shè)字符串都不相符,則為其他指令,對其他指令如何響應(yīng)不在本專利范圍內(nèi),但本專利的范圍不應(yīng)限于“對簽名請求指令之外的指令不做響應(yīng)”或“對簽名請求指令之外的指令做特定的響應(yīng)”, 本實施例中是給主機返回錯誤提示信息;步驟C 根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù);本實施例中,確定存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù)的過程在實施例二中進行詳述。步驟D 根據(jù)所述簽名標(biāo)識對應(yīng)的算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù),順序執(zhí)行步驟G ;步驟E 檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符,是則執(zhí)行步驟F,否則給主機返回錯誤提示信息;步驟F:根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù),順序執(zhí)行步驟 G ;具體的,在本實施例中,該步驟的確定簽名密鑰的存儲位置和待簽名數(shù)據(jù)與步驟D 中確定簽名密鑰的存儲位置和待簽名原文數(shù)據(jù)的方法相同。步驟G 對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果,并將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。本實施例中,可以通過解析簽名指令,獲取待簽名數(shù)據(jù)的類型以及根據(jù)不同的待簽名數(shù)據(jù)類型來獲取所需的各個參數(shù),在對待簽名數(shù)據(jù)進行簽名的過程中由于簽名公鑰的參與,增強了該簽名的安全性,由于用戶標(biāo)識的參與,使得該簽名具備了可識別性,且本發(fā)明提供的簽名的實現(xiàn)方法運算量小,操作更方便。實施例2參見圖1,為本實施例2提供的一種簽名的實現(xiàn)方法的流程圖;具體包括如下步驟步驟100 接收主機發(fā)送的簽名請求指令,判斷簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,是則執(zhí)行步驟101,否則停止操作;優(yōu)選地,在本實施例中,所述停止操作具體為向主機發(fā)送預(yù)先約定的錯誤代碼, 給主機返回錯誤提示信息。停止操作后,如果從主機接收到新的指令,則繼續(xù)對其進行相應(yīng)操作。所述判斷簽名請求指令能否按照第二預(yù)設(shè)格式進行解析的方法具體為步驟2’ -1 判斷所述簽名請求指令的數(shù)據(jù)長度是否達到預(yù)設(shè)長度;如果是,則繼續(xù)執(zhí)行下一步;如果否,則停止操作;本實施例中的預(yù)設(shè)長度為不小于4的整數(shù)。優(yōu)選的,本實施例中預(yù)設(shè)長度為整數(shù) 10。步驟2’ -2 從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值;具體地,所述預(yù)設(shè)位置為簽名請求指令的第六和第七字節(jié)。需要說明的是,在本實施例中,還進行如下判斷如果第五字節(jié)的數(shù)據(jù)不為預(yù)先設(shè)定的0x00,則簽名請求指令不完整。本實施例中,確定數(shù)據(jù)域長度值的實現(xiàn)過程具體為將第六字節(jié)的數(shù)據(jù)作為數(shù)據(jù)域長度值的高字節(jié),將第七字節(jié)數(shù)據(jù)作為數(shù)據(jù)域長度值的低字節(jié),將高字節(jié)和低字節(jié)串聯(lián)拼接后得到數(shù)據(jù)域長度值。例如,本實施例中,第六字節(jié)為0x00,第七字節(jié)為OxlC,則串聯(lián)拼接后得到的數(shù)據(jù)域長度值為OxOOlC(即十進制數(shù)28)。步驟2’ -3 檢查所述簽名請求指令的剩余數(shù)據(jù)的長度是否與所述數(shù)據(jù)域長度值相符,是則繼續(xù)執(zhí)行后續(xù)步驟;否則停止操作。所述剩余數(shù)據(jù)長度指的是所述簽名請求除上述數(shù)據(jù)之外的剩余部分的字節(jié)長度, 即第七字節(jié)之后的剩余部分的字節(jié)長度。具體地,本實施例中如果剩余數(shù)據(jù)的長度比所述數(shù)據(jù)域長度值多3字節(jié),則二者相符,否則不相符。步驟2’ -4 檢查簽名請求指令的最后三個字節(jié)是否全為0x00,如果是,則簽名請求指令完整,繼續(xù)執(zhí)行后續(xù)步驟;如果否,則簽名請求指令不完整,停止操作。在本實施例中,步驟2’ -1、步驟2’ -3和步驟2’ _4的判斷過程沒有先后順序,可以先執(zhí)行任意一個判斷過程,當(dāng)判斷為是時繼續(xù)執(zhí)行后續(xù)步驟。步驟101 對所述簽名請求指令進行解析;本實施例中,若接收到的請求指令是以密文的形式存在,在執(zhí)行相應(yīng)操作之前,先將請求指令解析成為可以識別的二進制比特串形式的數(shù)據(jù);若接收到的指令是未進行加密的,則可直接識別該請求指令;
步驟102 根據(jù)預(yù)先約定的格式獲得待簽名的數(shù)據(jù)類型;判斷的方法具體為如果所述接收到的請求指令的首部預(yù)設(shè)長度的數(shù)據(jù)與第一預(yù)設(shè)字符串相符,則待簽名的數(shù)據(jù)類型為待簽名原文數(shù)據(jù),順序執(zhí)行步驟103 ;如果首部預(yù)設(shè)長度的數(shù)據(jù)與第二預(yù)設(shè)字符串相符,則待簽名的數(shù)據(jù)類型為預(yù)處理后的數(shù)據(jù),順序執(zhí)行步驟105 ;具體的,在本實施例中,預(yù)設(shè)的長度為4個字節(jié),第一預(yù)設(shè)字符串以十六進制表示為80 74 01 00 ;第二預(yù)設(shè)字符串以十六進制表示為80 74 02 00 ;如果所述接收到的請求指令的首部預(yù)設(shè)長度的數(shù)據(jù)與上述第一、第二預(yù)設(shè)字符串都不符,則所述接收到的請求指令不是簽名請求指令,其處理方式不在本發(fā)明范圍之內(nèi),在此不做具體說明。在本實施例中,在步驟103和步驟105之前還包括對使用者的身份進行驗證的操作,優(yōu)選地,對使用者的身份進行驗證的操作在步驟102和步驟103之間或步驟102和步驟 105之間進行,具體包括所述簽名裝置通過主機或通過自帶的顯示屏或發(fā)聲裝置,提示用戶輸入密碼,并驗證用戶輸入的密碼是否正確,是則繼續(xù),否則給主機返回錯誤提示信息,報錯。步驟103 根據(jù)簽名請求指令的數(shù)據(jù)域確定簽名參數(shù),即簽名密鑰的存儲位置、待簽名原文數(shù)據(jù)和簽名標(biāo)識。具體地,在本實施例中,所述數(shù)據(jù)域是指所述簽名請求指令中除了前七個字節(jié)和最后三個字節(jié)之外的數(shù)據(jù)。具體的,本實施例中,確定簽名密鑰的存儲位置的方法具體為步驟4-1 根據(jù)數(shù)據(jù)域中的前兩個字節(jié)數(shù)據(jù),檢索應(yīng)用對象,并判斷是否檢索到; 如果檢索到,則執(zhí)行步驟4-2 ;如果未檢索到,返回錯誤提示信息,停止操作;具體的,根據(jù)數(shù)據(jù)域的前兩個字節(jié)數(shù)據(jù)從自身存儲的應(yīng)用對象列表中檢索相應(yīng)的應(yīng)用對象;例如,本實施例中代表應(yīng)用對象的字節(jié)數(shù)據(jù)為0001。步驟4-2 根據(jù)數(shù)據(jù)域中的第三和第四字節(jié)檢索容器對象,并判斷是否檢索到;如果檢索到,則繼續(xù)執(zhí)行步驟4-3 ;如果未檢索到,返回錯誤提示信息,停止操作;具體的,根據(jù)數(shù)據(jù)域中的第三和第四字節(jié)從步驟4-1所檢索到的應(yīng)用對象對應(yīng)的容器對象列表中檢索對應(yīng)的容器對象;例如,本實施例中代表密鑰對象的字節(jié)數(shù)據(jù)為 0002。步驟4-3 根據(jù)所述應(yīng)用對象和所述容器對象檢索對應(yīng)的存儲位置,并判斷該存儲位置中是否存在與預(yù)設(shè)類型相符的簽名密鑰,如果是,繼續(xù),否則,停止操作;本實施例中,獲取簽名標(biāo)識的方法具體為步驟5-1 根據(jù)數(shù)據(jù)域的第五到第八字節(jié)的數(shù)據(jù)確定簽名標(biāo)識的長度。具體方法為將第五字節(jié)作為簽名標(biāo)識的長度的最高字節(jié),將第八字節(jié)作為簽名標(biāo)識的長度的最低字節(jié),將第五字節(jié)數(shù)據(jù)到第八字節(jié)數(shù)據(jù)順序串聯(lián)拼接后的結(jié)果作為簽名標(biāo)識的長度的值。例如,第五到第八字節(jié)的數(shù)據(jù)為00 01 00 02,則簽名標(biāo)識的長度的值為 0x10002 (即十進制數(shù)65538)。步驟5-2 從所述數(shù)據(jù)域的第九字節(jié)開始提取相應(yīng)長度的數(shù)據(jù)作為簽名標(biāo)識;
如果所述數(shù)據(jù)域中第八字節(jié)之后的數(shù)據(jù)的長度不大于所述簽名標(biāo)識的長度值,則
停止操作。本實施例中,獲取待簽名原文數(shù)據(jù)的方法具體為將數(shù)據(jù)域中除了前述已提取的數(shù)據(jù)之外的部分作為待簽名原文數(shù)據(jù)。獲取待簽名原文數(shù)據(jù)之后,在本實施例中,還包括檢查所述待簽名原文數(shù)據(jù)的長度是否與預(yù)設(shè)值相同,如果是,則繼續(xù)執(zhí)行后續(xù)步驟;否則,停止操作。優(yōu)選地,在本實施例中,所述預(yù)設(shè)值為32。步驟104 根據(jù)簽名標(biāo)識對應(yīng)的預(yù)設(shè)算法對所述待簽名原文數(shù)據(jù)進行預(yù)處理,生成待簽名數(shù)據(jù),順序執(zhí)行步驟107 ;具體的,本實施例中的預(yù)處理過程在實施例3中進行詳細(xì)說明。步驟105 檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符,如果是,則執(zhí)行步驟106 ;否則,停止操作。本實施例中步驟105具體為判斷所述簽名請求指令的所述數(shù)據(jù)域長度值是否比所述預(yù)設(shè)值多4字節(jié),如果是,則相符;否則,不相符。步驟106 根據(jù)數(shù)據(jù)域確定簽名參數(shù),即簽名密鑰的存儲位置和待簽名數(shù)據(jù),順序執(zhí)行步驟107 ;該步驟中確定簽名密鑰的存儲位置與步驟103的方法相同,在此不再贅述;確定待簽名數(shù)據(jù)的方法具體為將所述簽名請求指令中的數(shù)據(jù)域的第四字節(jié)之后的數(shù)據(jù)作為待簽名數(shù)據(jù)。步驟107 使用所述簽名密鑰對所述待簽名數(shù)據(jù)計算簽名,并將簽名結(jié)果按照預(yù)設(shè)格式發(fā)送給主機;具體地,在本實施例中,所述預(yù)設(shè)格式為前4個字節(jié)是所述簽名密鑰的位長度, 后續(xù)相應(yīng)長度的數(shù)據(jù)是所述簽名結(jié)果,最后是2字節(jié)結(jié)果代碼。實施例3本發(fā)明實施例3是在實施例2的基礎(chǔ)上,以待簽名的數(shù)據(jù)類型為待簽名原文數(shù)據(jù)為例,詳細(xì)介紹進行預(yù)處理和簽名的實現(xiàn)過程,如圖2所示,包括以解析得到的主機發(fā)送的簽名請求指令數(shù)據(jù)為如下具體數(shù)據(jù)為例對本實施例進行詳細(xì)說明80740100 00001C 0001 0002 00000006 313233343536 6D657373 61676520 64696765 7374 000000 ;步驟201 獲取第一參數(shù)、第二參數(shù)、第三參數(shù)以及第四參數(shù),同時根據(jù)容器對象獲取簽名公鑰,并將上述數(shù)值均轉(zhuǎn)換為預(yù)設(shè)長度的字節(jié)類型數(shù)據(jù);其中,第一參數(shù)、第二參數(shù)和第四參數(shù)分別為一維數(shù)組;第三參數(shù)分別為二維數(shù)組;預(yù)設(shè)長度為256比特;例如,本實施例中轉(zhuǎn)換后的第一參數(shù)a以十六進制表示為a = 787968B4 FA32C3FD 2417842E 73BBFEFF 2F3C848B 6831D7E0 EC65228B 3937E498 第二參數(shù)b 以十六進制表示為b = 63E4C6D3 B23B0C84 9CF84241 484BFE48 F61D59A5 B16BA06E 6E12D1DA 27C5249A ;第三參數(shù)G 以十六進制表示為Gx = 421DEBD6 1B62EAB6 746434EB C3CC315E32220B3B ADD50BDC 4C4E6C14 7FEDD43D ;Gy = 0680512B CBB42C07 D47349D2 153B70C4 E5D7FDFC BFA36EA1 A85841B9 E46E09A2 ;第四參數(shù)η 以十六進制表示為η = 8542D69E 4C044F18 Ε8Β92435 BF6FF7DD 29772063 0485628D 5ΑΕ74ΕΕ7 C32E79B7 ;本實施例中,簽名公鑰為二維數(shù)組,轉(zhuǎn)換后的簽名公鑰P以十六進制表示為Px = 0AE4C779 8AA0F119 471ΒΕΕ11 825ΒΕ462 02ΒΒ79Ε2 Α5844495 E97C04FF 4DF2548A ;Py = 7C0240F8 8F1CD4E1 6352A73C 17B7F16F 07353Ε53 A176D684 A9FE0C6B Β798Ε857 ;步驟202 從請求指令中獲取用戶標(biāo)識長度和用戶標(biāo)識值,并將用戶標(biāo)識長度轉(zhuǎn)換為長度為兩個字節(jié)的第一轉(zhuǎn)化值,此時記用戶標(biāo)識長度為Ll ;具體的,在本實施例中,獲取的用戶標(biāo)識長度Ll為00000006 ;獲取的用戶標(biāo)識值為:313233343536ο步驟203 將用戶標(biāo)識長度Li、用戶標(biāo)識值、第一參數(shù)、第二參數(shù)、第三參數(shù)橫坐標(biāo) Gx值、第三參數(shù)縱坐標(biāo)Gy值、簽名公鑰橫坐標(biāo)值和簽名公鑰縱坐標(biāo)Py值依次按序?qū)⒋?lián)拼接,得到第一拼接值;步驟204 根據(jù)第一預(yù)設(shè)算法對第一拼接值進行計算,生成預(yù)設(shè)長度的第一數(shù)據(jù);本實施例中的預(yù)設(shè)長度為256比特;生成的第一數(shù)據(jù)Z以十六進制表示為Z = F4A38489 Ε32Β45Β6 F876E3AC 2168CA39 2362DC8F 23459C1D 1146FC3D BFB7BC9A ;本實施例步驟204中,第一預(yù)設(shè)算法具體為hash算法。步驟205 將第一數(shù)據(jù)和待簽名原文數(shù)據(jù)進行拼接,生成待簽名數(shù)據(jù);第一數(shù)據(jù)和待簽名原文數(shù)據(jù)進行拼接的方式為按序串聯(lián)拼接;步驟205中得到的待簽名數(shù)據(jù)M以十六進制表示為M = F4A38489 E32B45B6 F876E3AC 2168CA39 2362DC8F 23459C1D 1146FC3D BFB7BC9A 6D657373 61676520 64696765 7374 ;步驟206 對待簽名數(shù)據(jù)按照第一預(yù)設(shè)算法進行計算,得到預(yù)設(shè)長度的第二數(shù)據(jù), 并將所述第二數(shù)據(jù)的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)類型生成第二轉(zhuǎn)化值;本實施例中,預(yù)設(shè)長度為256比特;得到的第二數(shù)據(jù)E以十六進制表示為E = B524F552 CD82B8B0 28476E00 5C377FB1 9A87E6FC 682D48BB 5D42E3D9 B9EFFE76 ;步驟207 生成第一隨機數(shù)Kl ;本實施例中,產(chǎn)生的第一隨機數(shù)Kl可以為真隨機數(shù)也可以為以真隨機數(shù)為種子產(chǎn)生的偽隨機數(shù);且第一隨機數(shù)Kl取值范圍為1到第四參數(shù)減1之間;第一隨機數(shù)Kl 以十六進制表示為K = 6CB28D99 385C175C 94F94E93 4817663F C176D925 DD72B727 260DBAAE 1FB2F96F ;步驟208 根據(jù)第一隨機數(shù)和第三參數(shù)生成臨時參數(shù),并將該臨時參數(shù)的橫坐標(biāo)的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)類型,記為第一點值;本實施例中,臨時參數(shù)Q為一個二維數(shù)組,其值為第一隨機數(shù)與第三參數(shù)的乘積, 臨時參數(shù)Q的值以十六進制表示為Qx = 110107FCDA5 7615705D 5Ε7Β9324 AC4B856D 23E6D918 8Β2ΑΕ477 59514657 CE25D112 ;Qy = 1C65D68A 4A08601D F24B431E 0CAB4EBE 084772Β3 817Ε8581 1Α8510Β2 DF7ECA1A ;步驟209 根據(jù)第二轉(zhuǎn)化值和第一點值生成第一取模值,并判斷第一取模值是否為所需值;如果是,則執(zhí)行步驟210 ;如果否,則返回步驟207 ;本實施例中,簽名裝置計算生成第一取模值具體為對第二轉(zhuǎn)化值和第一點值執(zhí)行模數(shù)為η的加法運算,并記取模結(jié)果為第一取模值;簽名裝置判斷第一取模值是否為所需值具體為判斷第一取模值是否等于0或等于第四參數(shù)與第一隨機數(shù)的差;是則第一取模值不為所需值,返回步驟207 ;否則第一取模值為所需值,并將第一取模值作為簽名結(jié)果第一部分,執(zhí)行步驟210;在步驟209中,參與運算的數(shù)據(jù)的數(shù)據(jù)類型均為整數(shù)類型。步驟210 根據(jù)簽名私鑰、第一取模值和第一隨機數(shù)生成第二取模值,并判斷第二取模值是否為所需值;如果是,則執(zhí)行步驟211 ;如果否,則返回執(zhí)行步驟207 ;本實施例中計算生成第二取模值的過程具體為步驟210-1 根據(jù)容器對象和存儲位置獲取簽名私鑰,并將簽名私鑰的值加1,并對相加結(jié)果取倒數(shù),將該倒數(shù)值記為第一運算值;步驟210-2 將第一取模值與簽名私鑰的值做乘積,并以第一隨機數(shù)為被減數(shù)減去上述乘積結(jié)果,得到第二運算值;步驟210-3 對第一運算值和第二運算值執(zhí)行模數(shù)為η的乘法運算,并記取模結(jié)果為第二取模值;具體的,簽名私鑰為一維數(shù)組,本實施例中將簽名私鑰D以十六進制表示為D = 128B2FA8 BD433C6C 068C8D80 3DFF7979 2A519A55 171B1B65 0C23661D 15897263 ;簽名裝置判斷第二取模值是否為所需值具體為判斷第二取模值是否為0 ;是則第二取模值不為所需值,返回步驟207 ;否則第二取模值為所需值,并將第二取模值作為簽名結(jié)果的第二部分,執(zhí)行步驟210 ;在本實施例的步驟210中,參與運算的數(shù)據(jù)的數(shù)據(jù)類型均為整數(shù)類型。步驟211 根據(jù)第一取模值和第二取模值生成第一簽名結(jié)果,并將該第一簽名結(jié)果按照預(yù)設(shè)格式返回給主機;具體的,將簽名裝置將簽名結(jié)果的第一部分(即第一取模值)和簽名結(jié)果的第二部分(即第二取模值)分別轉(zhuǎn)換為長度為256比特的字節(jié)類型,得到第一字節(jié)串和第二字節(jié)串,生成第一簽名結(jié)果;第一字節(jié)串R 以十六進制表示為R = 40F1EC59 F793D9F4 9E09DCEF 49130D41 94F79FB1 EED2CAA5 5BACDB49 C4E755D1 ;第二字節(jié)串S 以十六進制表示為S = 6FC6DAC3 2C5D5CF1 0C77DFB2 0F7C2EB6 67A45787 2FB09EC5 6327A67E C7DEEBE7 ;第一簽名結(jié)果為一個二維數(shù)組(R,S),具體為(40F1EC59F793D9F4 9E09DCEF 49130D41 94F79FB 1EED2CAA5 5BACDB49 C4E755D1,6FC6DAC3 2C5D5CF1 0C77DFB2 0F7C2EB6 67A45787 2FB09EC5 6327A67E C7DEEBE7);簽名裝置將第一簽名結(jié)果和待簽名數(shù)據(jù)一起返回給主機后用于驗證端進行驗證簽名操作。本實施例中,根據(jù)待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)來獲取所需的各個參數(shù), 進行預(yù)處理和簽名的過程中由于簽名公鑰的參與,提高了該簽名的安全性,還由于用戶標(biāo)識的參與,使得該簽名具備了可識別性,并且本發(fā)明提供的簽名實現(xiàn)方法運算量小,操作更方便。實施例4本發(fā)明實施例4是在實施例2的基礎(chǔ)上,以待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)為例,詳細(xì)介紹對待簽名數(shù)據(jù)進行簽名的具體過程,如圖3所示,包括本實施中進行簽名操作的主體為簽名裝置,以解析得到的主機發(fā)送的簽名請求指令數(shù)據(jù)為如下具體數(shù)據(jù)為例對本實施例進行說明80740200 00002E 0001 0002 F4A38489 E32B45B6 F876E3AC 2168CA39 2362DC8F 23459C1D 1146FC3D BFB7BC9A 6D657373 61676520 64696765 7374 000000 ;步驟301 簽名裝置獲取第三參數(shù)和第五參數(shù),并將其轉(zhuǎn)換為預(yù)設(shè)長度的第三轉(zhuǎn)化值;本實施例中,第三轉(zhuǎn)化值η以十六進制表示為n = 8542D69E 4C044F18 E8B92435 BF6FF7DD 29772063 0485628D 5AE74EE7 C32E79B7 ;步驟302 根據(jù)第一預(yù)設(shè)算法對待簽名數(shù)據(jù)進行計算,生成預(yù)設(shè)長度的第一計算結(jié)果,并將第一計算結(jié)果的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)類型得到第四轉(zhuǎn)化值;本實施例中的第四轉(zhuǎn)化值E以十六進制表示為E = B524F552 CD82B8B0 28476E00 5C377FB1 9A87E6FC 682D48BB 5D42E3D9 B9EFFE76 ;步驟303 生成第二隨機數(shù)K2 ;本實施例中,產(chǎn)生的第二隨機數(shù)K2可以為真隨機數(shù)也可以為以真隨機數(shù)為種子產(chǎn)生的偽隨機數(shù);且第一隨機數(shù)K2取值在在1和第四參數(shù)減1之間;第二隨機數(shù)K2 用字節(jié)類型表示為K = 6CB^D99 385C175C 94F94E93 4817663F C176D925 DD72B727 260DBAAE 1FB2F96F ;步驟304 根據(jù)第二隨機數(shù)和第三參數(shù)生成一個臨時參數(shù),并將該參數(shù)的橫坐標(biāo)值的數(shù)據(jù)類型轉(zhuǎn)換為整數(shù)類型得到第二點值;本實施例中,臨時參數(shù)Q為一個二為數(shù)組,其值為第一隨機數(shù)與第三參數(shù)的乘積,臨時參數(shù)Q的值以十六進制表示為Qx = 110FCDA5 7615705D 5E7B9324 AC4B856D 23E6D918 8B2AE477 59514657 CE25D112 ;Qy = 1C65D68A 4A08601D F24B431E 0CAB4EBE 084772B3 817E8581 1A8510B2 DF7ECA1A ;步驟305 根據(jù)第四轉(zhuǎn)化值和第二點值生成第一取模值,并判斷第一取模值是否為所需值;如果是,則執(zhí)行步驟306 ;如果否,則執(zhí)行步驟303 ;簽名裝置計算生成第一取模值具體為對第四轉(zhuǎn)化值和第二點值執(zhí)行模數(shù)為η的加法運算,并記取模結(jié)果為第一取模值。簽名裝置判斷第一取模值是否為所需值具體為判斷第一取模值是否等于0或等于第五參數(shù)與第一隨機數(shù)的差;是則第一取模值不為所需值,返回步驟303 ;否則第一取模值為所需值,并將第一取模值作為簽名結(jié)果的第一部分,執(zhí)行步驟306;在本實施例的步驟305中,參與運算的數(shù)據(jù)的數(shù)據(jù)類型均為整數(shù)類型。步驟306 根據(jù)簽名私鑰、第一取模值和第二隨機數(shù)生成第二取模值,并判斷第二取模值是否為所需值;如果是,則執(zhí)行步驟307 ;如果否,則執(zhí)行步驟303 ;簽名裝置計算生成第二取模值的過程具體為步驟306-1 根據(jù)容器對象和存儲位置獲取簽名私鑰,并將簽名私鑰的值加1,并對相加結(jié)果取倒數(shù),將該倒數(shù)值記為第三運算值;步驟306-2 將第一取模值與簽名私鑰值做乘積,并以第二隨機數(shù)K2為被減數(shù)減去上述乘積結(jié)果,得到第四運算值;步驟306-3 對第三運算值和第四運算值執(zhí)行模數(shù)為η的乘法運算,并記取模結(jié)果為第二取模值;具體的,本實施例中簽名私鑰為一維數(shù)組,將簽名私鑰D以十六進制表示為D = 128B2FA8 BD433C6C 068C8D80 3DFF7979 2A519A55 171B1B65 0C23661D 15897263 ;簽名裝置判斷第二取模值是否為所需值具體為判斷第二取模值是否為0 ;是則第二取模值不為所需值;返回步驟303 ;否則第二取模值為所需值,并將第二取模值作為簽名結(jié)果的第二部分,執(zhí)行步驟307 ;在本實施例的步驟306中,參與運算的數(shù)據(jù)的數(shù)據(jù)類型均為整數(shù)類型。步驟307 根據(jù)第一取模值和第二取模值生成第一簽名結(jié)果,并將第一簽名結(jié)果按照預(yù)設(shè)格式返回給主機;具體的,將簽名裝置將簽名結(jié)果的第一部分(即第一取模值)和簽名結(jié)果的第二部分(即第二取模值)分別轉(zhuǎn)換為長度為256比特的字節(jié)類型,得到第一字節(jié)串和第二字節(jié)串,生成第一簽名結(jié)果;第一字節(jié)串R 以十六進制表示為R = 40F1EC59 F793D9F4 9E09DCEF 49130D41 94F79FB1 EED2CAA5 5BACDB49 C4E755D1 ;第二字節(jié)串S 以十六進制表示為S = 6FC6DAC3 2C5D5CF1 0C77DFB2 0F7C2EB6 67A45787 2FB09EC5 6327A67E C7DEEBE7 ;簽名結(jié)果為一個二維數(shù)組(R,S),具體為(40F1EC59 F793D9F4 9E09DCEF 49130D41 94F79FB1 EED2CAA5 5BACDB49 C4E755D1,6FC6DAC3 2C5D5CF1 0C77DFB2 0F7C2EB6 67A45787 2FB09EC5 6327A67E C7DEEBE7);簽名裝置將第一簽名結(jié)果和待簽名數(shù)據(jù)一起返回給主機后用于驗證端進行驗證簽名操作。本實施例4中,待簽名數(shù)據(jù)的類型為簽名原文數(shù)據(jù)經(jīng)過預(yù)設(shè)算法之后的數(shù)據(jù),該待簽名數(shù)據(jù)是由用戶自行生成的;用戶生成待簽名數(shù)據(jù)所需要的第一參數(shù)、第二參數(shù)、簽名公鑰、第三參數(shù)、用戶標(biāo)識長度L和用戶標(biāo)識值都是事先已經(jīng)公開的。本實施例中,根據(jù)待簽名數(shù)據(jù)的類型為處理后的數(shù)據(jù)來獲取所需的各個參數(shù),對待簽名數(shù)據(jù)進行簽名的過程中由于簽名公鑰的參與,提高了該簽名的安全性,由于用戶標(biāo)識的參與,使得該簽名具備了可識別性,又由于帶簽名數(shù)據(jù)為處理后的數(shù)據(jù),減少了簽名過程中的運算量,提高了操作速率。實施例5參見圖4,為本發(fā)明實施例5提供的一種簽名的實現(xiàn)裝置圖,具體包括通訊模塊41,用于接收主機發(fā)送的簽名請求指令,用于給所述主機返回錯誤提示信息和符合第一預(yù)設(shè)格式的簽名結(jié)果;解析模塊42,用于對所述簽名請求指令按照第二預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;第一判斷模塊43,用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,還用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符;獲取模塊44,當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù);當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù);預(yù)處理模塊45 用于當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,根據(jù)預(yù)設(shè)算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù);檢查模塊46 用于當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符;簽名模塊47 用于對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果;本實施例中,為使簽名過程更簡單方便,所述裝置還包括第二判斷模塊48,用于判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,是則解析模塊42開始工作,否則通訊模塊41給主機返回錯誤提示信息;本實施例中,第二判斷模塊48具體包括第一判斷單元,用于判斷所述簽名請求指令的總長度是否達到預(yù)設(shè)長度;確定單元用于從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值;第一檢查單元,用于檢查所述簽名請求指令的數(shù)據(jù)域長度之后的剩余數(shù)據(jù)長度是否與所述數(shù)據(jù)域長度值相符;第三檢查單元,用于檢查簽名請求指令的最后三個字節(jié)是否全為0x00。本發(fā)明的實施例,通過解析簽名指令,獲取待簽名數(shù)據(jù)的類型以及根據(jù)不同的待簽名數(shù)據(jù)類型來獲取所需的各個參數(shù),對待簽名數(shù)據(jù)進行簽名的過程中由于簽名公鑰的參與,增強了該簽名的安全性,由于用戶標(biāo)識的參與,使得該簽名具備了可識別性,并且本發(fā)明提供的簽名實現(xiàn)方法運算量小,操作更方便。以上所述,僅為本發(fā)明的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準(zhǔn)。
權(quán)利要求
1.一種簽名的實現(xiàn)方法,其特征在于,包括步驟A 接收主機發(fā)送的簽名請求指令,并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;步驟B 判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,是則執(zhí)行步驟C,否則判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符,是則執(zhí)行步驟E,如果所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串和第二預(yù)設(shè)字符串都不相符,則給主機返回錯誤提示信息;步驟C 根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù); 步驟D 根據(jù)所述簽名標(biāo)識對應(yīng)的算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù),順序執(zhí)行步驟G ;步驟E 檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符,是則執(zhí)行步驟F, 否則給主機返回錯誤提示信息;步驟F 根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù),順序執(zhí)行步驟G ; 步驟G 對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果,并將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。
2.如權(quán)利要求1所述的方法,其特征在于,在接收到簽名請求指令和對所述簽名請求指令進行解析之間,還包括判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,能則并對所述簽名請求指令按照預(yù)設(shè)規(guī)則進行解析,否則給主機返回錯誤提示信息。
3.如權(quán)利要求2所述的方法,其特征在于,所述判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析,具體包括步驟Al 判斷所述簽名請求指令的總長度是否達到預(yù)設(shè)長度,是則繼續(xù),否則給主機返回錯誤提示信息;和/或步驟A2 從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值,檢查所述簽名請求指令中預(yù)設(shè)位置之后的數(shù)據(jù)所占字節(jié)數(shù)是否與所述數(shù)據(jù)域長度值相符,是則繼續(xù);否則給主機返回錯誤提示信息;和/或步驟A3 檢查所述簽名請求指令的最后三個字節(jié)是否全為0x00,是則繼續(xù),否則給主機返回錯誤提示信息。
4.如權(quán)利要求1-3任一項所述的方法,其特征在于,所述步驟A中確定數(shù)據(jù)域的過程包括從所述簽名請求指令中的數(shù)據(jù)域長度數(shù)據(jù)之后的剩余數(shù)據(jù)中提取所述數(shù)據(jù)域長度值的數(shù)據(jù)作為數(shù)據(jù)域。
5.如權(quán)利要求4所述的方法,其特征在于,所述步驟C中確定簽名密鑰的存儲位置的過程包括步驟ClO 根據(jù)所述數(shù)據(jù)域中的前兩個字節(jié)數(shù)據(jù),檢索應(yīng)用對象,并判斷是否檢索到, 是則執(zhí)行步驟C11,否則給主機返回錯誤提示信息;步驟Cll 根據(jù)所述數(shù)據(jù)域中的第三和第四字節(jié)檢索容器對象,并判斷是否檢索到,是則執(zhí)行步驟C12,否則給主機返回錯誤提示信息;步驟C12 根據(jù)所述應(yīng)用對象和所述容器對象檢索對應(yīng)的存儲位置,并判斷所述存儲位置中是否存在與預(yù)設(shè)類型相符的簽名密鑰,是則繼續(xù)后續(xù)操作,否則給主機返回錯誤提不信息;所述步驟C中確定簽名標(biāo)識的過程包括步驟C20 根據(jù)所述數(shù)據(jù)域的第五到第八字節(jié)確定簽名標(biāo)識的長度; 步驟C21 從所述數(shù)據(jù)域的第九字節(jié)開始提取相應(yīng)長度的數(shù)據(jù)作為簽名標(biāo)識; 所述步驟C中確定待簽名原文數(shù)據(jù)的過程包括 取所述數(shù)據(jù)域的所述簽名標(biāo)識之后的數(shù)據(jù)為所述待簽名原文數(shù)據(jù)。
6.如權(quán)利要求5所述的方法,其特征在于,所述步驟D包括步驟Dl 獲取第一參數(shù)、第二參數(shù)、第三參數(shù)和第四參數(shù),根據(jù)所述存儲位置獲取所述簽名密鑰的簽名公鑰;所述第一參數(shù)、所述第二參數(shù)和第四參數(shù)為一維數(shù)據(jù),所述簽名公鑰和所述第三參數(shù)為二維數(shù)據(jù);步驟D2:將所述數(shù)據(jù)域中的用戶標(biāo)識長度轉(zhuǎn)化為兩個字節(jié)的二進制數(shù)生成第一轉(zhuǎn)化值;步驟D3:將所述第一轉(zhuǎn)化值、所述數(shù)據(jù)域中的用戶標(biāo)識值、所述第一參數(shù)、所述第二參數(shù)、所述第三參數(shù)的橫坐標(biāo)、第三參數(shù)的縱坐標(biāo)、所述簽名公鑰的橫坐標(biāo)、簽名公鑰的縱坐標(biāo)依順序串聯(lián)拼接,得到第一拼接值;步驟D4 根據(jù)預(yù)設(shè)算法對所述第一拼接值進行計算,生成第一數(shù)據(jù);步驟D5 將所述第一數(shù)據(jù)和所述待簽名原文數(shù)據(jù)進行串聯(lián)拼接,生成待簽名數(shù)據(jù)。
7.如權(quán)利要求6所述的方法,其特征在于,當(dāng)所述首部預(yù)設(shè)長度數(shù)據(jù)與第一預(yù)設(shè)字符串相符時,步驟G包括步驟Gl 對所述待簽名數(shù)據(jù)按照第一預(yù)設(shè)算法進行計算,生成第二數(shù)據(jù),將所述第二數(shù)據(jù)轉(zhuǎn)化為十進制數(shù)生成第二轉(zhuǎn)化值;步驟G2:生成第一隨機數(shù),根據(jù)所述第一隨機數(shù)和第三參數(shù)生成第一臨時參數(shù),所述第一臨時參數(shù)為二維數(shù)據(jù);步驟G3 將所述第一臨時參數(shù)的橫坐標(biāo)轉(zhuǎn)化為十進制數(shù)得到第一點值,根據(jù)所述第二轉(zhuǎn)化值和所述第一點值生成第一取模值;根據(jù)所述第四參數(shù)和第一隨機數(shù)生成第三數(shù)據(jù);步驟G4 判斷所述第一取模值是否等于0或者所述第三數(shù)據(jù),是則返回步驟G2,否則執(zhí)行步驟G5 ;步驟G5:根據(jù)所述存儲位置獲取所述簽名密鑰的簽名私鑰,對所述簽名私鑰按照第二預(yù)設(shè)算法進行計算,生成第一運算值;根據(jù)所述簽名私鑰和所述第一取模值進行計算,生成第二運算值;對所述第一運算值和第二運算值進行計算生成第二取模值;步驟G6 判斷所述第二取模值是否為0,是則返回步驟G2,否則執(zhí)行步驟G7 ; 步驟G7 分別將所述第一取模值和所述第二取模值轉(zhuǎn)化為二進制數(shù),并將兩者的轉(zhuǎn)化結(jié)果分別作為簽名結(jié)果的橫坐標(biāo)和縱坐標(biāo);步驟G8 將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。
8.如權(quán)利要求4所述的方法,其特征在于,所述步驟F中確定簽名密鑰的存儲位置的過程包括步驟F10:根據(jù)所述數(shù)據(jù)域中的前兩個字節(jié)數(shù)據(jù),檢索應(yīng)用對象,并判斷是否檢索到, 是則執(zhí)行步驟F11,否則給主機返回錯誤提示信息;步驟Fll 根據(jù)所述數(shù)據(jù)域中的第三和第四字節(jié)檢索容器對象,并判斷是否檢索到,是則執(zhí)行步驟F12,否則給主機返回錯誤提示信息;步驟F12 根據(jù)所述應(yīng)用對象和所述容器對象檢索對應(yīng)的存儲位置,并判斷所述存儲位置中是否存在與預(yù)設(shè)類型相符的簽名密鑰,是則繼續(xù)后續(xù)操作,否則給主機返回錯誤提不信息;所述步驟F中確定待簽名數(shù)據(jù)的過程包括 取所述數(shù)據(jù)域的第四字節(jié)之后的數(shù)據(jù)為所述待簽名數(shù)據(jù)。
9.如權(quán)利要求8所述的方法,其特征在于,當(dāng)所述首部預(yù)設(shè)長度數(shù)據(jù)與第二預(yù)設(shè)字符串相符時,所述步驟G包括步驟Gl 獲取第三參數(shù)和第五參數(shù),并將所述第五參數(shù)轉(zhuǎn)化為二進制數(shù)生成第三轉(zhuǎn)化值;步驟G2 對所述待簽名數(shù)據(jù)按照第一預(yù)設(shè)算法進行計算,生成第一計算結(jié)果,將所述第一計算結(jié)果轉(zhuǎn)化為十進制數(shù)生成第四轉(zhuǎn)化值;步驟G3:生成第二隨機數(shù),根據(jù)所述第二隨機數(shù)和所述第三參數(shù)生成第二臨時參數(shù), 將所述第二臨時參數(shù)的橫坐標(biāo)轉(zhuǎn)化為十進制數(shù)生成第二點值;步驟G4:根據(jù)所述第四轉(zhuǎn)化值和所述第二點值生成第三取模值,根據(jù)所述第三轉(zhuǎn)化值和所述第二隨機數(shù)生成第四數(shù)據(jù);步驟G5 判斷所述第三取模值是否等于0或者所述第四數(shù)據(jù),是則返回步驟G3,否則執(zhí)行步驟G6 ;步驟G6:根據(jù)所述存儲位置獲取所述簽名密鑰的簽名私鑰,對所述簽名私鑰按照第二預(yù)設(shè)算法進行計算,生成第三運算值;根據(jù)所述簽名私鑰和所述第三取模值生成第四運算值;對所述第三運算值和所述第四運算值進行計算生成第四取模值;步驟G7 判斷所述第四取模值是否為0,是則返回步驟G3,否則執(zhí)行步驟G8 ; 步驟G8:分別將所述第三取模值和第四取模值轉(zhuǎn)化為二進制數(shù),并將兩者的轉(zhuǎn)化結(jié)果分別作為簽名結(jié)果的橫坐標(biāo)和縱坐標(biāo);步驟G9 將所述簽名結(jié)果按照第一預(yù)設(shè)格式發(fā)送給主機。
10.一種簽名的實現(xiàn)裝置,其特征在于,包括通訊模塊,用于接收主機發(fā)送的簽名請求指令,用于給所述主機返回錯誤提示信息和符合第一預(yù)設(shè)格式的簽名結(jié)果;解析模塊,用于對所述簽名請求指令按照第二預(yù)設(shè)規(guī)則進行解析,確定首部預(yù)設(shè)長度數(shù)據(jù)、數(shù)據(jù)域長度值和數(shù)據(jù)域;第一判斷模塊,用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第一預(yù)設(shè)字符串相符,還用于判斷所述首部預(yù)設(shè)長度數(shù)據(jù)是否與第二預(yù)設(shè)字符串相符;獲取模塊,當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù);當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,用于根據(jù)所述數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù);預(yù)處理模塊用于當(dāng)所述待簽名數(shù)據(jù)的類型為待簽名原文數(shù)據(jù)時,根據(jù)預(yù)設(shè)算法對所述待簽名原文數(shù)據(jù)和所述數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù);檢查模塊用于當(dāng)所述待簽名數(shù)據(jù)的類型為預(yù)處理后的數(shù)據(jù)時,檢查所述簽名請求指令的數(shù)據(jù)域長度值是否與預(yù)設(shè)值相符;簽名模塊用于對所述待簽名數(shù)據(jù)進行簽名操作生成簽名結(jié)果。
11.如權(quán)利要求10所述的裝置,其特征在于,還包括第二判斷模塊用于判斷所述簽名請求指令能否按照第二預(yù)設(shè)格式進行解析。
12.如權(quán)利要求11所述的裝置,其特征在于,所述第二判斷模塊具體包括 第一判斷單元,用于判斷所述簽名請求指令的總長度是否達到預(yù)設(shè)長度;確定單元用于從所述簽名請求指令的預(yù)設(shè)位置提取數(shù)據(jù)域長度并確定數(shù)據(jù)域長度值;第一檢查單元,用于檢查所述簽名請求指令的數(shù)據(jù)域長度之后的剩余數(shù)據(jù)長度是否與所述數(shù)據(jù)域長度值相符;第三檢查單元,用于檢查簽名請求指令的最后三個字節(jié)是否全為0x00。
全文摘要
本發(fā)明公開一種簽名的實現(xiàn)方法和裝置,該方法包括接收主機發(fā)送的簽名請求指令,并對其按照預(yù)設(shè)規(guī)則進行解析;根據(jù)首部預(yù)設(shè)長度數(shù)據(jù)檢測待簽名數(shù)據(jù)的類型,如是待簽名原文數(shù)據(jù),則根據(jù)解析得到的數(shù)據(jù)域確定簽名密鑰的存儲位置、簽名標(biāo)識和待簽名原文數(shù)據(jù),根據(jù)簽名標(biāo)識對應(yīng)的算法對待簽名原文數(shù)據(jù)和數(shù)據(jù)域中的用戶標(biāo)識長度和用戶標(biāo)識值進行預(yù)處理,生成待簽名數(shù)據(jù);如是預(yù)處理后的數(shù)據(jù),則當(dāng)簽名請求指令的數(shù)據(jù)域長度值與預(yù)設(shè)值相符時,根據(jù)數(shù)據(jù)域確定簽名密鑰的存儲位置和待簽名數(shù)據(jù);對待簽名數(shù)據(jù)進行簽名生成簽名結(jié)果并將其按照第一預(yù)設(shè)格式發(fā)送給主機。本發(fā)明的實現(xiàn)方案由于簽名公鑰和用戶標(biāo)識的參與,提高了簽名的安全性和可識別性。
文檔編號H04L9/32GK102571357SQ20121004390
公開日2012年7月11日 申請日期2012年2月24日 優(yōu)先權(quán)日2012年2月24日
發(fā)明者于華章, 陸舟 申請人:飛天誠信科技股份有限公司