亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種摘要引擎的實(shí)現(xiàn)方法

文檔序號(hào):7756365閱讀:215來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種摘要引擎的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明涉及信息安全領(lǐng)域,尤其是一種摘要引擎的實(shí)現(xiàn)方法。
背景技術(shù)
OpenSSL項(xiàng)目是一個(gè)開(kāi)源代碼的安全項(xiàng)目,目標(biāo)是用強(qiáng)大的加密算法來(lái)實(shí)現(xiàn)安全 的Socket層和傳輸層的安全性。它包含了完整的加密算法,數(shù)字簽名算法等,可以很好的 保證數(shù)據(jù)的完整性、保密性。引擎(Engine)機(jī)制的目的是為了使OpenSSL能夠透明地使用第三方提供的軟 件加密庫(kù)或智能密鑰設(shè)備進(jìn)行加密。OpenSSL的引擎機(jī)制成功地達(dá)到了這個(gè)目的,這使得 OpenSSL不僅僅是一個(gè)加密庫(kù),而且還是一個(gè)通用的加密接口,能夠與絕大部分的加密庫(kù)或 智能密鑰設(shè)備協(xié)調(diào)工作。

發(fā)明內(nèi)容
本發(fā)明提供了一種摘要引擎的實(shí)現(xiàn)方法,實(shí)現(xiàn)利用智能密鑰設(shè)備中的信息摘要算 法來(lái)完成數(shù)據(jù)的摘要運(yùn)算,具體技術(shù)方案如下一種摘要引擎的實(shí)現(xiàn)方法,上層應(yīng)用通過(guò)調(diào)用所述摘要引擎的引擎綁定接口、初 始化接口、第一摘要接口、第二摘要接口、引擎釋放接口來(lái)實(shí)現(xiàn),所述方法包括引擎綁定接口被上層應(yīng)用調(diào)用時(shí),摘要引擎與智能密鑰設(shè)備建立連接,獲取所述 智能密鑰設(shè)備的算法列表,并填充第一數(shù)據(jù)結(jié)構(gòu),將所述第一數(shù)據(jù)結(jié)構(gòu)登記到所述上層應(yīng) 用中;初始化接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎根據(jù)傳入的所述第一數(shù)據(jù)結(jié)構(gòu)設(shè)置 所述智能密鑰設(shè)備當(dāng)前所使用的信息摘要算法,并為傳入的上下文分配存儲(chǔ)空間,及初始 化所述上下文;第一摘要接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎根據(jù)當(dāng)前設(shè)置的信息摘要算法, 控制所述智能密鑰設(shè)備對(duì)傳入的信息摘要數(shù)據(jù)進(jìn)行摘要運(yùn)算;第二摘要接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎控制所述智能密鑰設(shè)備結(jié)束摘要 運(yùn)算,并輸出運(yùn)算結(jié)果;引擎釋放接口被上層應(yīng)用程序調(diào)用時(shí),所述摘要引擎結(jié)束與所述智能密鑰設(shè)備的 連接。所述引擎綁定接口、初始化接口、第一摘要接口、第二摘要接口、引擎釋放接口具 體為:bind_engine 接 Π、init 接 Π、updata 接 Π、final 接 Π、cleanup 接 Π。所述摘要引擎通過(guò)硬件加密接口與所述智能密鑰設(shè)備建立連接。所述硬件加密接口包括密碼令牌接口和密碼服務(wù)程序接口。所述第一數(shù)據(jù)具體為EVP_MD結(jié)構(gòu)。所述填充第一數(shù)據(jù)結(jié)構(gòu)具體為根據(jù)初始化接口、數(shù)據(jù)摘要接口、摘要輸出接口、 引擎釋放接口的指針及所述獲取的算法列表來(lái)填充第一數(shù)據(jù)結(jié)構(gòu)。
所述根據(jù)初始化接口、數(shù)據(jù)摘要接口、摘要輸出接口、引擎釋放接口的指針及所述 獲取的算法列表來(lái)填充第一數(shù)據(jù)結(jié)構(gòu)具體為根據(jù)上層應(yīng)用中已有的定義,在所述第一數(shù)據(jù)結(jié)構(gòu)中為所述算法列表中的信息摘 要算法設(shè)置對(duì)應(yīng)的算法ID號(hào);根據(jù)所述算法列表中的數(shù)值,在所述第一數(shù)據(jù)結(jié)構(gòu)中為信息摘要算法的分組長(zhǎng) 度、摘要值長(zhǎng)度設(shè)置對(duì)應(yīng)的數(shù)值,并為信息摘要算法所需要的上下文空間大小設(shè)置對(duì)應(yīng)的 數(shù)值,為所述初始化接口、第一摘要接口、第二摘要接口、引擎釋放接口設(shè)置對(duì)應(yīng)的接口指 針。所述摘要引擎根據(jù)傳入的所述第一數(shù)據(jù)結(jié)構(gòu)設(shè)置所述智能密鑰設(shè)備當(dāng)前所使用 的信息摘要算法具體為所述初始化接口被上層應(yīng)用調(diào)用時(shí),所述填充后的第一數(shù)據(jù)結(jié)構(gòu)傳入所述摘要引 擎;所述摘要引擎根據(jù)所述傳入的第一數(shù)據(jù)結(jié)構(gòu)中的信息摘要算法ID查找對(duì)應(yīng)的信 息摘要算法,如果查找不到,就將當(dāng)前的信息摘要算法設(shè)置為默認(rèn)的信息摘要算法,如果能 夠查找到,則將當(dāng)前的信息摘要算法設(shè)置為與所述傳入的信息摘要算法ID相對(duì)應(yīng)的信息 摘要算法。所述摘要引擎通過(guò)所述硬件加密接口與所述智能密鑰設(shè)備進(jìn)行通信。有益效果通過(guò)摘要引擎,將一些硬件摘要算法,尤其是一些未公開(kāi)的,只能用硬 件實(shí)現(xiàn)的信息摘要算法添加擴(kuò)展到現(xiàn)有的軟件算法庫(kù)中,提高了信息摘要運(yùn)算的安全性。


