• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      系統(tǒng)資源受限環(huán)境下的證書解析方法研究

      2013-10-10 01:57:08邵奇峰龔雪容吳保中
      關(guān)鍵詞:數(shù)字證書次序字段

      邵奇峰,龔雪容,吳保中

      (解放軍信息工程大學(xué),鄭州450005)

      引 言

      隨著信息技術(shù)的發(fā)展,基于數(shù)字證書的安全服務(wù)得到越來越廣泛的應(yīng)用。證書解析是數(shù)字證書應(yīng)用的基礎(chǔ),用于獲取證書中各字段的信息。目前已知的證書解析方法有 Microsoft 的 CryptoApi[1]和.net[2]、開 源 的 OpenSSL[3-4]等,均是在操作系統(tǒng)應(yīng)用層實(shí)現(xiàn)的,且 CryptoApi和.net只能在 Windows平臺中使用。內(nèi)核層解析時,一般是將證書傳遞到應(yīng)用層進(jìn)行解析后再將結(jié)果送回,給證書驗證和應(yīng)用帶來很大不便。盡管OpenSSL的證書解析方法具有較強(qiáng)的通用性,而且開源,但代碼復(fù)雜,占用系統(tǒng)資源較多,不適用于操作系統(tǒng)內(nèi)核層及嵌入式系統(tǒng)等資源受限環(huán)境。本文在證書格式研究的基礎(chǔ)上,給出了一種適用于資源受限環(huán)境下證書解析的方法,并在 Windows和Linux內(nèi)核層以及多款嵌入式設(shè)備中得到了應(yīng)用。

      1 數(shù)字證書格式

      目前廣泛應(yīng)用的數(shù)字證書格式為X509v3[5],其基本內(nèi)容包括基本證書域、簽名算法域和簽名值域三部分,如圖1所示,其中基本證書域又包括版本號、序列號等子域。

      圖1 X509v3格式數(shù)字證書基本內(nèi)容

      數(shù)字證書的格式用ASN.1語法進(jìn)行描述:

      2 數(shù)字證書解析方法

      數(shù)字證書在頒發(fā)時采用了非典型編碼規(guī)則(DER),該編碼規(guī)則是基本編碼規(guī)則(BER)的一個子集,ASN.1值與DER編碼之間為一一對應(yīng)關(guān)系[6]。DER編碼由TLV組成,即Tag、Length和Value,其中Tag為數(shù)據(jù)類型標(biāo)簽,Length為數(shù)值的字節(jié)長度,Value是值。如果進(jìn)行通用化解析,即在事先不知道內(nèi)容格式的情況下解析出每個字段的類型、長度、值,則需要考慮ASN.1語法的各種情況,代碼復(fù)雜,占用資源多且處理難度大。在Windows和Linux內(nèi)核層以及嵌入式設(shè)備等資源環(huán)境有限的情況下實(shí)現(xiàn)難度大且不必要。

      在數(shù)字證書內(nèi)容格式已知的前提下,證書解析的關(guān)鍵就在于如何確定各字段的層次關(guān)系以及同層各域的次序,進(jìn)而快速定位各字段位置。因此,在資源受限環(huán)境下Tag字段可忽略,重點(diǎn)在于確定Length和Value字段的位置和值。

      證書字段可分為兩類:次序固定字段和次序不固定字段。基本證書域中的擴(kuò)展字段為次序不固定字段,其余字段均為次序固定字段,盡管基本證書域中的擴(kuò)展字段為次序不固定字段,但擴(kuò)展字段的集合在整個證書中的次序仍是固定的,即在AlgorithmIdentifier之前,在SubjectPublicKeylnfo之后。

      在證書解析時,無論是次序固定字段還是次序不固定字段,都必須先定位字段位置。

      首先,確定字段所處的包裹層次。X509v3數(shù)字證書的層次關(guān)系如圖2所示,最外層是Certificate::=SEQUENCE{…},第 2層 是tbsCertificate、signatureAlgorithm和signature,第3層為version、serialNumber等。擴(kuò)展字段所處層次較多,從第3層到第5層都有,但有用信息在第5層,故在解析時要跳過第3和第4兩層。

      圖2 證書層次關(guān)系圖

      其次,在相應(yīng)層次確定該字段的位置。在X509v3格式數(shù)字證書中,同一層次的字段位置相對固定,因此在確定字段所處的層次位置后即可根據(jù)相對位置確定字段的最終位置。在字段位置確定后,次序固定字段在定位后可直接取該字段的值;次序不固定字段則需要獲取字段的OID進(jìn)行逐個比對,直至找到為止。

      以DN字段為例:首先,確定其所在的層次是第3層;然后,在第3層中根據(jù)相對關(guān)系可知DN字段在版本字段之后;從而最終定位DN字段在整個證書中的位置,獲取其值。

      3 解析模塊實(shí)現(xiàn)

      前面描述了數(shù)字證書中各字段的包裹關(guān)系及數(shù)字證書的解析方法,為在資源受限環(huán)境下快速定位數(shù)字證書中各字段位置,高效地解析證書,在數(shù)字證書解析模塊中定義了如下數(shù)據(jù)結(jié)構(gòu)TLV。其中tag表示標(biāo)簽,暫時不用;length表示pValue指向的數(shù)據(jù)長度;selfLen表示TLV頭的長度。

      同時設(shè)計了ReadTLV、WalkCert、SearchExtField等函數(shù)。函數(shù)ReadTLV用于從二進(jìn)制數(shù)據(jù)流中獲取TLV信息。WalkCert函數(shù)根據(jù)層次和次序關(guān)系調(diào)用ReadTLV進(jìn)行解析,跳過不必要的數(shù)據(jù),定位所需字段的位置。對于擴(kuò)展字段,還需要通過SearchExtField進(jìn)行字段搜索,擴(kuò)展字段搜索采用OID比對方式進(jìn)行。在資源受限環(huán)境下數(shù)字證書解析的關(guān)鍵是證書中各字段的定位,下面給出WalkCert的定位方法:

      定位到證書中各字段位置后,即可根據(jù)字段的定義類型進(jìn)行相應(yīng)的處理。在實(shí)現(xiàn)Windows和Linux內(nèi)核層的證書解析時,還應(yīng)考慮以下幾個方面的問題[7]:

      ① 部分C庫中的函數(shù)在內(nèi)核中不能使用。如內(nèi)存分配函數(shù)malloc需要根據(jù)平臺使用不同的函數(shù),Windows平臺下使用ExAllocatePoolWithTag,Linux平臺下使用kmalloc。

      ② 缺乏像用戶空間一樣的保護(hù)機(jī)制。內(nèi)核可以發(fā)現(xiàn)應(yīng)用層程序非法訪問內(nèi)存,但如果內(nèi)核層程序發(fā)生內(nèi)存錯誤,就會導(dǎo)致系統(tǒng)崩潰。

      ③ 內(nèi)核層程序可使用的堆棧很小,不能在函數(shù)中使用大數(shù)組。

      ④內(nèi)核層的程序執(zhí)行效率要高,避免長時間占用CPU資源。

      ⑤要注意同步和競爭,避免發(fā)生死鎖,函數(shù)要可重入。

      上面所述的方法同樣適用于證書撤銷列表(CRL)的解析。圖3給出了CRL的層次關(guān)系。

      4 應(yīng)用情況及測試

      本文描述的方法已在Windows和Linux內(nèi)核層、W78E58、TMS320C5416等環(huán)境中得到了應(yīng)用。由于證書解析是純軟件的執(zhí)行過程,與CPU的外圍電路無關(guān),并且采用C語言實(shí)現(xiàn),移植簡單,因此下文不再描述硬件電路和上文已描述過的實(shí)現(xiàn)過程,僅就不同環(huán)境中實(shí)現(xiàn)時的注意事項進(jìn)行說明。

      (1)Windows內(nèi)核層

      讀取證書文件時要使用InitializeObjectAttributes、ZwCreateFile、ZwReadFile、ZwClose等函數(shù)。獲取證書中的時間時需要考慮時區(qū)本地化處理,轉(zhuǎn)換時要使用Rtl-TimeFieldsToTime、ExSystemTimeToLocalTime、RtlTimeToTimeFields等函數(shù)。C標(biāo)準(zhǔn)庫中sprintf使用Rtl-StringCbPrintfA替換。動態(tài)內(nèi)存分配使用ExAllocate-PoolWithTag,釋放使用ExFreePool。另外,還要加入unicode和gb2312編碼的轉(zhuǎn)換數(shù)組。

      在WDK.6001.18002環(huán)境下編譯為內(nèi)核動態(tài)鏈接庫。方式是,在普通內(nèi)核模塊實(shí)現(xiàn)基礎(chǔ)上增加DllInitial-ize、DllUnload兩個函數(shù),均直接返回成功即可,將需要導(dǎo)出的函數(shù)聲明為extern。

      圖3 CRL層次關(guān)系圖

      (2)Linux內(nèi)核層

      讀取證書文件時使用filp_open打開文件,get_fs、set_fs(KERNEL_DS)、vfs_read讀取文件,filp_close關(guān)閉文件。內(nèi)核中沒有相應(yīng)的時間轉(zhuǎn)換函數(shù),需要參考應(yīng)用層的代碼自行實(shí)現(xiàn)。C標(biāo)準(zhǔn)庫中的sprintf可直接使用。動態(tài)內(nèi)存分配和釋放分別使用kmalloc(xx,GFP_KERNEL)、kfree,另外還要加入unicode和gb2312編碼的轉(zhuǎn)換數(shù)組。

      編譯方式同普通內(nèi)核模塊,用insmod命令加載模塊。

      (3)W78E58和TMS320C5416

      在W78E58和TMS320C5416環(huán)境下,不支持動態(tài)內(nèi)存管理,證書從外部存儲器讀入內(nèi)存中的全局?jǐn)?shù)組中,運(yùn)行時各函數(shù)使用指針參數(shù)傳遞證書數(shù)據(jù),不復(fù)制緩沖區(qū)。臨時數(shù)據(jù)可使用堆棧保存,本方法的堆棧使用量不超過512字節(jié)。時間轉(zhuǎn)換參考Linux應(yīng)用層代碼自行實(shí)現(xiàn),在沒有硬件時鐘的環(huán)境下該轉(zhuǎn)換不需要。若設(shè)備上不需要顯示證書名稱,則unicode編碼轉(zhuǎn)換數(shù)組也可以省去,以節(jié)省空間。

      分別在Keil和CCS環(huán)境下編譯通過。由于是軟件方法,可以直接在兩種環(huán)境中進(jìn)行模擬測試。

      常見的應(yīng)用層證書解析方法不適用于資源受限環(huán)境,無法和本文方法直接比較。此外,證書解析不是一種頻繁的操作,性能不是重要的考核指標(biāo)。基于上述考慮,表1僅給出了本方法在不同環(huán)境下的編譯代碼量和解析公鑰時的平均運(yùn)行時間(代碼數(shù)約1500行)。

      表1 編譯代碼量和平均運(yùn)行時間

      結(jié) 語

      本文所描述的數(shù)字證書解析方法可方便地利用C語言實(shí)現(xiàn),在Windows和Linux內(nèi)核層以及嵌入式系統(tǒng)中具有廣泛的適應(yīng)性,已在Windows和Linux內(nèi)核層、8051單片機(jī)、TMS320C5416等多個環(huán)境中應(yīng)用,具備運(yùn)行穩(wěn)定、代碼量小、解析速度快等特點(diǎn),對開發(fā)人員有一定的參考價值。

      [1]Cryptography Functions[CP/OL].[2013-01].http://msdn.microsoft.com.

      [2]X509Certificate類 [CP/OL].[2013-01].http://msdn.microsof-t.com.

      [3]OpenSS 源 碼 [CP/OL].[2013-01].http://www.openssl.org.

      [4]譚曉青.利用OpenSSL建立PKI數(shù)字證書系統(tǒng)[J].科學(xué)技術(shù)與工程,2005(20):1552-1554.

      [5]IETF.RFC3280Internet X509Public Key Infrastructure Certificate and Certificate Revocation List(CRL)rofile[DB/OL].(2002-04)[2013-01].http://w-ww.ietf.org.

      [6]GB/T 16263.1-2006信息技術(shù) ASN.1編碼規(guī)則第1部分:基本編碼規(guī)則(BER)、正則編碼規(guī)則(CER)和非典型編碼規(guī)則(DER)規(guī)范[S].

      [7]譚文,楊瀟,邵堅磊.寒江獨(dú)釣:Windows內(nèi)核安全編程[M].北京:電子工業(yè)出版社,2009.

      猜你喜歡
      數(shù)字證書次序字段
      《漢紀(jì)》對漢帝功業(yè)次序的重構(gòu)及其意義
      圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
      生日謎題
      當(dāng)心黑客利用數(shù)字證書的漏洞
      基于數(shù)字證書的軍事信息系統(tǒng)安全防護(hù)方案
      管理好系統(tǒng)中的數(shù)字證書
      電腦迷(2015年7期)2015-05-30 04:50:35
      CNMARC304字段和314字段責(zé)任附注方式解析
      放假一年
      無正題名文獻(xiàn)著錄方法評述
      吉林省支付清算系統(tǒng)參與者數(shù)字證書使用現(xiàn)狀調(diào)查與現(xiàn)存問題分析及建議
      富川| 凤冈县| 固始县| 三穗县| 信丰县| 台江县| 沁阳市| 襄汾县| 宜良县| 晋宁县| 东城区| 和田市| 微博| 肇东市| 冕宁县| 永兴县| 临夏县| 临城县| 岚皋县| 紫阳县| 福清市| 田东县| 五峰| 景宁| 灵丘县| 大同县| 台北市| 南安市| 江达县| 托里县| 曲麻莱县| 临澧县| 高安市| 确山县| 怀柔区| 九江县| 宁化县| 靖远县| 新源县| 河南省| 高州市|