欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于計算機裝置驗證的系統(tǒng)和方法

文檔序號:6560348閱讀:1037來源:國知局

專利名稱::用于計算機裝置驗證的系統(tǒng)和方法
技術(shù)領(lǐng)域
:本發(fā)明通常涉及計算機系統(tǒng)和軟件方法,更具體地說,涉及用于計算機裝置驗證的系統(tǒng)和方法。10
背景技術(shù)
:個人計算設(shè)備已成為我們生活中越來越重要的-一鄰分,而且當這些設(shè)備與因特網(wǎng)相互連接時,安全地驗證交易處理中所涉及的使用這些設(shè)備的實體就變得日益重要。在一個操作系統(tǒng)的受保護的子域中執(zhí)行特許操作的安全內(nèi)核的觀念在對計15割L安全中是---個很陳舊的觀念。然而,在船t商業(yè)操作系統(tǒng)的發(fā)展過程中,象在各種版本的MicrosoftWm.dows、UMX、以及小型設(shè)備的嵌入操作系統(tǒng)中反映出來的那樣,傳統(tǒng)的安全邊界以及操作系統(tǒng)的響應(yīng)度不是變得很模糊、被取代,就是安全漏洞層出不窮。在這種情況下,操作系統(tǒng)變ltt大,致使不可能有育幼來保證或用任何綜合的手段分析該系統(tǒng)。即使在原則上可能有這樣-一20種保證過程,但是實際上在這些系統(tǒng)期望的使用期內(nèi),看起來是不可能實現(xiàn)的。一些系統(tǒng)已采用具有物理上或結(jié)構(gòu)上分離的CPU來容納安全關(guān)鍵數(shù)據(jù)和在更大的系統(tǒng)中執(zhí)行安全關(guān)鍵功能。一個例子就是基于驗證裝置的智能卡。智能卡裝置提供一個對一個或多個嵌入的加密密鑰具有單一存取的分離的操作環(huán)境。它可連接到一個傳統(tǒng)的計勤調(diào)嵌入的密鑰來執(zhí)行數(shù)字簽名、用戶驗證、25及由計算機啟動的事務(wù)處理。同時它很小和簡單,足以在--個相對全面的繼中分析它的安條性。然而,智能卡和其它附加設(shè)備的引入對該環(huán)境來說增加了費用和復雜性,它通常要求用戶和系統(tǒng)管理者安裝卡閱瀆器,而且要求智能卡分配激這些機器的用戶。另-一個例子是在系統(tǒng)中使用一個具有用于存儲密鑰的本地專用剤諸的從屬加密處理器。其功能對以于常插的智能卡的功能。30這些附加硬件的系統(tǒng)的另一個限律提該附加的CPU并不具備自己的輸入和輸出裝置。對這些裝置用戶I/O系統(tǒng)進一步增加了費用和復雜性,而且通常在功能上和方便上很受p艮制。例如,完全依賴于所雜的計算機來告訴它對什么簽名以及用嵌入的密鑰來處理的—-個具有一個CPU的加密附加裝置,對頓連接的計算機上進行的冊滁該設(shè)備的某些保存值的安全劍辦來說是很脆弱5的。由于這些分離裝置的隔離》對該裝置來說,一船艮困難或是不可能保證由主機正向其顯示的交易處理是真實的。因此,在某些方面,該系統(tǒng)還得最終依賴于主機操作系統(tǒng)和應(yīng)用程序的完善。為了裝置應(yīng)用程序軟件的網(wǎng)絡(luò)驗證的目的,本發(fā)明的--個目的是為裝置提供---個強大的加密身份。本發(fā)明的另一個目的是用對系統(tǒng)來說最少的附加硬件10來提供高保i正。本發(fā)明的另一個目的是提供--個系統(tǒng),允許只要求在商品類商業(yè)個人電腦中使用的硬件來完成計算機裝置驗證。本發(fā)明的另一個目的是提供一個小的安全內(nèi)核,其中該內(nèi)核在從應(yīng)用程序和操作系統(tǒng)分離的域中操作,在安全內(nèi)核的實現(xiàn)中易于過程分析和建立信任的逝呈。本發(fā)明的另---個目的是允許安全內(nèi)核訪問操作系統(tǒng)(OS)的存儲器和應(yīng)15用程序,以便建立需要安全內(nèi)核函數(shù)的程序的可靠性和完整性。發(fā)明糊述為實現(xiàn)上述和其它的目的,本發(fā)明包括為計算機設(shè)備管理機構(gòu)提供的系統(tǒng)和方法。本發(fā)明提供了一個小型的安全內(nèi)核,便于在內(nèi)核的實現(xiàn)中分析和建立信任的過程,同時消除了一雄的附加硬件方法的P蹄IJ。理論上來說,安全內(nèi)核20在從運行在主機上的應(yīng)用程序和操作系統(tǒng)分離的一個域中運行,并訪問操作系統(tǒng)OS和應(yīng)用程序的存儲器。本發(fā)明通過在傳統(tǒng)的現(xiàn)有操作系統(tǒng)的邊界內(nèi)創(chuàng)建---個小型的內(nèi)部安全內(nèi)核提供了這樣一個安全結(jié)構(gòu),它能為os和應(yīng)用程序執(zhí)行安全操作并驗證其完整性。本發(fā)明的密鑰方面包括(1)含有一個保密主密鑰的OAR鎖定(QAR-25locked)的非易失性存儲器(NVM),在啟動時能移動進入到系統(tǒng)管理模式(SMM),然后禁止OAR鎖定(OAR-locked)的非易失性存儲器;(2)容器將-一個設(shè)備密鑰賦給專用的應(yīng)用程序,以及解決保密/用戶可控性問題;以及(3)抽査被稱為"忙碌"的調(diào)用應(yīng)用程序的完整性。設(shè)備密鑰用于執(zhí)行設(shè)備管理機構(gòu)來補充用戶驗證,保護僅僅分配給特定設(shè)30備的內(nèi)容,以及例如用本地存儲的和/或遠程得到的憑證(或共用的憑證)啟用一虧隨擬的智能卡。該密鑰#^用于增強系統(tǒng)關(guān)鍵密鑰的保護,例如代替缺省的保密機API容器。用于使用和保護訪問-一個主加密密鑰的一個典型系統(tǒng)包括非易失性存儲器;一個系統(tǒng)初始化過程,在系統(tǒng)初始化繼中從非易失性存儲器讀取主密鑰,5將一個來源于主密鑰的靈1寫;^--個隱蔽的存儲單元,禁止任何運行在系統(tǒng)中的,訪問非易失性存儲器,直到—F—次開始系統(tǒng)初始化過程為止;用于禁止在系統(tǒng)的正常操作模式中運行的任何樹,訪問隱蔽的存儲單元的裝置;以及用于允許在系統(tǒng)的-一個受限的操作模式中運行的一段程序訪問隱蔽的剤諸單兀的裝置。10在存儲器中隱藏一個主加密密鑰的另-一個典型系統(tǒng)包括用于從非易失性存儲器中讀取一個主密鑰、停止訪問非易失性存儲器以致直到下一次系統(tǒng)復位才能進TO問、荊#---個鄉(xiāng)于主密鑰的靈敏數(shù)據(jù)寫入-一個隱蔽的地址空間、以及其中只有運行在系統(tǒng)的一-個限定操作模式中的程序育g訪問在隱蔽的地址空間中的靈敏的加電軟件。15ffil^加密密鑰的可用性限定到具有-一個給定AppCodettgest的應(yīng)用程序上,為應(yīng)用程序提供了用于控制對數(shù)據(jù)的讀和寫訪問的一種典型方法。該方法包括一個密鑰;一個具有應(yīng)用程序想訪問的數(shù)據(jù)的一個密封或開封格式的AppContauier;—個用于執(zhí)行組成調(diào)用應(yīng)用程序的部分字節(jié)的-一個加密摘要來計算AppCodeDigest的CiyptoGate模塊;以及一個包括檢査Appcont纖er和20AppCodeDigest的完整性校驗的C,toGate模lfc以及該主密鑰,用于確定該應(yīng)用程序是否有權(quán)開封在給定AppContamer中的數(shù)據(jù),或者當密封該數(shù)據(jù)時,修改它來增加完整性校驗信息。M31將加密密鑰的可用性限定到在一個專用設(shè)備的應(yīng)用程序上,本發(fā)明為應(yīng)用程J對是供了一種用于對數(shù)據(jù)的訪問進行控制的方法。該方法包括公知的25密鑰QyptoEngme;包含-一個應(yīng)用程序想訪問的數(shù)據(jù)的加密密封格式的一個應(yīng)用辦容器結(jié)構(gòu);一個CiyptoGate函數(shù),在應(yīng)用級程序和CiyptoEngme之間截恥聽有訪問,包括一個用于檢查試圖訪問加密服務(wù)或數(shù)據(jù)的程序的在存儲器內(nèi)可執(zhí)行的圖像的字節(jié)的-一部分的裝置,并計算調(diào)用程序在存儲器內(nèi)的圖像的字節(jié)的一部分的加密摘要來計算應(yīng)用程序的AppCodeDigest;以及一個由3()CiyptoEngine執(zhí)行的完整性校驗方法,用于成檢查AppConte麗er和AppCodeD第est;以及該主密鑰,用于確定該應(yīng)用程序是否有權(quán)開封在給定AppContainer中的數(shù)據(jù),或者當密封該數(shù)據(jù)時,修改它來增加完整性校驗信息。本發(fā)明還為在另一個具有--個設(shè)備管理機構(gòu)的計算機的幫助下、具有----個驗證服務(wù)器的另一個計算f腿供了用于在一個識別裝置上驗證一個識別應(yīng)用程5序的方法。該方&^括一個登記方法、--寸注冊方法以及一個驗證方法。登記方法包括以下步驟a)在--4SMI中斷過程中,在設(shè)備上執(zhí)行第-加密操作,將生成的結(jié)果送給驗證服務(wù)器,b)在一個SMI中斷過程中,在設(shè)備上執(zhí)行第二加密操作,對由設(shè)備管理秒,產(chǎn)生的值進微理,然后El3該設(shè)備接收。i()注冊方法包括以下步驟a)在-一個SMI中斷過程中,在設(shè)備上孰行第一加密操作,將生成的結(jié)果送給驗證服務(wù)器,b)由驗證服務(wù)器操作執(zhí)行第二加密操作,存儲所生成的加密變TO于驗證方法aii中,以及c)在--個smi中斷過程中,在該設(shè)備上執(zhí)行可選的第.三加密操作,對由驗證服務(wù)器生成的值進行處理,然后由該設(shè)備接收。15驗證方法包括以下步驟a)在--個SMI中斷過程中,在設(shè)備上執(zhí)行第一加密操作,將生成的驗證數(shù)據(jù)發(fā)送給驗證月艮務(wù)器,以及b)通過驗證服務(wù)器,對使用至少在注冊方法過程中存儲的加密變量從該設(shè)備接收的驗證數(shù)據(jù)執(zhí)行第二加密操作。本發(fā)明還提供了一種用于在一個識別裝置上驗證一個識別程序的方法,或20者為另--個具有--個PASS服務(wù)器的計算機提供一個用于識另條識別裝置的用戶的第二因子。該方法包括一個應(yīng)用程序,用于a)通過涉及與一個設(shè)備管理機構(gòu)和一個驗證服務(wù)器的通信執(zhí)行一個登記方法,以在設(shè)備上創(chuàng)建一個AppContam仏其中AppContemer是一個與應(yīng)用程序有關(guān)的加密數(shù)據(jù)結(jié)構(gòu),以及b)存儲憑證信息,其中驗證服務(wù)器為AppConteuner存儲一個AppKey和25CustAppKey。在識別設(shè)備上運行一個應(yīng)用程序來執(zhí)行包括下述步驟的驗證方法a)開封存儲憑證的AppConteMer,b)修改憑證,c)重新密封AppConta腦r,d)將識別信息和至少重新密封的AppCont謡er的一部分發(fā)送給驗證服務(wù)器,以及其中,在-一個SM過程中,在處理應(yīng)用limt碼的同-----CPU中也會發(fā)生至少部分的重新密封操作。該驗證服務(wù)器a)接收識別信息和至少-一部分30AppConfainer,b)使用識別信息查找或計算一個AppKey或CustAppKey來開封容器,c)如果開封的AppConfaiiier具有可接受的值,則在專用設(shè)備上的專用應(yīng)用程序被認為是被驗證的,以及d)存儲與AppContainer有關(guān)的密鑰(Appkey或CustAppKey)。為了驗證、保密性、完整性、授權(quán)、核查,或者數(shù)字權(quán)利管理的目的,本5發(fā)明提供了一種用于在設(shè)lt創(chuàng)建和禾傭一個或多個虛擬標記的方法。該方法包含----寸用于每一種虛擬標記的應(yīng)用糊,、用于----寸特定類型的每一個虛擬標記的--個AppContamer、-----個用于計算要求C,toEngine組件的加密服務(wù)的-一個調(diào)用程序的AppCodeDigest的CiyptoGate組件。該CiyptoGate組件已知一個或多個使用期長的對稱密錫。MMCiyptoGateso訪問該QyptoEngine,它已知---個或多個使用期長的對稱密鑰、以及一個或多個{柳期長的公鑰,并執(zhí)行AppContaraer的加密密封和開封,其中在一個SMI中斷過程中執(zhí)行部分加密操作。CryptoGate組件通過核對一部分調(diào)用程序的代碼或靜態(tài)數(shù)據(jù)的數(shù)字簽名、使用已經(jīng)被載入到CtyptoEngme內(nèi)的一個公鑰和--一個AppCodeD堪est值來核對15調(diào)用程l序的完整性。該AppCodeD培est1括調(diào)用程]器內(nèi)的圖像的一部分的一個最近計算的加密散列。CiyptoGate和CiyptoEngine用-:f:a)從一個主密鑰和AppCodeDigest以及其它可選信息得到一個用于開封應(yīng)用程序容器的密鑰,b)使用所得到的密鑰在AppContmner上核對消息驗證f鵬,以及當消息驗iiEf鵬正確時返回一iit20誤,以及c)使用所獲得的密鑰來對AppContamer數(shù)據(jù)解密并將其返回給應(yīng)用程序。通過與設(shè)備有關(guān)的對稱密鑰,本發(fā)明還提供了-一種用于將私有密鑰與應(yīng)用程序安全相關(guān)聯(lián)的方法,其中該應(yīng)用程序與--個含有創(chuàng)H:一個AH)Contaioer的設(shè)備有關(guān),該AppContamer包含私有密鑰。25結(jié)合附圖,參照下面的詳細描述,本發(fā)明的各種特征和優(yōu)點可能更容易理解,其中同樣的參考數(shù)字標明同樣的結(jié)構(gòu)部件,以及其中圖!是說明了根據(jù)本發(fā)明原理的一個典型計算機設(shè)備管理機構(gòu)系統(tǒng)的部件的一個簡報30圖2說明了一個客戶組件層;圖3說明了OSD組件的相互作用;圖4是說明了多因子客戶驗證(MFCA)注冊的框圖;圖5是說明了根據(jù)本發(fā)明原理的第一典型方法的Mi圖;圖6是說明了根據(jù)本發(fā)明原理的第一典型方法的ffi亂5圖7是說明了根據(jù)本發(fā)明原理的第二典型方法的流程亂圖8是說明了根據(jù)本發(fā)明原理的第三典型方法的流程圖;圖9是說明了根據(jù)本發(fā)明原理的第四典型方法的轎瑕圖。具體實施例方式為了更好地理解本發(fā)明,在本說明書中使用的許多定義如下。io設(shè)備是一個包括在操作系統(tǒng)前執(zhí)行的一個BIOS層軟件環(huán)境、且當操作系統(tǒng)運行時可存取的計算設(shè)備,如桌上型電腦、膝上型電腦、,的或無線的計算機。設(shè)備管理機構(gòu)包含有助于啟用設(shè)備的保密特征的--寸或多個服務(wù)t卜算機。保密主密鑰(SMK)是一個對設(shè)備,而且在某些實施例中,是對--十或多個15設(shè)備管理機構(gòu)機來說已知的加密變量。它可直接用作一個用于加密或完整性校驗的一個加密密鑰或作為計算其它加密變量或密鋼的函數(shù)的輸入。一個AppCodeDigest或AppfcationCodeDigest、一個應(yīng)用程序是一段IS序和/或它的靜態(tài)數(shù)據(jù)在存儲器內(nèi)可執(zhí)行的的圖像的部分字節(jié)的一個單向加密轉(zhuǎn)換。該轉(zhuǎn)換可能由如SHA1、MD5、RiPEMD160、SHA-256、SHA-512或20CBC-MAC的函數(shù)完成。AppKey(AppfcationKey)是可直接用作-個用于加密或完整性校驗的加密密鑰、或作為計算其它加密變量或密鑰的函數(shù)的輸入的加密變量。對設(shè)備和應(yīng)用程序?qū)碚f,它的值,定的且來源于主密鑰和AppCodeD,st。CustSeeret(CustomerSeeret)是由可能或不可能在設(shè)備上運行的應(yīng)用系統(tǒng)的某25些部件選擇的一個加密變量。在將殊的企業(yè)中,它與驗證服務(wù)器有關(guān),而且在該企業(yè)域中,它可能與--些用作應(yīng)用程序驗證的設(shè)備有關(guān)。CustAppKey(CustometApplicationey)是一個來源于Appkey和CustSecret、并可直接用作一個用于加密或完整性校驗的加密密鑰或作為計算其它加密變量或密鑰的函數(shù)的輸入的加密變量。3()Appcontamer或ApplicationAppeontaine〗是能《吏用CustSecret或Appkey-來力口密密封或開封的一個數(shù)據(jù)結(jié)構(gòu),其中密封操作是為密封容器的應(yīng)用辦的識別提供保密性和完整性校驗以及可選擇的驗證。QyptoEngme(CiyptographicEngine加密驅(qū)動程序)在-一個只有在開電自檢和經(jīng)過QyptoGate才能得到的受保護的環(huán)境中執(zhí)行加密操作,會游儲和調(diào)用5高完整性的公鑰、存儲至少一個使用期長的對稱密銅(SMK)、從該使用期長的對稱密鑰得出對稱密鑰、執(zhí)廳對稱加密(包括完整性和保密單元)以及公鑰的加密、生成偽隨機數(shù)、可選地加密保密密鑰、并具有其它加密支持函數(shù)如密鑰生成和輸入及輸出密鑰。CryptoGate(CiyptograpMcGatekeeper)截取所有的在應(yīng)用級程序和K)QyptoEngiiie之間的訪問,并能為企圖訪問加密服務(wù)或數(shù)據(jù)的程序檢查程好和/或它的靜態(tài)數(shù)據(jù)在存儲器內(nèi)可執(zhí)行的圖像的部分字節(jié)。AuthBu泡r(AuthorizationBuffer驗證緩沖器)是一個允許一個專門的應(yīng)用程郝Vf亍由Ciyptogate和/或CryptoEngme提供的一套操作的數(shù)據(jù)結(jié)構(gòu),其中該數(shù)據(jù)結(jié)構(gòu)包括AppCodeD,st和IW包括在代碼摘要中的部分的應(yīng)用樹,代is碼及靜態(tài)數(shù)據(jù)的部分說明,而且它包括一個能由QyptoEiigme驗證的數(shù)字簽名。MAC(MessageAuthenticationCock)是一個能用來核對消息或數(shù)據(jù)結(jié)構(gòu)的完整性的值,以要求用并不太公知的---一W瞎變量的方式在消息的部分字節(jié)上計算它。為此公知的算法包括CBC—MAC、DMAC以及HMAC(基于公知的散列函數(shù)如MD5和SHA!)。2()SMI(SystemManagementInterrupt系統(tǒng)管理中斷)是由大多數(shù)的CPU支持的一個中斷屬性,允許BIOS級軟件獲得一個對CPU和在S腿模式外不容易有效的一個永久的存儲地址空間的排他性訪問。將首先描述本發(fā)明的高級設(shè)計。通常,計算機設(shè)備管理機構(gòu)系統(tǒng)10的結(jié)構(gòu)包括-一個或多個設(shè)備管理機構(gòu)、客戶加密驅(qū)動程序(C,toEngme)、理想使用25BIOS、被鎖糊賜失性存儲器以及系統(tǒng)管理模式(S國)、操作系統(tǒng)驅(qū)動程序(OSD)、啟動的客戶應(yīng)用程序(Apps)、驗證服務(wù)器(PASS)以及啟動的服務(wù)器應(yīng)用程序。在客戶設(shè)備和登記服務(wù)器之間提供在線登記過程。交易級應(yīng)用程序接口(API)為客戶服務(wù)器應(yīng)用程序提供擴展的設(shè)備管理機構(gòu)函數(shù)。該系統(tǒng)為在線30的客戶/月艮務(wù)器應(yīng)用程序和離線的獨立函數(shù)提供安全函數(shù)。驗證服務(wù)器是任何加密啟動的服務(wù)器應(yīng)用程序的組件。它的主要的目的是執(zhí)行與安全設(shè)備啟動的應(yīng)用程序有關(guān)的加密函數(shù)。為執(zhí)行上述函數(shù),驗證服務(wù)器密封和開封與-一個加密啟動的客戶進行交換的容器,在需要時利用---十或多個設(shè)備管理機構(gòu)服務(wù)器的幫助。驗證服務(wù)繊持關(guān)鍵ID值表。5設(shè)備管理杉l構(gòu)服務(wù)器主要處理設(shè)備識別和密鑰的登記。在某些實施例中,設(shè)備的保密主密鑰是設(shè)備和一個或多個設(shè)備管理機構(gòu)之間的共享的秘密。在這種情況下,設(shè)備管理機構(gòu)必須所有的需要訪問表示驗證)3ft務(wù)器和其它應(yīng)用月艮務(wù)器的安全的i密鑰的加密操作。本發(fā)明提供対~AppContamers的支持。設(shè)備管理機構(gòu)將AppKeyPart發(fā)送給u>驗證服務(wù)器。服務(wù)器執(zhí)行一個允許創(chuàng)建AppContaiiiere的算法。該算法要求訪問保密主密鑰(SMK)和AppCodeD砂4ACD),并在存儲保密主密鑰的計算機上調(diào)用它。設(shè)備管理機構(gòu)規(guī)定如何在客戶PC上調(diào)用應(yīng)用以及如何用操作系統(tǒng)驅(qū)動程序登記。只要通過設(shè)備管理機構(gòu)服務(wù)器創(chuàng)建了第-一AppQmteuiier,這就可以從任何服務(wù)器在線完成。15公用辦為應(yīng)用程J轉(zhuǎn)U建AppCodeD堪6Ste,當希望運行該應(yīng)用程序時,這些公用程序可以在相同的操作系統(tǒng)上運行。用于應(yīng)用程序的AppCodeMgeste被存儲在相對于應(yīng)用程序的一個新表中的一個數(shù)據(jù)庫中。AppCodeDigeste可存取用于生成AppCortaiers。為服務(wù)器生成公開/私有密鑰對。使用密鑰生成軟件理解的標準itll入和輸出密鑰對。使用有標記的密鑰對對數(shù)據(jù)進行標記。20另夕卜,在本發(fā)明中使用了幾個客戶加密驅(qū)動程序(CiyptoEngme)的實施例,它利用在標準的個人電腦上可獲得的不同硬勝性。圖1是根據(jù)本發(fā)明的原理,說明了一個典型的計M股備管理機構(gòu)系統(tǒng)的組件的簡單框圖。本發(fā)明的首選實施例包括一個由復位B射丁開的鎖存器保護裝置(OAR—lock)14保護的非易失性存儲器.(NVM)11、一個BIOSROM系25統(tǒng)初始化模塊12、一個經(jīng)過系統(tǒng)管理中斷(SM1)從系統(tǒng)的正常操作模式訪問的系統(tǒng)管理模式(SMM)16。鄉(xiāng)護的非易失性存儲器11用來存儲保密主密鑰。BIOS系統(tǒng)初始化模塊12負責安全地將保密主密鑰從非易失性存儲器11傳送到SMRAM'!3中,它是一個受保護的存儲器區(qū)域,只能從系統(tǒng)管理模塊12可尋址。當保密主密鑰傳30送到SMRAM13以后,系統(tǒng)初始化模塊12關(guān)閉鎖存器14使非易失性存儲器11.直至U下次系統(tǒng)復位時才能被運行在系統(tǒng)中的程序15訪問。保密主密鑰只有在系統(tǒng)的正常操作iili中,在隱蔽的SMRAM16中才有效。OAR—lock保護裝置14防止iIM除了啟動時運行的ROM系統(tǒng)初始化模塊12夕卜的任何程序14來讀取非易失'隨儲器n。當讀取非易失性存儲器11后,5系統(tǒng)初始化模塊關(guān)閉鎖存器14以使非易失性存儲器11直到下次系統(tǒng)復位時才B獄問,在該時間段,系統(tǒng)初始4W塊12重新獲得控制權(quán)。當OAR鎖定的非易失性存儲器II不再有效時,使用它的-一個選擇是在BIOSROM根模塊中存儲一個共享的保密主密鑰,其中的BIOSROM根模塊通常是在BIOS系統(tǒng)初始化模塊12中的系統(tǒng)啟動時的開電自檢操作后、通過系i統(tǒng)映射成不可尋址的16K字節(jié)區(qū)域。在用不同的可靠級啟動系統(tǒng)后,還存在通常不能由應(yīng)用程序訪問的其它存儲單元。SMI模式是具有附加的唯一的屬性的tedx86兼容處理器的專用模式。軟件調(diào)試辦不可能單步S鵬SM模式,除了在SMI模式中時,也不可能瀏覽SMI存儲器。該模細于在計算機的正常操作過程中在客戶PC上隱藏保密主n密鑰,并為各種對計算杉席效識別所需的安全目的使用該保密主密鑰,對于系統(tǒng)10的操作來說,i:iM述的特鵬征(BIOSROM代碼、OAR鎖定的非易失性存儲器11、以及系統(tǒng)管理模塊16)并不是絕對需要的,但它們一起為該系統(tǒng)提供了保密操作的最高級的可翁性。在可選的純軟件的實施例中,用更低級的可靠性》提供了相同的函作。20在這種情況下,操作的限定模式是標準的"加gzero"操作系統(tǒng)保護程序,其中在被稱為操作系統(tǒng)驅(qū)動樹竽的系統(tǒng)設(shè)備驅(qū)動程序內(nèi)執(zhí)行CiyptoEngme函數(shù)。因為操作系統(tǒng)驅(qū)動程序不是在SMI模式中運行,因此它就不會同增強的BIOS產(chǎn)品---樣安全。因lttrfr門的額外修改和模糊技術(shù)被包含在產(chǎn)品的純軟件形式中用來防止保密主密鑰被發(fā)現(xiàn)或拷貝。另外,因為保密主密鑰存儲在文件系統(tǒng)中25而不是主板上,因此將附加的設(shè)備檢測加入到操作系統(tǒng)驅(qū)動程序中來將保密主密鑰賦值給個人電腦。另外,在純軟件的系統(tǒng)沒有運行在SMI模式的實施例中,代,括對反向工程師和"破解"來說用于使其更為困難的特定特征。在CiyptoEngme的各種軟件形式中,使用了各種技術(shù)為保密主密鑰和楊1>30力瞎操作提供更強大的可能保護。本發(fā)明提供保密主密鑰和設(shè)備綁定。在保密主密鑰和計算機之間有關(guān)聯(lián),以至使保密主密鑰不能從一臺計算機傳送給另一臺。這種關(guān)眹基于計算機的規(guī)格,并在不丟失使用該保密主密鑰的能力的前提下,允許用戶慢漫地更新它們的計算機。當該主密鑰被賦值給系統(tǒng)中的專門的磁盤驅(qū)動器時,重新格式化硬5盤驅(qū)動器或用另外的系統(tǒng)Hm將禁止該保密主密鑰的使用。本發(fā)明提供那有限的保密主密鑰和會話密鑰暴露。當把它們用在任何操作時,這種設(shè)計限制了保密主密f辯噲話密鑰的暴露。本發(fā)明提供了破解抵抗方法。由于軟件CryptoEngiiie可能具有在SMI存儲器中隱藏保密主密鑰的能力和不能象BIOS---樣在S認中瀏覽代碼操作,軟件ioQ>ptoEngme代碼〈糊附加的方法來防止破解。另夕卜,軟件QyptoEngme使用用于存儲保密主密鑰的&#*防止通用的程序確定該保密主密鑰。現(xiàn)在將討論設(shè)備管理機構(gòu)的概述。設(shè)備管理機構(gòu)組件執(zhí)行下面的功能。設(shè)備管理機構(gòu)待別為應(yīng)用程序和設(shè)備對提供---+AppKey來登記---個設(shè)備并存儲它的SMKm登記應(yīng)用程序。這里將簡單地解釋設(shè)備管理機構(gòu)和附屬模塊!5并在后面做詳細他說明??蛻魬?yīng)用程序是一個加密啟動的應(yīng)用程序,通常運行在基于微軟視窗的個人電腦(PC)上??蛻魬?yīng)用程序允許用戶澳賦該設(shè)備是否已登記、登記該設(shè)備和顯示KeyID、在設(shè)備上注冊應(yīng)用程序、生成包括Creat、Edrt、Delete的ApopContamers—、將AppContamers發(fā)布到驗證服務(wù)器、從驗證服務(wù)器獲得20AppContamers以及不登記該設(shè)備。驗證服務(wù)器是--個客戶/服務(wù)器加密啟動的應(yīng)用程序的服務(wù)器部分的-個組件。它負責驗證從客戶端傳送的信息。驗證服務(wù)器是從客戶設(shè)備接收登記請求、從應(yīng)用程序登記模塊請求AppKey并存儲該AppKey、創(chuàng)建AppContaiier并發(fā)送到客戶設(shè)備端、提供用戶接口(HI)以fflM—個UT生成AppContamers25(Creat、Edk、Seal和Unseal)、從客戶設(shè)釗妾收AppContamers的軟件組件。設(shè)備管理機構(gòu)由幾個組件組成并至少具有下面的功能。---個登記模塊接收請求去登記--個設(shè)備。它拒絕客戶保密主密鑰的一半,并生成返回給客戶設(shè)備的另外一半保密主密鑰。應(yīng)用程序注冊模塊為AppKeys接收請求、構(gòu)造該AppKeys并將它返回給調(diào)用程獰。30現(xiàn)在討論一個典型的用戶經(jīng)歷。當測試一個包括設(shè)備管理機構(gòu)的系統(tǒng)時,用戶期望Mf操作指令?;镜母拍钍怯脩舻怯浺粋€客戶設(shè)備(運用設(shè)備管理機構(gòu)的登記模塊)、注冊一個應(yīng)用程序然后在那個設(shè)備上創(chuàng)建、編輯、密封和開封Appcoiitamers(運用設(shè)備管理機構(gòu)的應(yīng)用程序注冊模塊)。用戶還能將Appcont細ers發(fā)送給其中能用由應(yīng)用程序注冊模塊生成的AppKey對它進行操5作的驗證服務(wù)器。驗證服務(wù)器功能由設(shè)備管理秒胸激活。一個典型的力絮是客戶PC<—>應(yīng)用|注冊和AppContainer傳送〈一>經(jīng)過服務(wù)器客戶PC<_—>登記<—一>設(shè)備管理機構(gòu)服務(wù)器—H面是用戶運用該系統(tǒng)所執(zhí)行的操作。io在客戶端所做的設(shè)備登記如下所述。為登記該設(shè)備,用戶使用客戶應(yīng)用程/m行下面的操作。用戶對登記進行測試。通a^t登記選項的觀賦就能保證該設(shè)備以前沒有被登記過。如果該設(shè)備已經(jīng)登記過且用戶希望重新登記,則選定應(yīng)用程序中的未15用戶選擇--一個登記設(shè)備選項。該選項與登記服務(wù)器聯(lián)系并為該設(shè)備生成一個保密主密鑰。該保密主密鑰將返回給客戶PC并存儲(它,儲在明WL依賴于所使用的加密系統(tǒng)的版本)。出現(xiàn)的對話框表明該設(shè)備已經(jīng)登記。用戶在設(shè)備管理機構(gòu)日志中校驗--個新的保密主密鑰已經(jīng)創(chuàng)建。用戶能使用在設(shè)備管理機構(gòu)上的登記用戶接口檢驗以表明已經(jīng)創(chuàng)建了-一個新的保密主密20鑰。在客戶端的應(yīng)用程序注冊如下所述。為謝f下面的操作,用戶必須具有一個已登記的客戶設(shè)備。用戶開始注冊。用戶選擇注冊項來開始注冊。此時提示用戶為應(yīng)用程序和設(shè)備組合輸入標識符(ADID)。25通過驗證服務(wù)器將注冊請求發(fā)送給應(yīng)用程序注冊模塊。應(yīng)用程序注冊模塊生成一個AppKey,然后將它返回給驗證服務(wù)器。用戶可能核對應(yīng)用程序注冊模塊日志。用戶使用應(yīng)用程序注冊模塊用戶接口核對已為該應(yīng)用樹竽生成了AppKey。用戶可能為注冊核對驗證月艮務(wù)器日志。用戶為運行在設(shè)備.-1的應(yīng)用程序的30實例核對該驗證服務(wù)器現(xiàn)在有一個AppKey。用戶可能在客戶設(shè)備上檢驗現(xiàn)在具有--個AppContamier。通過在客戶設(shè)備上的AppContainer菜單,用戶看到-一個他已經(jīng)具有一個AppContainer的直觀確認。在客戶設(shè)備上的AppContamer操作如下所述。下面將討論在客戶設(shè)備上運5用AppCont謹erer能作什么。在注冊以后,用戶將在一個設(shè)備具有由驗證服務(wù)器創(chuàng)建的一個AppContoMer。在客戶端上提供的選項允許用戶將AppContaitier發(fā)送給月艮務(wù)器以及下面將描述從驗證服務(wù)器請求一個AppCoHtamff,邀每在以下迸行描述。這些選項的目的是提供一種用于說明在客戶和驗證服務(wù)器之間的一個典型交易的方法。用10實例解釋是最好的方法。用戶想為在他的客戶PC—tl的虛擬現(xiàn)金抽屜增加錢。當前的結(jié)算存儲在AppContamer中。用戶在li^抽屜應(yīng)用程序中選擇一i^曾加現(xiàn)金的選項以及與AppContaiiier—起發(fā)送給運.行在驗證服務(wù)器(由一個現(xiàn)金抽屜提供者運行)的AddCash腳本。打開AppConfainer,改變數(shù)據(jù)并將它返回給用戶,在同一交易15中這些操作都是可能的。在本系統(tǒng)的一個實施例中,設(shè)備管理機構(gòu)用戶能看到在客戶和驗證服務(wù)器之間將發(fā)生什么,并在他自己的設(shè)備iJI作AppCo幽mer、并以他自己的速度增加M和校驗日志等。因此代發(fā)--刊每AppContamer發(fā)送給服務(wù)器、改變預定義的數(shù)據(jù)并將其返回給客戶的基本交易,而是提供了一個讓這個工作由用戶20從客戶設(shè)備崩動的功能。用戶能在客戶端選擇一個選項來將AppCont繊er發(fā)送給服務(wù)器。然后用戶能轉(zhuǎn)至朋艮務(wù)器,f效寸它是否在那兒,在它中改變一些數(shù)據(jù)并重新密封它。然后用戶回到客戶PC并返回該AppContamer。在本發(fā)明的首選實施例中,用戶彈出而不是讓服務(wù)器將容回。在客戶應(yīng)用程序上有一個AppContamer菜單允許用戶列出A靜Contamer、25編輯一個AppCoetamer、將-一個AppCont纖er發(fā)送給驗證服務(wù)器、從驗證服務(wù)器接收一個AppContainer、創(chuàng)建一個AppContamer以及刪除一個AppContamer。列出AppCoiitainer。所有的AppContamer由應(yīng)用程J,存儲在客戶設(shè)備上的--4^夫省目錄中。選擇列出AppContamer選項允許顯示所有的容器(可能具有某些用于識別創(chuàng)建它們的應(yīng)用程序的數(shù)據(jù))。用戶能突出顯示列表中的一個30AppContamer,然后選擇下面兩個選項中的-一+:編輯AppCoiit細er。應(yīng)用程序警告用戶AppContamer當前是密封的,并提示ft!iiW嘗試和開封它。如果開封成功則在文本框中顯示AppContamer的內(nèi)容并會g進行編輯。如渠用戶P夂變了任一AppContamer,則關(guān)閉AppCont認ier,將給他--一個密封AppContamer的選擇。5將AppContamer發(fā)送給驗證服務(wù)器。用戶將AppContamer發(fā)送給驗證服務(wù)器。這允許用戶轉(zhuǎn)到驗iiE服務(wù)器并嘗試操作該AppCont細er。從驗證服務(wù)器獲取AppCoitamer。用戶能從驗證服務(wù)器請求一4it定的文件。創(chuàng)建AppContamer。用戶應(yīng)該能創(chuàng)建他自己的AppContmner。當用戶選擇io該選項時,可得至,上面所述的編輯AppContamer選項相似的能力。刪除AppContamer。這并不是一個加瞎功能但對幫助整理系統(tǒng)是有效的?,F(xiàn)在將討論在驗證月艮務(wù)器上所做的AppContamer操作。驗證服務(wù)供允許用戶完成各種任務(wù)的兩個用戶接口(AppKeys日志和AppContamer)。該AppKeys日志用來向用戶表明當請求-4AppKeys時實際上發(fā)生的事。is它不允許用戶對該信息做任何的操作。它可能是-一個日志瀏覽器,用來表示用-一個標識符從客戶設(shè)備接收了—-個AppKeys請求和存儲了該AppKeys。它可會表示如日期/時間、請求客戶設(shè)備的1〖)她址、KID、所得到的AppKeys等等的信息。AppContamer用戶接口提供了與那些客戶設(shè)備應(yīng)用程序相似的選項。用戶2()能列出AppContamer、創(chuàng)建一個AppContamer以及刪除一個AppContamer。歹咄AppContamer表示列出所有和它們所屬的應(yīng)用程序的標識符一起存儲在驗證服務(wù)器上的AppContamer。選擇一個AppContamer,引出能提供編輯AppContamer的內(nèi)容的另一頁。使用創(chuàng)建AppContamer,用戶為客戶設(shè)備(設(shè)備當時請求)創(chuàng)建25AppContamer。該刪除AppContamer功能并不是加密功能但有助于幫助整理該系統(tǒng)。登記和應(yīng)用程序注冊模塊具有-一個提供了有關(guān)所請求的主密鑰、AppKeys等的信息的用戶接口/日志瀏覽器?,F(xiàn)在將討論加密服務(wù)器的設(shè)計。該服務(wù)器具有分解功能以方便各種組件的30保護。主要的想法是密鑰從不轉(zhuǎn)至U任何網(wǎng)絡(luò)。該組件包括密鑰、加密庫以及一個登記代碼。密鑰(保密主密鑰、服務(wù)器私有密鑰)最好存儲在結(jié)合了各種加密功能組合和密鑰數(shù)據(jù)庫的保密盒中。加密庫為驗證月艮務(wù)器提供了用來在各種容器中執(zhí)行最初的操作(enc、dee...)的必要的程序。登記函數(shù)生成在系統(tǒng)中最敏感數(shù)據(jù)當中的保密主密鑰、秘密。5登記代碼保護該保密主密鑰并將它們安全地送到IB己客戶設(shè)備。加鄉(xiāng)緣器的邏輯配置如下所述。在防火墻和載入均衡器之后是HTTP服務(wù)ffL運行EnrollmentprotocolHanciler(十容f樓)的服務(wù)器。在另一個邏輯防火墻后用來防止密鑰服務(wù)器接收未驗證的信息是io具有運行EnroUmentgetSi流(+容器類)的密鑰數(shù)據(jù)庫的密鑰服務(wù)器和RSA-Bsrfe加密數(shù)據(jù)庫加密服務(wù)導總密地存儲王種用于代碼標記、通信和根密鑰的私有密鑰。根密鑰用于標記新的低級密鑰。這些密鑰存儲在一個加密文件中并在啟動時由加密模塊載入。15在與每一位客戶登記時生成的保密主密鑰存儲在數(shù)據(jù)庫中。設(shè)備管理機構(gòu)生成保密主密鑰。該代碼從登記的一個小服務(wù)程序/協(xié)議處理部分接收一個public(mkc(elientSeed))。設(shè)備管理機構(gòu)所要求的基本的功能是處理登記請求。Eiiro"mentprotocolHandler函數(shù)從網(wǎng)絡(luò)獲得容器并將它們傳送到加密服務(wù)器,20以便e鵬ltoentgeiiSmk欄能頓任何其它部分都不暴露任何密鑰信息盼,況下完成它的工作。下面將詳細討論部件。登記。登記的處理流程如下(i)由一個客戶調(diào)用一個登記小服務(wù)程序。25(2)登記小服務(wù)程序3iMRM1在保密服務(wù)器上實例化Enrol〗ment類。將l叩utSteam作為-一個自錢傳送給保密服務(wù)器上的一個Enrollment對象。(3)然后,EnroU認nt對象在保密服務(wù)器上進行用接收到的InputStream構(gòu)造---力個PubKConfamer類作為一個構(gòu)造函數(shù)變量。30從PubK容器得到一個MK容器的實例。從歐容器提取SMK客戶籽數(shù)。產(chǎn)生一一個隨機的SMK月艮務(wù)器籽數(shù)(如SMK的服務(wù)器部分)。將SMClientSeed與SMKServerSeed連接起來生成主密鑰。該連接是按SMC〗ientSeed+SMSe證Seed的順序連接。5在MK容器對象中設(shè)置適當?shù)牟僮鞔a和數(shù)據(jù)(SMKServerSide)。iM在上述步驟中形成的主密鑰上執(zhí)行SHM來生成一個KeyID。將主密鑰和Key1D轉(zhuǎn)換成BigMegers,荊每它們存儲在數(shù)據(jù)庫中。密封所獲得的MKContoiner對象。得到以從保密月艮務(wù)器發(fā)送到Web服務(wù)器(即到調(diào)用登記小服務(wù)程序)的字io節(jié)數(shù)組格式的原始數(shù)據(jù)。登記小服務(wù)程序?qū)⒃甲止?jié)轉(zhuǎn)換成:faputSfream,并將它作為Http應(yīng)答發(fā)送給客戶。一戰(zhàn)的流程是一個簡單的實施例。在首選的實施例中,一個應(yīng)答小服務(wù)程序等待一個客戶應(yīng)答(已經(jīng)成功地接收了SMKServer籽數(shù))然后為永久的保密15主密鑰更新數(shù)據(jù)庫表。鵬將詳細地討論模塊紐牛。客戶應(yīng)用,是一個通常運行在基于微軟視窗的PC上的應(yīng)用程序。為使該應(yīng)用程序使用加密功能,將它連接到由操作系統(tǒng)驅(qū)動程序調(diào)用的內(nèi)核模式(KernelMode)設(shè)備驅(qū)動fi/,上。20該應(yīng)用程序提供以下的功能初始化、Enrollmeiit檢驗、登記該設(shè)備、在設(shè)備上注冊應(yīng)用程序、列出AppCoDtamers、編輯AppCont細ers、保存AppContamers、將AppConteimers發(fā)布給驗證服務(wù)器、從驗證服務(wù)器獲取AppConteuners、創(chuàng)建一個新的A靜Conteiners以及不登記該設(shè)備。至子初始化,當調(diào)用應(yīng)用程序時,它自動按如下:進行載入操作系統(tǒng)驅(qū)動25程序并調(diào)用OsdRegisteAppMeation以將應(yīng)用程序設(shè)置為一1嗜冊的應(yīng)用程序。在登記檢驗中,調(diào)用OsdG改Capa.b他ies核對返回的C邵ab他ies參數(shù)以便觀察該設(shè)備是否已經(jīng)注冊,并顯示一個對話來表明該設(shè)備是否注冊。為登記該設(shè)備調(diào)用OsdEnroilGenerateReqest來獲得一個密封的PubKQ窗證、將HTTP請求發(fā)送到設(shè)備管理機構(gòu)EnroU.mentURL、請求體中30傳送在PubKContamer、核對該應(yīng)答代碼以確保操作成功。如果成功,則將返回的內(nèi)容傳送作為調(diào)用OsdEnrollProeessResponse中的MKContainer參數(shù),并顯緊--,對話柩以表明登記是否成功。為在設(shè)備上注冊--個應(yīng)用程序,調(diào)用OsdGetCapabiMti.es并核對返回的該CapaM.fes參數(shù)以便觀察設(shè)備是否已經(jīng)登記。如.果沒有,貝,上面所定義的方5法登記該設(shè)備。提示用戶一個用于識別應(yīng)用程序/設(shè)備結(jié)合(ADID)的字符串。創(chuàng)建一個將被用于注冊的PubKCort腿er。將HTTP請求發(fā)送給設(shè)備管理機構(gòu)RegisterApi)URL,并在請求體中發(fā)送.PubKContamer和ADID。核對應(yīng)答鄉(xiāng)馬以確保操作成功。如果成功,則產(chǎn)生的數(shù)據(jù)應(yīng)為AppCootaiiiei"。在缺省的目錄中存儲AppContainer。10用戶能用高亮顯示一個AppOiitamei:的方式顯示存儲在缺省目錄中的AppContamer的歹懷??蛻魬?yīng)用程序提供以下能力(通過菜單選項、按鈕等),輯高亮顯示的AppContamer、刪除高亮顯示的AppContainer、將高亮顯示的AppContainer發(fā)送到驗證服務(wù)器以及創(chuàng)建一個新的AppContainer。15為編輯一個AppContainer,首先通過調(diào)用一個OsdAppContainerUnseal函數(shù)、傳送AppContainer文件pContmiierBuffer參數(shù)來開封-AppContainer,以及如果OsdAppContamerUnseai不成功,則顯示一個錯誤對話框。分析AppContainer結(jié)構(gòu)以獲得數(shù)據(jù)字段。在一個允許用戶修改數(shù)據(jù)的編輯框中顯示AppContamer的內(nèi)容。提供保存或放棄這些對AppContamer的修改的能力。2()為保存AppContainer,密封AppC復itainer、重構(gòu)AppContamer數(shù)據(jù)結(jié)構(gòu)、調(diào)用OsdAppContamerSeal函數(shù)、發(fā)送pConteuierBuffer參數(shù)中開封的OsdAppContamerSeal結(jié)構(gòu)的內(nèi)容,以及如果OsdAppContamerSeal不成功,則顯示一^tl昔il^話框。將密封的AppContoiiier結(jié)構(gòu)保存到文件中。為將AppContamer發(fā)布到驗證服務(wù)器,將HTTP請求發(fā)送到URL使25HeresAnAppContaiiierForYa函數(shù)在請求體中傳遞高亮顯示的AppContainer文件的內(nèi)容,并核對HTTP請求的狀態(tài),以及顯示一個對話框表示成功或失敗。為從驗證服務(wù)器獲得一個AH)contamers,提供一個對話框來允許用戶在服務(wù)器上選擇打算下載的文件。將HTTP請求發(fā)送給URL使OiGiveMeAnAppCortaier函數(shù)在i青求體中傳-送所請求的Appcontamers的內(nèi)容。30核對HTTP請求的狀態(tài)并顯示成功或失敗的對話。如果打算覆蓋--個文件則提示用戶覆蓋原文。為創(chuàng)建一個新的Appeoiitaiiiers,打開一個已存在的Appcontamers文件、幵封該Appcxmtamers、以廁每數(shù)據(jù)塊置0、并允許用戶編輯該數(shù)據(jù),然后跟隨SaveAppContauier函數(shù)(將該文件保存為一個由該用戶指定的新的文件名)。5為不登記該設(shè)備,調(diào)用OsdRegi.sterAppiication以將應(yīng)用程序設(shè)置為一個注冊的應(yīng)用禾ii,。調(diào)用OsdGetC邵abiftes-來核對所返回的CapabilitiesWord以便觀察設(shè)備是否已經(jīng)登記。如果設(shè)備已經(jīng)登記了,則調(diào)用OsdlnvaHateSMK。由驗證(PASS)3路器提供的功能如下所述。驗證服務(wù)器能注冊設(shè)備/應(yīng)用程序組合??蛻粼O(shè)備用請求體中的PubKContamer和A)1D向O亂egisterMeio函數(shù)的U:RL發(fā)送一個請求。驗證服務(wù)器給ARM月艮務(wù)器發(fā)送和轉(zhuǎn)換該請求。A畫服務(wù)器產(chǎn)生和返回相對于ADID、應(yīng)由驗證服務(wù)器存儲的---個AWKey。然后驗證月艮務(wù)器使用最新生成的Appkey創(chuàng)建--個AppCo血iner并將它發(fā)送回客戶設(shè)備。注冊就算完成了。上面所述的操作均是在客戶、驗證服務(wù)器和應(yīng)用程序注冊模塊之間的単+交易中完成的。15驗證服務(wù)器提供一個用戶接口以便通過用戶接口來操作AppContamers(Creat、Edit、Sea!和Unseal)。驗證月艮務(wù)fl^供一個允許用戶操作AppContamers的用戶接口。這可以通過〗頓HTML和具有用Java寫的代碼的JavaServelte來完成,以便允許密封和開封AppContamers等等。正如有關(guān)運行在客戶端的應(yīng)用程序的部分中所定義的那樣,需要頁來列出(List)和編輯(Edit)2()AppConta認rs。驗證服務(wù)ll能從客戶設(shè)備接收AppContamers??蛻粼O(shè)備具有一個允許將AppContamers發(fā)皿驗證月艮務(wù)器的功能。存在于驗證服務(wù)器上的入口點允許這種情況的發(fā)生。這可通,用一-個從輸入流讀取并將數(shù)據(jù)連同文件名存儲在文件中的小服務(wù)器程序、或甚至更簡單i鵬過激活驗證服務(wù)器上的HTTP的PUT25方法來完成?,F(xiàn)在將討論容器和密鑰。容器是用于保存信息的結(jié)構(gòu)。能標記和/或加密該信息。為增加保密性,可使用各種類型的容器。有些僅可用做標記數(shù)據(jù)。有些容器保存加密的數(shù)據(jù)。甚至在加密的容器中,它們是依賴于所使用的加密算法的子類型。有四種類型的容器。30SignedContamer保存由私有密鑰(來源于標記的密鑰對)數(shù)字標記、并可用匹配的公開密鑰(在客戶端公開密鑰存儲在ROM/閃存中)驗證的數(shù)據(jù)。這些用刺每驗證后的數(shù)據(jù)從設(shè)備管理機構(gòu)服務(wù)器發(fā)送到客戶機,并用來授權(quán)軟件模塊使用設(shè)備管理機構(gòu)客戶服務(wù)。AppContamer是一個只能由運行在一+特定計算機上的專用應(yīng)用程序讀或5寫的受保護的容器。這些容器識別密封它們的程序,并可能條其它的程序開封一個容器,因此它ff]能用作進程間通信的保密格式。象檢觀瞞毒改刻,的高級安全功能、軟件許可和安錢包能建立在AppCont細er的頂部。通常逝!l使用保密主密鑰的派生物用于加密來將AppContamer賦給-一個給定討黧機。PubKContainer是由客戶(OSD)用一個RSA公開密鑰(來自通.信密鑰對)w密封和只有通過具有匹配的公開密鑰的接收器(通常是設(shè)備管理機構(gòu)服務(wù)器)讀的-外數(shù)字信封。這些在登記逝呈使用,并用于在客戶和驗證的設(shè)備管理機構(gòu)服務(wù)器之間建立---個加密的通道。在這個容器內(nèi)的數(shù)據(jù)是用通過操作系統(tǒng)驅(qū)動程序隨機生成的128位加密密鑰(也稱為產(chǎn)品內(nèi)的一個主密鑰)加密的。RC6密鑰(主密鑰)和客戶的KeyID(KID)是用接收器的公開密鑰(服務(wù)器15ilifPubKey)加密的。藤于對這個容器的寫和讀程序來說已知的主密鑰(由客戶創(chuàng)建和以-一個PubKContamer發(fā)送)MKContameK用作一個數(shù)據(jù)信封的--一部分。在經(jīng)山PubKContamer將主密鑰發(fā)送給服務(wù)器后,這可用于在客戶和設(shè)備管理機構(gòu)月艮務(wù)器之間的安全通信。也可用于保護客戶計翻L.t的局部繊。20鵬容器結(jié)構(gòu)具有一組能在它們上執(zhí)行的預定義操作。這些操作邀密封或幵封的。密封能不加密地標記(正如證書具有大學的圖章,但任何人都能閱讀證書的內(nèi)容)。密封也能加密(正如含有一個獎品的優(yōu)勝者的信封是密封的,因此如果不開封的話,沒有人待瞎到內(nèi)容)。25開封是密封的逆過程。這能證實圖章是原始的(正如證書上的圖章,它們具有某些幾乎不可能復制的能被檢驗的特征)。開封也能暴露隱藏的內(nèi)容(就獎品來說,獲得隱藏的內(nèi)容是相當容易的)。每一個容器結(jié)構(gòu)如下所述。在密封操作描述之后,容器結(jié)構(gòu)顯示在它的開封版本中。因此密封的結(jié)構(gòu)是ffi3f開封操作的描述來顯示的。如果因為任何原30因一個操作失敗。貝鵬-容器置0。下面逐條列舉由本發(fā)明提供的功能。-"j、組的容f樓型支持a)通信安全,b)系統(tǒng)完整性,以及c)應(yīng)用程序?qū)iT保護的容器。由本發(fā)明提供的功能允許人們在客戶和設(shè)備管理機構(gòu)服務(wù)器之間創(chuàng)建一-個保密主密鑰以便允許數(shù)據(jù)容器itit令的創(chuàng)建只能在特定的設(shè)備上有意義,基于程序而不是用戶的標識控制的5的訪問,驗證繊于一個經(jīng)授權(quán)的設(shè)備管理機構(gòu)服務(wù)器的信息、驗證來源于特定設(shè)備的信息,支持用于需要保存搗毀證據(jù)保密的應(yīng)用程序的受保護的處理環(huán)境,以及支持只能由特定程序覆蓋的數(shù)據(jù)存儲區(qū)域?,F(xiàn)在將討論本發(fā)明的設(shè)計的概述。受保護的容器由低級BIOS代碼和OS層驅(qū)動程序(()SD)代碼(如,Win98下的VXD)實現(xiàn)。有些BIOS代碼在POSTio過程中運行以在系統(tǒng)管理存儲器(SMM)中建立經(jīng)由系統(tǒng)管理中斷(SMI)調(diào)用的程序糊的信息。SMI程序鵬來自閃存的公幵密鑰執(zhí)行RSA操作,因此很難篡改。SMIf靜也隱藏和管理對設(shè)備和設(shè)備管理機構(gòu)服務(wù)器來說公知的一個保密RC6密鑰的保密主密鑰。加密原語從這個單一的128位主密鑰中導出多個密鑰,其中每個密鑰用于單個目的。SMI程序驗證它們的調(diào)用樹,,而15且僅拋亍用于-一個經(jīng)授權(quán)的操作系統(tǒng)驅(qū)動模塊的月路。所有的客戶都了解服務(wù)器的公開密鋼,因此它們能檢驗服務(wù)器標記了一條信息》這是因為服務(wù)器是唯一知道匹配的私有密鑰的一個。保密主密鑰對每一個設(shè)備來說是唯---的,而且僅有那臺設(shè)備和服務(wù)器知道。如果消息由保密主密鑰ii當?shù)乇Wo,則該消息一定來源于具有唯一i密主密鑰的服務(wù)器或客戶???0戶使用一個作為保密主密鑰的SHA1摘要的20字節(jié)密鑰標識符(KeyIdentifier)來識別它們。在下面這個意義上來說,SHA1函數(shù)是單向的,即在已知KeyID、而不是試每一十可能的主密鑰去觀察是否能生成有效的KeyID,對攻擊者尋找保密主密鑰來說毫無幫助。有非常多的保密主密鑰值(2到12^冪)接近實際。在保密主密鑰的幫助下,AppCont訓eB是安全的。每一個容器用一個密鑰25謝f加密,其中該密鑰是保密主密鑰和屬于該容器的程序的代碼摘要的一個函數(shù)。該設(shè)計保證了SMI級代碼僅為用于創(chuàng)建該容器的辦開封--個容器。創(chuàng)建用在特定計算機上的特殊程序的第容器必須包括設(shè)備管理機構(gòu)服務(wù)器。中級操作系統(tǒng)驅(qū)動禾Mif'代碼支持容器抽象,并執(zhí)行X寸SMI程序來說不可能的操作。例如,SMI辦不能接收缺頁,因此操作系統(tǒng)驅(qū)動程序必須在調(diào)用SMI30程序前將參數(shù)拷貝到鎖定的存儲器中。操作系統(tǒng)驅(qū)動程序也能比SMI程序運行更長的時間。操作系統(tǒng)驅(qū)動程序支持可能的由作為WDL—部分的序列發(fā)生器下載的容器函數(shù)。安裝和初始化WDL的過程包括建立受保護的容器j^胄求的主密鑰。用于支持本文中安全特性的協(xié)議嚴重依賴于本文中所述的四種類型的容5器。例如,創(chuàng)建主密鑰的登記協(xié)議是基于將這些容器與設(shè)備管理機糊艮務(wù)器交換。系統(tǒng)使用加密密鑰以便在客戶系統(tǒng)它本身以及客戶和設(shè)備管理機構(gòu)服務(wù)之間提供程序和數(shù)據(jù)的私有性、完整性和驗證。下面將討論存在的密鑰和如何使用它們?nèi)チP湃魏虇H全。io在本發(fā)明中使用了公開/私有密鑰對。公幵/私有密鑰對被用于安全地處理不需要與特殊的客戶系統(tǒng)關(guān)聯(lián)的數(shù)據(jù)。這些主要用來保證從任何客戶端傳送到設(shè)備管理機構(gòu)服務(wù)器、以及與此相反傳送的數(shù)據(jù)是可信的,而且將有助于數(shù)據(jù)是私有的(加密的)。在制造過程中,這些密鑰存儲在ROM中。設(shè)備管理機構(gòu)服務(wù)器保存用于不同目的和存儲在服務(wù)器環(huán)境中不同位置的15三個RSA密鑰對的私有密鑰??蛻魴C系統(tǒng)保存這些密鑰對的公開密鑰并存儲在ROM中。使用這些密鑰對的每一個標準的加密1024位版本。這三個密鑰對是根密鑰對(RootKey-Pair)。私有密鑰存儲在由未連接到Internet的設(shè)備管理機構(gòu)控制的一個計算機中。匹配的公開密鑰存儲在客戶計算機的ROM中。20私有根密鑰用來標記新的公開密鑰,然后將它們發(fā)送給客戶計算機來替換舊的公開密鑰。這些根密鑰很少使用。公開密鑰與帶標記的容器一起用在客戶機系統(tǒng)中。服務(wù)器通f言密鑰對。這也被稱為封裝密鑰對,并被用作動態(tài)數(shù)據(jù)標記。私有密鑰存儲在設(shè)備管理機構(gòu)服務(wù)器上并用來與客戶建立安全通信。私有密鑰能25用來開封由客戶發(fā)送的密鑰(以及其它任何的數(shù)據(jù)),或動態(tài)地標記所創(chuàng)建的將由客戶檢驗的消息。它與PubKContamers—起使用。所有的客戶具有一4if儲在他ff]的BIOSROM中的匹配的公開密鑰的拷貝。帶標記的密鑰對。存儲在設(shè)備管理機構(gòu)標記的計算機上的私有密鑰不能直接由Internet訪問。私有密鑰用來標記下載的文件(程序和配置數(shù)據(jù)),然后將30它放置在設(shè)備管理機構(gòu)服務(wù)器上并最終將它發(fā)送給客戶計算機。所有的客戶計算機,具有匹配的公開密鑰,因此它ff]能鄉(xiāng)油私有密鑰創(chuàng)建的簽名。標記密鑰對大量地用來驗證靜態(tài)信息,如新發(fā)行的軟件組件。由于私有密鑰不能從Internet訪問,因此它就更容易保護。公有密鑰用在帶有標記的容器的客戶系統(tǒng)中。對上面所有的操作,有可能5只使用一個密鑰對。然而,為不同冃的使用不同的密鑰對很廉價且容易降低成功地摧毀旨系統(tǒng)的攻擊的可能性。保密密鑰。由于相同的密鑰可用在加密和解密中,因此下面的密鑰是對稱密鑰。主密鑰被用作創(chuàng)建在加密/解密中使用的對稱密鑰的基礎(chǔ)。在客戶和服務(wù)io器之間單ttOi信的過程中,通?!额D這些密鑰。它們等同于對話密鑰。保密主密鑰用來安全地處理數(shù)據(jù),它需要與特定的客戶系統(tǒng)相關(guān)聯(lián)。該保密主密鑰是唯一的且用來驗證該客戶系統(tǒng)。因為它唯一地識別該客戶系統(tǒng),因此加密主密鑰是很重要的。它被用作創(chuàng)建用在加密/解密算法中使用的其它對稱密鑰的辭出。在登記aii中創(chuàng),凍主密鑰并通過設(shè)備管理機構(gòu)服務(wù)器發(fā)送15給客戶。主密鑰只能由設(shè)備管理機構(gòu)服務(wù)器以及在客戶系統(tǒng)上的加密的ROM組件中訪問。ROM組件運行在系統(tǒng)管理模式中(SMM),它是用于x86處理器的--個特定的模式,且不能由軟件反匯編程序跟蹤。保密主密鑰用在客戶系統(tǒng)h來密封和開封AppContamers。保密主密鑰賦給20—臺計算機且--定不能變換(除非是如果先將它傳送給設(shè)備管理機構(gòu)服務(wù)器然后傳送給另一個客戶)。在正規(guī)的系統(tǒng)存儲器中,不可能暴露保密主密鑰。因此它不應(yīng)該能被黑客截獲和傳送給另一iS+算機的操作系統(tǒng)驅(qū)動程序級。密封禾[l開封AppContainer的操作應(yīng)該嚴格地在SMM中執(zhí)行。用來密封和開封的所有其'at作可能由操作系統(tǒng)驅(qū)動程,層執(zhí)行。25密鑰標識符(KID)是保密主密鑰的單向的SHA1摘要。該KeyID用來識另贓從客戶發(fā)給服務(wù)器的信息中的客戶。M于客戶的信息頭部包括Key〖:),服務(wù)劉f使用它在保密主密鑰數(shù)據(jù)庫表中尋找與客戶的主密鑰對稱的密鑰,然后依次用來導出解密其它的信息的密鑰。當?shù)怯涍^程沒有指定保密主密鑰時,保密主密鑰用一十臨時的隨機的值代替直到用真的保密主密鑰代替它為止。30—定數(shù)量的導出的密鑰基于保密主密鑰和其它主密鑰產(chǎn)生。用于導出密鋼H)152()2530的原語表明基于下面將描述的密鑰用法值的那些導出的密鑰是如何產(chǎn)生的。KeyUsageValue(密鑰用經(jīng)3直)。這一段歹ij舉了作為本設(shè)計的一部分的密鑰用法值。這i^直與NewKey()函數(shù)和Enc()Dec()函數(shù)一起使用。這l^t在各種容器的密封和開封過程中使用。對客戶糊艮務(wù)器來說,用法是不同的(.這使得再現(xiàn)和自再現(xiàn)攻擊變得復雜)。注釋用來為—一個AppContamer的AppCodeDigest字段創(chuàng)建加密密鑰用來為由服務(wù)器創(chuàng)建的一個Apf)Contamer創(chuàng)建加密密鑰用來為由客戶創(chuàng)建的一個AppContamer創(chuàng)建加密密鑰用來為由月艮務(wù)器創(chuàng)建的---個Ap.pCoiitainer創(chuàng)建HMAC密鑰用來為由客戶創(chuàng)建的-個AppContamer創(chuàng)建HMAC密鑰。用來為由服務(wù)器創(chuàng)建的--個MKContemer創(chuàng)建加密密鑰用來為由客戶創(chuàng)建的一個MKContamer創(chuàng)建加密密鑰用來為由服務(wù)器創(chuàng)建的--個MKContamer創(chuàng)建HMAC密f月用來為由客戶創(chuàng)建的一個MKContainer創(chuàng)建HMAC密鑰用在AppCont腿er中的密鑰被分成三部分。AppContainer的^^重要的特征是用來創(chuàng)建它們的AppKey()是保密主密鑰(即客戶設(shè)備的唯一標識符)和應(yīng)用程序代碼摘要(,"擁有"容器的軟件的唯一標識符)的--個函數(shù)。AppContamer被賦于一外特定設(shè)備上的專用程序。密鑰的最后一部分對設(shè)備管理機構(gòu)(不象保密主密鑰那樣)和普通的公眾(不象應(yīng)用程序代碼摘要)來說并不可知。該最后部分被稱為CustomerSecret。該密鑰的任何值能用來密封用法名稱UsageAppCodeDigestUsageAppEncServerUsageAppEncQientUsageAppMaeSewerUsageAppMacQientUsageMKEncServerUsageMKEncClientUsageMKMacServerUsageMKMacCHentAppConfamers。但建議使用強大的128位隨機值(如保密主密鑰一樣強大)。CiistomerSecret.部分允許企業(yè)放棄折衷的應(yīng)用程序容器而不必獲得一個新的構(gòu)造用子產(chǎn)生^--個不同的應(yīng)用程序代碼摘要的應(yīng)用程序。同時,該CiistomerSecret允許在設(shè)備上的-一個給定應(yīng)用程序?qū)嵗?即安全登錄應(yīng)用程序)5與不只一個柳艮務(wù)器安全地共享數(shù)據(jù)。每一個,艮務(wù)器將與相同設(shè)備上的相同應(yīng)用程序建立一個唯一的CustonierSecret。因此,如果提供正確的CustonierSecret,就只窗,f-密密封的AppContamer。CustomerSecrct用于在特定的客戶應(yīng)用程序和與客戶應(yīng)用程序連接的多個月瞎器中的--個之間進行共享。ioM向賣主提供用于向設(shè)備管理機構(gòu)登記的一個AppKey值的列表,設(shè)備管理機構(gòu)服務(wù)器可能委托管理機構(gòu)為軟件的特定賣主創(chuàng)建AppContainers。AppKey是保密主密鑰和應(yīng)用程序代碼摘要的一個加密的攀向函數(shù),因此不需要賣主為其它的應(yīng)用程序創(chuàng)建額娜賣主不能輕易地了解某一給定設(shè)備的主密鑰盼,況下而為賣主提供as密鑰。15現(xiàn)在將討論ContainerOpcodes(操作碼)以及Formats(格式)。所有的容器具有一個公用的4字節(jié)頭部,它包括一個操作碼字節(jié)(命令或消息,)、一個格式字節(jié)、以及-一個具有下面所述內(nèi)容的長度(length)字(16位)。格式字節(jié)表明所提供的容器的四種類型,因tti氐級程序知道應(yīng)該執(zhí)行何種類型的加密操作。如果在將來的版本中加密算法改變,貝鵬式字節(jié)也將改變。操作碼字20節(jié)表示容器內(nèi)的高級數(shù)據(jù)的類型。低級程序使用某些操作碼值(例如,用于在登記協(xié)議中使用的容器),但是大多數(shù)對由高級代碼和未1本使用都有效。Length字段識別屬于容器的字節(jié)數(shù)目(頭部后)。不加密頭部,但它由作為每一個容器一部分的加密校驗和進行保護。該章節(jié)列舉了定義的容器操作碼和具有該操作碼的容器的格式。在當前的25版本中,每一個操作碼包含一4it定的容器格式,雖然將來可能會改變。同時具有opcode字段和format字段的目的是簡化操作碼分級和允許將來在加密算法組中的改變,或者用于在為一,作所請求的數(shù)據(jù)內(nèi)容中改變。Format字節(jié)具有下述值中的----個。Format代碼值說明30FnitSignedConte畫er1容器是一個Signed(帶標記的)Container-個AppGontaincr#11是一個PubKContainer容器是一個MKContainerFmtAppContainer2FmtPubKContainer3FmtMKContainer4下面是OP代碼的值5QP代碼名稱值OPC—OSD—AUTHORIZATION0x01OPC—OSD—ALLOW—TRANSFER0x02OPC一MK一KEY(MBOPC—INITIAL—APP—CONTAINER—FROM—SERVER0x04i()OPC—CUSTOM—APP—CONT扁EH一DATA0x05OPC—CHALLENGE—RESPONGSE—FROM—CLIENT0x06OPC—SMK—ENROLL—REQUEST—OU皿0x07OPC—NEW—CONNECTION0x08OPC—SMK—ENROLL—REQUEST—INNER0x091.5OPC—SMK—ENROLL—RESPONSE(M)aOPC—CLIENT—TO—SERVER—WRITE0x0bOPC—SERVER—TO—CLIENT—WRITE0x0eOPC—CHALLENGE—REQUEST—FRDM—SERVER0x0e現(xiàn)在將討論SignedContainers的操作碼。SignedCoiitamers保存由私有密鑰20(來自于帶標記的密鑰對)數(shù)字標記,并能用匹配的公開密鑰(在客戶端公開密鑰存儲在ROM中)驗證的數(shù)據(jù)。這些被用刺每驗證從設(shè)備管理機構(gòu)服務(wù)器發(fā)送給客戶計算杉L權(quán)軟件模塊使用客戶服務(wù)。Opcode(操作碼)OpcOsdAuthonzationContainer(容器)FmtSignedContamer25該容器用權(quán)一個程序使用操作系統(tǒng)驅(qū)動程序安全模塊的一些和全部函數(shù)。在容器的數(shù)據(jù)部分具有以—F的字段長度說明4字節(jié)調(diào)用代碼的起始偏移量4字節(jié)調(diào)用代碼的結(jié)束偏移量3()LMeii議est20字節(jié)調(diào)用代碼的CodeDigest字段Nstartf)ffsetNendOffsetCodeDigestPrwalegeBit\fetor8字節(jié)PnvOegeBrt字段。該矢量表示該應(yīng)用稱,可以調(diào)用什么函數(shù)Opcode:OpcOsdAl〗owT腦sferContainer:FmtSignedContai證該容器用來授權(quán)一個程序刺,一個AppCoiifcmier傳遞給該計算抓上的另一5個應(yīng)用程序。在該容器的數(shù)據(jù)部分具有以下的字段。字段長度說明CaJlersA卯Code.Digest20字節(jié)調(diào)用程序的ACDRecipientsApf)CodeDigest20字節(jié)接收程i/,的ACDOpcode:沒有OpeOsdAllowTransfer沒有FnitSignedContainer10這不是一個##而是許多由服務(wù)器的PrivateSigningKey加密的字節(jié)。它們并不被保存在任何一種-鄉(xiāng)的容器中。當使用BIOSRegisteiOSD()函數(shù)向BIOS注冊它本身時,這些字節(jié)由操作系統(tǒng)驅(qū)動程;f使用。字段長度說明NstartOffset4字節(jié)調(diào)用代碼的起始偏移量15NendO他et4字節(jié)調(diào)用代碼的結(jié)束偏移量CodeD堪est20字節(jié)操作系統(tǒng)驅(qū)動禾呈序:的CodeDigest現(xiàn)在將討論用于AppContamers的Opeodes。AppConteuners是只能由專門的應(yīng)用程序讀或/寫的魏護的容器。這些容器識別密封它們的程序,并可能允許另一4il序開封-一個容器,因此它們也能用作內(nèi)部illi通信的保密形式。20如檢測病毒改變、軟件許可以及安全錢包等的高級安全功能能建立在AppContamers的頂部。通常,通過使用用于加密的主密鑰的派生密鑰將AppConteiners賦給-一個指定的計^f幾。操作碼OpeMKKeyFmtAppCont譜ier該容器保存能用在MKContamer操作中的密鑰。在創(chuàng)建PubKConta.mer過25程中,通常由OsdPubKcontainerSeal()返回該容器。MKContamer操作要求該容器。操作石馬OpcInitialAppContainFromServer容器FmtAppContainer該容器是空的,而且被用作一個模塊用于使應(yīng)用程序來創(chuàng)建其它AppContainers。其中唯---^有意義的字段是加密的AppCodeDigest。在這種情況30下,密封乾M戈碼摘要字段為空。用來密封該AppContamers的Custome:rSecret的所有位均為零。操作碼OpGCustoiiiAppContaiiierData容器FmtAppContamer該容器保存從客戶到服務(wù)器的緊急應(yīng)答。它保存服務(wù)器緊急的隨機數(shù)字(Rs)。該容器用來卩向應(yīng)具有OpcChaliengeRequestFromServer的MKContamer。5字段長度說明Rs16字節(jié)由服務(wù)器提供的128位隨機值?;蛘弋斢米鞯怯洉r的確認時,為KIDllMK現(xiàn)在將討論用于PiibKCoDfcaner的操作碼。PubKContainer是由客戶(OSD)用一個RSA公共密鑰(來自于通信密鑰w對)謝f密封的數(shù)字信封,而且只能由接收器(通常是設(shè)備管理機構(gòu)服務(wù)器)用匹配的公開密鑰讀取。這些在登記過程中使用,并用來在客戶和驗證的設(shè)備管理機構(gòu)服務(wù)器之間建立一個加密通道。內(nèi)的數(shù)據(jù)是用通常由操作系統(tǒng)驅(qū)動樹,生成的128位RC6密碼密鑰(也稱為產(chǎn)品內(nèi)的主密鑰)加密的。RC6密鑰(主密鑰)以及客戶的密鑰ID(KJD)是用接收器的公開密鑰(服務(wù)器的15通信PubKey)加密的。操作碼OpeSMKEnrolRequestOuter容器FmtPubKContoiner該容登記,中使用。操作碼OpcWDLNewCo纖ectioii容器FmtPubKGoiitamff該容器由客戶應(yīng)用程序使用以建立一個新的加密通道。該容器的第--部分20可能被再使用以避兔RSA操作。在內(nèi)部的MKContainer的數(shù)據(jù)部分中具有以下字段。字段長度說明MK16字節(jié)128位新的隨機連接生密鑰現(xiàn)在將討論用于MKCo幽mers的操作碼。MKContamer被用作基于這:個容25器的讀和寫程序都知曉的主密鑰(由客戶創(chuàng)建以MEPubKCoiitemer內(nèi)發(fā)送)的數(shù)據(jù)信封的--部分。當主密鑰M:PiibKContamer發(fā)徵B緣器以滔,這些能被用于在客戶和設(shè)備管理機構(gòu)服務(wù)器之間的保密通信。它們也能用來在保護客戶機上的本地數(shù)據(jù)。操作碼OpcSMKE鵬UReq腦也麗容器Fm薩Contamer30該容器用在登記過程中。在容器的數(shù)據(jù)部分具有以下的字段。字段長度說明SMKCfentSeecl20字節(jié)用來產(chǎn)生主密鑰的耔數(shù)操-作1馬OpcSMKEnroUResponse容il:FmtMKContainer該im用在登記過程中。在容器的數(shù)據(jù)部分具有以下的字段。5字段長度說明SMKServerSeed26字節(jié)從服務(wù)器返回的籽數(shù),用來產(chǎn)生主密錫操作碼OpcClieitToSe麗Wnte容器Fm體〈Container該im由一些客戶應(yīng)用程序使用以將數(shù)據(jù)發(fā)送給服務(wù)器(也就是由客戶所寫的)。10字段長度說明。鵬S聊edContainer來證實下載的是真實的、證實翻g的確來自設(shè)備管理機構(gòu)月艮務(wù)器以及為向操作系統(tǒng)驅(qū)動程序登記的應(yīng)用程序保存驗證信息。表4顯示了SigiiedContainer結(jié)構(gòu)。2()現(xiàn)在討論密封SignedConfa.mer。加密是用ServerSigningPrivateKey完成的。密封SignedContamef所要求的步驟如下。這些步Wt地在緩沖器」::操作,并因此覆蓋開封的plaintext繊。在公開的實施例中,設(shè)備管理秒胸服MIW豫些歩驟來密封SignedContainer。確認選定的私有密鑰是公知的。如果不是,則返回錯誤。25確認長度是可接受的。在密封前,長度艦Pi她cKeyDigest和Data。確認Format:等于FmtSignedContamer。將PublicKeyDigest設(shè)置為匹ff腿定的私有密鑰的公開密鑰的SHA1摘要。使Payload=OpcodeIiFormat11Length11PubHcK.eyDigest11IV11Sea!ersCodeDigestI;Data。注30意&i包括開封俯fea:。使ExpectedD;gest:SHA:l(Payload)。設(shè)置SigRSABioek=i08&ro字節(jié)11ExpectedDigest在SgRSABlock上執(zhí)行PKCStf1版本2簽名填充。這與PKCS#1版本1簽名填充一樣。該填充在Digest值的前面增加了一個固定順序的字節(jié)以表明5ExpectedDigest值是SHAl操作的結(jié)果。它也用OxFF字節(jié)替換了大多數(shù)的Wl充字節(jié)。用選定的私有密鑰加密SigRSABtock。設(shè)置Length=Length+128以便容納SigRSABlock的大小。在月緣器已經(jīng)密封了SignedContamei"結(jié)構(gòu)后,它具有如表5所示的格式。H)現(xiàn)在討論開封SignedContainer。開封.SignedContamer容器所要求的歩驟如下。用戶執(zhí),m些步驟來驗證在這種,的容器上的簽名。確認選定的公開密鑰對SMI程序來說是公知的。如果不是,返回錯誤。確認該Length是可接受的。在開封前,長度包括PubfcKeyDigest、Data和SgRSABlock。確認Format等于FmtSignedeontmner。調(diào)用BIOS以用選定的公15開密鑰解密SigRSABlock。確認PKCS#1填充對使用SHAl摘要函數(shù)的簽名來說是正確的。使ExpectedDigest二解密的S培RSABlock的最后20個字節(jié)。設(shè)置Length=Length—128來除去Si沐SABiock的大小。使Payload=Opcode11Format」ILength11PublicKeyDigestIiData。這包括開封的長度。使D堪est-SHAl(Payload)。確認Digest等于ExpectedD聰est。20至于BIOS開封,BIOS并不在容器它本身上工作。僅調(diào)用它來解密SigRSABlock?,F(xiàn)在討論PAKContmner的格式和用來創(chuàng)建它的算法。首先描述開封格式,然后描述密封和開封它的步驟。這些容器最初用來在客戶和設(shè)備管理機構(gòu)服務(wù)器之間建立安全通信通道。PubKContmner的第二部分是包括4字節(jié)頭部的完25整的MKContamer對象。PubKContainer的第一部分包括生成的主密鑰(MK)和客戶KeyID(如果沒有分配主密鑰則為0)的值,而且SM個值都用接收程序的公開密鑰加密。認真選擇PubKContamei:的格式以允許在不改變第一部分的情況下改變該容器的第二部分。這允許客戶和服務(wù)器去實現(xiàn)某些有意義的性能改進。(:)SD密30封函翻每返回包封在AppContamer中的生成的主密鑰。在每次開始一個與服務(wù)器的新的連接(例如,存取一個新的下載)時,客戶能存儲和再使用該MK和PubKContamer的第一部分,而且第二部分將成為一個包含了一個新的用于加密對話的主密鑰的MKContainer。這避兔了需要執(zhí)行一個具有S謹程序的公開密鑰操作并獲得了解只有真實的服務(wù)器才能知道該新的對話,的保密利益,5因為只有真實的服務(wù)器才知道所保存的主密鑰(需要解密該新的對話密鑰)或知道私有密鑰以讀取第---部分。對服務(wù)器來說重要的最佳化是存儲從PubKQ)m纖er的第一部分中抽取的主密鑰并由第一部分的散列索引存儲值。當再次使用PubKContamer的第--部分時,這種剤諾避免了需要執(zhí)行私有密鑰操作。因為客戶總是發(fā)送整個的第一部分,因此服務(wù)器能隨時刷新存儲入口,i()然后服務(wù)器總是使用它的私有密鑰(服務(wù)器通信私有密鑰CommunicationPrivateKey)來抽取主密鑰。這也意味著對在客戶和服務(wù)器之間初始化信息來說只有一種格式,而不是兩種獨立的格式來處理再利用或創(chuàng)建主密鑰。在登記過程中使用PubKContamer在客戶和服務(wù)器之間建立通信以便允許船t保密主密鑰,以及在某些客戶應(yīng)用,和設(shè)備管理機構(gòu)服務(wù)器之間建立通15信。開封的PubKCoiitainer具有如表10所示的格式。密封容器中所涉及的步驟將2W6個字節(jié)信息增加到結(jié)尾(Mac和Padding),因此調(diào)用程序必須保證緩沖器足夠大以保存比較大的密封格式,否則密封操作將返回-一個錯誤。SeaierscodeD堪est以及kutiaJizationVector(IV)都由密封操作填充。20現(xiàn)在討論密封PubKContamer。加密操作是用由操作系統(tǒng)驅(qū)動,在不工作時倉犍的主密鑰的派生以及服務(wù)器的通信公開密鑰完成的。操作系統(tǒng)驅(qū)動密封涉及對BIOS層的兩個調(diào)用。第一個是使MKContainer使用OsdMKContaierSea10、然后謹OSRawRSAPublie()以加密正好用在MKContainer密封操作中的MK。密封旨容器所需的步驟如下。這些步驟就25地在緩沖器上操作并因此覆蓋開封的plaintext數(shù)據(jù)。如在有關(guān)Usage值的節(jié)中的所解釋的那樣,該Usage值對由客戶和服務(wù)器密封的容器來說是不同的。確認選定的公開密鑰對SMI超竽來說是公知的。如果不是返回錯誤。確認長度是可接受的。在密封前,長度包括第一部分和開封的第二部分。在密封后,它包括通過密封第二部分增加的額外數(shù)據(jù)。確認Format等于30FmtSignedContainer。使用由操作系統(tǒng)驅(qū)動安全模塊傳遞的MK以及對有關(guān)MKContamer描述的步驟密封第二部分。當?shù)谝淮萎a(chǎn)生PubKConta祖er時,主密鑰將由操作系統(tǒng)驅(qū)動程序隨機產(chǎn)生。返回在該主密鑰上的一個句柄給操作系統(tǒng)驅(qū)動程序的調(diào)用程序,因此它可能被重新使用。增大Length字段來包含由第上一步驟所增加的Mac和Padctog。將5PuWicKeyD培est設(shè)置成選定的公開密鑰的SHA1摘要。設(shè)置PubKRSABlock的Opcode和Format部分來匹配頭部值。在執(zhí)療這些步驟之前,Sf舒央的剩余部分由OSD程序填充。使用一個由操作系統(tǒng)驅(qū)動模塊iSf的隨機的OAEP籽數(shù)4tt執(zhí)行PubKRSABlock的OAEP填充。調(diào)用BIOSRawRSAPuWie用選定的密鑰執(zhí)行RSA操作。在操作系統(tǒng)驅(qū)動程序已經(jīng)密封了PubKContamer結(jié)構(gòu)以后,io它具有如表ll所示的格式?,F(xiàn)在討論開封'PubKCortamer。在本發(fā)明公開的實施例中,設(shè)備管理機構(gòu)服務(wù)器執(zhí)行開封'。月艮務(wù)器的應(yīng)答將會是以在MK容器的格式??蛻羰褂肕K容器操作來開封服務(wù)器應(yīng)答?,F(xiàn)在討論服務(wù)器開封。開封PubKOrtamer容器所需的步驟如下。錯誤則15將容器置O。確認長度是可接受的。該-felt包括包含密封的MKContamer的第一和第二部分。確認Format等于FmtPubContoiner。確認PiiMicKeyDigest對應(yīng)于匹配選定的私有密鑰的公開密鑰。用選定的私有密鑰在PubKRSABlock上抽舒最初的RSA解密操作。冊滁OAEP填充,并確認OAEP冗余是正確的(也就是說,20數(shù)據(jù)土夾在傳輸中沒有改變)。這:使Opcode、Foiroat、KID以及K對調(diào)用程序來說是可見的。確認Format是FmtPubKContamer。調(diào)用程序?qū)z驗?zāi)芊窠邮躉pcode。使Key等于來自于解密的PubKRSABloek的MK。使用對有關(guān)MKContainer進行描述的步驟來開封MKContainer。WE討論加I密的原始和公開值。25派生密鑰包括可能是同一函數(shù)的A靜Key()、NewKey()以及CustomerAppICeyO:XxxKey(128位的緩沖器,如果低于160位'具有高單位0的160位緩沖器)。AppKey(Key'CodeDigest)=TrancateTol28bit(SHA—1(Key11CodeDigest))30用于保護AppCoiiteiners的密鑰是通過使用擁有這個容器的應(yīng)用程序的f鵬的160位摘要從保密主密鑰中得到的。產(chǎn)生的密鑰是128位長(對大多數(shù)加密算法來說,〗28位更通用)。UKeyllQxteDigest的理由是允許非根的設(shè)備管理機構(gòu)服務(wù)器創(chuàng)建自己的Af)pCortamei:,而不需要讓他ff]知道真實的主密,。知道真實的保密主密鑰將損害所有其它的AppContamers。5NewKey(Key,Usage)二T薦ateTol28Mt(SHA—1(Key11Usage))其中Usage參數(shù)是一個32位值。散列和截尾用來簡化代碼,因為在NewKeyO中不必暴露產(chǎn)生的密鑰。NwKey()有時也取AppKey()的結(jié)果作為自變量。CustomerAppKey(Key,CustomerSecret)::TruncateTol28Wt(SHA—1i()(KeyIICustomerSecret))其中,CustomerSecret是一個128位值。該隨數(shù)用來為包括CustomerSecret部分的AppContamers生成密鑰。AppCodeDigest=Encl60Bits(SMK,DecryptedCodeDigest)以及DectyptedCodeD;.gest=Decl60Bits(SMK,AppCodeDigest)均用來催訴j保密主密鑰加密和解密160位摘要值,而且是請求設(shè)備管理機構(gòu)服務(wù)器為特定設(shè)備—1:15的專用程序創(chuàng)建第一AppCont細er的機構(gòu)的至關(guān)緊要的部分。服務(wù)器執(zhí)行Enc〗60bite函數(shù),而客戶計算機執(zhí)行Decl60Bite函數(shù)。Encl60b〗te函數(shù)執(zhí)行以下步驟。將DecryptedCodettgest拷貝到AppCodeDigest緩沖器中。使Key-NewKey(SMK,UsageAppcodeDigest)。使Plaintext!.^AppCodeD培est的前6字節(jié)。這是DecryptedCodeDi.gest的前16字2()節(jié)。使Ciphertextl=RC6CBCEncrypl;(Key,Pkmtextl)。因為pla皇text只有-一個塊長,因此這與ECB模式等效。用Ciphertextl替換AppCodeD砂st的前16字節(jié)。使Plamtext2=AppCodeD培e就的最后的16字節(jié)。該值的前12字節(jié)是Ciphertextl的后12字節(jié)》且該值的后4字節(jié)是DeciyptedCodeDigest的后4字節(jié)。使Cipliertexl2=25RC6CBCEnciypt(Key,Plaintext2)。因為plaintext只有一個數(shù)據(jù)塊長,因此這與ECB模式等效。用Ciphertext2替換AppCodeDigest的后16字節(jié)。Decl60Bte函數(shù)執(zhí)行以下步驟。將AppCodeDigest拷貝到DeciyptedCodeD復gest緩沖器中。使Key二NewKey(SMK,UsageApf)codeDigest)。使Gphertext2二DeeryptedCode.D培est的后16字節(jié)。這是AppCodeD培est的后163()字節(jié)。使Pl認rtext2:RC6CBCDecrypt(Key,Ciphertext2)。因為plaintext只有一個l繊塊長,因此這與ECB模式等效。用H細text2替換DeciyptedCodeDigest的后16字節(jié)?,F(xiàn)在DeciyptedCodeDigest的后4字節(jié)有它們的正確值。使Ciphertextl=DecryptedCodeDigest的前16字節(jié)。-這包括AppcodeDigest的前4字節(jié)禾tlPiamtex2的前12字節(jié)。使P畫纖textl=RC6CBCDecrypt(Key,5Qphertextl)。由于邵hertext僅有一個數(shù)據(jù)塊長,所以這與ECB模式等效。用Pfemtextl替換DeayptedCodeDigest的前16字節(jié)。Enc(Key,UsagejMessage)二RC6CBCEnciypt(NewICey(Key,Usage),Message)Dee(Key,Usa.ge,Message):RC6CBCDecrypt(NewKey(Key、Usage)JMessage)其中用于密碼塊鏈模式(CBC)的初始化變量是16字節(jié)的零,且Usage值io是32位長。密碼塊鏈是一個在加密前將先前的ciphertext塊和當前的plaintext塊結(jié)合的塊加密模式。Key是128位或288位長。消息參數(shù)指定數(shù)據(jù)塊石16字節(jié)長的倍數(shù)。RC6密碼是于1998年8月20日由RonaldL.Rivest,M丄B.Rotehaw,R.SMney以及YLYin在"TheRC6BloekCipher"中定義的,且CBC模式是于1995^|ENewYork,NY由BraceSchneie.r、.〗ohnWiley&Sons!5在"AppliedCryptographySecond腿tion,'1:11定義的。RC6專門設(shè)計用來滿足MSTAES(AdvancedEncryptionStandard高級加密標準)的要求。RC6包括對各種長度密鑰大小的支持,并被進行優(yōu)化以利用自RC5以來在CPU方面的進步。當與大多數(shù)容器一起使用這種原語時,Message從一個16字節(jié)的隨機值(被20稱為IV)開始,并在結(jié)尾填充1至16個字節(jié)來使Message成為密碼的塊大小(16字節(jié))的倍數(shù)。注意16字節(jié)的IV并不用在傳統(tǒng)的CBC模式中,因為它不是直接地與隨后的plaintext塊異操作。相反,在加密過程中,它與0(什么也不做)異或操作,然后用密鑰加密來生成eiphertext的第一數(shù)據(jù)塊。第一aptertext數(shù)據(jù)塊然后在加密該數(shù)據(jù)塊前進行與下一plaintext數(shù)據(jù)塊的異或操"作。在解密過程中,解密第一數(shù)據(jù)塊以及與零異或操作來生成是原始的隨機的IV數(shù)據(jù)塊。解密第二ciphertext塊并與ciphertext的第一塊異或操作來生成pfemtext的第二數(shù)據(jù)塊。用于Enc和Dec的填充是許多其值等于填充的字節(jié)數(shù)的相同的字節(jié)。例如,如果增加兩個填充的字節(jié),則每一個字節(jié)具有值0x02。通常至少有-+填充的30字節(jié),因此如果plaintext已經(jīng)是16字節(jié)的倍數(shù)長,那么增加填充的16字節(jié),而且那些字節(jié)中的每-一個都具有值(M0。宗教的戰(zhàn)爭挑戰(zhàn)隨扭謝抗可預見的填充字節(jié)的優(yōu)點。這種設(shè)計要求可預見的填充字節(jié)。注意很容易通過檢查加密數(shù)據(jù)的最后字節(jié)確定增加了多少填充。HMAC(Key,Message)原語。基于任何加密摘要函數(shù)的Hugo'sMessage5AuthenticationCode(HMAC)調(diào)用基本完整的原語。在本發(fā)明中,它基于由NIST&NSA在1995年4月17日在"SeeureHashStandard"中定義的SHA—1。發(fā)表的有關(guān)HMAC原語的論文表明它具有極好的安全特征以在摘要函數(shù)中彌補潛在的缺點。SHA—I是由美國商業(yè)部為-一個用于計算消怠或數(shù)據(jù)文件的壓縮表達式的安全散列算法釆用的一個標準規(guī)格。當輸入長度<264位的任何消息io時,SHA—1生成一個調(diào)用消息摘要的160位輸出。然后信息摘要能被輸入到為信息生成或驗證簽名的數(shù)字簽名算法(DigitalSignatureAlgonthm,DSA)中。HMAC(Key,Message)=SHA—1(KeyxorOpad||SHA-l(KeyxorIpadiIMessageOpad及Ipad值趟不同的512位長的常量,以匹配SHA—1的內(nèi)部壓縮函i5數(shù)的數(shù)據(jù)塊大小。在該設(shè)計中Key必須小于512位長。Opad及Ipad值連同HMAC的詳細內(nèi)容是由H.Krawezyk、M.Beflare以及R.Canetti在"HMAC:Keyed—HashingforMessageAuthentieation"中定義的。與消息的直接摘要相比,HMAC原語要求兩個以上的SHA1壓縮函數(shù)的迭代。這樣支付磁f的保密特征的開銷很低。20HMAC是用于使用加密散列函數(shù)的信息驗證的機制。HMAC能與任何迭代的加密散歹涵數(shù)如MD5、SHA—1以及一個保密共享密鑰一起ffiffl。HMAC的加密強度繊于下面的散歹幅數(shù)的特性。RSA操作使用從RSA許可的代碼在BIOS中執(zhí)行。Qphertext=RSA.OaepEnaypt(PubUcKey,OaepSeed,Message)25Message=RSA0aepDecrypt(PnvateKey,Ciphertext)這些原語i頓jRSA算法執(zhí)行加密和解密。就加密原語來說,M正如由RSALaboratories在"PKCS#1v2.0:RSACiyptographyStandard"中所定義的OAEP(最佳的不對稱的加密填充,optimalasymmetricenciyptionpadding)首先填充Message,然后根據(jù)PublicKey取冪和Pf低模數(shù)。OAEP所要求的隨機籽數(shù)值作30為-一個參數(shù)傳遞給這個函數(shù)。就解密原語來說,根據(jù)PnwteKey,在邵hertext被取冪和P射氏模數(shù)后,驗證和刪除OAEP填充。在大多數(shù)情況下,Message是128位密鑰和160位SMKKID的連接。設(shè)計PKCS用于二進制和ASCn數(shù)據(jù);PKCS也與TTU—TX.509標準兼容。所公布的標準是PKCS弁1、弁3、#5、#7、#8、弁9、詣、#11和#512。PKCS弁13和#14當前正在開發(fā)。PKCS包括專門算法和獨立算法的實現(xiàn)標準。支持許多的算法,包括RSA以及Diffie—Hellmaii密鑰交換,然而,只有后兩科'特別地詳細。PKCS也為數(shù)字簽名、數(shù)字信封、擴展的證書定義—-個獨立算法語法;這使某些人實現(xiàn)任何加密算法無論如何都要符合-一個標準的語法,并因此獲得互操作性。詳細描述PKCS標準的文獻可在RSADataSecurity'sioFTP服務(wù)器(可.AAMp^tamsa^om或通過無名的ftp至UfijMsa^com、或通過發(fā)送e-maii至ljpkcs詠sa,com)上獲得。下面是公開密鑰加密標準(Public-KeyCryptographyStandards,PKCS):PKCS井1定義了用于fflM《糊:RSA公開密鑰加密系統(tǒng)來加密和標記數(shù)據(jù)的機制。15PKCS"3定義了一個D通e—Helim纖密鑰一致性協(xié)議。PKCS#5描述了用于用口令導出的一個保密密鑰加密一個字符串的方法。PKCS#6正逐步停止采用以支持X.509版本3。PKCS井7為包括加密增強如簽名和加密的消息定義了--^個總的語法。PKCS井8描述了用于私有密鑰信息的格式。該信息包括—十用于某些公開20密鑰算法的私有密鑰,以及可選的一組嵐性。PKCS井9定義了為用在其它的PKCS標準中的選定的屬性字節(jié)。PKCS弁10描述了用于證書請求的語法。PKCS弁ll為加密設(shè)備如智能卡和PCMCIA卡定義了---十技.賴A立的可編程接口,被稱為Qyptoki。25PKCS弁12指定了一個用于存儲或傳送一個用戶的私有密鑰、證書、其它的保密等的便攜格式。PKCS#13使用EllipticCurveGlyptography定義了用于加密和標記數(shù)據(jù)的機制。PKCS#4為偽隨機數(shù)生成提供了-一個標準。3(》《糊RSA算法,S:i.gBioek=RSASigEncrypt(PiwateKey,Digest)以及Digest^RSAS堪Deaypt(Pub!icKey,SigBk)ck)原語執(zhí)行加密和解密。就加密原語來說,使用正如由RSALaboratories在"PKCS弁1v2.0:RSAGlyptographyStandard"中所定義的簽名填充來首先填充i60位的SHA—1摘要值,然后根據(jù)PubHcKey取冪和降低模數(shù)。就解密原語來說,根據(jù)PnvateKey,在對ciphertext5取冪和降低模數(shù)后,驗證和刪除該填充。該填充將摘要算法的標識符進行編碼,且這些原語只支持SHAJ算法。這些原語是創(chuàng)建和驗證數(shù)字簽名的過程的----部分。其它的步驟包括計算或驗證已被標記的真實的SHA1摘要。AppCodeDigest是用來識別擁有一個容器的應(yīng)用程序的數(shù)據(jù)。它不適用于所有的容器。該數(shù)據(jù)是基于調(diào)用加密函數(shù)的代碼產(chǎn)生的。該數(shù)據(jù)通常由設(shè)備管w理機構(gòu)生成、加密和標記。時常在運行時間由BIOS將解密的AppCodeD;gest(ACD)與CallerCodeDigest進行比較。屬于服務(wù)器的CodeDigest經(jīng)常為0。SealerC0deD1gest/CaJle1C0deD聯(lián)st是在函數(shù)中基于涵數(shù)的調(diào)用程序討賞的數(shù)據(jù)。用來計算旨摘要的信息在諸如向BIOS注冊、向操作系統(tǒng)驅(qū)動程序注冊等注冊期間在用OpaacOsdA礎(chǔ)onzation作為容作碼的SingedCont細er中!5提供的。登記是客戶系統(tǒng)經(jīng)歷的較早-一階段。在該階段,在客戶系統(tǒng)和設(shè)備管理機構(gòu)服務(wù)器之間創(chuàng)建和交換主密鑰。該步驟包括PubKContamers。當?shù)怯涍^程沒有分配該主密鑰時,主密鑰用一個臨時的隨機值代替直至,正確的主密鑰代替它為止。20BIOS和操作系統(tǒng)驅(qū)動程序(OSD)都參與容器操作。與密封有關(guān)的容器函數(shù)包括OSDAppContainerSeaJ()、OSDMKConta:inerSeai()、OSDPubKConteiJierSeai()以及BIOSAppContamerSeaJ0。OSDPubKCoDteanerSeal0函數(shù)創(chuàng)建一個隨機的對話密鑰(Masterfey)并將它返回到包含在AppContamer中的調(diào)用程序。然后使用該A卯Conta皿er調(diào)用其25它的MKContainer()操作。圖—示出了--個典型的PubKContamer算法。涉及開封的織函數(shù)艦OSDAppContamerlMseal()、OSDMKCont扁rU腦al()、OSDSignedContamerUnseal0、OSDPubKCoi他uierUnsea〗0、以及B10SAppConte臓Unseal0?,F(xiàn)在討論容器分類執(zhí)行細節(jié)。這些分類包括PubKContamer和3()MKContainer。下面對PubK.CoDtamer的格式和在密封和開封中艦的類中的方法的描述。這些容器最初用來在客戶和設(shè)各管理機構(gòu)B艮務(wù)器之間建立-一個安全通信通道。PiibKContamer的第二部分是一個包括4字節(jié)頭的完整的MKContamer對象。PubKContamer的第一部分包括所生成的主密鑰(MK)和客戶的KeyID(KID)5值(如果沒有分配主密鑰則為o),且aM個值均是用接收程序的公開密鑰進行加密的。仔細選擇PubKContamer的格式以允許在不改變?nèi)萜鞯牡谝徊糠值那闆r下改變?nèi)萜鞯牡诙糠?。就許客戶和服務(wù)驗實現(xiàn)某歸意義的性能艦。OSD密封函數(shù)將返回包封在AppContamer中的生成的生密鑰。在每次開始----個與服io務(wù)器的新的雜(例如,存取^外新的下載)時,客戶倉游儲和再糊〗該Masterfey和PubKContainer的第-一部分,且第二部分將成為一個包含-一個新的用于加密對話的主密鑰(MasterKey)的MKContainer。St免了需要用SMI程序執(zhí)行-一個公開密鑰操作,并獲得了解只有真實的服務(wù)器才能知道該新的對話密鑰的保密利益,因為只有真實的服務(wù)器知道所保存的主密鑰(需要解密該新的15對話密鑰)或知道私有密鑰以讀取第-一部分。對服務(wù)器來說重要的最佳化是存儲從PubKContamer的第--部分抽取的MasterKey,并用第--部分的散列索引存儲值。當再次鵬PubKContamer的第一部分時,這種存i,兔了需耍執(zhí)行私有密鑰操作。注意因為客戶總是發(fā)送整個的第-部分,因此服務(wù)器能隨時刷新剤請入口,因此服務(wù)器總是使用它的私有密鑰(服務(wù)器fflif私有密鑰)來20抽取MasterKey。這也意味著對在客戶禾朋艮務(wù)器之間初始化信息來說只有-一種格式,而不是兩種獨立的格式來處理再利用或創(chuàng)建MasterKey。在登記過程中使用PubKCoiitamer在客戶和服務(wù)器之間建立傳送以便允許建立保密主密鑰,以及在某些客戶應(yīng)用徵芊和設(shè)備管理機構(gòu)服務(wù)器之間建立傳送。表6示出了最后密封的PubKContainer結(jié)構(gòu)。25與PubKContamer有關(guān)的構(gòu)造程序和方法如下所述。PublicPubKContamerO是一個空的初始化記錄器對象的容器。至于puHiePubKContamer(Ini)utStreamm),用輸入數(shù)據(jù)流初始化容器,然后將輸入數(shù)據(jù)流讀入到--個字節(jié)數(shù)組中。然后艦parseBufc方法分析緩沖器。也初始化記錄器對象。3()PuWicPubKeontamer(byte[]buf)。容器用字節(jié)數(shù)組初始化,然后將它作為一個字節(jié)數(shù)組讀入到緩沖器中。然后使用parseBuffbr方法分析緩沖器。也初始化記錄器對象。Pnvatevoidseal()廢棄RsaLibException。下面用來密封PubKContamer:opcode、KID、MK、PubKDigest、SealedMKContamer。使Format為3=FratPubKConatiner。用5opcode、fomiat、reservedKID和MK構(gòu)造PubKBloek。Opcode、KID和主密鑰是由調(diào)用程序設(shè)置的。調(diào)用JNI,il序用于--1^數(shù)據(jù)塊中的RSA庫禾口RsaOaeEnoypt(PubKDigest^PubKBlock)以構(gòu)造加密的PubKRSABlock。設(shè)置length等于密封的MKContajner(MkC')的長度+148(128-PubKRSABlock,20-PubKDigest)。該長度表示來自包括密封的MkContamer的PubH3igest的字節(jié)i()禾n。構(gòu)造密封的PubKContainer與Opcodel!FoniiatHReservedHLength11PubD堪est11PubKRSABlock11sealedMKe—樣的字節(jié)數(shù)組。{妙,來自安全公用類的addArray方法造鏈接數(shù)組。Privatevoidunseal()廢棄RsaLibException、CoiitamerExeeption0檢驗mvalid()pcocie、iiivalMFoniiat禾Pmva〗idLen是否為false,并廢棄15ContainerException。如果它們中任何一個不是所期望的那樣,則在parseBiifibr巾將它們設(shè)置成'Mse。M解密,獲得PubKBlock,它是Opcode11Format11Reserved11MK11KID。通過用于RSA庫的JM包封程序,具有rsaOaeDectypt(PubKDigestPubKBlock)的PubKRSABlock。20在PubKBlock、操作碼、格式、KID和主密鑰上執(zhí)行有效性和長度檢驗。PnvatevoidparseBuffer(byte[]buffer)是一個幫助函數(shù)來分析引入的存儲在為緩沖器中的密封容器,其中該緩沖器為Opcode11FormatHReserved11Length11PubD堪est11PubKRSABlock11sealedMKe的。如果不是所期望的那樣,則設(shè)置mvaMOpcode、mvaMFormat和inva!j'dLen。25Publicbyte[JgetRawFor()廢棄containerExeeptiQti。檢驗數(shù)據(jù)和MKD培est非空并調(diào)用密封方法。返回在如Opcode11Format11Reserved11Length11PubDigestiIPubKRSAffloek11sealedMKe的密封操作中建立的緩沖器。PubfcbytegetOpeode()返回容器的操作碼。3()Pubicbyte[]getPubKDigest()從容器返回PubKD堪est。Publiebytefl^tKID0從容器返回KJD,如果需要則開封。PublicbyteOgetMK()廢棄ContamerException從^II返回MK,如果需要則開封。PublicMKContainergetMKContainer()/發(fā)棄CoritamerException—抽取密;fet的5嵌入在由parseBufe完成的Pubk中的MK容器,開封Pubk部分以獲得MK,并為MK容器設(shè)置它。PublicvoidsetOpcode(byteOpcode)廢棄ContamerException—在杉g襝它是否在有效范圍中之后,為容器分配操作碼。Public,voids改PubKDigest(byte[]digest)廢棄ContamerException—如果傳遞為n)空或者長度不等于20,則廢棄exception,設(shè)置PubKD堪est。PublicvoidsetKl.D(byte[]Kid)廢棄ContamerException-如果傳遞為空或者長度不等于20,則廢棄exception,設(shè)置KeyID。PiMicvoidsetMK(byte[]Mk)廢棄ContamerException-如果傳遞為空或者長度不等于20,則廢棄exception,設(shè)置MK。15PublicvoidsetMKConta祖er(byte[]Mkc)廢棄ContamerException—設(shè)置將被,炎入在PubKContauier中的密封的MKContainer。Privatevoidlog(intaWamnigLevei,Strmgmessage)—將作為一個參數(shù)傳遞過來的該WamingLevel與當前值進行比較,以及如果很緊急就輸出它。下面是涉及MKContamer的構(gòu)造程序和方法。20現(xiàn)在討論MKContamer的格式和用來創(chuàng)建它的算法。首先描述開封格式然后描述密封和開封它的步驟。在使用PubKConfamer已經(jīng)建立了一個公有的MasterKey以后,MKContainer最初被用來保護在客戶和服務(wù)器之間傳送的信息的大組塊(達到64K)。MKContamer主要用來加密tt。加密是基于----十對稱的密鑰進行加密的。25該密鑰來源于MasterKey。通過使用來源于MasterKey的一個對稱密鑰,MKContamer被用來加密大的(達到64k)數(shù)據(jù)塊。在登記過程中,特殊情況使用是加密在客戶和服務(wù)器之間的傳輸以便允許建立保密主密鑰,并加密某些客戶應(yīng)用程序和設(shè)備管理機構(gòu)服務(wù)器之間的傳輸。最后密封的結(jié)構(gòu)如表13所示。PublicMKContemerO是空的正好初始化記錄器對象的容器。PuhfcMkCoiitamer(InputSte腿m)—用輸入數(shù)據(jù)流初始化容器,然后將它作為字節(jié)數(shù)組讀入到Buffer中。然后使用parseBuffer方法分析緩沖器。也初始化記錄器對象。PublicMkContainer(byte[Ibuf)—用字節(jié)數(shù)組初始化容器,然后將它作為字節(jié)5數(shù)組讀入到Bufifer中。然后使用parseBu飽r方法分析緩沖器。也初始化記錄器對象。Privatevoidseal()廢棄RsaLibException下面是用于密封MKContamer,調(diào)用在這些操作碼、MKD堪est、數(shù)據(jù)上的設(shè)置方法。i()設(shè)置—Format為3=FmtPubKContmner設(shè)置scd為20個0的字節(jié)數(shù)組將長度設(shè)為娜長度+56(20-MKDi『st+16-iv+20-scd)將長度轉(zhuǎn)換成2字節(jié)數(shù)組從隨機數(shù)字生成器中取iv為16字節(jié)數(shù)據(jù),調(diào)用cryptoPn皿tives■〖5geiierateRandomNi咖ber(16)方法使用安全實用程序的addToAiray方法構(gòu)造payload為Opcode11FormatIiReserved11Length11MKDigest11wHscd11data。將newey設(shè)為NkeyForSealmg=QyptoPrimitive,newKey〔MKDigest^torConstants.UsageMKMacServer);2()然后從cryptoPnmitive調(diào)用獲得MacMac=QyptoPrimitive.getHmac(NkeyForSeaImg,payioad);構(gòu)造Plaintext為iv||scd11data11mae將Padding設(shè)置成1-16字節(jié)的矢量以使vanable、Plaintext(見下文)成為16字節(jié)的倍數(shù)長。每一個填充字節(jié)具有一個等于矢量中填充的數(shù)量的值。這是25用adjustPad方法在SecurityUtils類中完成的。為Plaintext增加填充,現(xiàn)在Plaintext是iv11Sea復ersCodeDigest11Date11MacIIPadding使Ciphertext=Enc(Key,UsageMKEnc,Plaintext)。Qphertext的長度與Plaintext的長度一樣。30在Plamtext+20中設(shè)置Length為字節(jié)的數(shù)量。在2字節(jié)的數(shù)組中存儲該值。構(gòu)造一個密封的MKCoiitamer作為-----』個具有Opcode11Format11Reserved11Length11MKDigestiICipherterf的緩沖器privatevoid.unseaJ(:)廢棄RsalibException、ContauierExceptioii。檢驗mvalidOpcode、invaMFormat或者iiwal'idLen是否為false,并廢棄5ContainerExe鄰tion。如果它們中任何一個不是所期望的》則在paiseBuffer中把這些設(shè)置成falseo從parseBuffe:r中抽取的Ciptertext傳遞給QyptoPmiiitivedec,獲得界面plamte對的解密方法.dee方法被稱為dee.(MKDigest^torConstaits,l3sageMKEncServer,c,hertext)。從plaintext的最后字節(jié)可以知道填充字節(jié)以及它指定了增加多少填充字io節(jié)。填充字節(jié)是從plaintext中刪除的,數(shù)據(jù)大小是通過刪除mae長度以及從pkmtext的長度中減去填充字節(jié)計算的。計賞w、scd以及data的長度并存儲在-''-個2字節(jié)的數(shù)組中。由于計算data的長度,且iy、scd以及mac的長度是預定的,因此它們都是從plaintext中抽取的?!?修改Length=Length20-Padding的長度構(gòu)造payload為Opcode11Format11Reseived11Length11MKDigest11iv11sed11data。牛勾)豈newKey.為NkeyForSealmg-QyptoPramtive,newK.eyMKDigestctorConstants.UsageMKMacServer):然后從ciypt()Pmmtive調(diào)用獲得ExpectedMac為2()ExpectedMac=CryptoPriiTiitive.getHma.c(NkeyForSealing,payioad);—如果mac禾tlExpectedMac不相等,廢棄Co!血merException。PrivatevoidparseBufer(byte[]bufffer)是--個幫助函數(shù)以分析引入的存儲在緩沖器中的密封容器,這些緩沖器是OpcodellForaiatllReservedIlLengtb11MKDigest11C,heredText25在加密格式中,密文組成11iv11SealersCodeD堪estIidata如果不是所期望的,則設(shè)置mvalidOpeode、nwaUdFormat、mvatodLenpubMcbyte[]getRawForNet()廢棄ContainerExc鄰tion,檢驗KeyK)、MK以及密封的MKC(MkBuff)是否是空,然后調(diào)用密封方法。返回在密封操作中建立的緩沖器如Opcode11Format11Length11MKDigestIIIV11SealeiCodeDigestIIDate3()II腿ciipadpublicbytegetOpcodeO返回容器的操作碼Pubicbyte[〗getMKDigest()廢棄ConlainerExcepti鐘一從容器返回MKDigest。Publicbyte[]getDataO廢棄CoiifamerException—從,返回dala,如果需要5則開封。Pubfcbyte[]getMK()廢棄ContanierException-從容器返回MK。PublicvoidsetOpcode(byteOpcocle))發(fā)'::^ContainerException—it檢驗1^是^f在有效范圍中之后,為容賺配操作碼。Publicvoidset:MKD培est(byte[](igest)廢棄ContainerExoeption—如果傳遞為空10或者長度不等于20,則廢棄exception,設(shè)置:MKDig6st。PublicvoidsetData(byte[]Kid)廢棄ContajnerException-如果傳遞為空,則廢棄exe鄰tion,設(shè)—置DataPublicvoidsetMK(byteQMk)廢棄Conl,amerException-如果傳遞為空或者長度不等于16,則廢棄exception,設(shè)置MK。15Privatevoidlog(intaWammgLevd,Stnngmessage)—將作為一個參數(shù)傳遞過來的該WamingLevel與當前值進行比較,以及如菊艮緊急就輸出它?,F(xiàn)在討論OSD軟件。操作系統(tǒng)驅(qū)動程序(OSD)是系統(tǒng)10的楊。、組件中的一個。它是被動態(tài)地裝入到該系統(tǒng)中的一個內(nèi)核模式。它的-.t:部邊界為安全應(yīng)用程序提供安全服務(wù)。它的下部邊界與安全BIOS進行接口,提供了低級安20全功能。操作系統(tǒng)驅(qū)動程]供的服#^括RSA和RC6加密函數(shù)、應(yīng)用程序完整性檢驗以及隨機數(shù)生成。軟件操作環(huán)境使用如WDMWindows設(shè)備驅(qū)動程序的操作系統(tǒng)驅(qū)動程序。該設(shè)備驅(qū)動程序也可運行在Wmdow98、WindowsMe、Wmdows2000和未來的MicrosfotWindows操作系統(tǒng)下。25現(xiàn)在討論操作的原理并B各述OSD操作的過程。圖2示出了客戶組件層?,F(xiàn)在討論初始化。在應(yīng)用程序調(diào)用OSD函數(shù)前,通過調(diào)用OsciRegisterApplication函數(shù),用操作系統(tǒng)驅(qū)動程序注冊它自己本身。操作系統(tǒng)驅(qū)動程序做下面的操作以注冊一個應(yīng)用程,。獲得應(yīng)用程序識別信息,如ProcessID。30在作為參數(shù)傳遞的SigiiedCcmtemer中基于密鑰摘要獲得公開密鑰索引。操作系統(tǒng)驅(qū)動程序在初始化過程中創(chuàng)建的密鑰表將密鑰摘要映射成密鑰索弓J。調(diào)用B10SRawRSAPublic以開封在SignedContamer中的數(shù)據(jù)塊。該數(shù)據(jù)塊包含地址范圍、所期望的代碼摘要和PnvfegeBtf論ctor和完整性檢驗的頻率。基f地址范圍創(chuàng)建調(diào)用程序的部分的代碼摘要。應(yīng)這樣執(zhí)行應(yīng)用程序以使5所有的OSD函數(shù)調(diào)用非常接近,被稱為OSD服務(wù)調(diào)用塊(SIB)。OSD服務(wù)調(diào)用塊必須(在法律上要求)是不普通的,從而防止其它的應(yīng)用程序為了自己的目的進入SIB和使用OSD的API。該SI:B是增加了專用于該調(diào)用應(yīng)用程序的APIs的一組值。將創(chuàng)建的代碼摘要和所期望的代碼摘要進行比較。如果它ff湘同,則驗證io該應(yīng)用程序否則返回錯誤。如果該應(yīng)用辦被驗證,則在注冊的應(yīng)用辦表中增加--個入口。入口包括應(yīng)用程序的識別信息(ProcessID)、OSD服務(wù)調(diào)用塊的地址范圍、OSD服務(wù)調(diào)用塊的代碼摘要和PiwilegeBrtVector以及完整性檢驗頻率。砂臟討論服務(wù)調(diào)用。在一個應(yīng)用程序向用操作系統(tǒng)驅(qū)動程序注冊后,該應(yīng)15用程序請求OSD服務(wù)。在每一次調(diào)用它的函數(shù)時,操作系統(tǒng)驅(qū)動程序要完成下面的工作。檢驗應(yīng)用程序的完整性。從注冊的應(yīng)用程序表中,基于完整性檢驗頻率進行。通過創(chuàng)建應(yīng)用超判勺OSD月艮務(wù)調(diào)用塊的代碼摘要,操作系統(tǒng)驅(qū)動程序完成它。然后和所期望的代碼摘要進行比較。如果它們相同,則應(yīng)用程序完整性2()為OK,否則返回error。檢驗PrivilegeBitWctor以觀察應(yīng)用程序是否具有調(diào)用該函數(shù)的權(quán)力。繼續(xù)執(zhí)行OSD代碼以服務(wù)于該請求。操作系統(tǒng)驅(qū)動程序可能依賴于所請求的服務(wù)調(diào)用安全BIOS程序。調(diào)用OsdRandomAddNoise函數(shù)。這將增加PRNG的不可預見性。25現(xiàn)在討論應(yīng)用程序的取消注冊。在適當在終止應(yīng)用程序前,它調(diào)用OsdU隱gisterAppHcation.用操作系統(tǒng)驅(qū)動旨取消注冊它它本身。0SD驅(qū)動程序冊滁在注冊應(yīng)用程序表中的應(yīng)用程序的入口。下面詳細描述操作系統(tǒng)驅(qū)動程序(OSD)的功能。橾作系統(tǒng)驅(qū)動程序是能在Wmdow98、WindowsMe以及Wmdows2000下運行的WDM內(nèi)核模式驅(qū)動3"程序。WDM是基于WindowsNT展的32位設(shè)備驅(qū)動模型,具有對PNP和Powertoagement的額外支持。因為操作系統(tǒng)驅(qū)動程序并不管理所有的物理設(shè)備,不分配任何硬件資源。操作系統(tǒng)驅(qū)動程序?qū)崿F(xiàn)作為--彌塊鄉(xiāng)行。沒有類/小類驅(qū)動程序?qū)?。當在系統(tǒng)中裝入橾作系統(tǒng)驅(qū)動程序時,創(chuàng)建一個FunctionalDeviceOl^iect(FDO)。圖3示出了操作系統(tǒng)驅(qū)動程序組件的相互作用。5現(xiàn)在討論注冊的應(yīng)用程序表創(chuàng)建。操作系統(tǒng)驅(qū)動程序保存注冊的應(yīng)用程序的一個表?;趹?yīng)用程序的檢驗頻率從注冊的應(yīng)用程序表中,操作系統(tǒng)驅(qū)動程序周期性地檢驗調(diào)用程序的完整性。它獲得調(diào)用程序的OSD服務(wù)調(diào)用塊的地址范圍,并創(chuàng)建代碼摘要。然后再檢驗來自于注冊的應(yīng)用程序表的所期望的代碼摘要。i(>現(xiàn)在討論RSA加密函數(shù)。操作系統(tǒng)驅(qū)動程序執(zhí)行接口函數(shù)以完成PuhKContamer密封登記,其中PubKContainer是在BI0S、AppContamer密封/開封以及S柳edContamer開封中創(chuàng)建的。然而,所有的RSA公開/私有密鑰算法是在安全BIOS中執(zhí)行的。操作系統(tǒng)驅(qū)動勒,調(diào)用BIOS程序以完成容器操作。15操作系統(tǒng)驅(qū)動程序?qū)崿F(xiàn)RC6算法函數(shù)以密封/開封MKContamer。除了在登記過程中這是在操作系統(tǒng)驅(qū)動程序本身而不是在BIOS中完成的,BIOS執(zhí)行MKContamer處理以保護該主密鑰?,F(xiàn)在討論OSD接口和APIs。該節(jié)描述操作系統(tǒng)驅(qū)動程序與系統(tǒng)內(nèi)核和完全BIOS的接口。該節(jié)也定義20了OSDAPI函數(shù),用戶模式的應(yīng)用程序能調(diào)用它以獲得OSD安全服務(wù)。這里也描M作系統(tǒng)驅(qū)動程序應(yīng)掘亍的內(nèi)部函數(shù)。操作系統(tǒng)驅(qū)動程序函數(shù)的上邊界接口如下。在WDM模型下,系統(tǒng)I/O管理器通過創(chuàng)建----個I/ORequestPacket(IRP)和將它向下發(fā)送給設(shè)備驅(qū)動程序-彩寸設(shè)備驅(qū)動器提出---個I/O請求。育S1:過發(fā)送DEVICEJO一CONTROLIRP25調(diào)用OSD安全服務(wù)。用于:DeviceJOj:oi加l的每一個句柄程iW供了一偉定的功能。在以下定義Ji作系統(tǒng)驅(qū)動禾Mif:10—CONTROL代碼。10CTLJ3SDJ!EGISTEI^APPLICATION。句柄程序向操作系統(tǒng)驅(qū)動程序注冊應(yīng)用程序,并調(diào)用BIOS程序。IOCTL—OSDJJNREGISTER,PLICATION。句柄程序向操作系統(tǒng)驅(qū)動程30序未注冊應(yīng)用程序。IOCTLJ3SDJ3ET—PUBLIC—KEY。句柄程序使用密鑰索引作為參數(shù)從BIOS提取公開密鑰,并調(diào)用BIOS程序。IOCTLJ3SD—VERIFY—SIGNEDJ)IGEST。句柄程序驗證一個數(shù)據(jù)i^的RAS數(shù),簽名。需要調(diào)用BIOS程序。5IOCTL—OSD—RANDOM—GENERATE。句柄使用PRNG來生成一個隨機數(shù)字。依賴于PRNG執(zhí)行,該句柄可能或不可能調(diào)用的BIOS程序。10CTL—OSD一PUBK—CONTAINER—SEAL。句柄使用用密鑰索引指定的公開密鑰加密在容器中的數(shù)據(jù)塊并調(diào)用BIOS程序。IOCTL—OSD—SIGNEDCONTAINERJJNSEAL。句柄程序驗證容器是否!o真的由驗證服務(wù)器標記和調(diào)用BIOS程序。IOCTL—OSD一APPj:ONTAINERSEAL。句柄程序用從主密鑰導出的密鑰密封AppContamer并調(diào)用BIOS程序。10CTLJ3SD一APP—CONTAINERJJNSEAL。句柄程序用從主密鑰導出的密鑰開封AppContamer并調(diào)用BIOS程序。i5IOCTL—OSD—APP一CONT細ER一TRANSFER。句,聘密封A卯Contei證,而該AppContamer只能由短于在同-fP臺跡同平臺的另-外劇,開封'。調(diào)用BIOS程序來開封包括驗證信息的SignedContamer。IOCTL—OSD^MKj:ONTAINER一SEAL。句柄程序用主密鑰密封容器。真正的密封是在操作系統(tǒng)驅(qū)動程序內(nèi)部完成。調(diào)用BIOS程序來開封AppContamer20以獲得該主密鑰。lOCTLjDSDJvlK—CONTAINERJJNSEAL。句柄flTt;用主密鑰開封容器。開封是在操作系統(tǒng)驅(qū)動程序內(nèi)部完成的。AppContamer調(diào)用BIOS程序來獲得該主密鑰。IOCTL—OSD—ENROLL—GENERATE—REQUEST。句柄程序調(diào)用BIOS程25序來生成偽的SMK、消息密鑰和SMK客戶籽數(shù)。IOCTL—OSD—ENROLL—PROCESS—RESPONSE。句柄程序調(diào)用BIOS程序來生成用于該平臺的主密鑰。IOCTL—OSE)JNVAUDATE—SMK。句柄程序調(diào)用BIOS函數(shù)來使由先前的登記中生成的主密鑰無效。3()IOCTL—OSD—SET—PUBLIC—KEY。句柄函數(shù)在BIOS密鑰表中安裝額外的RSA公開密鑰。tt討論操作系統(tǒng)驅(qū)動程序的低邊界接口。在操作系統(tǒng)驅(qū)動程序的低邊界接口上,操作系統(tǒng)驅(qū)動禾聘調(diào)用安全BIOS接口程序來獲得由低級BIOS提供的安全服務(wù)。安全BIOS接口是在基于32位目錄服務(wù)接口的基礎(chǔ)上實現(xiàn)的。當5將操作系統(tǒng)驅(qū)動IW裝入系統(tǒng)時,它需要搜索安全BIOS入口點。在每--個程序調(diào)用前,操作系統(tǒng)驅(qū)動程序需要基于安全BIOS規(guī)格建立注冊環(huán)境?,F(xiàn)在討論UserModeAPI函數(shù)。執(zhí)行l(wèi)]serModeAPI庫。翻:調(diào)用在該庫中的函數(shù),保密應(yīng)用程序能訪問由操作系統(tǒng)驅(qū)動程序提供的保密服務(wù)。API函數(shù)如下所述。i()IntOsdRegisterAppiication(INunsignedchar*pAuthorizationBuffer,I—Nunsignedkit*pAuthorkarionBufferLength)該函數(shù)用OSD代碼注冊應(yīng)用程序。它檢驗該應(yīng)用程序是否被驗證了,并在OSD保持的注冊的應(yīng)用程序表中保存應(yīng)用掛,信息。只有從注冊應(yīng)用禾靜內(nèi)的i5—個單元或從其它的OSD函數(shù)調(diào)用它ff],其它的OSD調(diào)用才能作用。如果注冊是成功的,則返回0。否則返回error。PAuthonzationB-uffer和pAuthormjtionBulferLength參數(shù)指定由設(shè)備管理機構(gòu)服務(wù)器創(chuàng)建的SignedContmner的單元和長度。該函數(shù)使用IOCTL—OSD—REGISTER—APPLICATION來調(diào)用OSD服務(wù)。2()tatOsdGetCapabiiities(OUTunsignedstort*pVersion,OUTunsignedshort*pCapabiiities)該函數(shù)返回OSD版本號以及OSDCR性能和系統(tǒng)m。版本號定義如下。25第一字節(jié)第二字節(jié)次版本主版本性能WORI)被定義成具有15位。位0表示系統(tǒng)已經(jīng)成功登記。1,成功;0,失敗。位l表示登記類型。0,離線登記;〗,在線登記,以及位2-15是預留的。3o該函數(shù)使用IOCTL—OSD—GET—CAPABELIT正S來調(diào)用OSD服務(wù)。IntOsdUnregisterApplicatioii0函數(shù)3im登記的應(yīng)用超竽表中刪除調(diào)用i^的入口來取消登記該調(diào)用程序。該函數(shù)使用IOCTL—OSDJJNREGISTER—APPLICATION來調(diào)用OSD服務(wù)。IntOsdGe翻-icKey(5INintnKeyliidex,OUTunsigiiedchar傘pModulusBuffei;IN/OUTunsignedint*pModiilusBufferLengthOUTunsignedint*pExponent)如果成功提取存儲在密鑰表的iiKey:fadex行中的RSA公開密鑰,則該函數(shù)10返回0。在特定的緩沖器中返回公開密鑰的模(1024位數(shù)字),且公開密鑰的指數(shù)(3或65537)被放在由pExponent識別的單元中。由pModulu必ufferLengtb識別的單元最初被設(shè)為實際使用的字節(jié)的數(shù)量。返回的非0值表示錯誤。首先將密鑰的??截惖骄哂蠱ostSigmficantByte(MSB)的緩沖器中。就從閃速ROM中載入的密鑰來說,NkeyMex〗飽始于零荊頃序地增加。在運行了OS以后,i5通過WDL的OSDSecurityModule,負的nKeyliidex值引用被載入到SMM公開密鑰表中的密鑰。該程序可由一個應(yīng)用程序使用以定位對應(yīng)于該應(yīng)用程序從X.509驗證中了解的公開密鑰的nKeyIndex。如果調(diào)用辦不是一個注冊的應(yīng)用程序或另-個OSD程序,該函數(shù)返回一20個錯誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHAl摘要自從登記以來沒有改變過。該函數(shù)使用IOCTLJ3SD—GET.PUBLIC—KEY來調(diào)用OSD服務(wù)。IntOsdRSAVenfySignedDigest(INmtnKeyliidex,25INimsigrsedchar*pSignedDigestBuffer,INunsignedint*pSignedDigestBufferLength.INunsignedchar*pDigestBufferINunsignedmt*pDigestBufferLength)該函數(shù)驗證RSA數(shù)字簽名。使用由nKeyliidex指定的公開密鑰來抽取使用30匹配的私有密鑰加l密的所期望的摘要值,'戰(zhàn)L行PKCS#1格式化的RSA公開密鑰操作來加密由pSigiiedDigestBiiffer和pSignedDigestBufferLength指定的數(shù)據(jù)緩沖器。將所期望的摘要與由pSigiiecMgestBulfa和pSignedDiges氾ufferLeiigfli參數(shù)指定的值進行比較。如果它們相等,則返回0,否則它返回-一個非0錯誤代碼。如果nKeylndex無效,貝暇序也將返回一個錯5誤。pSignedDigestBuffer和pSignedDigestBufferLength值能從調(diào)用OsdSHAlFinal,中產(chǎn)生。在pSignedttgestBufe中的數(shù)據(jù)首先存儲在MSB中,并且它必須正好與用于所選定的公開密鑰的模一樣長。如果調(diào)用程序不是一個登記的應(yīng)用程序或另一個OSD程序的話,則該函數(shù)io返回-,昔誤。定期地,該函數(shù)將檢驗調(diào)用程序的代碼的SHAi摘要自從登記以來沒有改變過。函數(shù)使用IOCTL—OSD—VERIFY—SIGNED—DIGEST來調(diào)用OSD服務(wù)。IntOsdDigestl]it(OUTDigesContext*pDidgestContext)15該函數(shù)能由任何應(yīng)用程序調(diào)用。它在將用來計算SHA1摘要值的調(diào)用程序的地址空間中初始化一個K5結(jié)構(gòu)。調(diào)用辦能修改該繊結(jié)構(gòu),因此OSD模塊不會嫩賴于該結(jié)果的正確性。當逸些SHAi程序由一個應(yīng)用程序使用以驗證簽名時,該應(yīng)用程序委托自己來計算正確的摘要值然后委托操作系統(tǒng)驅(qū)動程序(以及依次是BIOSSMI安^il20塊)用正確的RSA公開密鑰彩f算。當OSD層注冊一個新的應(yīng)用程序時,數(shù)據(jù)結(jié)構(gòu)被保存在操作系統(tǒng)驅(qū)動,存儲器中,因此操作系統(tǒng)驅(qū)動程序能相信該結(jié)果。參見節(jié)8關(guān)于DigesContext數(shù)據(jù)結(jié)構(gòu)的定義。tatOsdD堪estUpdate(INDigesContext★pDigestContext,25INunsignedchar*pBuffer,INunsignedmt*pBufferLength)該函數(shù)能由任何應(yīng)用程序調(diào)用。通過向它提供由pBufer和pBufaLength參數(shù)指定的數(shù)據(jù)字節(jié),它《妙,一個調(diào)用程序地址空間中的數(shù)據(jù)結(jié)構(gòu)來更新SHA1摘要對象的狀態(tài)。3(!在調(diào)用該程序之前,對-一個必須由在緩沖器中的字節(jié)的數(shù)量和填充的舉元是一個指向該萃元的指針。該程序并不改變那個單7G,因此長度可直銜專送而不是通過弓l用。然而,在該設(shè)計中所有的緩沖器長度是通過引用傳遞的,目的是使接口更一致。5lotOsdDigestFinal(MDigestContext★pDigestContext,OUTunsignedchar求pDiges氾uffer,IN/OUTunsignedint*pDigestBufferLengh)該函數(shù)可由任何應(yīng)用程序調(diào)用。它使用-一個在調(diào)用程序的地址空間中的數(shù)io據(jù)結(jié)構(gòu)來計算可能用0傳遞或?qū)sdDi'gestUpdate的更多調(diào)用的一個數(shù)據(jù)塊的SHAi摘要的最后結(jié)果。通過追加瞎充和總長度(以字節(jié)為單位)以及執(zhí)行最后的摘要操作,它處理保存在該數(shù)據(jù)結(jié)構(gòu)的緩沖器中的任何字節(jié)。結(jié)果放在由pDiges氾uffer和pDigestBufferLengft參數(shù)指定的緩沖器中。在調(diào)用該函數(shù)前,p:Diges氾ufferLengtii指向指定pDigestBuffer的最小尺寸的單元,以及在成功完"成后,該單元被設(shè)為放在緩沖器中的字節(jié)的數(shù)量。對SHAJ摘要來說,結(jié)果將為20字節(jié)長。IntOsdRandomGenerate(OUTunsignedchar*pDataBuffei;INunsignedint*pDataBufferLength)20該函數(shù)使用操作系統(tǒng)驅(qū)動程序的偽的隨機數(shù)字生成器用由pDataBuflMxngth參數(shù)指定的字節(jié)的數(shù)量來填充該特定緩沖器。如果pDataBuiferLengtli是20字節(jié)或更少,則執(zhí)行-一次下面的步驟以及將ResuJtBloek的前導字節(jié)復制到pDataBufe中,其余的則丟棄。如果需要不只20字節(jié),貝,據(jù)需要重復執(zhí)!TF面的步驟。SMeBlock和Resul艦ock均為20個25字節(jié)的值。Statefitock表示PRNG的全局態(tài)。Resu旭lock:S畫(StateBiock11StateMoek)StateBiock=StoteBiock異或SHA1(SMeBlock11Resul氾tock)當已經(jīng)填入了pDataButtbr時,通過調(diào)用OsdRandomAddNoise結(jié)柬。如果調(diào)用f將不是一個登記的應(yīng)用程序或另----個OSD程序的話,則該函數(shù)30返回-一W昔誤。定期地,該函數(shù)將檢驗調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變過。函數(shù)使用K3CTLJ)SD—RANDOM—GENERATE來調(diào)用OS[)服務(wù)。IntOsdPubKContainerSeaJ(INKitnKeytadex,5IN/OUTunsignedchar*pContainerBuffer,IN/OUTunsignedint.*pContainerBufferLength,OUTunsignedchar*pMKBuffer,IN/OUTunsignedmt*pMKBufferLength)該函數(shù)用來保證傳送到設(shè)備管理機構(gòu)服務(wù)器的數(shù)據(jù)不能被其他的客戶讀io取。只有設(shè)備管理機構(gòu)服務(wù)器才知道開封該容器的所必需的私有密鑰。PcontainerBi版r參數(shù)指向一'個保存了-一個開封的PubKCoirt細er結(jié)構(gòu)的存儲塊。調(diào)用程序應(yīng)填充如在有關(guān)PubKContamer的節(jié)中描述的各種字段。那個部分還描述了由這個函數(shù)執(zhí)行的步驟。Nkeyfadex識別應(yīng)用來密封該容器的公幵密鑰。!5當輸入時》pContamerBuferLength指向含有適合該容器緩沖器的最大的字節(jié)數(shù)目的單元。當輸出時,它包含用在pContamerBuffer中的實際的字節(jié)數(shù)H。在pContamerBuffer中使用的信息描述了必須被保護的數(shù)據(jù)的長度。PMKBuffer和pMKBufferLength參數(shù)指定---個用AppContamer填充的緩沖器。該AppContemer保護為PubKConta.raer生成的主密鑰。該信息被用于創(chuàng)建20具有相同主密鑰的MKContamer。衝必周用OsdRandomAddNoise0,該程序結(jié)束。如果調(diào)用程.序不是一個登記的應(yīng)用程序或另--十OSD程序的話,該函數(shù)返回一tl昔誤。定期地,該函數(shù)將檢驗調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變。函數(shù)使用lOCTL—OSD—PUBK—CONTAINER—SEAL來調(diào)用OSD月艮務(wù)。25IntOsdSignedContainerUnseal(IN/OUT函signecichar*pContainerBuffer,IN/OUTunsigned.int.*pContainerBufferLength)該函數(shù)用,驗容器邀否真的由服務(wù)器標記。如名無效,返回一個錯誤。SignedCoiitamer的格式和由該函數(shù)執(zhí)行的步驟是在有關(guān)SignedContamers30的節(jié)中描述的。當輸入時,pContainerBufferLength指向含有適合該容器緩沖器的最大的字節(jié)數(shù)目的單元。當輸出時,它包含用在i)CoiitainerBuffe.r中的實際的字節(jié)數(shù)目。用在pCOTtainerBuifer中的信息描述了必須保護的數(shù)據(jù)的長度。通過調(diào)用OsdRandomAddNoise(),該程序結(jié)束。如果調(diào)用程序不是-一個登5記的應(yīng)用程,或另一個OSD程序的話,該函數(shù)返回一^tf昔誤。定期地,該函數(shù)將檢驗調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變。函數(shù)使用IOCTLJ3SD—SIGNED—CONTAINER—UNSEAL來調(diào)用OSD服務(wù)。IntOsd皿Con.tainerSea](IN/OUTunsignedchar*pContamerBuffer,i(〕IN/OUTunsignedint.*pContainerBufferLength,INunsignedchm**pMKBuffcr,INunsignedint*pMKBufferLength)該函數(shù)用來密封容器,因此它只能由知道該主密鑰的其他人開封。該密鑰可以是設(shè)備和服務(wù)器知道的主密鑰,也可以是由客戶生成的、并在--個15PubKConta.ienr中發(fā)送給服務(wù)器的新密鑰。在輸入時,PcoiitamerBuffer參數(shù)指向一個保存一個開封的MKCoiitainer結(jié)構(gòu)的存儲塊。在輸出時,密封'容器。調(diào)用程序應(yīng)填充如在有關(guān)MKContamer的節(jié)中描述的各種字段。在那個部分中也描述了由該函數(shù)執(zhí)行的步驟。該函數(shù)為密鑰使用使用客戶常數(shù)。當輸入時,pContainerBufferLength指向含有適合該容器緩沖器的最大的字20節(jié)數(shù)目的單元。當輸出時,它包含用在pContainerBu他r中的實際的字節(jié)數(shù)目。用在pContamerBuffbr中的信息描述必須保護的數(shù)據(jù)的長度。PMKBuffer和pMKBufferLength參數(shù)指定一個保存AppContamer的緩沖器。該AppContamer保護ffil調(diào)用OsdPubKContamerSeal函數(shù)生成的主密鑰。lil調(diào)用OsdRandomAddNoiseO,fiif結(jié)束。如果調(diào)用程序不是一個登記的25應(yīng)用程序或另----個OSD程序的話,該函數(shù)返回一個錯誤。定期地,該函數(shù)將檢驗調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變。函數(shù)使用IOCTL—OSD—MK—CONTAINER—SEAL來調(diào)用OSD服務(wù)。IntOsdMKContamerUnseal(IN/OUTunsignedchar*pContainerBuffer,3()IN/OUTunsignedint*pContainerBiifferLength,INunsignedcliar*pMKBuffer,INunsignedmt*pMKBufferLengthINintwasSealedByServer)該函數(shù)將使用給定主密鑰來開封由另一個實體密封的容器。在輸入時,5PcontamerBuffer參數(shù)指向一個保存一個密封的MKContamer結(jié)構(gòu)的存儲塊。在輸出時,容器是開封的。參見有關(guān)MKContamer的節(jié)來了解開封格式。那節(jié)還描述了由該函數(shù)執(zhí)行的步驟。如果參數(shù)wasSealedByServer為零,則由該程序使用的該密鑰使用常數(shù)是客戶常數(shù),否貝U它們是服務(wù)器常數(shù)。有關(guān)密鑰使用常數(shù)詳見該節(jié)。io當輸入時,pContainerBuiferLength指向含有適合該容器緩沖器的最大的字節(jié)數(shù)目的單元。當輸出時,它包含用在pCaitainerBuffer中的實際的字節(jié)數(shù)目。用在pCoirtamerBufe中的信息描述了必須被保護的數(shù)據(jù)的.微。PMKBuffer和pMKBufferLength參數(shù)指定保存AppCont謡er的緩沖器。該AppCoitamer保護ilil調(diào)用OsdPubkContainerSeal函數(shù)生成的主密鑰。15iffil調(diào)用OsdRandomAddNoise(),該程序結(jié)束。如果調(diào)用程序不是---個登記的應(yīng)用程序或另一令OSD程序的話,該函數(shù)返回一個錯誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變。函數(shù)使用IOCTL—OSD—MK—CONTAINERJJNSEAL來調(diào)用OSD服務(wù)。IntOsdAppContainerSeaJ(20IN/OUTunsignedchar*f)Contaiiier'Buffei;■IN/OUTunsignedmt*pContamerBufferLength)該函鍋f密封容器,因此它只能由運行在相同設(shè)備上的相同的程序開封。當輸入時,PcontamerBuffer參數(shù)指向一個保存了一個開封的AppContamer結(jié)構(gòu)的存儲塊。當輸出時,容器密封。調(diào)用程序應(yīng)填充如在有關(guān)AppCoiitomer的25節(jié)中描述的各種字段。那節(jié)也描述了由該函數(shù)執(zhí)行的步驟。該函數(shù)為密鑰使用而使用客戶常數(shù)。當輸入時,pContamerBu泡rLength指向含有適合該容器緩沖器的最大的字節(jié)數(shù)目的單元。當輸出B寸,它包含用在pContamerButer中的實際的字節(jié)數(shù)目。用在pContame:rBiife中的信息描述了必須被保護的數(shù)據(jù)的長度。30M調(diào)用OsdR腿ciomAddNoiseO,該程序結(jié)束。如果調(diào)用程序不是一個登記的應(yīng)用樹f或另一個OSD程序的話,該函數(shù)返回一1H昔誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHA〗摘要自從登記以來沒有改變。函數(shù)使用IOCTL—OSD—APP—CONTAINER—SEAL來調(diào)用OSD服務(wù)。IntOsdAppContainerUnseal(5IN/OUTunsignedciiar*pContainerBuffer,IN/OUTunsigneduit*pCottamerBufferLengh,INintwasSealedByServer)該函數(shù)將開封由運行在該計算機上的應(yīng)用程序和特別用于在該計算機上的應(yīng)用程序的服務(wù)器密封的容器。招俞入時,PeontamerBiife參數(shù)指向一個保存io了-一個密封的AppContamer結(jié)構(gòu)的存儲塊。在輸出時,容器開封的。有關(guān)開封的格式參見有關(guān)AppCoDtamer的章節(jié)。該章節(jié)還描述由該函Wl行的歩驟。如果參數(shù)wasSealedBySeiw是0,貝ij由該勒,使用的密鑰鵬常數(shù)是客戶常數(shù)。否貝咜們是服務(wù)器常數(shù)。當輸入時,pContemerBufibrLengtii指向含有適合該容器緩沖器的最大的字15節(jié)數(shù).目的單元。當輸出時,它包含用在pContamerBuffa中的實際的字節(jié)數(shù)H。用在pContamerBuffbr中的信息描述了必須被保護的數(shù)據(jù)的長度。通過調(diào)用OsdR論domAddN(Mse(),該程序結(jié)束。如果調(diào)用程序不是一個登記的應(yīng)用程序或另-一個OSD程序的話,該函數(shù)返回一4St誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHAI摘要自從登記以來沒有改變。函數(shù)使用20IOCTL—OSD_APP_CONTAINERJJNSEAL來調(diào)用OSD服務(wù)。lntOsdAppCor!tamerTransfer(IN/OUTunsigneddiar承pCont繊erBulfer,IN/OUTunsignednit*pCorrtainerBufferLength,INunsignedc.har*pAuthonzaticaiBuffer,25INunsignedkit*pAuthonzationBufferLength)該函數(shù)用來密封容器,因此它只能由運行在相同設(shè)備上的不同程序來開封。容器原來的主人失去了打開它的能力。當然,原來的主人能制作該織的各份,并繼續(xù)打'幵和關(guān)閉該備份,但傳遞后的容劉每用不同的密鑰加密,因此只有新的主人才能打開它。該特征能由安全鍵盤讀取模塊使用以便捕捉擊鍵和安全地30將它們傳遞給正確的應(yīng)用程序。當輸入時',Pcont細erBuffer參數(shù)指向一個保存一個開封的AppCoMamer結(jié)構(gòu)的存儲塊。當輸出時,密封'容器。調(diào)用程序應(yīng)填充如在有關(guān)AppContamer的節(jié)中描述的各種字段。那個章節(jié)還描述了由該函數(shù)執(zhí)行的步驟。該函數(shù)為密鑰使用而使用客戶常數(shù)。該函數(shù)證實在為使用密封它之前當前擁有該容器的調(diào)用5程序(檢驗DeciyptedCodeDigest)是新的擁有者。pAuttonzat織iBuffer和pAuthonzationBufferLeiigth參數(shù)指定由設(shè)備管理機構(gòu)服務(wù)器創(chuàng)建的SigeedConfainer的單元和長度。受保護的容器詳見設(shè)計文獻。操作碼是OpcOsdAllowTraiisfer,并且容器內(nèi)的W指定程序的AppCodeDigest,其中該程序正調(diào)用該函數(shù),且程序的AppCodeD瞎st能開封該容器。容器的ioSealerCodeDigest字段將識別調(diào)用該函數(shù)的程序。當輸入時,pContame迅ufferLength指向含有適合該容器緩沖器的最大的字節(jié)數(shù)目的單元。當輸出時,它包含用在pContamerBufe中的實際的字節(jié)數(shù)目。用在pCoiitamerBiifffer中的信息描述了必須被保護的數(shù)據(jù)的長度。通過OsdRandomAddNo股O,該程序結(jié)束。如果調(diào)用程序不是--個登記的應(yīng)用程序或15另-"個()SD程序的話,該函數(shù)返回一佛誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHA1摘要自從登記以來沒有改變過。IntOsdE,UGenerateRequest(OUTunsignedehar*pPubKContakerBuffer,IN/OUTunsignedmt*pPubKContaitierBufferLength)2()該函鍋f生成一個偽SMK、主密鑰和對話密鑰的客戶籽數(shù)。返回一個具有主密鑰和對話密鑰的客戶籽數(shù)的密封PuKContamer以及具有對話主密鑰的密封的AppCont纖er。將該PubKContamer發(fā)送到設(shè)備管理衫l構(gòu)服務(wù)器。BIOS將在SMRAM中保存客戶籽數(shù)及主密鑰。當輸入時,pPubKContainerBuffer和pA即ContamerBuffer指向緩沖器。pPubKContaiiierBufferLength和25pAppContamerBdferLengtli指向具有緩沖器的長度的-攀元。當輸出時,緩沖器將用返回的Containers填充。如果成功,該函數(shù)返回,否則返回error。該函數(shù)使用IOCTL—OSD—ENROLL—GENERATE—REQUEST來調(diào)用OSD服務(wù)。IntOsdEnroiiProcessResponse(3()INunsignedchar*pCoiitainerBuffer,INi腿gnedmt*pContainerBufferLengtli,OUT麗signecichar*pAppContainerBuffer,IN/OUTunsignedint*pAppContainerBufferLengt!i,OUTunsigneddiar*pPubKContainerBulfer,5IN/OUT固signedBitpPubContakerBufferLength)該函數(shù)調(diào)用SMI程竽來生成主密鑰并將它保存在SMRAM中。該程序?qū)?chuàng)建一個具有KeyID(SMK的-散列)和其它數(shù)據(jù)的SealedAppConteuner。當輸入時,pContamerBuifer指向一個緩沖器,該緩沖器存儲由設(shè)備管理機構(gòu)月艮務(wù)器在在線登記,中返回的MKCoiitamer或者在離線登記過程中具有.偽h)月艮務(wù)器籽數(shù)的SignedContamer。當輸出時,pAppCoiitamerBuffer存儲含有KeyII)的密封的AppContamer。在離線登記過程中,PpubKContamerBu泡r指向包含月艮務(wù)器籽數(shù)和客戶籽數(shù)的緩沖器。在在線登記過程中,該指針可以是MJLL。該函數(shù)使用fOCTL—OSD—ENROLL—PROCESS—RESPONSE來調(diào)用OSD服務(wù)。!5totOsdInvalida.teSMKO該函數(shù)使由先前的登記過程生成的主密鑰無效。該函數(shù)使用IOCTL—OSDJNVALIDATE一SMK來調(diào)用OSD服務(wù)。IntOsdS改PublicKey(INunsignedintnKeylnde'x,2()INunsignedchar*pKeyBuffer,INunsignedmt*pKeyBufferLengt:h)該函數(shù)或者替換由nKeytadex指定的R.SA公開密鑰、或在BIOS密鑰表中增力H--個新密鑰。在輸入時,iiKeylndex指定該密鑰替換或增加。PkeyBiiffer指向密鑰緩沖器。pKeyBufferLength表示該緩沖器長度。25mit討論內(nèi)部函數(shù)。下面的函數(shù)由OSD驅(qū)動樹,在內(nèi)部調(diào)用。它們并不對用戶應(yīng)用程序公開。IntOsdMtialze(void)該函數(shù)初始化操作系統(tǒng)驅(qū)動程序的狀態(tài)。在將它裝入該系統(tǒng)后,操作系統(tǒng)驅(qū)動程序調(diào)用該函數(shù)。該函數(shù)向BOI:S層注冊并初始化I)RN'GPRNG是通過30清零StateBlock、從信號量文件讀保存的平均信息量、將它轉(zhuǎn)換成二進制以及將它傳遞給OsdRandomAddSeed函數(shù)皿f初始化。如果沒有保存的平均信息量,則操作系統(tǒng)驅(qū)動程序執(zhí)行收集平均信息量字節(jié)的慢處理、調(diào)用OsdR皿domAddSeed然后使用OsdRandomSaveEntroy來將平均信息量保存到信y」y:i:件中。5IntOsdRaiidomAddNoice(void)在每--個WDL的OSD安全程序的結(jié)尾調(diào)用該函數(shù)。ffiil增加對攻擊者來說有點不可預見的^il信息,它幫助增加了全程的PRNG的不可預見性。用新的上下文調(diào)用OsdDigestlrat。調(diào)用OsdD堪estUpdate傳遞Stat-eBiockl()對每一個快速平均信息量源來說調(diào)用OsdD堪estUpdate傳遞詼決速平均信息量值(32位或64位值)在處理完最后-一個快速平均信息量源后,調(diào)用OsdDigestFmaI生成Resul氾lockStateBlock=StateBiock異或Resul氾lock15該快均信息量包括CPU周期計數(shù)、如超高速緩存失誤合計的CPU統(tǒng)計以及所有的系統(tǒng)時鈄位。新的StateBlodc是舊的數(shù)據(jù)塊和摘要值的異或的結(jié)果。ffil用異或?qū)⑴f數(shù)據(jù)塊和新數(shù)據(jù)塊混合,我們保證新狀態(tài)的不可預見性低于舊狀態(tài)(假定用于該摘要函數(shù)的普避待性)。相反,等式StateBlock二SHAl(SteteBlock)將導致減少不可預見性的數(shù)量,因為SHA1象導致兩個輸入值20鵬賴鵬同的輸出值的隨機函數(shù)一樣動作。有更少可能的具有每一個ii^的輸出。如果主板或CPU支掙一個|:RNG,另卩么應(yīng)該包括該衝M。只有增加可快速使用的隨杉L性的數(shù)量。如果調(diào)用程序不是一個登記的應(yīng)用程序或另一個OSD程序的話,該函數(shù)返25回一iiS誤。定期地,該函翻每檢驗調(diào)用禾iif的千鵬的SHAl摘要自從登記以來沒有改變過。MOsdRandomAddSeed(INunsignedchar*pDataBulfer,INunsignedint傘pDataBiifferLength)30該函數(shù)更新操作系統(tǒng)驅(qū)動程序的PRNG的狀態(tài)。它執(zhí)行以下步驟。StateBtock=StoteBlock異或SHAl(StateBlock||pDataBuffer)胃t是說,初始4t--個SHA1上下文,并用StateBlock和在指定的緩沖器的字節(jié)更新它。調(diào)用OsdRandomAddNoise05如果調(diào)用程序不是一個登記的應(yīng)用程序或另一個OSD程序的話,該函數(shù)返回一1H昔誤。定期地,該函數(shù)將驗證調(diào)用程序的代碼的SHAi摘要自從登記以來沒有改變。IntOsdRandoi"SaveE他opy()該函數(shù)將來自于操作系統(tǒng)驅(qū)動f舒,的全程P腦G的信息保存到Semaphoreio文件的-一個字段中。它并不保存原始的StateBlock,因為它將導致操作系統(tǒng)驅(qū)動程序重新使用相同的隨機字節(jié)序列。相反,它保存從當前(勵位)狀態(tài)產(chǎn)生的32字節(jié)(256位)值。從那個值重新啟動PRNG將不會導致它重新產(chǎn)生相同的字節(jié)?;镜牟襟E如下調(diào)用請求一個32位隨機字節(jié)的緩沖器的OsdRandoinGenerate15將這些二進制字節(jié)編碼成64位十進制ASCII字符在Semaphore文件的一個字段中保存這些字符調(diào)用OsdRandoniAddNoise0如果調(diào)用辦不是一個登記的應(yīng)用程序或另一個OSD程序的話,該函數(shù)返回一個錯誤。定期地,該函翻微驗調(diào)用程序的代碼的SHA1摘要自從登記以20來沒有改變?,F(xiàn)在討論數(shù)據(jù)格式。下面是對在本發(fā)明中使用的數(shù)據(jù)結(jié)構(gòu)和格式的描述。AuthorizationBuffer是一個SignedContaiiier。在該容器中的Data塊在表14中定義。RegisterApplicatoinTable的入口在表15中定義。該表可以實現(xiàn)作為一頓表。25—F面的問題是由本發(fā)明提出的。-一個問題是如何從操作系統(tǒng)驅(qū)動程序讀取應(yīng)用程序代碼。只要核心的模式OSD象頂級驅(qū)動程序一樣且在PASSIVE—LEVEL中運行,它就能讀取UserMode地址空間。另一個問題是如何獲得調(diào)用程序的入口點。當一個應(yīng)用程序調(diào)用DewceIOCon加l系統(tǒng)函數(shù)B寸,它能從rmg3轉(zhuǎn)換到nng0。以及對不同的rmg,30iMS皿行不同的堆棧。操作系統(tǒng)驅(qū)動程序需要追溯到用戶模式堆棧以獲得入口點。這IM于DeviceIOContol的執(zhí)行,也就是它有多少錢幀(函數(shù)調(diào)用)。下面的四種可能方法是可行的U)模擬指令,舉例來說,通過異常。(2)直接從User模式而不Jiil過驅(qū)動M5調(diào)用BIOS程序。(3)建立INT門,建立一個中斷句柄。所有的函數(shù)將由軟件中斷來調(diào)用。(4)驗證和執(zhí)行在OSD空5間中的用戶代碼。該方法將具有如Win32API—樣的相同的問題。下面是對在MFCAVPN產(chǎn)品中的應(yīng)用程序注冊模塊(ARM)組件的描述。該應(yīng)用程序登記模塊輔助StrongAuthenticationModule(SAM)以提供對安全AppContamers的訪問,其中在客戶設(shè)備和能加密的服務(wù)器之間交換該AppContainersom應(yīng)用樹芊注冊模塊負責為能訪問如VPN的服務(wù)器應(yīng)用程序的客戶設(shè)備提供AppContamerKeys。該應(yīng)用程序注冊模塊通過一條如SSL的安全通信通道與SAM通信。圖4是說明多因子客戶驗證登記的框圖。圖4示出了各種模塊是如何與應(yīng)用程序注WI塊相互作用的。15SAM和應(yīng)用SDW朋模塊具有一個客戶/服務(wù)器聯(lián)系。該應(yīng)用樹,注冊模塊是一個將對不同企業(yè)的SAM公開許多服務(wù)的Internet服務(wù)器。它的目的是在特定設(shè)備向特定企業(yè)的登記過程中,幫助客戶和SAM。最終的結(jié)果是提供具有合適的AppKey的SAM以密封鄰開封正在注冊的設(shè)備中的額l。該操作只能為每一個設(shè)備/企業(yè)組合執(zhí)行一次。20以下面的次序調(diào)用組件。SSL連接檢驗掛科交驗合法的SAM通過一個SSL連接與應(yīng)用程序注冊模塊對話。應(yīng)該重新檢測與應(yīng)用程序注冊模塊的連接的其它所有格式。AppContainerKey提供程序?qū)⑹褂盟邮盏膒ubKContainer來首先在這些企業(yè)上IW亍校檢,然后,準備最終將返回給S細的AppCoiit細ierKey。指向應(yīng)用程序注冊模塊的入口點,包括指定URL,如25AppC()nt訓erKeyReque.st,'Http:〃肌Tis.DeviceA她oiity,-eQm/aiiiiZAppCQiitamfflKfflEffliisst,例如,在它的體內(nèi)URL具有由客戶系統(tǒng)產(chǎn)生的PubKConteinerO以及由SAM提供的某些特殊信息的一個URL?,F(xiàn)在將討論用于ClientCert處理/驗證/授權(quán)的操作原理。配置應(yīng)用程序3()注朋模塊web服務(wù)器mod—ssl來了解設(shè)備管理機構(gòu)RootCA證書。Modssl校驗當前的SAM.CiientCertific加e具有一個導致設(shè)備管理機構(gòu)的驗證路徑。RootCA。例如S扁.ClientCertificate由SubscnptionManager.CA.cert發(fā)布,該SubscriptionManager.CA—cert由設(shè)備管理機構(gòu)RootCA證書發(fā)布。被構(gòu)造在mod—ssl中的最后一個證書將成功地終止SAM.CMentCert的校檢。5在驗證路徑的校驗過程中,mocLssi將考慮已經(jīng)被配置的CertificateRevocationList(CRL)。每一次SubscriptionManager取消-一個SAM時,將不得不考慮更新CRL(舉例來說,購買SAM的企業(yè)將停止)。SubscriptionManager將具有一個存儲它的CRL的URL。該URL存儲在SAM.Clientcert內(nèi)部。應(yīng)用程序登記模塊將定期地從該URL獲得該文件。i()驗證是由設(shè)備管理機構(gòu)RooCA提供的,而SubscriptionManager,CA:aSAM.ClientCert是由MM構(gòu)造SAM的證書提供的。如果我們4OTVersign作為RootCA,將不會是這種情況。驗證是由設(shè)備管理機構(gòu)RooCA、SubscriptionManager.CA以及SubsenptionManagerCRJ的組合提供的如果它具有一個SAM.CfentCert且它不在15SubscriptionManager.CertificateRevocationList,則驗證SAM以聯(lián)系應(yīng)用程序注冊模塊。SSL連接驗證程序。這是從小服務(wù)程序調(diào)用的Java類。它向小服務(wù)程序提供一個API以確認指定的連接的驗證信息。當它存儲有關(guān)SSL連接的信息時,小服務(wù)程序?qū)阉鼈鬟f給至少一個請求對象。使用那個信息,SslComection20Wifier將確定所連接的客戶是否是先前注冊的那-一個。連接驗證程序記錄任何失敗的嘗試。為調(diào)試目的,記錄成功的嘗試。驗證程序返回一寸提供有關(guān)正在連接的客戶的信息的對象。驗證服務(wù)程序也從請求中擭取有效的任何用戶名信息。這由CfentCert管理人員小服務(wù)程序使用。輸入是ServietRequestObject:如果用戶名/口令被用來構(gòu)成該請求,則它25存儲SSL客戶證書信息以及有關(guān)用戶的信息。輸出是SslCoraiectionAferifier對象具有如IsSslOKQ、GeCertlnfoO、IsUserAuthentieatedO和GetUseiinfo()的方法。該SslCo皿ectionVerifier訪問x5()9ClientCertificate的所有字段。APpContamerKeyProvider小l路程序為應(yīng)用程序注冊模塊分發(fā)密鑰。它是ARM模塊的主要入口點。它調(diào)用SslConnectionVenfer。從它的輸入流,它接30收存儲有關(guān)發(fā)送客戶設(shè)備的pubkeO的SAM的信息的pubkc()。該SAM信息有一個與SslCo誦eetionVenfier對象了解的信息一致的enterpnse字段。調(diào)用Enforcer,將所有來自于SsHnfier的信息和來自于pubkc()的信息傳遞給它?;贓nforcer的結(jié)果,然后該小服務(wù)程序從加密機請求一個AppContamerKey。在pubke()中的KeyID+ACD將被傳遞給該加密機。通過SSL連接,將5AppContemerKey返回給SAM。輸入是具有剤渚--個KeyID的pubkc()、企業(yè)信息以及ACD的輸出流(InpitSteam)(來自于小服務(wù)程序API)。請求對象(來自小服務(wù)樹t:API)存儲有關(guān)當前連接的信息(SSL,......)。輸出在輸出流(OutputSteam)(來自小服務(wù)程序API)上返回--個AppContamerKey、并在數(shù)據(jù)庫中修改使用的許可的i()數(shù)iioSubscnptioiiManager收集StrongAuthenticationModule(SAM)所要求的fi息以管理許可。這些許可控制可由SAM從在MFCA產(chǎn)品中的Appfcat腿RegistrationModule(ARM)請求的AppCoiitamersKeys的數(shù)量。應(yīng)用程序注冊模塊負責為已經(jīng)被激活可訪問VPN的客戶設(shè)備提供AppContaiiierKey。15被允許將許可證出售給購買SAMS的公司的銷售人員,通常使用到SubscriptionManager的Web用戶接口。該接口收集將由應(yīng)用程序注冊模塊使用的有關(guān)公司、許可證號、有效期、銷售人員ID以及SAM標識符(CfentCertificateSigningRequest)的信息以確定哪個SAM請求一個AppContemerKey。簽名管理程序生成一個SAM將載入和驗證的防止竄改(帶標記和/或加20密)的文件。該文件包括簽名信息(即允許使用的許可證號,SAM的容許的IP地址......)除SubscriptionInfomiationFile(SIF)外,簽名管理程序也返回帶標記的SAM的標識符。對許可信息和用戶證書的數(shù)據(jù)庫來說,簽名管理程序是一個前端處理程序。德b用戶接口使用用戶證書驗證許可零售商。它要求以下有關(guān)公司的信息,零25售商正獲得用于包括公司名稱、公司聯(lián)系信息、許可證號、許可有效期(從開始日期到結(jié)柬日期)、SAM(將SubSeriptioiiFile賦值給該SAM)的IP或MAC地址、SAM的Cl.ientCertificateRequest(CRS)以及Reseller標識符的許可。簽名管理程序生成被安全地轉(zhuǎn)送到安裝SAM的人員的以—F項目帶標記的ClientCertifica.te、以及防止竄改的SubscriptionIrfonna.tionFile(SIF)。具有由30SIFSmgmgUtility(SSU)標記的SIF將完成防止竄改。SubscriptionManager將在內(nèi)部用以下的信息更新數(shù)據(jù)庫:取消SAM的ClientCertiieation所要求的信息、有關(guān)SAM的信息(許可證號、有效期、用于許可證更新的聯(lián)系信息......)、以及有關(guān)購買SAM的公司的信息,它可能公司擁有的唯一SAM。5簽名管理程序的操作原理如下。首先在一個零售商/通道合伙人和一個設(shè)備管理機構(gòu)之間,-一份契約。然后在設(shè)備管理機構(gòu)由某人使用Lieense《seller信息編輯器/瀏覽器來創(chuàng)建--一個將被授權(quán)的最初的Reseller/Channel,aitaer帳戶以出售許可給SAMs。這產(chǎn)生一個與零售商/通道合伙人取得通信的用戶/口令。該零售商/通〗()道合伙人安排在某一公司安裝S扁。AS扁信息編輯器/瀏覽器,并輸入公司信息和許可信息。公司完成安裝SAM:公司已經(jīng)分配了一個IP地址給SAM,并己經(jīng)生成了一個CUentCertificateS直gmngRequest。該信息被傳遞^#售商。然后該零售商(或者具有OTP的公司)返回到SAM信息編輯器/瀏覽器,并輸入SAM和■5CSR的IP地址。月艮務(wù)器生成未標記的SIF,并將它發(fā)送給SIFSigningUtiMty。SSU立即返回該帶標記的SIF。該SAM的CSR變?yōu)橛沙洚?,Root設(shè)備管理機構(gòu)的中間CA的SubscriptionManager標記的真實的ClientCert。沒有OTP,零售商將SIF和ClientCertification傳遞給公司。然后該公司將20SIF安裝到SAM知道的目錄。Cert安裝到他們的SSL模塊中?,F(xiàn)在公司準備請求AppContameii(eys?,F(xiàn)在詳細討論模塊組件。SSL連接驗證程序是---個從小服務(wù)程序調(diào)用的jaw類。它為小服務(wù)程序魂供--個API以確認給定連接的驗證信息。當它存儲有有關(guān)SSL纖的信息時,小,艮務(wù)糊芋將它傳遞給至少一彌求對象。25使用該信息,SslCo:隨ectionVenfier確定所連接的客戶是否以前注冊過??赡苓@種驗證將被限定到皿連接jffi3tSSL以及客戶有證書。這種簡化是因為有多少Apache+moctsd將被配置他ff識接收來自于具有已知證書的客戶。該連接驗證程序記錄所有失敗的嘗試。為跟蹤目的,記錄成功的嘗試。該驗證返回一個提供了有關(guān)正在連接的客戶(零售商的計算機)的信息的對象。30該驗證程序也攫取來自于請求的任何有效的用戶名信息。這.將用來檢驗真實的授權(quán)的零售商正在使用他的計1而不是某一計算機。i繊入是ServktRequestOyect,如果娜用戶名/口令來產(chǎn)生請求,則該ServletRequest.Object存儲SSL客戶證書信息和有關(guān)用戶的信息。該輸出是一個Ssleo皿ectionVenfer對象具有象IsSslOK()、GetCert!tifo()、5IsUserAuthenticated()和GetUserinfo()--樣的方法。SAM信息編輯器/瀏覽器模塊允許添加/編輯/刪除等許可信息。例如,它允許生成有關(guān)每一個公司、每一個SAMIP/MAC地址、每-一個將期滿的許可的報吿。用有效的零售商信息(用戶名/口令、客戶證書)驗證所有的操作。SIF生成器模塊生成一個Subsc叩t腿Mbn麓tionF!le。將所生成的SiF發(fā)送i()給SIFSigningUtility(SSU)。該SSU將使用私有密鑰來標記文件,.¥該私有密鑰匹配的公開密鑰與SAM軟件-一起發(fā)送。這是唯---一個SIF標記的密鑰對。SIF是一個人們可讀的文件。在支程中,允許IT部門全體人員立即訪問聯(lián)系信息、及時間、IP地址等。SIF包括公司名稱、公司聯(lián)系信息、用于有效許可的聯(lián)系、許可證號、許可有效期(從開始日期到結(jié)束日期)、零售商15標識符、SAM的IP或MAC地址(將SubscriptionRle賦給SAM)。CertificateS響皿gRequest(CSR.)句柄模塊負責創(chuàng)建X509兼容的用Root設(shè)備管理機構(gòu)的密鑰標記的Certificates。如果已經(jīng)提交請求的零售商是正確地驗證過的(用戶名/口令和客戶證書已驗證),那么它只標記證書。它要求SAM信息、相應(yīng)的CSR以及聯(lián)系信息以提醒SAM的客戶證書的有效期。CSR在20某一字段中包含計1IP地址。因此SAM安裝者負責用在某一字段中的IP地址生成-…個客戶證書。輸出是可用在SAM計算機上的X509客戶證書。Openssl是在SAM和簽名管理程序上處理證書事件的基礎(chǔ)工具。該模塊也處理己公布的SAMCiientCertiieates的撤消。該撤消信息將被放入一個CertificateRevoeation25List(CRL)中。該列表能用Opensll進行處理。通過在該服務(wù)器上的HTTP,該CRL文fW任何人下載都是有效的。許可期滿檢測程序定期地掃描許可數(shù)據(jù)庫,并給在簽名過程中提供的聯(lián)系發(fā)送email。SAM證書期滿檢測程序定期地掃描所生成的SAM客戶證書的數(shù)據(jù)庫,并給在CSR雖中提供的聯(lián)系發(fā)送eamil。30License-Resetter信息編輯器/瀏覽器向該系統(tǒng)注冊零售商,并向他們提供用于他們的瀏覽器的CUentCertificate,或僅僅是用戶名和口令或這兩者。它也允許,鵬在銷售過程中零售商執(zhí)行得有多好。SIFS,mgLMUty(SSU)為設(shè)備管理機構(gòu)提供了一個簡單的方法以便訪問簽名信息。在最小值,SSU標記SIF。5應(yīng)用程序現(xiàn)在討論Miilt^FactorClientAuthentication該系統(tǒng)的---個應(yīng)用程序是用于訪問一個虛擬專用網(wǎng)絡(luò)(VPN)的多因子客戶驗證應(yīng)用程序(MFCA)。驗證過程的第一部分是一個用戶名/口令對(用戶知道的東西)。第二部分將是加密啟動的設(shè)備的驗證,基于BIOS或使用軟件(用戶具有的軟件)。!o在一個M:FCA的簡單版本中,SM傳統(tǒng)的、經(jīng)過RADIUS到驗證服務(wù)器的傳輸實現(xiàn)口令驗證,其中該驗證服務(wù)器使用一個合法的口令數(shù)據(jù)庫。在首選實施例中,使用SPEKE口令驗證協(xié)議增強該過程??诹铗炞C協(xié)議在公開號為US^^的美國專利中公開了。在這兩種情況下,MFCA為設(shè)備管理機構(gòu)提供一個新的裝置。15系統(tǒng)包括下面的軟件組件。莊驗證VPN服務(wù)器的客戶設(shè)備上運行的客戶軟件組件。軟件必須是能加密的。在企業(yè)受保護的網(wǎng)絡(luò)內(nèi)部,我們保護的運行在VPN的一個或更多服務(wù)器計穀幾上的軟件組件。這將由購買WN產(chǎn)品的公司的IT部門管理。運行在連接到因特網(wǎng)、并訪問KID/SMK對的數(shù)據(jù)庫的設(shè)備管理機構(gòu)服務(wù)20器(可能由由管理秒,而不是企業(yè)管理)上的軟件組件。討論一個增強的V〖)N客戶時提供一個MFCA概述。客戶設(shè)備通常是向設(shè)備管理機構(gòu)登記的一個Windows計算機。在登記以后,客戶設(shè)備具有---十有效的主密鑰。在首選實施例中,它具有固件支持,在BIOSROM中實現(xiàn)了本發(fā)明柳[l密特征,盡管可能使用了只有軟件的版本。計算機通常是由客戶VPN25軟件的用戶所擁有,其中該用戶想通過VPN網(wǎng)關(guān)訪問公司的受限網(wǎng)絡(luò)。用戶通常通過正規(guī)的Internet服務(wù)提供器(ISP)訪問Intemet。在該ISP和VPN網(wǎng)關(guān)之間的網(wǎng)M;是值得信賴的,因此這兩者之間的通信必須是安全的。VPN力-案的首要H的是提供從客戶設(shè)備到VPN網(wǎng)關(guān)的端到端加密安全。MFCA客戶包括由本發(fā)明實現(xiàn)的加密核心技術(shù)和一個與標準的VPN客戶30軟件合作的客戶應(yīng)用程序以建立與服務(wù)器的安全連接。MFCA結(jié)構(gòu)要求計算機在VPN登錄前進行登記。在它第一次運行時,客戶應(yīng)用程序發(fā)現(xiàn)客戶先前是否登記過。如果先fr^有登記,則客戶應(yīng)用程序執(zhí)行登記,而且只有該過程完成后,才會繼續(xù)MFCA操作的其余部分。EnterpriseVPN網(wǎng)關(guān)和StrongAuthenticationModule(SAM)是由本發(fā)明提供5的。MR,A啟動的企業(yè)具有一個連接在Internet和保護的企業(yè)網(wǎng)絡(luò)之間的VPNGateway服務(wù)器。VPN通常包括許多相互合作的計OT似驗證訪問禾,塞靠不住的通信量。通常他們與防火墻協(xié)力工作。最重要的計算機是VPN網(wǎng)關(guān)和StrongAuthenticationModule(SAM)服務(wù)器。ioSAM位于共同的網(wǎng)絡(luò)中且基本上是可飾的。在某些情況中,這意味著在VPN網(wǎng)關(guān)和SAM服務(wù)器之間的通信不需要加密。對這兩臺計算機的-一個簡單的安全校驗是校驗另一令的IP地址,在共同的網(wǎng)絡(luò)內(nèi)部所做的路由選擇是可信任的。SAM是在為---^#殊的用戶和設(shè)備管理杉胸訪問內(nèi)部網(wǎng)方面與VPN網(wǎng)關(guān)15相互作用的服務(wù)器軟件。它訪問登記過的設(shè)備的"數(shù)據(jù)庫",該設(shè)備也將被允許訪問。在SAM代碼和數(shù)據(jù)庫之間的接口將盡可能地開放,以允許在它下面放置不同的數(shù)據(jù)庫實現(xiàn)(例如,通過使用ODBC或LDAP)。核心應(yīng)當同SAM-Database連接一起利用,該SAM4)atobase可能使用SecureSocketLayer(SSL)協(xié)議來實現(xiàn)。2(>SAM包含密封和開封AppContaiiiers的代碼。SAMServer也可能包含許可政策(設(shè)備有權(quán)訪問網(wǎng)絡(luò)期滿、允許進入的設(shè)備號等等)的I鵬。加密函數(shù)可倉統(tǒng)BIOS-ROM和只有軟件的格式中提供。另外,在確定設(shè)備/用戶對是否應(yīng)該允許訪問(兩因子驗證的第一部分)方面,這些計算機、附加的硬件和/或軟件可能Gateway和SAM合作。用在25工產(chǎn)中的不同的標準和產(chǎn)品來執(zhí)行該函數(shù),包括已經(jīng)訪問過用戶名和口令的數(shù)據(jù)庫的RADIUSB勝器以及用于確定基于政策的訪問權(quán)力的各種系統(tǒng)。SAM組件也可能被用來實施軟件許可計劃。該SAM組件典型地由擁有VPN的企業(yè)的IT部門而不是由其它的管理機構(gòu)管理。然而,它可能與曾出售給該企業(yè)有權(quán){頓MFCA軟件的其它的管理機構(gòu)具有信托關(guān)系。30許可政策為企業(yè)的整個帳戶或為單個的客戶帳戶(例如,有人可能丟失他的膝上型電腦,以及我們不得不刪除該設(shè)備)考慮到期滿時間。根據(jù)由系統(tǒng)管理部門制定的政策,SAM執(zhí)療這些撤消和終止。許可能基于將被允許訪問數(shù)據(jù)庫的設(shè)備的最大數(shù)量。許可函數(shù)周期性地檢查和S鵬正在發(fā)生的事清。這—SJt激及SAM在正?;A(chǔ)上將信息發(fā)送^#主5特定單元。許可管理最好是從基于遠程Web的工具完成。Application注冊模塊(ARM)是一個對不同企業(yè)的SAMs公幵服務(wù)的Internet服務(wù)器。它的目的是在向用特定企業(yè)注冊恃定設(shè)備的過程中幫助用戶和SAM。最終的結(jié)果iyf供具有適當?shù)腁ppKey的SAM來密封和開封』Bt注冊的設(shè)備內(nèi)的容器。io在被稱為"MFCARegistration"的鵬中,對每一個設(shè)備/企業(yè)聯(lián)合,只需要執(zhí)行該操作一次。該應(yīng)用樹芊注冊模塊月艮務(wù)器包含-一些前端服務(wù)器一估計可能但并不是必不可少的、WebServer(s)—與存儲信息的后端數(shù)據(jù)庫通信,其中該信息說明了那時用于不同公司的有效許可、他們所期望的證書是什么等等ri5Af在此完成許可強制。為特殊的企業(yè)基本跟蹤注冊用戶的數(shù)量就是--一個例子。應(yīng)用程銜主冊模塊服務(wù)行許可強制和許可記錄和檢查,但并不跟蹤單個的登錄。應(yīng)用程序注冊模塊也訪問設(shè)備管理杉l構(gòu)"Enciypti纖Sen/eA該驗證機構(gòu)存儲在登記過程中生成的HD/SMK表。l纖Web的遠程接口處理這些企業(yè)帳戶。20作為對應(yīng)用程序注冊模塊的增強的應(yīng)用,通過Web接口(Subsc叩tioiiMaa寧),自動進纟豫據(jù)輸入,該接口允許零售商、通道合伙人以及IT管理人員輸入適當?shù)男畔砑ど郤AM與中心ARM數(shù)據(jù)庫協(xié)作。在下面的表中列出了調(diào)用的Mli。過程名說明25MFCASubscription為SAM生成許可信息的aii,出售許可證的銷售人員通過登錄擁有稱為Subsenptio.nManager的服務(wù)器的設(shè)備管理機構(gòu)來初始化簽名過程。該銷售入員輸入有關(guān)購買S扁的公司的信息請求多少許可、SAMsClientCertifieate、以及其它3()信息,......該過程的輸出是SubscriptionInformationFile(SIF)以及-一個ClientCertificate(參見CertificatedEnrollment客戶設(shè)備處3里獲得一個SMK、并能使用加密月艮務(wù)的過程。該ffl涉及客戶設(shè)備和設(shè)備管理機構(gòu)5EnrollmentServe"登記需要客戶設(shè)備含有加密的核心函數(shù),在BIOS或EmulationAPI中。MFCARegistration客戶設(shè)備獲得注冊符來《OT特殊企業(yè)的VPN的服務(wù)的過程。它涉及客戶、SAM服務(wù)器以及一些io與RAMServer的相互作用的服務(wù)器。注冊要求客戶設(shè)備先前已經(jīng)向設(shè)備管理t—購登記過。這種注冊的最終目的是提供具有適當?shù)腁ppKey的SAM以便密封和開封將與客戶設(shè)備交換的15APPContainer。Login客戶設(shè)備獲得訪問企業(yè)的內(nèi)部網(wǎng)的過程。這是MFCA想完成的最后的服務(wù)。它涉及在客戶設(shè)備和SAMServer之間的相互作用,但不要求與設(shè)備管理機構(gòu)的額外的相互作用。SAMServer不2()得不驗證作為具有VPNGateway的兩因子驗證的第二階段的客戶設(shè)備。它使用AppContainer除JlM以夕卜,不得不配置VPN客戶、SAM:Server以及ARMServer以便能成功地分發(fā)適當?shù)腁ppKeys。25注冊過程包括以下兩個步驟(1)與特殊的計算教-一起工作的AWKey的傳輸,從設(shè)備管理機構(gòu)到劍門的公司的SAM月艮務(wù)器,以及(2)生成CustomerAppKey的CustomerSecret的傳輸,從SAM服務(wù)器到客戶。AppKey是如下的--個函數(shù)(1)正在注冊的計-爾幾的保密主密朗(只有設(shè)備管理機構(gòu)和計算機本身知道),以及(2)應(yīng)用程序的操作系統(tǒng)驅(qū)動程序(VPN30應(yīng)用禾ii芋,在本實例中)AppKey是下面的加密操作的結(jié)果Appe"truncl28(S匿(SM11ACD)).SAM服務(wù)器生成一個附加的128位的CustomerSecret,它保持來自于其它DeviceAuthorities的秘密,并用下面的操作計算CustomerAppKey:5CustomerAppKey=trunc128(SAH1(AppI(ey11CustomerSecret》.S扁月艮務(wù)器存儲該值(或,可選地分別存儲App.Key和CustomerSecret),并將CustomerSecret發(fā)it^客戶??蛻粲涗浽撁孛?盡管因為它是保密主密鑰而不是--個"大秘凌r)。SAM也向客戶發(fā)送一個可能存儲一個用于LogmCoimter機構(gòu)的起始值的密封的AppContamer。在-一個替換實施例中,安全詢問/應(yīng)答i()機構(gòu)代替了LoginCounter機構(gòu)。注冊過程是基于AppContainers??蛻糸_封先前收到的AppContamer,增大注冊計數(shù)、重新密封該容器,并將它發(fā)送給作為VPNAuthentiea.ti.onProtocol—部分的VPNGateway。S細服務(wù)翻到該容器,打開它荊f注冊計數(shù)與最后記錄的值謝亍比較,如果它在可接受的范圍內(nèi),貝鵬準許調(diào)用客戶訪問企業(yè)的15內(nèi)部網(wǎng)。在注冊的--個替換過程中,客戶從VPNGageway接收-一個隨機的詢問值,開封先前所接收的該AppContamer,將CustomerSecret和該詢問值與--個單向函數(shù)結(jié)合(通常使傭一個加密散列函數(shù),如SHA1),以及將單向函數(shù)的結(jié)果返回給作為VPNAuthenticationProtocol—部分的VPNGatewa.y。20SAM服務(wù)器獲得該結(jié)果,并將它與它自己的詢問值和CustomerSecret的雖向函數(shù)的計算結(jié)皿亍比較。如果SAM服務(wù)器的計算結(jié)果與客戶的結(jié)果匹配,則VPNGateway將準許調(diào)用客戶訪問公司的內(nèi)部網(wǎng)。MFCA的特定實現(xiàn)可能將特定VPN軟件產(chǎn)品作為目標。某些VPN賣主提供允許其它公司在客戶機劍艮務(wù)器中定制他們的產(chǎn)品的APIs,這些賣主也具有25為已寫的軟件的驗證程序以便與這些APIs相互作用。MFCA可能以附加格式或以具有VPN賣主產(chǎn)品的整體格式遞送。現(xiàn)在詳細敘述所涉及的過程。登記對MFCA安裝是首要,??蛻粼O(shè)備必須具有核心加密系統(tǒng),它包括操作系統(tǒng)驅(qū)動程序(OSD)、訪問BIOS和硬件的低級驅(qū)動程序,而且設(shè)30備必須已經(jīng)登記和存儲了一個有效的主密鑰。登記操作可能作為VPN軟件安裝的一部分來執(zhí)行。也說是說,當客戶第一次試圖訪問WN時,如果客戶設(shè)備還沒有登記,它能拋f登記。當他第---次開始客戶應(yīng)用程序時,這將作為初始化用戶經(jīng)驗的-部分發(fā)生。不需要用戶輸入。5客戶安裝涉及用戶接收的軟件,該軟件包含可能包括用于MFCA安裝和增強的MFCA注冊驗證的附加代碼的已存在的V1)N'Client的一個增強格式的MFCAVPNCMent。最好,由VPN賣主的客戶SDK提供的APIs應(yīng)該允許MFCA代碼與他們的數(shù)據(jù)庫靜態(tài)*1。理論—匕MFCA產(chǎn)品的相關(guān)部分是計算的ACD的范圍內(nèi)。io現(xiàn)在討論月艮務(wù)器安裝過程。StrongAuthenticationModule(SAM)配置安裝用戶/設(shè)備帳戶。Sffl常由企業(yè)系統(tǒng)管理人員拋f。SAM與VPN和/或與驗證服務(wù)器結(jié)合。下面有許多可用的選項SAM可能是一個用于已存在的驗證服務(wù)器的插件。在驗證服務(wù)器和SAM之間的接口是一個API。SAM是一個服從某些端口、理解用戶協(xié)議或RADIUS15的I艮務(wù)器。驗證服務(wù)器和SAM之間的接口是一個網(wǎng)絡(luò)協(xié)議。VPNs和RADIUS月艮務(wù)器也可高度配置,允許許多的配置。RADIUS月艮務(wù)器(萬----它是現(xiàn)存的)依賴于政策、用戶和口令等驗證客戶。SAM負責驗證設(shè)備。-一個簡單的實施例包括獨立的RADIUS服務(wù)器,并能被用來直接與網(wǎng)關(guān)、或者充當代理的另一個驗證服務(wù)器對話。該配置用戶接20口(Ul)將獨立于其它任何驗證月艮務(wù)器。VPNGateway/RADIUS服務(wù)器配置。管理員配置一個用戶名/口令對。這將是"永久的"用戶注冊的用戶名/口令對。該過程并不涉及任何設(shè)備管理杉,,并且是獨立于MFCA的"通常的"單因子配置。SAM配置。管理人員配置用戶名、AppiieationDeviceII)(ADID)以及25RegistrationPassword。在替換實施例中,管理人員還可能創(chuàng)建用戶和設(shè)備之間的關(guān)聯(lián)以表明有效的結(jié)合、P艮制用戶從特定的計勤丄驗證。ApplicationDeviceID(ADID)是人們可讀的公開名稱、在每一個企業(yè)中的唯一值,但不是非得經(jīng)過企Lk。RegistrationPassword是由系統(tǒng)管理人員產(chǎn)生的。它必須是一個可信的隨機數(shù)。3()在另一個實MW中,人ff河能iOTKeyID作為唯一的標識符來代替ADID。然而,實際上人們并不相信通用的"唯一標識符"的觀念,因此首選實施例使用--個由IT管理人員選擇的獨立的ADID。存儲在SAM數(shù)據(jù)庫中的所有的口令都是仔細考慮的。在該結(jié)構(gòu)中描述的模式暗不用戶數(shù)據(jù)庫和設(shè)備數(shù)據(jù)庫是分開的。結(jié)果是存5在于用戶數(shù)據(jù)庫中的任一用戶將用存在于設(shè)備數(shù)據(jù)庫中的任一設(shè)備進fi^證。沒郁蹄it定的用戶必須與特定的計翻鏈接。MFCA注冊(第一纖)。用戶從他企業(yè)的IT部門獲得用戶名/口令對和ADID/RegistrationPassword對。用戶經(jīng)歷如下。用戶運行一個安裝應(yīng)用,。這是一般的Windows安裝。如果客戶沒有登i()記,執(zhí)行登記操作。安裝程序提示用戶向VPN輸入識別該用戶的數(shù)據(jù)塊。用于止:常登錄的用戶名/口令以及用于注冊的ADID/RegistrationPassword。用戶第一次連接時,VPN網(wǎng)關(guān)/RADIUS驗證用戶名/口令対',并麟允許fe^i入的當前政策。SAM向外部ARM服務(wù)器注冊該設(shè)備,并配置它自身。如果每一項都成功,則用戶在VPN中。15在接下來的登錄中,用戶將不再需要進入他的ADID/RegistrationPassword。ClientVPNApp應(yīng)只殿卩用戶輸入--個用戶名和口令??蛻粲涀≡揂DID、AppContainer的位置、以及己經(jīng)iAM務(wù)器接收的用戶秘密。,勝器相互作用流程如下。參照說明MFCARegistration的框圖的附圖4。20客戶應(yīng)用粉芋使用先前存在的VPN協(xié)議對VPN網(wǎng)關(guān)提出第一個請求。使用預先先存在的驗證方法,VPN網(wǎng)關(guān)以具有RADIUS服務(wù)器的通常方法IM用戶名和口令對。然后VPN網(wǎng)關(guān)確定客戶需要向SAMServer注冊。VPN網(wǎng)關(guān)將請求發(fā)送給SAMServer。請求包含(1)公開的ADID,(2)用適應(yīng)的設(shè)備管理機構(gòu)服務(wù)器的25CommumcationPublicKey加密的PubKContainer,該設(shè)備管理機構(gòu)服務(wù)器包含企、lk名稱/URL以及用于App的ACD(:或一個識別ARM數(shù)據(jù)庫中的ID),SAM不育魏牟密PubK,因此它將它傳遞給ARMSeiver。斑中連接必須提供SAM的某禾中驗證給應(yīng)用辦注冊模塊。在HTTPS實現(xiàn)中,將設(shè)備管理機構(gòu)公布的證書提交給SAM月艮務(wù)器,反之亦然,其中在用設(shè)備管理機構(gòu)打開帳戶的30過程中建立證書。,應(yīng)用程序注冊模塊〗OTCommumcationKey的專用位打開PubKContaiiier,且如果孺要的話就用新的設(shè)備ADID更新它的內(nèi)部表。M程序注冊模塊對照它的數(shù)據(jù)庫校驗企業(yè)以找出它是否有-個有效的許可。如果每---項都是正確的,則應(yīng)用程序注冊模塊具有客戶設(shè)備的KeyID,因此它找出保密主密鑰,并5為給定ACD計算Appkey。然后用一,巾安全方法將AppKey傳回給SAM(可能糊fflTPS連接的應(yīng)答)。相對于ADBD,SAM存儲AppKey,構(gòu)造具有AppKey的CustomerAppKey禾口一個用于CustomerSecret的新的隨機值(或者SAM直接存儲該CustomerAppKey而忽略AppKey),并構(gòu)造原始AppContamer,在那兒存儲起始的12810位LoginCounter(它的超始值可以是注冊口令)以及必lk名稱/URL。SAM密封AppContamer,并將它和CustomerSecret(可能經(jīng)過VPNGateway)傳遞回客戶。該AppContamer并不需要被發(fā)送給加密的客戶。很明顯它并不泄露任何保密。偷聽者不能記錄它以及將它發(fā)送給服務(wù)器以嘗試和獲得訪問VT)N,醫(yī)1為額割每具有一^H昔誤的計數(shù)值。15VPNGateway從SAM服務(wù)器接收Ok,并現(xiàn)在準許客戶訪問內(nèi)部企業(yè)網(wǎng)。客戶在眾所周知的位置存儲AppCont細er和CustomerSecret。應(yīng)用稻,注朋模塊處理AWteys,但我們不知道CustomerSecret,LoginCounter的起始值一只有SAM知道。蹄設(shè)備管理機構(gòu)幫助提供了安全,但這保證了mfca啟動的企業(yè)不能冒充一個客戶設(shè)備和沒有驗證nmMk。20客戶設(shè)備。--個對話框請求用戶名和口令以及企業(yè)/URL標識符。用戶不需要再輸入ADID,因為系統(tǒng)已經(jīng)記住它??蛻粲嬎銠C用正常的方法與VPN網(wǎng)關(guān)聯(lián)系,并驗證用戶名/口令(通過RADIUS或諸如此類)VPN網(wǎng)關(guān)找出客戶請求附加的驗證以及請求驗證它本身??蛻糸_封它的AppContamer(使用CustomerAppKey,.從Appkeyitll以及7豐f諸的Customer25Secret),增大LogmCounter(128位,不允許為負),再密封它并將它發(fā)送給網(wǎng)關(guān),并伴有公開的adid。一旦VPN具有AppContainer,就將它傳遞給SAMServer用于驗證??蛻舻却瓿?。如果網(wǎng)關(guān)返回--1Hf誤,則它將用自己的語言提示用戶。如果所有的均Ok,則VPN軟件開始工作。StrongAuthenticationModule(SAM.)從VPNGateway接收用于驗證的請30求,并伴有客戶的MM)和它的AppContemer。它'fOTADID作為索引查找CustomerAppKey以及所期望的計數(shù)值。使用CustomerAppKey開封AppContainer。它校驗一個計數(shù)及額外的信息。SAM應(yīng)當允許一個計數(shù)范圍,如果(Cexpeeted<=CaetuakCexpeeted+10),則驗證將為Ok。該目的是涵蓋當數(shù)據(jù)5包從客戶到服務(wù)器丟失時的情況(例如,用戶擊"重試"按鈕許多次)。如果校驗超出范圍,貝撥生錯誤。它發(fā)送一個錯誤代碼及錯誤參數(shù)。如果成功,則它存儲新的計數(shù)值并發(fā)送"Auth.onsitionOk"信息給VPNGateway。記錄錯誤,并定期地給系統(tǒng)管理人員提交報告。在特定的環(huán)境中SAM可警吿管理人員,例如如果發(fā)生許多次連接失敗的嘗試,這可能表明有人正試圖攻擊。io將系統(tǒng)10設(shè)計成防衛(wèi)導致系統(tǒng)和/或系統(tǒng)的保密密鑰的破壞和誤用的一個不值得信任的軟f摘用程序的基本威脅模式。在首選實施例中利用SMI和其它相關(guān)的硬付凝置,擴展]模式,系統(tǒng)進一歩保護密鑰以防齒雜"rmgzero"、尤其是操作系統(tǒng)本身的部分中不值得信任的程序。)模式,攻擊和恢復。下面是許多可識別的烕脅、它們的范圍以及它們15是如何由系統(tǒng)]0尋址的討論。偷聽者竊取AppKey。偷聽者可能偷聽ARM/SAM通信,并竊取AppKey。然而,他將不能冒充一個客戶,因為他也至少需要CustomerSeeret以及VPNCounter的起始值。竊取Appkey和CustomerSecret,假定一個黑客竊取AppKey及顧客秘密,20可能因為他闖入了公司并竊取了ADID數(shù)據(jù)庫中的所有數(shù)據(jù)。如觀倒偷竊,則可以通過重新注冊該計算機以產(chǎn)生--個新的CustomerSecret來解決(盡管AppKey不能改變)。如果企業(yè)保留AppKey,它可能不需要再重新注冊。1延遲。對只有軟件的實施例來說,本發(fā)明的首選實施例具有基于硬件的安全利益是不可能存在。25本發(fā)明的最佳實施例被謝羊設(shè)計,以便基于軟件的反向設(shè)計工具那個完成它。此外,基于硬件的攻擊不能使敵人破壞其它遠程計算機。這種保護提供使用CPU的SystemManagementMode(SMM)來實現(xiàn)。從SMM中,為竄改而驗證軟件的下一層(即使用能加密的BIOS的操作系統(tǒng)驅(qū)動程序(OSD))。()SI)代碼被做成明顯的ft改一不可能修改它來允許30—十沒有被SMM鵬翻倒的無效應(yīng)用程序艦它。這種驗證的操作系統(tǒng)驅(qū)動程序皿校驗應(yīng)用程序沒有被修改過。當用于主密鑰的安全存儲位置無效時,挫敗連接,或者當保密存儲裝置有效但并不是所有的都收到了-一個高級保證時,保密主密鑰將被分成存儲在多-個攀元中的共享。同時,使用Shamir的保密共享方案,僅僅要求有限數(shù)量的共5享取回保密主密鑰。此外,使用基于一個設(shè)備附加特性(如驅(qū)動程序序列號、圖形卡驅(qū)動程序版本等)的一個密鑰可以加密密鑰共享。當設(shè)備特性密鑰可腦艮小sM預知時,選擇加密從而使4頓迭代的加密操作、基于密鑰的大小解密要花費大量時間。每一次要求保密主密鑰時要重新連接保密主密鑰共享。在每一次連接時,10在存儲器中用一個指向一個新的存儲單元的指針指向連接的保密主密鑰。在每---次連接保密主密鑰數(shù)據(jù)塊時,進行一個校驗以便發(fā)現(xiàn)有些數(shù)據(jù)塊是否無效。3鵬設(shè)備附加信息的先前值,允許檢測一個無效的共享。在無效共享的情況下,保密主密鑰被再共享。SMK/條附加。本發(fā)明的一個只有軟件的實施例的請求是當試圖做出15移動--個主密鑰和它的AppCcmtamer至iJ一個新的計徵L時,是有能力檢測的。為檢測這種移動,記錄計飾L的某些特征。當這幾個特征同時改變時,只有軟件的系統(tǒng)10檢測它并依據(jù)它采取行動。公開有限的主密鑰和對話密鑰。當使用它們做任何操作時,這科吸計限制了保密主密鑰和對話密鑰的公開。在首選實施例中,所有這樣的操作都是iOT20當在SMM外運行時無效的存儲器在SMM中執(zhí)行。公開密鑰的完整性。在簡單的實施例中,公開密鑰被包含,并被編譯到操作系統(tǒng)驅(qū)動程序中。這些可以是在BIOS中包括的相同公開密鑰。VPN客戶與TCP/IP堆棧的相互作用如下??蛻鬢N負責以下的服務(wù):VPN客戶的配置、對VI)N網(wǎng)關(guān)的驗證、以及將發(fā)送至內(nèi)部企業(yè)網(wǎng)的數(shù)據(jù)包進行加25密。--旦登錄ffl額束,VPN客戶的主要工作是檢查發(fā)送給網(wǎng)絡(luò)的數(shù)據(jù)包以便找出它們或者是直接到一l通常的Internet計Ml或者到企業(yè)網(wǎng)絡(luò)??蛻魴z查目的地IP地址。如果數(shù)據(jù)包是用于在Internet上的一個計算機,貝殿有修改地發(fā)送它。如果數(shù)據(jù)包是用于VPN網(wǎng)關(guān)后面的企業(yè)網(wǎng)絡(luò),客戶加密它并(有時)執(zhí)行某種地址變換。30客戶堆棧是一個分層的結(jié)構(gòu),如TCPStack/UDPStac.k、NDIS接U(安裝程序配置它)、IPSee(通常i頓DES和3DES,在某些初始化協(xié)商后建立對稱)以及NDIS。接收數(shù)據(jù)包的VPNGateway將除去加密,然后它們是在網(wǎng)絡(luò)中是透明的。在一個使用SPEKE的首選實施例中,客戶和網(wǎng)關(guān)均生成一+綁定到驗證5后的用戶標識符的新密鑰。該密鑰可能用于加彌f驗證作用附力倒VPN對話密祖——匕在上面描述的幾個位置中,已經(jīng)描述了可能用在本發(fā)明的結(jié)構(gòu)中的幾種變體。這些包括(1)將用戶賦給設(shè)備,使用對亍管理人員來說加強的政策來定義用戶和設(shè)備的有效的特定組合,(2)客戶和網(wǎng)關(guān)之間、網(wǎng)關(guān)和驗證服務(wù)器之io間、以及驗證服務(wù)器和強大的驗證模塊之間口令加密,(3)IM—個詢問/應(yīng)答裝置而不是使用一個登錄計數(shù)器,以及(4)將客戶安裝程序打在一個可從mb站點安裝的完整數(shù)據(jù)包中。因此,提供用于計算機設(shè)備管理機構(gòu)的系統(tǒng)和方法已經(jīng)公開了。上面描述的實施例可被理解為僅僅是某些持定實施例的說明,這些持定實施例表示本發(fā)15明的應(yīng)用程序的原理。很清楚,許多和其它的方案很容易由本領(lǐng)域的技術(shù)人員在不脫離本發(fā)明的范疇內(nèi)做出。表1A,Container結(jié)構(gòu)<table>tableseeoriginaldocumentpage81</column></row><table>表2在OSDAppContainer密封過程中的結(jié),改變<table>tableseeoriginaldocumentpage82</column></row><table>表3<table>tableseeoriginaldocumentpage83</column></row><table>表4<table>tableseeoriginaldocumentpage84</column></row><table>表5<table>tableseeoriginaldocumentpage85</column></row><table>表6<table>tableseeoriginaldocumentpage86</column></row><table>表7最終的密封結(jié)果字段SMI密封的最終結(jié)果OpCode表示數(shù)據(jù)字歡的ft容和格式FormatFmtMKContainer—Reserved這可能在將來用于擴展的搡作碼信息Length密封操作后但密文替.換前字節(jié)計數(shù),計數(shù)值包括來自關(guān)KDigest達到的字段和包括Pad字段隨Digest主密鑰的SHA1摘要的20字節(jié)結(jié)果InitializationVector(IV)用于CipherB!ockChaining《CBC)模式的隨機初始化矢量SealersCodeDigest《SCD》用于密封容器的程序的代碼的SHA1摘要的結(jié)果Dateft有由Opeode嶺定的格氛的數(shù)櫞MACH關(guān)AC加密原語=HWAC《NewKey《Key,UsageApp關(guān)ac》,PaytoacJ》PadPad字節(jié)數(shù)量置為確信Plaintext是16字節(jié)的位數(shù)每一個填充字節(jié)具有一個等f在Pad緩沖器t的填t宇節(jié)的數(shù)量的值<table>tableseeoriginaldocumentpage88</column></row><table>表9<table>tableseeoriginaldocumentpage89</column></row><table><table>tableseeoriginaldocumentpage90</column></row><table>表11最后的密封PubkContainer結(jié)構(gòu)<table>tableseeoriginaldocumentpage91</column></row><table>表12<table>tableseeoriginaldocumentpage92</column></row><table><table>tableseeoriginaldocumentpage93</column></row><table><table>tableseeoriginaldocumentpage94</column></row><table>權(quán)利要求1、一種用于使用和保護對主加密密鑰的訪問的系統(tǒng),包括非易失性存儲器;一個系統(tǒng)初始化過程,其中在系統(tǒng)初始化過程中從該非易失性存儲器讀取該主密鑰;將從該主密鑰導出的一個敏感數(shù)據(jù)寫入到一個隱蔽的存儲單元;以及禁止由運行在該系統(tǒng)上的任何程序訪問該非易失性存儲器直到下一次系統(tǒng)初始化過程開始為止;用于防止由運行在系統(tǒng)的正常操作模式中的程序訪問該隱蔽的存儲單元的裝置;以及用于允許由運行在系統(tǒng)的一個受限操作模式中的程序訪問該隱蔽的存儲單元的裝置。2、如權(quán)利要求1所述的系統(tǒng),其特征在于所述的敏感數(shù)據(jù)是該主密鑰。3、如權(quán)利要求1所述的系統(tǒng),其特£于所述的敏感數(shù)據(jù)是由該主密鑰推導而來的。4、如權(quán)利要求3所述的系統(tǒng),其特征在于所述的敏感MI是一個從存儲在磁盤上的加密ltffi檢索而來的第二密鑰,該存儲數(shù)據(jù)用該主密鑰進行加密。5、如權(quán)利要求l所述的系統(tǒng),其特征在亍在響應(yīng)f一4Sl電或復位信號20開始的該系統(tǒng)初始化過程中,在BIOSROM中的軟件箱制該系統(tǒng)。6、如權(quán)禾腰求1所述的系統(tǒng),其特征在于該非易失性存儲器是一個由鎖存器控制的具有讀和寫訪問的非易失性隨機存取存儲器;由于響應(yīng)一個通電或復位事件的硬件功能,該鎖存器在系統(tǒng)初始化過程開始時被打開,因此允許系統(tǒng)訪問該非易失性隨杉諒取器;以及在系統(tǒng)初始化過程中關(guān)閉該鎖存器,因此不允許系統(tǒng)訪問該非易失性隨機存取器直到下一次系統(tǒng)初始化開始為止。7、如權(quán)利要求1所述的系統(tǒng),其特征在于所述的隱蔽存儲器是不能由運行在系統(tǒng)的正常操作模式中的任何程序訪問30的系統(tǒng)管理P追機存取存儲器;以及所述的受限的操作模式是系統(tǒng)管理模式,在系統(tǒng)管理模式中允許訪問系統(tǒng)管理隨t游取存儲器。8、如權(quán)利要求1所述的系統(tǒng),其特征在于所述的隱蔽存儲器僅對由操作系統(tǒng)訪問是有限制的,而且不能由運行在系5統(tǒng)的正常操作模式中的任何程序訪問;以及所述的受限的操作模式是由保留由操作系統(tǒng)軟件使用的CPU保護環(huán)控制的。9、一種用于在存儲器隱蔽一個主加密密鑰的系統(tǒng),包括通電$対牛,其中從非易失性剤諸器讀取一個主密鑰;停止對非易失性存儲器的訪問.以便直到下一次系統(tǒng)復位時訪問才能變得再有效;將從該主密鑰導出的敏感數(shù)據(jù)寫入一個隱蔽的地址空間;以及只有運行在系統(tǒng)的一個受l艱操作模式中的程序才能訪問該隱蔽的地址空間15中的敏感。全文摘要用于使用一個存儲在受保護的非易失性存儲器的主密鑰,進行設(shè)備驗證的系統(tǒng)和方法。該主密鑰被用來導出被傳遞到只能在計算機系統(tǒng)的特許操作模式下訪問的存儲器中的敏感數(shù)據(jù)。該敏感數(shù)據(jù)和主密鑰不能直接由沒有運行在特許操作模式中的程序訪問。主密鑰被用來導出一個或多個用來保密一個給應(yīng)用程序/設(shè)備對的專用數(shù)據(jù)的應(yīng)用程序密鑰。非特許的程序能請求運行在特許模式中的函數(shù)以使用這些應(yīng)用程序密鑰。該特許的模式程序校驗非特許調(diào)用應(yīng)用程序的完整性以確保它具有管理機構(gòu)和/或完整性以執(zhí)行每一個請求的操作。一個或多個設(shè)備管理機構(gòu)服務(wù)器用來公布和管理主密鑰和應(yīng)用程序密鑰。文檔編號G06F15/00GK101114326SQ200610107409公開日2008年1月30日申請日期2001年11月23日優(yōu)先權(quán)日2001年4月9日發(fā)明者D·P·亞布倫,J·A·卡斯拉斯,J·D·巴爾,J·-P·阿布格拉爾,K·王,P·科特拉,R·W·巴爾德溫,S·D·威廉斯,T·J·馬基申請人:鳳凰技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
安乡县| 舟山市| 黄平县| 松潘县| 达州市| 徐闻县| 新乐市| 内乡县| 彭水| 白水县| 伊通| 东城区| 砀山县| 五莲县| 松阳县| 香格里拉县| 闻喜县| 辽源市| 白城市| 曲水县| 黔南| 凤阳县| 威宁| 北京市| 马鞍山市| 睢宁县| 株洲县| 棋牌| 苏尼特右旗| 合阳县| 漯河市| 岳池县| 将乐县| 山西省| 洪洞县| 岐山县| 囊谦县| 松原市| 扬中市| 连城县| 府谷县|