圖1為本發(fā)明實(shí)施例提供的引擎綁定接口被上層應(yīng)用程序調(diào)用時(shí)的流程圖;圖2為本發(fā)明實(shí)施例提供的初始化接口被上層應(yīng)用程序調(diào)用時(shí)的流程圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式做進(jìn)一步的描述。實(shí)施例1在進(jìn)行具體說(shuō)明之前,需要對(duì)數(shù)據(jù)結(jié)構(gòu)EVP_MD有所了解,該EVP_MD結(jié)構(gòu)用于存放 信息摘要算法的信息,摘要引擎則正是通過(guò)實(shí)現(xiàn)該EVP_MD結(jié)構(gòu)來(lái)完成相應(yīng)的摘要運(yùn)算的, EVP_MD結(jié)構(gòu)的描述如下typedef struct env_md_st{int type ;int md_size ;int(*init) (EVP_MD_CTX*ctx);int (氺update) (EVP—MD—CTX氺ctx,const void氺data, unsigned longcount);int(*final)(EVP_MD_CTX*ctx, unsigned char*md);int(*cleanup)(EVP_MD_CTX*ctx);
5
int block_size ;int ctx_size ;} EVP_MD ;具體地,對(duì)該數(shù)據(jù)結(jié)構(gòu)中的參數(shù)進(jìn)行解釋?zhuān)缦聇ype——信息摘要算法的NID標(biāo)識(shí)(算法的ID號(hào)),用于指明所采用的信息摘要 算法;md_size——信息摘要算法所生成的摘要值長(zhǎng)度(單位為字節(jié)),若該EVP_MD結(jié)構(gòu) 封裝的是SHAl算法,則該字段是SHA1_DIGEST_LENGTH,值為20 ;init——指向信息摘要算法的初始化函數(shù),若該EVP_MD結(jié)構(gòu)封裝的是SM3算法, 則指向的是SM3_init ;update——指向計(jì)算摘要值的函數(shù),若該EVP_MD結(jié)構(gòu)封裝的是MD5算法,則指向 的是 MD5_update ;final——指向在摘要值計(jì)算之后所要調(diào)用的函數(shù),該函數(shù)完成最后一個(gè)數(shù)據(jù)塊 的處理工作,若該EVP_MD結(jié)構(gòu)封裝的是SHA256算法,則指向的是SHA256_f inal ;block_size——指明進(jìn)行摘要運(yùn)算時(shí)的數(shù)據(jù)塊的分組長(zhǎng)度(單位是字節(jié)),若該 EVP_MD結(jié)構(gòu)封裝的是SHAl算法,則該字段是SHA1_CBL0CK,值為64 ;ctx_size——指明實(shí)現(xiàn)信息摘要算法所需要分配的CTX(上下文)的空間大小,若 該EVP_MD結(jié)構(gòu)封裝的是SHA算法,則該字段指的是sizeof (EVP_MD*) +sizeof (SHA_CTX);cleanup——用于做一些清理工作,清除EVP_MD結(jié)構(gòu)。具體地,本發(fā)明提供的摘要引擎通過(guò)實(shí)現(xiàn)引擎綁定接口 bincLengineO及注冊(cè)在 EVP_MD結(jié)構(gòu)中的初始化接口 init ()、第一摘要接口 update ()、第二摘要接口 final ()、引擎 釋放接口 cleanupO來(lái)實(shí)現(xiàn)現(xiàn)有軟件算法庫(kù)中信息摘要算法的擴(kuò)展;其中,bincLengine () 用于綁定引擎,initO用于初始化摘要算法,updataO用于對(duì)傳入的信息摘要數(shù)據(jù)進(jìn)行摘 要運(yùn)算,final ()用于結(jié)束摘要運(yùn)算,并輸出摘要值,cleanupO用于清除信息摘要算法的 EVP_MD 結(jié)構(gòu)。本實(shí)施例中,摘要引擎通過(guò) PKCS#11 (public key cryptography standards 密碼 令牌)接口動(dòng)態(tài)庫(kù)與連接到主機(jī)上的智能密鑰設(shè)備進(jìn)行通信,實(shí)現(xiàn)將智能密鑰設(shè)備中的信 息摘要算法添加到現(xiàn)有軟件算法庫(kù)中,調(diào)用智能密鑰設(shè)備中的信息摘要算法來(lái)進(jìn)行數(shù)據(jù)的 摘要運(yùn)算。PKCS#11接口動(dòng)態(tài)庫(kù)由智能密鑰設(shè)備的開(kāi)發(fā)者提供,所述PKCS#11接口動(dòng)態(tài)庫(kù)的 內(nèi)部細(xì)節(jié)不在本發(fā)明所描述的范圍之內(nèi)。參見(jiàn)圖1,當(dāng)引擎綁定接口 bincLengineO被上層應(yīng)用程序調(diào)用時(shí),摘要引擎執(zhí)行 如下操作步驟101、引擎加載PKCS#11接口動(dòng)態(tài)庫(kù);優(yōu)選地,本步驟通過(guò)調(diào)用計(jì)算機(jī)的系統(tǒng)函數(shù)IoadlibraryO來(lái)完成。其中,PKCS#11接口動(dòng)態(tài)庫(kù)的文件名是預(yù)先約定的。步驟102、引擎獲取PKCS#11接口動(dòng)態(tài)庫(kù)中的函數(shù)列表;優(yōu)選地,本步驟通過(guò)調(diào)用PKCS#11接口中的C_GetFunctionList()函數(shù)來(lái)完成。進(jìn)一步地,本步驟還可以先通過(guò)調(diào)用計(jì)算機(jī)系統(tǒng)函數(shù)GetProcAddress ()嘗試 獲取PKCS#11接口中的C_GetFunctionList()函數(shù)在PKCS#11接口的入口點(diǎn),調(diào)用C_
6GetFunctionListO函數(shù)成功后,就可獲得其他PKCS#11接口的入口點(diǎn),并且能夠調(diào)用這些 接口獲得PKCS#11接口動(dòng)態(tài)庫(kù)的函數(shù)列表;如果嘗試失敗,則報(bào)錯(cuò)返回。具體地,PKCS#11接口動(dòng)態(tài)庫(kù)的函數(shù)列表可以是CK_FUNCTION_LIST_PTR。需要說(shuō)明的是,獲取的函數(shù)列表包含PKCS#11接口動(dòng)態(tài)庫(kù)中函數(shù)指針的指針,這 樣,引擎在以后的操作中,就可以通過(guò)調(diào)用獲取的函數(shù)指針的指針來(lái)實(shí)現(xiàn)PKCS#11接口動(dòng) 態(tài)庫(kù)中的函數(shù)的調(diào)用了,例如,引擎調(diào)用PKCS#11接口動(dòng)態(tài)庫(kù)中的(^Initialize (),就可以 通過(guò)調(diào)用獲取的C_Initialize()指針的指針來(lái)實(shí)現(xiàn),等等。步驟103、引擎調(diào)用C_Initialize(),初始化PKCS#11接口動(dòng)態(tài)庫(kù);需要說(shuō)明的是,根據(jù)PKCS#11接口的規(guī)范標(biāo)準(zhǔn),在進(jìn)行其他操作之前必須要首先 調(diào)用該 C_Initialize()接口。進(jìn)一步地,在此過(guò)程中,還可以包括如下操作引擎創(chuàng)建并啟動(dòng)一個(gè)監(jiān)控線(xiàn)程,用于監(jiān)控智能密鑰設(shè)備的插拔事件,以便在后續(xù) 的處理中及時(shí)作出反應(yīng);優(yōu)選地,監(jiān)控智能密鑰設(shè)備的插拔事件(智能密鑰設(shè)備的插入或拔除)是通過(guò)調(diào) 用PKCS#11接口動(dòng)態(tài)庫(kù)中定義的函數(shù)C_WaitForSlotEvent()來(lái)實(shí)現(xiàn)的。需要說(shuō)明的是監(jiān)控智能密鑰設(shè)備的插拔狀態(tài)是為了能及時(shí)告知引擎該智能密 鑰設(shè)備的當(dāng)前狀態(tài),如果智能密鑰設(shè)備被拔除,則引擎及時(shí)關(guān)閉與智能密鑰設(shè)備的會(huì)話(huà),如 果,智能密鑰設(shè)備被插入,則引擎及時(shí)開(kāi)啟與智能密鑰設(shè)備的會(huì)話(huà),以便提高工作效率,同 時(shí),避免了引擎在使用智能密鑰設(shè)備時(shí)臨時(shí)開(kāi)啟會(huì)話(huà),而智能密鑰設(shè)備是拔除狀態(tài),從而造 成錯(cuò)誤情況的出現(xiàn)。步驟104、引擎獲取當(dāng)前連接到主機(jī)的智能密鑰設(shè)備句柄;具體地,引擎通過(guò)調(diào)用PKCS#11接口動(dòng)態(tài)庫(kù)中定義的函數(shù)C_GetSl0tList()來(lái)獲 取智能密鑰密鑰設(shè)備列表;本實(shí)施例中,如果當(dāng)前存在多個(gè)智能密鑰設(shè)備連接到主機(jī),則選擇所述列表中的 第一個(gè)智能密鑰設(shè)備。步驟105、引擎與智能密鑰設(shè)備建立通信;優(yōu)選地,引擎與智能密鑰設(shè)備建立接連是通過(guò)調(diào)用PKCS#11接口動(dòng)態(tài)庫(kù)中定義的 函數(shù)C_0penSession()來(lái)實(shí)現(xiàn)的。步驟106、引擎創(chuàng)建一個(gè)引擎對(duì)象,如engine ;具體地,引擎通過(guò)調(diào)用ENGINE_neW()來(lái)實(shí)現(xiàn);需要說(shuō)明的是,通過(guò)ENGINE_neW()所創(chuàng)建的引擎對(duì)象是空的。步驟107、引擎為所創(chuàng)建的引擎對(duì)象設(shè)置id及名稱(chēng);具體地,通過(guò)注冊(cè)函數(shù)ENGINE_set_id(e, engine_cipher_id),ENGINE_set_ name(e, engine_cipher_name)來(lái)實(shí)現(xiàn)引擎 id 及名稱(chēng)的設(shè)置,例如 ENGI NE_set_ id (engine,”rtl8651b”),ENGINE_set_name (engine,” BSD rtl8651b engine”)。當(dāng)上層 應(yīng)用調(diào)用至丨J ENGINE_set_id (e, engine_cipher_id), ENGINE_set_name (e, engine_cipher_ name)時(shí),選定相應(yīng)的引擎。步驟108、獲取智能密鑰設(shè)備的算法列表;具體地,通過(guò)調(diào)用PKCS# 11接口動(dòng)態(tài)庫(kù)中定義的C_GetMechani smLi st來(lái)獲取算法列表。其中,算法列表中包含信息摘要算法屬性,如分組長(zhǎng)度、摘要值長(zhǎng)度等。例如,獲取的算法列表是{CKM_SHA_1, {0,0, CKF_DIGEST}}。步驟109、根據(jù)所獲取的算法列表填充EVP_MD結(jié)構(gòu),以便供上層應(yīng)用調(diào)用;具體的填充方法是,對(duì)所獲取的算法列表中的任一摘要算法,根據(jù)上層應(yīng)用的 定義設(shè)置對(duì)應(yīng)的算法ID號(hào);根據(jù)算法列表中的數(shù)值,設(shè)置摘要值長(zhǎng)度md_size,分組長(zhǎng)度 block_Size,并指明實(shí)現(xiàn)摘要算法時(shí)所需要分配的上下文的空間的大小,及設(shè)置initO、 updataO、final ()、cleanup ()接口指針。步驟110、獲取摘要算法的EVP_MD結(jié)構(gòu);具體地,通過(guò)調(diào)用ENGINE_set_digests來(lái)實(shí)現(xiàn);需要說(shuō)明的是,調(diào)用ENGI NE_Set_digeStS設(shè)置當(dāng)前引擎所支持的摘要算法,并得 到摘要算法的EVP_MD結(jié)構(gòu),從而得到EVP_MD結(jié)構(gòu)中封裝的操作接口及摘要算法屬性,包 括init操作接口、update操作接口、final操作接口 cleanup操作接口,信息摘要算法的 分組長(zhǎng)度、摘要值長(zhǎng)度、上下文的空間大小等屬性。需要說(shuō)明的是,引擎默認(rèn)支持的摘要算法包括MD5和shal步驟111、實(shí)現(xiàn)信息摘要算法與引擎的綁定;具體地,通過(guò)調(diào)用ENGINE_register_digests 來(lái)實(shí)現(xiàn),ENGINE_register_digests 將當(dāng)期引擎所支持的信息摘要算法添加到到上層應(yīng)用中的算法列表中,與引擎建立關(guān)聯(lián), 這樣,當(dāng)上層應(yīng)用使用信息摘要算法時(shí),就可以得到該信息摘要算法的EVP_MD結(jié)構(gòu)及相關(guān) 的屬性了。需要說(shuō)明的是,當(dāng)initO接口、updataO接口、final ()接口被上層應(yīng)用調(diào)用時(shí), 傳入的參數(shù)一般包括上下文及EVP_MD結(jié)構(gòu)中存放的信息摘要算法的信息,包括信息摘要 算法的分組長(zhǎng)度,摘要值長(zhǎng)度、信息摘要算法ID等。參見(jiàn)圖2、當(dāng)initO接口被上層應(yīng)用程序調(diào)用時(shí),摘要引擎執(zhí)行如下操作其中,initO的參數(shù)描述如下int (*init) (EVP_MD_CTX*ctx// 上下文);具體地,對(duì)EVP_MD_CTX進(jìn)行簡(jiǎn)單的說(shuō)明,如下typedef struct env_md_ctx_st{const EVP_MD氺digest ;ENGINE氺engine ;unsigned long flags ;void*md_data ;}EVP_MD_CTX ;具體地,EVP_MD_CTX結(jié)構(gòu)中參數(shù)的介紹如下digest——指向EVP_MD結(jié)構(gòu)的指針;engine——如果算法由引擎提供,該指針指向引擎;md_data——信息摘要數(shù)據(jù);
8
具體地,engine由上層應(yīng)用創(chuàng)建,并在調(diào)用bincLengine ()時(shí)與算法列表建立關(guān) 聯(lián),信息摘要數(shù)據(jù)由具體運(yùn)算過(guò)程決定。步驟201、設(shè)置當(dāng)前使用的信息摘要算法;具體地,根據(jù)傳入的信息摘要算法ID查找相應(yīng)的信息摘要算法,如果查找不到, 則將當(dāng)前使用的信息摘要算法設(shè)置為默認(rèn)的信息摘要算法,如果能夠找到,則將當(dāng)前使用 的信息摘要算法設(shè)置為與傳入的信息摘要算法類(lèi)型相對(duì)應(yīng)的信息摘要算法;具體地,信息摘要算法ID是伴隨EVP_MD_CTX而傳入的,當(dāng)EVP_MD_CTX結(jié)構(gòu)中的 digest被執(zhí)行時(shí),就指向了 EVP_MD結(jié)構(gòu),該結(jié)構(gòu)中的信息摘要算法ID就被傳入init()接 口了。步驟202、為EVP_MD_CTX(上下文)分配內(nèi)存空間;具體地,根據(jù)bincLengine ()接口被調(diào)用時(shí),設(shè)置的上下文空間大小進(jìn)行內(nèi)存的 分配。例如,建立一個(gè)雙向鏈表,該雙向鏈表用來(lái)存儲(chǔ)信息摘要數(shù)據(jù)。步驟203、初始化上下文;具體地,為上下文賦初始值,由具體的運(yùn)算過(guò)程決定。當(dāng)updataO接口被上層應(yīng)用程序調(diào)用時(shí),傳入的參數(shù)包括int (^update) (EVP_MD_CTX*ctx,// 上下文const void*data,// 信息摘要數(shù)據(jù)unsigned long count//迭代運(yùn)算次數(shù))當(dāng)updataO接口被上層應(yīng)用程序調(diào)用時(shí),摘要引擎緩存?zhèn)魅氲男畔⒄獢?shù)據(jù),并 控制智能密鑰設(shè)備根據(jù)當(dāng)前設(shè)置的信息摘要算法對(duì)傳入的信息摘要數(shù)據(jù)進(jìn)行摘要運(yùn)算,并 緩存運(yùn)算結(jié)果;需要說(shuō)明的是,updataO接口被調(diào)用時(shí),在該接口中進(jìn)行不止一次的摘要運(yùn)算,運(yùn) 算次數(shù)由具體的運(yùn)算過(guò)程所決定。具體地,可以通過(guò)調(diào)用PKCS#11接口的C_DigeStUpdate函數(shù)來(lái)完成摘要運(yùn)算。當(dāng)final ()接口被上層應(yīng)用程序調(diào)用時(shí),傳入的參數(shù)包括int (*final) (EVP_MD_CTX*ctx,// 上下文unsigned char氺md//摘要輸出數(shù)據(jù))當(dāng)final ()接口被上層應(yīng)用程序調(diào)用時(shí),摘要引擎控制智能密鑰設(shè)備結(jié)束摘要運(yùn) 算,并將運(yùn)算結(jié)果輸出,具體地,通過(guò)md字段將結(jié)果輸出;具體地,可以通過(guò)調(diào)用PKCS#11接口的C_DigestFinal函數(shù)來(lái)完成摘要運(yùn)算。當(dāng)finalO接口調(diào)用結(jié)束后,cleaupO接口將被調(diào)用,用于清理環(huán)境;當(dāng)cleaupO接口被上層應(yīng)用程序調(diào)用時(shí),通過(guò)PKCS#11接口 C_CloseSession關(guān) 閉與智能密鑰設(shè)備的通信;清除摘要引擎所占用的應(yīng)用資源,結(jié)束對(duì)摘要引擎的使用。類(lèi)似地,摘要引擎中也可以通過(guò)加密服務(wù)程序CSP (CryptographicService Provider)接口與智能密鑰設(shè)備進(jìn)行通信。例如,通過(guò)CSP接口的CryptAcquireContext與智能密鑰設(shè)備建立連接;通過(guò)CSP接口的CryptGetProvParam取得智能密鑰設(shè)備的算法列表;
9
通過(guò)CSP接口的cryptGreateHash設(shè)置智能密鑰設(shè)備當(dāng)前所使用的算法;通過(guò)CSP接口的CrypthashData對(duì)傳入的數(shù)據(jù)進(jìn)行摘要運(yùn)算;通過(guò)CSP接口的CryptGetHashParam輸出摘要運(yùn)算的結(jié)果;通過(guò)CSP 接口的 CryptReleaseContext 清理環(huán)境;具體流程與通過(guò)PKCS#11接口進(jìn)行通信時(shí)的流程相似,此處就不再贅述。這樣,通過(guò)摘要引擎實(shí)現(xiàn)上述操作后,就可以將一些硬件摘要算法,尤其是一些未 公開(kāi)的,只能用硬件實(shí)現(xiàn)的摘要算法添加擴(kuò)展到軟件算法庫(kù)中了。以上所述,僅為本發(fā)明較佳的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此, 任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明公開(kāi)的技術(shù)范圍內(nèi),可輕易想到的變化或替換, 都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求的保護(hù)范圍 為準(zhǔn)。
10
權(quán)利要求
一種摘要引擎的實(shí)現(xiàn)方法,上層應(yīng)用通過(guò)調(diào)用所述摘要引擎的引擎綁定接口、初始化接口、第一摘要接口、第二摘要接口、引擎釋放接口來(lái)實(shí)現(xiàn),其特征在于,所述方法包括引擎綁定接口被上層應(yīng)用調(diào)用時(shí),摘要引擎與智能密鑰設(shè)備建立連接,獲取所述智能密鑰設(shè)備的算法列表,并填充第一數(shù)據(jù)結(jié)構(gòu),將所述第一數(shù)據(jù)結(jié)構(gòu)登記到所述上層應(yīng)用中;初始化接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎根據(jù)傳入的所述第一數(shù)據(jù)結(jié)構(gòu)設(shè)置所述智能密鑰設(shè)備當(dāng)前所使用的信息摘要算法,并為傳入的上下文分配存儲(chǔ)空間,及初始化所述上下文;第一摘要接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎根據(jù)當(dāng)前設(shè)置的信息摘要算法,控制所述智能密鑰設(shè)備對(duì)傳入的信息摘要數(shù)據(jù)進(jìn)行摘要運(yùn)算;第二摘要接口被上層應(yīng)用調(diào)用時(shí),所述摘要引擎控制所述智能密鑰設(shè)備結(jié)束摘要運(yùn)算,并輸出運(yùn)算結(jié)果;引擎釋放接口被上層應(yīng)用程序調(diào)用時(shí),所述摘要引擎結(jié)束與所述智能密鑰設(shè)備的連接。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述引擎綁定接口、初始化接口、第一摘 要接口、第二摘要接口、引擎釋放接口具體為bind_engine接口、init接口、update接口、 final ^ Π、cleanup ^ Π。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述摘要引擎通過(guò)硬件加密接口與所述 智能密鑰設(shè)備建立連接。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述硬件加密接口包括密碼令牌接口和 密碼服務(wù)程序接口。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述第一數(shù)據(jù)具體為EVP_MD結(jié)構(gòu)。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述填充第一數(shù)據(jù)結(jié)構(gòu)具體為根據(jù)初始 化接口、數(shù)據(jù)摘要接口、摘要輸出接口、引擎釋放接口的指針及所述獲取的算法列表來(lái)填充 第一數(shù)據(jù)結(jié)構(gòu)。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,所述根據(jù)初始化接口、數(shù)據(jù)摘要接口、摘 要輸出接口、引擎釋放接口的指針及所述獲取的算法列表來(lái)填充第一數(shù)據(jù)結(jié)構(gòu)具體為根據(jù)上層應(yīng)用中已有的定義,在所述第一數(shù)據(jù)結(jié)構(gòu)中為所述算法列表中的信息摘要算 法設(shè)置對(duì)應(yīng)的算法ID號(hào);根據(jù)所述算法列表中的數(shù)值,在所述第一數(shù)據(jù)結(jié)構(gòu)中為信息摘要算法的分組長(zhǎng)度、摘 要值長(zhǎng)度設(shè)置對(duì)應(yīng)的數(shù)值,并為信息摘要算法所需要的上下文空間大小設(shè)置對(duì)應(yīng)的數(shù)值, 為所述初始化接口、第一摘要接口、第二摘要接口、引擎釋放接口設(shè)置對(duì)應(yīng)的接口指針。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述摘要引擎根據(jù)傳入的所述第一數(shù)據(jù) 結(jié)構(gòu)設(shè)置所述智能密鑰設(shè)備當(dāng)前所使用的信息摘要算法具體為所述初始化接口被上層應(yīng)用調(diào)用時(shí),將所述填充后的第一數(shù)據(jù)結(jié)構(gòu)傳入所述摘要引擎;所述摘要引擎根據(jù)所述傳入的第一數(shù)據(jù)結(jié)構(gòu)中的信息摘要算法ID查找對(duì)應(yīng)的信息摘 要算法,如果查找不到,就將當(dāng)前的信息摘要算法設(shè)置為默認(rèn)的信息摘要算法,如果能夠查 找到,則將當(dāng)前的信息摘要算法設(shè)置為與所述傳入的信息摘要算法ID相對(duì)應(yīng)的信息摘要算法。
9.根據(jù)權(quán)利要求1至8所述的方法,其特征在于,所述摘要引擎通過(guò)所述硬件加密接口 與所述智能密鑰設(shè)備進(jìn)行通信。
全文摘要
本發(fā)明公開(kāi)了一種摘要引擎的實(shí)現(xiàn)方法,屬于信息安全領(lǐng)域。方法包括引擎綁定接口被調(diào)用時(shí),摘要引擎與智能密鑰設(shè)備建立連接,獲取智能密鑰設(shè)備的算法列表,并填充第一數(shù)據(jù)結(jié)構(gòu),將第一數(shù)據(jù)結(jié)構(gòu)登記到上層應(yīng)用中;初始化接口被調(diào)用時(shí),摘要引擎根據(jù)傳入的第一數(shù)據(jù)結(jié)構(gòu)設(shè)置智能密鑰設(shè)備當(dāng)前所使用的信息摘要算法,并為傳入的上下文分配存儲(chǔ)空間,及初始化所述上下文;第一摘要接口被調(diào)用時(shí),摘要引擎根據(jù)當(dāng)前設(shè)置的信息摘要算法,控制智能密鑰設(shè)備對(duì)傳入的信息摘要數(shù)據(jù)進(jìn)行摘要運(yùn)算;第二摘要接口被調(diào)用時(shí),摘要引擎控制智能密鑰設(shè)備結(jié)束摘要運(yùn)算,并輸出運(yùn)算結(jié)果;引擎釋放接口被調(diào)用時(shí),摘要引擎結(jié)束與智能密鑰設(shè)備的連接。
文檔編號(hào)H04L9/32GK101908963SQ20101024845
公開(kāi)日2010年12月8日 申請(qǐng)日期2010年8月9日 優(yōu)先權(quán)日2010年8月9日
發(fā)明者于華章, 陸舟 申請(qǐng)人:北京飛天誠(chéng)信科技有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1