




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
CSP的開發(fā)流程當(dāng)前,國(guó)內(nèi)許多科研單位開發(fā)了高強(qiáng)度加密算法,這些加密算法或者以純軟件形式,或者以加密卡形式提供給用戶。不同加密服務(wù)提供者提供的加密接口往往各不相同,這就給用戶帶來不便。因此,出現(xiàn)了有關(guān)加密API國(guó)際標(biāo)準(zhǔn)和規(guī)范,呈現(xiàn)給用戶加密API有幾種統(tǒng)一形式。目前有關(guān)加密API國(guó)際標(biāo)準(zhǔn)和規(guī)范主要有:GSS-APIV2.0、GCS-API、CDSA、RSAPKCS#11CryptographicTokenInterfaceStandardV2.01、RSABSAFEAPI、微軟CryptoAPIV2.0。其中,CDSA、RSAPKCS#11和微軟CryptoAPI在實(shí)際中應(yīng)用得較多,也是PKI推薦使用的加密API。以下主要討論微軟CryptoAPI是如何調(diào)用加密服務(wù)提供(CSP)以及如何開發(fā)基于微軟CryptoAPI加密服務(wù)提供。1 加密體系結(jié)構(gòu)MicrosoftCryptoAPI是“Microsoftcryptographicapplicationprogramminginterface”的簡(jiǎn)稱,是Microsoft公司提出的安全加密應(yīng)用框架和服務(wù)。Windows系列操作系統(tǒng),都支持MicrosoftCryptoAPI。與其他安全加密應(yīng)用框架一樣,MicrosoftCryptoAPI也遵循一系列PKI標(biāo)準(zhǔn)和規(guī)范。應(yīng)用開發(fā)者可以比較簡(jiǎn)便、快速地開發(fā)出標(biāo)準(zhǔn)、通用和易于擴(kuò)展的安全加密應(yīng)用。CryptoAPI功能是為應(yīng)用程序開發(fā)者提供在Win32環(huán)境下使用加密、驗(yàn)證等安全服務(wù)時(shí)標(biāo)準(zhǔn)加密接口。微軟CryptoAPI體系結(jié)構(gòu)見圖1。CryptoAPI之上是應(yīng)用程序,之下是CSP。CSP是一個(gè)真正執(zhí)行加密功能獨(dú)立模塊,典型的CSP有微軟RSABaseProvider。目前任何一個(gè)加密服務(wù)提供者若想成為微軟合法CSP,就必須獲得微軟授予的一個(gè)簽名文件,該簽名文件保證了微軟CryptoAPI識(shí)別該CSP。對(duì)于Microsoft合法CSP,微軟會(huì)提供與其CryptoAPI接口規(guī)范。微軟提供CSP安裝程序會(huì)將該CSP各個(gè)文件安放到相應(yīng)目錄下,并在注冊(cè)表中按CSP的類型和名稱為該CSP注冊(cè)。CryptoAPI使用系統(tǒng)注冊(cè)表存儲(chǔ)CSP數(shù)據(jù)庫,CSP數(shù)據(jù)庫中記錄了所有已安裝到計(jì)算機(jī)中的CSP。2CryptoAPI調(diào)用底層CSP服務(wù)方式微軟CryptoAPI從2方面保證安全通信:保密性和驗(yàn)證。CSP是真正執(zhí)行加密工作獨(dú)立的模塊。物理上一個(gè)CSP由2部分組成:一個(gè)動(dòng)態(tài)鏈接庫,一個(gè)簽名文件。若加密算法用硬件實(shí)現(xiàn),則CSP還包括硬件裝置。CryptoAPI函數(shù)調(diào)用底層CSP函數(shù)時(shí),首先使用函數(shù)CryptAcquireContext,給出欲選擇CSP名稱參數(shù)和類型參數(shù)即可,該函數(shù)返回一個(gè)指向被選擇的CSP句柄。CSP有一個(gè)密鑰庫。密鑰庫用于存儲(chǔ)密鑰,每個(gè)密鑰庫包括一個(gè)或多個(gè)密鑰容器(keycontainers)。每個(gè)密鑰容器中含屬于一個(gè)特定用戶所有密鑰對(duì)。每個(gè)密鑰容器被賦予唯一名字;以這個(gè)名字做函數(shù)CryptAcquireContext參數(shù),從而獲得指向這個(gè)密鑰容器句柄。CSP將永久保存密鑰容器,包括保存每個(gè)密鑰容器中公/私鑰對(duì)(會(huì)話密鑰除外)。在交換密鑰時(shí),或密鑰需要離開CSP(即導(dǎo)出密鑰)時(shí),就存在選擇什么樣數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)密鑰問題。微軟CryptoAPI采用KeyBlob數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)離開了CSP內(nèi)部的密鑰。密鑰總是在CSP內(nèi)部被安全地保存,應(yīng)用程序只能通過句柄訪問密鑰,而KeyBlob則例外。當(dāng)使用CryptExportKey函數(shù)從CSP中導(dǎo)出密鑰時(shí),KeyBlob被創(chuàng)建。之后某一時(shí)間,使用CryptImportKey函數(shù)將密鑰導(dǎo)入到其他CSP中(不同機(jī)器上的不同CSP)。因此,KeyBlob是在不同CSP之間安全傳送密鑰載體。KeyBlob有一個(gè)標(biāo)準(zhǔn)信息頭和位于信息頭之后一段表示密鑰本身的數(shù)據(jù)組成。應(yīng)用程序不訪問KeyBlob內(nèi)部,而是把KeyBlob當(dāng)作一個(gè)透明對(duì)象。由于公/私鑰對(duì)私鑰部分需要絕對(duì)保密,所以私鑰要用對(duì)稱加密算法加密。加密PrivateKeyBlob時(shí),除了BLOBHEADER之外所有部分都要加密。但加密所用算法和密鑰(或密鑰參數(shù))不與該KeyBlob存儲(chǔ)在一起,應(yīng)用程序負(fù)責(zé)管理這些信息。3CSP程序開發(fā)進(jìn)行CSP程序開發(fā),首先選擇和實(shí)現(xiàn)CSP支持加密算法和數(shù)據(jù)格式;確定好加密算法和數(shù)據(jù)格式后,應(yīng)該清楚CSP實(shí)現(xiàn)的函數(shù)及函數(shù)流程,在了解這些之后,具體程序設(shè)計(jì)較為容易。1)開發(fā)CSP基本流程。選擇和實(shí)現(xiàn)CSP要支持每一個(gè)加密算法和數(shù)據(jù)格式后,創(chuàng)建一個(gè)CSP過程如下:1創(chuàng)建CSP.dll,導(dǎo)出CrytoSPI函數(shù)接口。2開發(fā)CSP安裝程序,創(chuàng)建合適注冊(cè)表項(xiàng)。3測(cè)試所開發(fā)出CSP.dll的實(shí)現(xiàn)功能。4通過CryptAPI測(cè)試開發(fā)出的CSP。5讓微軟正式對(duì)該CSP簽名,使CSP可以應(yīng)用到MicrosoftWindows系列操作系統(tǒng)中。6測(cè)試經(jīng)過微軟正式簽名CSP。這個(gè)步驟和4相同,不過此時(shí)的CSP已經(jīng)通過了微軟正式簽名。下面主要對(duì)CSP開發(fā)第一步進(jìn)行詳細(xì)的說明,只有做好1,對(duì)26也較為容易,不進(jìn)行詳述。2)CSP應(yīng)實(shí)現(xiàn)的函數(shù)及其功能。在所創(chuàng)建的CSP.dll中,CSP應(yīng)實(shí)現(xiàn)以下24個(gè)函數(shù)。初始化函數(shù):CSP初始化函數(shù)有CPAcquireContext、CPReleaseContext,其中CPAcquireContext有2個(gè)作用,其一是根據(jù)提供參數(shù)獲取不同CSP,其二是根據(jù)參數(shù)產(chǎn)生或銷毀密鑰容器。CPReleaseContext用于釋放加密接口函數(shù)句柄。以上2函數(shù)調(diào)用成功則返回非0值。散列函數(shù):CSP散列函數(shù)有CPCreateHash、CPHashData、CPGetHashParam、CPDestroyHash、CPHash-SessionKey、CPGenRandom共6個(gè)函數(shù),前面4個(gè)函數(shù)通常一起使用,并根據(jù)給定數(shù)據(jù)產(chǎn)生散列值。CPCre-ateHash用于產(chǎn)生CSP散列對(duì)象句柄,該句柄用于后續(xù)CPHashData函數(shù)產(chǎn)生散列值,緊接著使用CPGetH-ashParam獲取所產(chǎn)生散列值。最后由CPDestroyHash銷毀散列對(duì)象句柄。具體散列算法根據(jù)CPCreateHash參數(shù)確定??梢栽O(shè)定CPGetHashParam中參數(shù)防止同一數(shù)據(jù)進(jìn)行多次加密。CPHashSessionKey用于對(duì)密鑰對(duì)象產(chǎn)生散列值,CPGenRandom用于由隨機(jī)數(shù)填充緩沖區(qū),這個(gè)函數(shù)主要用于利用隨機(jī)數(shù)進(jìn)行加密。密鑰生成函數(shù):產(chǎn)生密鑰函數(shù)有CPDeriveKey、CPGenKey、CPDestroyKey等函數(shù),其中CPDeriveKey用于根據(jù)口令產(chǎn)生密碼,CPGenKey用于根據(jù)隨機(jī)數(shù)產(chǎn)生密碼,使用CRYPT-EXPORTABLE參數(shù)時(shí),產(chǎn)生一個(gè)可以輸出密鑰,以便不同計(jì)算機(jī)或會(huì)話之間采用,CPDestroyKey用于釋放密鑰句柄。加/解密類函數(shù):加密和解密函數(shù)有CPEncrypt、CPDecrypt、CPSignHash、CPVerifySignature等函數(shù),CPEncrypt用于進(jìn)行加密操作,CPDecrypt用于進(jìn)行解密操作,這2個(gè)函數(shù)特別有用,他們包含以下參數(shù),密鑰句柄、散列對(duì)象句柄、用于判斷是否為最后一塊布爾值、加密/解密數(shù)據(jù)塊指針、加密/解密緩沖區(qū)數(shù)量等參數(shù)。注意有些加密算法使得加密數(shù)據(jù)長(zhǎng)度與解密數(shù)據(jù)長(zhǎng)度相同,但有些算法會(huì)增加加密數(shù)據(jù)塊長(zhǎng)度。CPSign-Hash對(duì)數(shù)據(jù)進(jìn)行簽名,其實(shí)質(zhì)是對(duì)數(shù)據(jù)進(jìn)行散列和對(duì)散列結(jié)果進(jìn)行加密(簽名私鑰)合成。CPVerifySig-nature對(duì)簽名進(jìn)行驗(yàn)證,其實(shí)質(zhì)是對(duì)原始數(shù)據(jù)進(jìn)行散列得到結(jié)果一,對(duì)簽名數(shù)據(jù)進(jìn)行解密(簽名公鑰)得到結(jié)果二,比較二者是否一致。如果是,則驗(yàn)簽成功,否則失敗。密鑰操作函數(shù):密鑰輸入/輸出函數(shù)有CPExportKey、CPImportKey,其中CPExportKey用于導(dǎo)出密鑰,使其產(chǎn)生一個(gè)副本,CPImportKey用于導(dǎo)入副本密鑰。獲取和設(shè)置密鑰參數(shù)函數(shù)有CPGetKeyParam、CPGetUserKey、CPSetKeyParam等,CPGetKeyParam用于獲取當(dāng)前密鑰操作的數(shù)據(jù),CPGetUserKey用于獲取用戶密鑰參數(shù)句柄,CPSetKeyParam用于對(duì)密鑰進(jìn)行各種定制操作。其他函數(shù):其他對(duì)CSP對(duì)象和哈西對(duì)象進(jìn)行操作的函數(shù)有CPGetProvParam、CPSetHashParam、CPSet-Provider、CPSetProvParam等,其中CPGetProvParam用于獲取當(dāng)前操作CSP參數(shù),CPSetHashParam用于對(duì)散列對(duì)象定制操作,CPSetProvider用于指定當(dāng)前用戶默認(rèn)CSP,CPSetProvParam用于定制各種CSP操作。3)CSP開發(fā)其他注意事項(xiàng)。在開發(fā)CSP過程中,對(duì)其函數(shù)流程應(yīng)非常清楚。CSP提供運(yùn)算功能可分為:散列運(yùn)算、加密/解密運(yùn)算、簽名/驗(yàn)簽運(yùn)算、密鑰輸出/輸入操作、對(duì)象屬性設(shè)置和讀取等幾類。CSP內(nèi)部運(yùn)行時(shí),一般通過CPAcquireContext得到密鑰容器句柄,并在以后函數(shù)調(diào)用中通過密鑰容器句柄來使用CSP提供各種密碼運(yùn)算。因此在開發(fā)CSP過程中,對(duì)CSP各種初始化工作應(yīng)在CPAcquireContext中完成。在開發(fā)CSP過程中,最重要的就是一定要考慮好其數(shù)據(jù)結(jié)構(gòu),只有合理的數(shù)據(jù)結(jié)構(gòu),才能保證其有序運(yùn)行。其數(shù)據(jù)結(jié)構(gòu)主要包含存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)和內(nèi)存數(shù)據(jù)結(jié)構(gòu),下面是開發(fā)中所采用的數(shù)據(jù)結(jié)構(gòu),以供參考。1存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)CSP中存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)包括2部分,一部分是CSP注冊(cè)信息,即安裝了CSP后它為OS提供定位信息;一部分是CSP自身信息,即對(duì)CSP中用到密鑰容器內(nèi)容保存。CSP安裝好以后,在注冊(cè)表中為OS提供定位信息和使用密鑰容器信息位置。在該密鑰容器中,應(yīng)區(qū)分不同加密方式,對(duì)不同加密方式,應(yīng)給出不同加密動(dòng)態(tài)連接庫函數(shù)。在密鑰容器中可以有各種用戶密鑰信息,如可以包含簽名公鑰值,簽名私鑰值,簽名密鑰對(duì)是否可以輸出,加密公鑰值,加密私鑰值,加密密鑰對(duì)是否可以輸出等各種信息。2內(nèi)存數(shù)據(jù)結(jié)構(gòu)內(nèi)存數(shù)據(jù)結(jié)構(gòu)主
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年汽車買賣合同正規(guī)版本范文
- 魚菜共生系統(tǒng)知到課后答案智慧樹章節(jié)測(cè)試答案2025年春寧夏大學(xué)
- 202x手繪畢業(yè)答辯模板
- 2025《合同管理規(guī)程》聯(lián)合簽署
- 2025街頭小吃攤位租賃合同
- 2025汽車銷售代理合同示范文本格式
- 2024年清遠(yuǎn)市公安局選調(diào)事業(yè)編制人員真題
- 女方非婚生子撫養(yǎng)協(xié)議(2025年版)
- 深圳注冊(cè)公司合同范本
- 2024年福建寧德職業(yè)技術(shù)學(xué)院招聘真題
- 《化工園區(qū)有毒有害氣體環(huán)境預(yù)警體系技術(shù)規(guī)范》
- 小班安全教案玩具不放嘴巴
- 冷鏈倉儲(chǔ)項(xiàng)目經(jīng)濟(jì)效益和社會(huì)效益分析
- 2024AHA心肺復(fù)蘇指南解讀
- 2025年4月自考03009精神障礙護(hù)理學(xué)押題及答案
- 兩輪電動(dòng)車行業(yè)風(fēng)險(xiǎn)分析
- 物業(yè)承接查驗(yàn)方案樣本
- 建筑工程《擬投入本項(xiàng)目的主要施工設(shè)備表及試驗(yàn)檢測(cè)儀器設(shè)備表》
- 品牌牛仔褲委托加工合同
- 糜爛性胃炎的護(hù)理查房
- 新生兒口腔運(yùn)動(dòng)干預(yù)
評(píng)論
0/150
提交評(píng)論