0.引言 由于智能卡在身份認證領(lǐng)域的獨特優(yōu)勢,實(shí)際上已經(jīng)成為符合法律意義上的電子商務(wù)和電子政務(wù)領(lǐng)域首選 的合法載體。在Windows Server及其以后的版本中,提供了對的智能卡整體支持,包括智能卡的驅動(dòng)、身份認證、移除策略等[1]。由于擔,r‘,windows安全方面存在的諸多問(wèn)題,還有愈演愈烈的版權問(wèn)題。因此不少電子商務(wù)和電子政務(wù)單位準備采用開(kāi)源的Linux操作系統作為關(guān)鍵平臺首選的操作系統。然而遺憾的是,在開(kāi)源的Linux領(lǐng)域,智能卡的發(fā)展比較緩慢,目前沒(méi)有提供對智能卡的整體支持[2]。但是所幸的是,由于開(kāi)發(fā)源代碼的優(yōu)勢,在世界的開(kāi)源組織中,出現了不少支持智能卡的軟件和相應的實(shí)現方案[3]。但是現有的方案和軟件存在不少問(wèn)題:有些軟件雖然能夠使智能卡在Linux環(huán)境下工作,但是僅限于本地認證;而另外有砦軟件,則由于對智能卡的型號或智能卡中信息存儲的格式有特殊要求,因而限制了其通用性。這些限制不能滿(mǎn)足日益發(fā)展的電子商務(wù)與電子政務(wù)的需要。 本文通過(guò)對原有技術(shù)研究,提出了一個(gè)整體方案,可以滿(mǎn)足常見(jiàn)的電子商務(wù)和電子政務(wù)安全需要,如熱線(xiàn)彩票機等。 本文首先研究了與智能卡相關(guān)的協(xié)議,通過(guò)編寫(xiě)守護進(jìn)程實(shí)現Linux對智能卡的支持;通過(guò)編寫(xiě)身份認證模塊,實(shí)現相應的智能卡身份認證工作,如果認證失敗,還能發(fā)出相應的遠程報警;通過(guò)改寫(xiě)屏幕保護程序,實(shí)現智能卡的移除策略。 本文的操作系統選擇Linux的redhat9版本;智能卡采用符合PC/SC規范的智能卡,這種智能卡銷(xiāo)售廣泛,國內有很多公司在生產(chǎn),如握奇公司的TimeCOS/PK卡。 1.智能卡的技術(shù)標準 智能卡很多的技術(shù)標準。下面我們主要介紹兩個(gè)標準:IS07816和PC/SC。 1.1 IS07816標準[4】 智能卡技術(shù)是ISO國際標準組織定義的智能卡標準。定義了智能卡的各個(gè)方面,包括物理特征、物理接觸界 面、電子信號和傳輸協(xié)議、命令、安全體系、應用程序標識符和公用數據元素等。我國目前已經(jīng)采用了IS07816系列標準中的前三部分作為中國標準。 1.2 PC/SC標準[5] PC/SC即個(gè)人計算機(Personal computer)/智能卡(Smart Card),它原來(lái)是為智能卡訪(fǎng)問(wèn)Windows平臺( Windows2000以上支持)而定義的一種標準結構,其實(shí)它實(shí)質(zhì)上是一個(gè)與平臺無(wú)關(guān)的技術(shù)。PC/SC分為以下四層: 1、應用程序層(Smart Card Aware Application) 是根據自己需要編寫(xiě)的應用程序。在我們的應用中,它是使用C語(yǔ)言編寫(xiě)的程序,直接調用讀卡器封裝好的API。 2、智能卡服務(wù)提供者(Smart Card ServiceProvider) 它通常是由智能卡生產(chǎn)商提供的。 3、智能卡資源管理器(Smard Card Resource Manager) 智能卡資源管理器是PC/SC體系結構的核心部分。智能卡資源管理器整合了一些智能卡讀卡器驅動(dòng)程序和應用程序的通用部分,然后到一套可重用的組件之中。操作系統供戍商提供智能卡資源管理器。 遺憾的足,在redhat9系統中,操作系統沒(méi)有提供相應資源管理器。所以只有靠自己編寫(xiě)或者改寫(xiě)部分廠(chǎng)家 不太完善的組件。 4、智能卡讀寫(xiě)器驅動(dòng)程序(Smart Card Reader Driver) 由生產(chǎn)廠(chǎng)商提供的智能卡讀寫(xiě)器驅動(dòng)程序負責把資源管理器語(yǔ)言轉化為讀卡器語(yǔ)言。 雖然在Linux平臺下,智能卡的應用發(fā)展比較緩慢,沒(méi)有相應的操作系統進(jìn)行整體性支持。所幸的是,由于 Linux的開(kāi)放源代碼的優(yōu)勢,世界開(kāi)源組織中,也有了免費的PC/SC智能卡框架,如pcsc-1ite[3]。這樣如果我們采用的智能卡和Pc/SC兼容,就能很方便進(jìn)行應用程序的開(kāi)發(fā)。 2.Redhat9對智能卡支持的實(shí)現 要想完成redhat9對智能卡的支持,需要完成以下工作:(1)智能卡與讀卡器通信的智能卡驅動(dòng)程序的安裝; (2)計算機與讀卡器通信的PC/SC中間件的安裝;(3)PC/SC系統服務(wù)的設計;(4)把設計好的PC/SC服務(wù)加入系統守護進(jìn)程,成為真正的系統服務(wù)。 2.1讀卡器驅動(dòng)程序的安裝 讀卡器驅動(dòng)程序一般由智能卡生產(chǎn)廠(chǎng)商提供,它提供了智能卡和讀卡器的通信。負責把智能卡底層符合 IS07816標準的協(xié)議數據轉換為符合PC/SC規范的數據。從而實(shí)現和高層協(xié)議的通信。 2.2 PC/SC中間件的安裝 首先下載PC/SC的安裝包,以成熟的pcsc-lite-1.2.9為例。然后以ROOT用戶(hù)登錄系統。執行下列命令: ![]() //允許作為守護進(jìn)程運行。在這個(gè)系統中,由于我們要實(shí)現使用智能卡來(lái)做身份認證工作,所以必須做為守護進(jìn)程來(lái)運行 bash# make bash# make instal l 有關(guān)PC/SC其它問(wèn)題請參考[6],參考[7]中介紹了最新的版本pcsc-1 ite 1.5.1。 安裝完成后。運行程序PCSCD一一stdout&。然后用PSTREE查看是否存在pcscd守護進(jìn)程。如果存在,表明pcsc中間件的安裝已經(jīng)完成。 2.3 PC/SC系統服務(wù)的設定 為了提供操作系統對智能卡的良好支持,一般要求PC/SC中間件作為系統服務(wù)來(lái)運行。在參考[3]中,提供了類(lèi)似的服務(wù),經(jīng)過(guò)簡(jiǎn)單修改,即可使用。注意如果有多個(gè)智能卡,必須進(jìn)行配置[5]。 2.4 pcscd)J1]入系統守護進(jìn)程,隨系統啟動(dòng)首先將剛剛編寫(xiě)的PC/SC系統服務(wù)PC SCd放入/ete/init.d目錄下,然后在指定的rc.d目錄下作連接,執行命令:ln-sf/etc/init.d/pcscd/etc/rc.d/ rc5.d/S94pcscdf即可完成。 重新啟動(dòng)系統,運行命令pstree,如果見(jiàn)到pcscd守護進(jìn)程隨系統啟動(dòng),就完成了操作系統對智能卡的支持 工作。 3.身份認證的實(shí)現 在Linux下使用智能卡進(jìn)行身份認證,需要自己編寫(xiě)相應的PAM模塊。 3.1身份驗證PAM模塊的編寫(xiě) 編程位于PAM的應用接口層,最重要的是編寫(xiě)pam—authenticate()函數。這些API接口將被Linux系統 的login模塊調用,為L(cháng)inux系統提供登錄認證[7]。圖1是需要編寫(xiě)的pam authenticate 0的函數流程: ![]() 從圖中可以看出,本函數首先對讀卡器進(jìn)行初始化工作,如果成功就調用自己的身份驗證程序,當身份驗 證失敗后,就調用遠程報警程序。遠程報警程序簡(jiǎn)單可以調用簡(jiǎn)單的郵件命令mail發(fā)出郵件進(jìn)行實(shí)現,也可以通過(guò)其它方法實(shí)現,甚至可以使用復雜的防盜追蹤技術(shù)[9]。 3.2 PAM模塊的配置 配置文件也放在了在應用接口層中,它與PAM API配合使用,從而達到了在應用中靈活插入所需鑒別模塊的 目的。它的作用主要是為應用選定具體的鑒別模塊,模塊間的組合以及規定模塊的行為。 1 認證模塊 認證模塊編譯后為pam一木.S0文件,放在/1ib/security目錄下。本系統編寫(xiě)的智能卡登錄部分的PAM模塊名為pam_login.so。 2 配置文件 在redhat Linux下配置文件放在/etc/pam.d下。在pam.d目錄下文件名即為服務(wù)名,文件的格式為: module-type control-flag modulel-path args 修改gdm-autologin文件,在文件首行添加: auth sufficient pam_login.so 本部分配置完成之后,就完成了身份驗證工作。 4.智能卡移除策略的實(shí)現 如果要實(shí)現智能卡的移除策略工作,需要解決兩方面的問(wèn)題:首先要編寫(xiě)新的智能卡守護進(jìn)程,實(shí)時(shí)監控 智能卡的狀態(tài);第二是實(shí)現屏幕鎖定和解鎖的問(wèn)題。下面分別討論。 4.1智能卡守護進(jìn)程的編寫(xiě) 智能卡守護進(jìn)程實(shí)時(shí)查詢(xún)智能卡的狀態(tài),當智能卡狀態(tài)發(fā)生變化的時(shí)候向相應的程序發(fā)出信號。圖2是智能 卡守護進(jìn)程的流程圖: ![]() 程序使用阻塞的方法,監控者智能卡是否移除[5]。如果移除,程序首先斷開(kāi)卡的連接,進(jìn)入屏幕鎖定狀態(tài)。此時(shí),程序通過(guò)啟動(dòng)經(jīng)過(guò)改寫(xiě)的屏幕保護程序,從而鎖定屏幕。 在屏幕鎖定狀態(tài)下,程序繼續進(jìn)行阻塞,一直到卡插入,如果身份驗證成功,則解除鎖定。 4.2屏幕解鎖的實(shí)現 可以通過(guò)改寫(xiě)屏幕保護程序實(shí)現。研究一下屏幕保護程序解鎖的程序lock.C[10],注意有以下代碼: while(si->pw_data && si->pw_data->state==pw_read) 意思是當X windows檢測到事件類(lèi)型等于鍵盤(pán)(event.xany.type==KeyPres s)的時(shí)候,就啟動(dòng) handle_passwd_key (si, &event.xkey)口令驗證程序。在這里添加事件類(lèi)型為:event.xany.t yp e== KeyPress|| event.xany.type==PointerMotion,那么鼠標進(jìn)行移動(dòng)時(shí)也觸發(fā)相應的檢測事件。 注意以下語(yǔ)句: ![]() passwd_valid_p函數是身份的驗證函數,它是采用PAM模塊的方式定義的,定義在passwd-pam.c文件中。 把上面的語(yǔ)句改為: ![]() 此時(shí),我們就可以實(shí)現簡(jiǎn)單的解鎖工作。 5.結束語(yǔ) 按照以上的辦法,實(shí)現了Linux系統下智能卡平臺的整體支持方案。電子商務(wù)和電子政務(wù)單位在開(kāi)源的 Linux平臺下使用智能卡,就像windows平臺一樣方便。試驗表明,運行穩定、可靠,可以滿(mǎn)足熱線(xiàn)彩票機等電子商務(wù)領(lǐng)域和電子政務(wù)的需要。經(jīng)過(guò)改進(jìn)之后,甚至可以在超市收銀、電信收費終端設備上使用。 參考文獻 1. 莫林莫托.杜大鵬 Windows Server 2003深層解決方案 2005 2. 趙建超 基于Linux下智能卡登陸操作系統的實(shí)現方法 [期刊論文] -西安航空技術(shù)高等專(zhuān)科學(xué)校學(xué)報2006(5) 3. Mario Strasser and Martin Saegesser,smartcard-login DocumentatiOn.2001 2007 4. ISO SmartCard standard.2003 2007 5. pcscworkgroup PC/SC Specifications 2.01.4 2007 6. Mario Strasser Smart Card Login HOWTO 2007 7. Ludovic Rousseau pcsc-lite 1.5.1 2009 8. Andrew G Morgan The Linux-PAM Module Writers'Guide.2001 2008 9. 李曙光.張瓊聲.李文琳 嵌入式 Linux系統智能手機防盜追蹤功能的實(shí)現 [期刊論文] -微計算機應用2007(11) 10. RedHat Linux9 源代碼 2003 作者:王東升 趙建超 (河南工業(yè)職業(yè)技術(shù)學(xué)院計算機工程系,河南省南陽(yáng)市,473009) 來(lái)源:電子技術(shù) 2009 36(8) |