亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        邵奇峰,龔雪容,吳保中

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

        引 言

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

        1 數(shù)字證書(shū)格式

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

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

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

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

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

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

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

        在證書(shū)解析時(shí),無(wú)論是次序固定字段還是次序不固定字段,都必須先定位字段位置。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        (3)W78E58和TMS320C5416

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

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

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

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

        結(jié) 語(yǔ)

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

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

        [2]X509Certificate類(lèi) [CP/OL].[2013-01].http://msdn.microsof-t.com.

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

        [4]譚曉青.利用OpenSSL建立PKI數(shù)字證書(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]譚文,楊瀟,邵堅(jiān)磊.寒江獨(dú)釣:Windows內(nèi)核安全編程[M].北京:電子工業(yè)出版社,2009.

        猜你喜歡
        數(shù)字證書(shū)次序字段
        《漢紀(jì)》對(duì)漢帝功業(yè)次序的重構(gòu)及其意義
        圖書(shū)館中文圖書(shū)編目外包數(shù)據(jù)質(zhì)量控制分析
        生日謎題
        當(dāng)心黑客利用數(shù)字證書(shū)的漏洞
        基于數(shù)字證書(shū)的軍事信息系統(tǒng)安全防護(hù)方案
        管理好系統(tǒng)中的數(shù)字證書(shū)
        電腦迷(2015年7期)2015-05-30 04:50:35
        CNMARC304字段和314字段責(zé)任附注方式解析
        放假一年
        無(wú)正題名文獻(xiàn)著錄方法評(píng)述
        吉林省支付清算系統(tǒng)參與者數(shù)字證書(shū)使用現(xiàn)狀調(diào)查與現(xiàn)存問(wèn)題分析及建議
        无码av天天av天天爽| 国产一级做a爱视频在线| 国产精品女同二区五区九区| 新中文字幕一区二区三区| 亚洲啪av永久无码精品放毛片| 久久不见久久见www日本网| 97高清国语自产拍| 最新亚洲人成网站在线| 日本一区二区高清视频在线播放| 久久精品亚州中文字幕| 欧美亚洲色综久久精品国产| 国产真实露脸4p视频| 亚洲高清av一区二区| 中文字幕在线亚洲三区| 亚洲色无码国产精品网站可下载 | 人妻尤物娇呻雪白丰挺| 日本最新一区二区三区在线视频| 亚洲avav天堂av在线网毛片| 久久综合给日咪咪精品欧一区二区三| 免费av网址一区二区| 久久精品国产亚洲av精东| 免费国产黄网站在线观看| 中文人妻AV高清一区二区| 国产在线观看一区二区三区av| 免费观看交性大片| 久久人人97超碰超国产| 人妻少妇喷水意淫诱惑| 午夜一区二区三区观看| 国产免国产免费| 加勒比黑人在线| 日韩精品免费av一区二区三区| 高潮内射双龙视频| 在线播放人成午夜免费视频| 亚洲春色视频在线观看| 日韩欧美一区二区三区免费观看| 性色av无码一区二区三区人妻| 欧美日本视频一区| 成人影院在线观看视频免费| 亚洲日韩av无码| 亚洲欧洲日产国码久在线观看| 男女深夜视频网站入口|