999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

系統資源受限環境下的證書解析方法研究

2013-10-10 01:57:08邵奇峰龔雪容吳保中
單片機與嵌入式系統應用 2013年6期
關鍵詞:環境方法

邵奇峰,龔雪容,吳保中

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

引 言

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

1 數字證書格式

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

圖1 X509v3格式數字證書基本內容

數字證書的格式用ASN.1語法進行描述:

2 數字證書解析方法

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

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

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

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

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

圖2 證書層次關系圖

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

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

3 解析模塊實現

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

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

定位到證書中各字段位置后,即可根據字段的定義類型進行相應的處理。在實現Windows和Linux內核層的證書解析時,還應考慮以下幾個方面的問題[7]:

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

② 缺乏像用戶空間一樣的保護機制。內核可以發現應用層程序非法訪問內存,但如果內核層程序發生內存錯誤,就會導致系統崩潰。

③ 內核層程序可使用的堆棧很小,不能在函數中使用大數組。

④內核層的程序執行效率要高,避免長時間占用CPU資源。

⑤要注意同步和競爭,避免發生死鎖,函數要可重入。

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

4 應用情況及測試

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

(1)Windows內核層

讀取證書文件時要使用InitializeObjectAttributes、ZwCreateFile、ZwReadFile、ZwClose等函數。獲取證書中的時間時需要考慮時區本地化處理,轉換時要使用Rtl-TimeFieldsToTime、ExSystemTimeToLocalTime、RtlTimeToTimeFields等函數。C標準庫中sprintf使用Rtl-StringCbPrintfA替換。動態內存分配使用ExAllocate-PoolWithTag,釋放使用ExFreePool。另外,還要加入unicode和gb2312編碼的轉換數組。

在WDK.6001.18002環境下編譯為內核動態鏈接庫。方式是,在普通內核模塊實現基礎上增加DllInitial-ize、DllUnload兩個函數,均直接返回成功即可,將需要導出的函數聲明為extern。

圖3 CRL層次關系圖

(2)Linux內核層

讀取證書文件時使用filp_open打開文件,get_fs、set_fs(KERNEL_DS)、vfs_read讀取文件,filp_close關閉文件。內核中沒有相應的時間轉換函數,需要參考應用層的代碼自行實現。C標準庫中的sprintf可直接使用。動態內存分配和釋放分別使用kmalloc(xx,GFP_KERNEL)、kfree,另外還要加入unicode和gb2312編碼的轉換數組。

編譯方式同普通內核模塊,用insmod命令加載模塊。

(3)W78E58和TMS320C5416

在W78E58和TMS320C5416環境下,不支持動態內存管理,證書從外部存儲器讀入內存中的全局數組中,運行時各函數使用指針參數傳遞證書數據,不復制緩沖區。臨時數據可使用堆棧保存,本方法的堆棧使用量不超過512字節。時間轉換參考Linux應用層代碼自行實現,在沒有硬件時鐘的環境下該轉換不需要。若設備上不需要顯示證書名稱,則unicode編碼轉換數組也可以省去,以節省空間。

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

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

表1 編譯代碼量和平均運行時間

結 語

本文所描述的數字證書解析方法可方便地利用C語言實現,在Windows和Linux內核層以及嵌入式系統中具有廣泛的適應性,已在Windows和Linux內核層、8051單片機、TMS320C5416等多個環境中應用,具備運行穩定、代碼量小、解析速度快等特點,對開發人員有一定的參考價值。

[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數字證書系統[J].科學技術與工程,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信息技術 ASN.1編碼規則第1部分:基本編碼規則(BER)、正則編碼規則(CER)和非典型編碼規則(DER)規范[S].

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

猜你喜歡
環境方法
長期鍛煉創造體內抑癌環境
一種用于自主學習的虛擬仿真環境
孕期遠離容易致畸的環境
不能改變環境,那就改變心境
學習方法
環境
孕期遠離容易致畸的環境
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
主站蜘蛛池模板: 国产幂在线无码精品| 亚洲国产清纯| 久久久久国色AV免费观看性色| 亚洲精品午夜天堂网页| 青青青国产在线播放| 中文无码精品a∨在线观看| 亚洲成人黄色在线观看| 精品国产Ⅴ无码大片在线观看81| 精品视频福利| 成人精品免费视频| 97超级碰碰碰碰精品| 日韩麻豆小视频| 国产精品久久久久久久久| 日韩 欧美 小说 综合网 另类| 在线免费看片a| 呦系列视频一区二区三区| 精品国产一区91在线| 国产成人综合日韩精品无码不卡 | 欧美成人a∨视频免费观看| 国产成人精品一区二区三区| 九色综合伊人久久富二代| 欧美日韩资源| 精品视频91| 欧美在线视频a| 亚洲,国产,日韩,综合一区 | 亚洲日本中文综合在线| 天堂成人av| 四虎综合网| 四虎永久免费地址| 久久国产精品影院| 亚洲日韩精品伊甸| 最新亚洲人成网站在线观看| 97视频免费在线观看| 国产乱人伦精品一区二区| 成人免费午间影院在线观看| 亚洲欧美天堂网| 免费a级毛片视频| 成AV人片一区二区三区久久| 污视频日本| 亚洲国产理论片在线播放| 成人精品亚洲| 四虎永久在线| 久久网综合| 国产精品林美惠子在线观看| 在线欧美日韩| 日本黄网在线观看| 国产96在线 | 亚洲无码91视频| 天堂亚洲网| 久久人搡人人玩人妻精品一| 91在线播放国产| 欧美国产日韩在线播放| 日韩国产无码一区| 国产91成人| 456亚洲人成高清在线| 国产成人精品视频一区视频二区| 在线观看国产黄色| 国产91成人| 国产在线麻豆波多野结衣| 一边摸一边做爽的视频17国产| 久久情精品国产品免费| 92午夜福利影院一区二区三区| 欧洲在线免费视频| 欧美区国产区| 成人国内精品久久久久影院| 精品无码专区亚洲| 国产a v无码专区亚洲av| www.国产福利| 免费中文字幕一级毛片| 精品国产99久久| 激情在线网| 国产成人精品综合| 日韩精品一区二区三区视频免费看| 亚洲中文字幕久久精品无码一区| 高清码无在线看| 亚洲a免费| 国产一级毛片在线| 中文字幕乱妇无码AV在线| 亚洲天天更新| 日本www在线视频| 亚洲日韩Av中文字幕无码| 亚洲综合中文字幕国产精品欧美|