專利名稱::一種密碼模塊api安全性檢測方法與系統(tǒng)的制作方法
技術領域:
:本發(fā)明涉及計算機軟件相關領域,具體涉及一種密碼模塊API安全性檢測方法與系統(tǒng),屬于信息安全
技術領域:
。
背景技術:
:密碼模塊是指被容納在加密邊界范圍內執(zhí)行認可安全功能(包括加密算法與密鑰的產生)的硬件、軟件和/或固件的組合。密碼模塊作為密碼技術直接應用的產品,廣泛應用于金融、電子商務、網絡認證等各個方面。常見的密碼模塊包括USBKey、智能卡、RFID、TPM等。密碼模塊對外提供的密碼服務主要包括:用戶認證、加解密信息、數(shù)字簽名及驗證等。密碼模塊作為信息安全系統(tǒng)的核心部分,它的安全性直接關系到安全功能的實現(xiàn)甚至是整個信息系統(tǒng)的安全。密碼模塊API(ApplicationProgrammingInterface)是指密碼模塊應用程序接口,它是密碼模塊對外提供密碼服務的編程接口。應用程序通過API調用密碼模塊提供的各種密碼服務而無需知道所涉及的詳細軟硬件信息。目前主流的API規(guī)范與標準有:RSAPKCS#1ICryptographicTokenInterfaceStandard、MicrosoftCryptoAP1、GenericSecurityServicesAPI(GSS-API)、RSABSAFEAPI和Intel/OpenGroupCommonDataSecurityArchitecture(CDSA)。由于在密碼實踐中密碼模塊都是以API形式向外界提供密碼服務,所以即使密碼模塊采用的密碼算法、實現(xiàn)的安全協(xié)議以及物理環(huán)境上都是安全的,也有可能因為密碼模塊API的設計不當導致以非正常方式使用密碼模塊時泄露機密信息。自從針對密碼模塊API的攻擊概念被提出以來,實際API攻擊不斷出現(xiàn),使得密碼模塊API的安全性檢測成為日益緊迫的問題。早期密碼模塊API的安全性檢測大都是通過手工對指令進行詳細分析,但是手工分析的缺點是方法繁瑣復雜、效率較低、不能窮盡所有狀態(tài)。因此需要一種自動分析系統(tǒng)來代替手工分析,借助形式化分析方法和計算機的輔助來實現(xiàn)對密碼模塊API的安全性進行自動化檢測,找出在密碼模塊API設計中可能存在的安全漏洞,及時修補存在的安全隱患,從而確保密碼模塊的安全性和可靠性。
發(fā)明內容針對密碼模塊API的安全性檢測所存在的技術問題,本發(fā)明的目的在于提出一種密碼模塊API安全性檢測方法與系統(tǒng),實現(xiàn)對密碼模塊API安全性的自動化檢測,檢測密碼模塊API在設計和實現(xiàn)中是否存在安全漏洞,輔助密碼模塊API的設計。本發(fā)明提供的密碼模塊API安全性檢測系統(tǒng)架構由相互關聯(lián)的三個模塊組成:其一是對密碼模塊API的功能實現(xiàn)進行自動化識別的功能實現(xiàn)識別模塊,該模塊可以自動對待檢測的密碼模塊API的功能實現(xiàn)進行分析,獲取密碼模塊API功能實現(xiàn)情況的具體信息;其二是對密碼模塊API的自動化分析模塊,該模塊根據(jù)獲取的密碼模塊API的功能實現(xiàn)信息建立相應的形式化模型,然后對該形式化模型進行自動化的安全性檢測,檢測是否存在攻擊;其三是實例攻擊驗證模塊,該模塊根據(jù)自動分析模塊得出的檢測結果生成相應的攻擊實例,并對密碼模塊進行實際攻擊,驗證攻擊是否存在。該系統(tǒng)的主要設計特點包括:I)該系統(tǒng)對密碼模塊API的安全性進行自動化檢測和分析,不需要繁瑣的手工分析和人工參與,提高了檢測的效率;2)形式化分析和實際攻擊檢測相結合,首先通過形式化分析檢測是否存在攻擊,然后根據(jù)形式化分析結果做實際的抗攻擊檢測;3)采用模塊化、可擴展接口設計,擴展方便,可以對各種密碼模塊API標準進行自動化檢測和分析。該架構的具體組成結構如圖1所示,各部分說明如下:1.功能實現(xiàn)識別模塊功能實現(xiàn)識別模塊負責對密碼模塊API的功能實現(xiàn)進行自動化分析,獲取待檢測密碼模塊API的實現(xiàn)信息。由于不同密碼模塊可能采用不同的API標準,本發(fā)明的功能實現(xiàn)識別模塊設計為實現(xiàn)信息采集和具體識別模塊兩部分。具體識別模塊部分設計為可擴展接口,不同的API標準有不同的具體識別模塊。具體識別模塊通過枚舉調用API命令及設置相關參數(shù)來測試其API功能實現(xiàn)情況,從而獲取形式化模型需要的實現(xiàn)信息。在實際檢測具體密碼模塊時,只需根據(jù)其支持的API標準采用對應的具體識別模塊即可。實現(xiàn)信息采集部分根據(jù)具體識別模塊的檢測結果生成相應的文本配置文件,該配置文件將提供給自動化分析模塊進行形式化建模及分析。2.自動化分析模塊自動化分析模塊負責對密碼模塊API進行形式化建模和分析。該模塊包括兩個部分,分別是形式化建模部分和檢測算法部分。形式化建模部分根據(jù)功能實現(xiàn)識別模塊收集的實現(xiàn)信息對密碼模塊API建立基于項重寫系統(tǒng)的形式化模型。該形式化模型專門針對密碼模塊API設計,被廣泛應用于密碼模塊API的形式化建模當中。該模型的建立是根據(jù)各條API命令的具體實現(xiàn)建立對應的規(guī)則,每條API命令對應一條規(guī)則。所有API命令組成的規(guī)則系統(tǒng)及密碼模塊的初始化狀態(tài)構成了該形式化模型。模型檢測部分負責對建立的形式化模型進行自動化分析,檢測是否存在API攻擊。該部分采用一種自主提出的新的檢測算法,提高了檢測效率。該檢測算法首先假定存在一個敵手,并給定敵手一初始知識集,敵手的知識集代表敵手知道的信息。然后,算法利用API形式化模型中的規(guī)則系統(tǒng)對敵手的知識集進行擴充,即模擬實際情況下敵手通過API調用獲取新的信息。算法通過不斷調用API形式化模型中的規(guī)則來搜索敵手是否能夠獲得機密信息,如秘密密鑰等。搜索的過程采用廣度優(yōu)先搜索思想。如果在搜索的某一狀態(tài)敵手獲得了機密信息,則表示搜索到攻擊,算法停止搜索并給出攻擊。如果算法搜索完成所有狀態(tài)也沒有發(fā)現(xiàn)攻擊,則表示該API形式化模型是安全的。3.實例攻擊驗證模塊實例攻擊驗證模塊根據(jù)自動化分析模塊的檢測結果對密碼模塊進行實際的抗攻擊檢測。該模塊包括攻擊實例生成和攻擊實施兩部分。攻擊實例生成部分負責根據(jù)自動化分析模塊的檢測結果自動生成攻擊實例。攻擊實例的生成主要是根據(jù)自動化分析模塊檢測到的攻擊路徑生成相應的具體的API調用序列,同時加上調用密碼模塊API命令之前的初始化及攻擊結束后的清理等輔助API命令序列,從而得到一個完整的實際調用密碼模塊API的全部命令序列。如果自動化分析模塊沒有發(fā)現(xiàn)攻擊,則沒有實例生成;若發(fā)現(xiàn)攻擊,則會根據(jù)發(fā)現(xiàn)的攻擊路徑生成具體的攻擊實例,包括具體的API命令、調用序列及參數(shù)等。攻擊實施部分負責根據(jù)生成的攻擊實例對密碼模塊進行實際攻擊,驗證實踐中是否存在攻擊。和現(xiàn)有技術相比,本發(fā)明具有如下優(yōu)勢:1.采用形式化驗證的方法對密碼模塊API的安全性進行自動化分析,避免了手工分析的繁瑣和低效;2.提出了一種新的針對密碼模塊API形式化模型的檢測算法,提高了檢測效率;3.采用模塊化、可擴展接口設計,擴展方便,能夠對各種密碼模塊API標準進行自動化檢測和分析。圖1是密碼模塊API安全性檢測系統(tǒng)架構圖;圖2是密碼模塊API形式化檢測檢測算法流程圖。具體實施例方式下面結合附圖和一個范例對本發(fā)明做進一步詳細的說明,但不以任何方式限制本發(fā)明的范圍。在實施例中,以對密碼模塊USBKey的API接口標準PKCS#11進行自動化檢測為例說明本發(fā)明的具體實施步驟。本方法同樣適用于其他密碼模塊的API標準。第一步,本發(fā)明的功能實現(xiàn)識別模塊首先會對該USBKey實現(xiàn)PKCS#11的具體情況進行分析,確定該USBKey具體支持的PKCS#11的功能(PKCS#11是一種API標準)。具體的檢測方式是通過調用PKCS#11提供的相關API功能命令及參數(shù)來獲得該USBKey的配置信息。調用的API命令及參數(shù)完全按照PKCS#11提供的標準實現(xiàn)。檢測的具體信息包括:是否支持對稱或非對稱密碼算法、支持的密碼原語操作、支持的密鑰屬性、支持的密鑰屬性策略等。檢測結果以預定義的格式保存為配置文件,以供自動化分析模塊進行讀取建模。該配置文件每行為一條具體的配置信息,每條配置信息以列表或字典數(shù)據(jù)結構形式給出相關f目息。例如:sym_keys=['kl','k2','k3']sym_handles=['hnl','hn2']key_attribute=['extractable_hnlkl','extractable_hnlk2']sym_keys表示同時可用的3個對稱密鑰為'kl','k2','k3';sym_handles表不每個密鑰最多有兩個句柄'hnl1和'hn21;1extractable_hnlkl1和'extractable_hnlk2'分別表示初始狀態(tài)時USBKey內兩個密鑰句柄hnlkl和hnlk2的extractable屬性為真。第二步,自動化分析模塊建立形式化模型。形式化模型分為初始化配置和規(guī)則系統(tǒng)兩部分。上一步中檢測的配置信息將作為形式化模型的初始化配置部分。要建立針對PKCS#11的規(guī)則系統(tǒng),首先給定以下集合:I)函數(shù)符號集:E={h,senc,asenc,pub,priv}2)謂詞符號集:T={wrap,unwrap,encrypt,decrypt,sensitive,extractable,trusted,11rap_with_trusted]3)模式集:M={Cipher,Key,Seed,Nonce,Handle,Attribute}這些集合中的內容需要根據(jù)API標準提供的內容及功能識別模塊收集的信息共同決定。函數(shù)符號集E中包含該API標準所支持的函數(shù)功能。函數(shù)符號集E中h代表密鑰的句柄,senc和asenc分別代表對稱加密及非對稱加密,pub和priv分別代表取得公鑰及私鑰。例如,h(n,x)表示密鑰X的句柄,n為加入的隨機數(shù),以區(qū)別同一密鑰的不同句柄。謂詞符號集Jp表示密鑰的屬性。例如,wrap(n,x)表示密鑰句柄h(n,x)是否擁有wrap屬性:若有則wrap(n,x)為true,否則為false。同時,我們對每個函數(shù)符號及謂詞符號都給定相應模式,例如h:NonceXKey—Handle。接下來,我們將PKCS#11的每一條API命令建模為項重寫規(guī)則,例如我們將導出密鑰的API命令C_WrapKey建模為:hOi1,X1),h(n2,x2);wrap(X1),extract(X2)—senc(x2,X1)這條規(guī)則表示,如果敵手的知識集中包含hOi1,X1)和h(n2,x2),并且wrap(X1)和extract(X1)在當前狀態(tài)下為真,那么該規(guī)則可被觸發(fā)。該規(guī)則的效果則是將對稱密碼加密項senc(x2,X1)加入到敵手的知識集中。第三步,自動化分析模塊對建立的形式化模型進行檢測。首先,攻擊狀態(tài)定義為敵手的知識集中獲取到了設定的機密信息,如秘密密鑰等。敵手的知識集的狀態(tài)被定義為狀態(tài)節(jié)點,而敵手的知識集在形式化模型下所有的可能狀態(tài)被定義為整個狀態(tài)空間。檢測算法的主要思想是使用形式化模型中的項重寫規(guī)則,利用符號化檢測及廣度優(yōu)先搜索,對給定的敵手的初始知識集不斷進行匹配和擴展,直到搜索到攻擊狀態(tài),或者搜索完狀態(tài)空間。匹配和擴展的過程是首先利用形式化模型的規(guī)則對敵手的知識集進行匹配,然后利用匹配到的規(guī)則對敵手的知識集進行擴展,即將匹配到的規(guī)則生成新的信息加入到敵手的知識集中。檢測算法的流程如圖2所示,搜索過程中維護Open隊列和Closed表,Open隊列中存儲已經探索到但未檢測的狀態(tài)節(jié)點,Closed表中存儲已經檢測過的狀態(tài)節(jié)點。算法開始時首先設置初始狀態(tài),即敵手的初始知識集,并將其作為初始節(jié)點加入到Open隊列中。然后算法進入一個主循環(huán)體,退出條件是Open隊列為空。在循環(huán)中,首先取出Open隊列的首節(jié)點N,將其加入到Closed表中,然后檢測節(jié)點N是否為攻擊狀態(tài)。若是,則表示發(fā)現(xiàn)攻擊,算法終止;若不是,則將節(jié)點N擴展的子節(jié)點加入到Open隊列中,并進入下一次循環(huán)。如果模型檢測發(fā)現(xiàn)攻擊,則會以預定義的格式給出攻擊路徑。攻擊路徑只包括主要API命令的調用,預定義的格式為每一行為一條API命令,包括API命令的名稱及對應的形式化模型的規(guī)貝U。例如,針對PKCS#11的包裹密鑰攻擊,則會給出如下路徑:Set_wrap:h(rij,k2)—WrapOi1,k2)Wrap:h(rij,k2),h(n2,kj)—senc(k17k2)Set_decrypt:h(n1,k2)—decrypt(n1,k2)SDecrypt:h(n1,k2),senc(k1,k2)—k1該攻擊路徑主要分為四步,每一步調用相應的API命令。敵手通過這些API命令的調用獲得秘密密鑰k1,從而導致API攻擊。第四步,實例攻擊驗證模塊根據(jù)自動化分析模塊的結果進行實例攻擊檢測。實例攻擊驗證模塊首先根據(jù)自動化分析模塊的檢測結果生成攻擊實例,若檢測到攻擊,則根據(jù)給出的攻擊路徑生成相應的PKCS#11命令調用序列,若沒有檢測到攻擊,則無攻擊實例生成。然后,攻擊實施部分根據(jù)PKCS#11命令調用序列依次調用各個API命令,驗證攻擊是否真正存在。例如,上一步中針對PKCS#11的包裹密鑰攻擊,將會產生如下API命令的調用:第一步調用C_SetAttributeValue命令設置密鑰k2的wrap屬性值;第二步調用C_WrapKey命令用密鑰k2導出k1,得到Senc(k1,k2);第三步調用C_SetAttributeValue命令設置k2的decrypt屬性值;最后調用C_Decrypt命令解密Senc(k1,k2)得到秘密密鑰k1.以上詳細說明的具體的實施方式僅僅是為了更好了理解本發(fā)明使用的,本發(fā)明不局限于此,本領域一般技術人員可以根據(jù)本發(fā)明的公開內容,采用其他多種實施方式來實施本發(fā)明,凡是采用本發(fā)明的設計結構和思路的,在不脫離權利要求范圍的變換和替代,都屬于本發(fā)明的保護范圍。權利要求1.一種密碼模塊API安全性檢測方法,其步驟為:1)功能實現(xiàn)識別模塊獲取待檢測的密碼模塊API的實現(xiàn)信息;2)自動化分析模塊根據(jù)所述實現(xiàn)信息建立該密碼模塊API的形式化模型,然后對該形式化模型進行安全性檢測,檢測是否存在攻擊;3)如果存在攻擊,實例攻擊驗證模塊根據(jù)自動分析模塊得出的檢測結果生成相應的攻擊實例,并對密碼模塊API進行實際攻擊,驗證攻擊是否存在,如果實際驗證攻擊不存在,則該密碼模塊API是安全的。2.按權利要求1所述的方法,其特征在于所述形式化模型的建立方法為:根據(jù)所述實現(xiàn)信息對該密碼模塊API建立基于項重寫系統(tǒng)的形式化模型;其中,根據(jù)該密碼模塊API的每條API命令的具體實現(xiàn)建立一對應的規(guī)則,該密碼模塊API的所有API命令組成的規(guī)則系統(tǒng)及該密碼模塊API的初始化狀態(tài)構成所述形式化模型。3.按權利要求2所述的方法,其特征在于對該形式化模型進行安全性檢測,檢測是否存在攻擊的方法為:首先假定存在一個敵手,并給定敵手一初始知識集,敵手的知識集代表敵手知道的信息;然后,利用所述形式化模型中的規(guī)則系統(tǒng)對敵手的知識集進行擴充,直到搜索到攻擊狀態(tài),或者搜索完狀態(tài)空間;如果發(fā)現(xiàn)攻擊狀態(tài),則停止搜索并給出攻擊,如果搜索完成狀態(tài)空間所有狀態(tài)也沒有發(fā)現(xiàn)攻擊狀態(tài),則表示所述形式化模型是安全的;其中,攻擊狀態(tài)為敵手的知識集中獲取到了設定的機密信息,敵手的知識集在形式化模型下所有的可能狀態(tài)定義為狀態(tài)空間。4.按權利要求3所述的方法,其特征在于利用所述形式化模型中的規(guī)則系統(tǒng)對敵手的知識集進行擴充的方法為:首先利用形式化模型的規(guī)則對敵手的知識集進行匹配,然后利用匹配到的規(guī)則對敵手的知識集進行擴展,即將匹配的規(guī)則生成新的信息加入到敵手的知識集中。5.按權利要求3所述的方法,其特征在于搜索所述狀態(tài)空間的方法為:1)將敵手的知識集的狀態(tài)定義為狀態(tài)節(jié)點,建立一Open隊列和一Closed表;2)將已經探索到但未檢測的狀態(tài)節(jié)點存儲到Open隊列中,將已經檢測過的狀態(tài)節(jié)點存儲到Closed表中;3)將敵手的初始知識集設置為初始狀態(tài),并將其作為初始節(jié)點加入到Open隊列中;4)取出Open隊列的首節(jié)點N,將其加入到Closed表中,然后檢測節(jié)點N是否為攻擊狀態(tài);若是,則表示發(fā)現(xiàn)攻擊,終止搜索;若不是攻擊狀態(tài)且節(jié)點N可擴展,則將節(jié)點N擴展的子節(jié)點加入到Open隊列中,并取出Open隊列中的下一節(jié)點,直到Open隊列為空,若不是攻擊狀態(tài)且節(jié)點N不可擴展,則取出Open隊列中的下一節(jié)點,直到Open隊列為空。6.按權利要求3或4或5所述的方法,其特征在于所述給出攻擊的方法為:以預定義的格式給出攻擊路徑,其中攻擊路徑只包括API命令的調用,預定義的格式為每一行為一條API命令,包括API命令的名稱及對應的形式化模型的規(guī)則。7.按權利要求6所述的方法,其特征在于所述攻擊實例的生成方法為:根據(jù)自動化分析模塊檢測到的攻擊路徑生成相應的具體的API調用序列,同時加上調用密碼模塊API命令之前的初始化及攻擊結束后的清理輔助API命令序列,從而得到一個完整的實際調用密碼模塊API的全部命令序列。8.按權利要求1所述的方法,其特征在于根據(jù)API標準,對每一API標準的密碼模塊API建立一對應的功能實現(xiàn)識別模塊。9.按權利要求1或8所述的方法,其特征在于所述功能實現(xiàn)識別模塊通過枚舉調用API命令及設置相關參數(shù)來測試其API功能實現(xiàn)情況,從而獲取所述實現(xiàn)信息,并將所述實現(xiàn)信息生成一文本配置文件。10.一種密碼模塊API安全性檢測系統(tǒng),其特征在于包括功能實現(xiàn)識別模塊、自動化分析模塊、實例攻擊驗證模塊;其中所述功能實現(xiàn)識別模塊,用于對待檢測的密碼模塊API的功能實現(xiàn)進行分析,獲取密碼模塊API的實現(xiàn)信息;所述自動化分析模塊,用于根據(jù)獲取的所述實現(xiàn)信息建立該密碼模塊API的形式化模型,然后對該形式化模型進行自動化的安全性檢測,檢測是否存在攻擊;所述實例攻擊驗證模塊,用于根據(jù)自動分析模塊得出的檢測結果生成相應的攻擊實例,并對密碼模塊API進行實際攻擊,驗證攻擊是否存在。11.按權利要求10所述的系統(tǒng),其特征在于根據(jù)所述實現(xiàn)信息對該密碼模塊API建立基于項重寫系統(tǒng)的形式化模型;其中,根據(jù)該密碼模塊API的每條API命令的具體實現(xiàn)建立一對應的規(guī)則,該密碼模塊API的所有API命令組成的規(guī)則系統(tǒng)及該密碼模塊API的初始化狀態(tài)構成所述形式化模型。12.按權利要求10所述的系統(tǒng),其特征在于根據(jù)API標準,對每一API標準的密碼模塊API建立一對應的功能實現(xiàn)識別模塊;所述功能實現(xiàn)識別模塊通過枚舉調用API命令及設置相關參數(shù)來測試其API功能實現(xiàn)情況,從而獲取所述實現(xiàn)信息,并將所述實現(xiàn)信息生成一文本配置文件。全文摘要本發(fā)明公開了一種密碼模塊API安全性檢測方法與系統(tǒng)。本方法為1)功能實現(xiàn)識別模塊獲取待檢測的密碼模塊API的實現(xiàn)信息;2)自動化分析模塊根據(jù)所述實現(xiàn)信息建立該密碼模塊API的形式化模型,然后對該形式化模型進行安全性檢測,檢測是否存在攻擊;3)如果存在攻擊,實例攻擊驗證模塊根據(jù)自動分析模塊得出的檢測結果生成相應的攻擊實例,并對密碼模塊API進行實際攻擊,驗證攻擊是否存在,如果實際驗證攻擊不存在,則該密碼模塊API為安全的。本系統(tǒng)包括功能實現(xiàn)識別模塊、自動化分析模塊、實例攻擊驗證模塊。與現(xiàn)有技術相比,本發(fā)明大大提高了密碼模塊API安全性的檢測效率。文檔編號G06F21/55GK103093144SQ201310013010公開日2013年5月8日申請日期2013年1月14日優(yōu)先權日2013年1月14日發(fā)明者劉波,陳華,高思,范麗敏,馮登國申請人:中國科學院軟件研究所