楊永平
摘要:網(wǎng)絡(luò)信息傳輸安全要求保證信息的身份認(rèn)證性、完整性、機(jī)密性,主要通過TCP/IP上增加安全協(xié)議實(shí)現(xiàn),具有一定的安全開發(fā)能力可以讓開發(fā)者的網(wǎng)絡(luò)應(yīng)用系統(tǒng)更安全,也是高層次網(wǎng)絡(luò)安全人員應(yīng)該具有的能力。該文通過協(xié)作完成基于CryptoAPI和OpenSSL安全庫(kù)的開發(fā)項(xiàng)目,提高學(xué)生對(duì)安全協(xié)議的理解。
關(guān)鍵詞:CryptoAPI;OpenSSL;安全協(xié)議
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)23-5421-03
1 安全基礎(chǔ)
計(jì)算機(jī)網(wǎng)絡(luò)安全涉及計(jì)算機(jī)和網(wǎng)絡(luò),綜合給出其定義:“保護(hù)計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)中的硬件、軟件及其數(shù)據(jù)不受偶然或惡意原因而遭到破壞、更改、泄露,保障系統(tǒng)連續(xù)可靠地正常運(yùn)行,網(wǎng)絡(luò)服務(wù)不中斷”,也即滿足安全三元組認(rèn)證性、完整性、機(jī)密性,以及不可否認(rèn)性、抗抵賴性。信息遭受侵害的原因主要有兩大方面,計(jì)算機(jī)系統(tǒng)技術(shù)和網(wǎng)絡(luò)傳輸技術(shù),對(duì)于計(jì)算機(jī)系統(tǒng)來(lái)說,各種系統(tǒng)內(nèi)資源訪問,共享是系統(tǒng)可用、高效的基礎(chǔ),但是又可能被惡意代碼利用,如各種木馬、病毒等;對(duì)于傳輸通信來(lái)說,會(huì)發(fā)生諸如信息竊聽、篡改、重放、假冒等攻擊,很大原因是由于TCP/IP協(xié)議本身的漏洞引起,而當(dāng)前應(yīng)用又必須建立在TCP/IP協(xié)議基礎(chǔ)之上,可以采取協(xié)議各層次上加入身份認(rèn)證防止假冒、完整性驗(yàn)證防止篡改、數(shù)字簽名抗抵賴、加密防止竊聽等。在實(shí)際的應(yīng)用當(dāng)中,一般采用防火墻、入侵檢測(cè)系統(tǒng)、病毒檢測(cè)技術(shù)等提高網(wǎng)絡(luò)系統(tǒng)的安全性,采用SSL安全協(xié)議,IPSec安全協(xié)議,PKI公鑰基礎(chǔ)設(shè)施,PGP電子郵件安全等安全協(xié)議來(lái)提升TCP/IP協(xié)議的安全性。
2 教學(xué)現(xiàn)狀
在網(wǎng)絡(luò)安全的教學(xué)過程中,安全相關(guān)概念,基本原理,安全服務(wù)和機(jī)制的介紹,信息安全密碼學(xué)基礎(chǔ),安全管理,安全配置等內(nèi)容占據(jù)了課程大量的課時(shí),對(duì)于課時(shí)不是足夠多的學(xué)校,網(wǎng)絡(luò)安全課程涉及的編程內(nèi)容較少或者干脆不涉及,專門開設(shè)安全編程課程的高校較少。本校安全相關(guān)課程有信息安全基礎(chǔ)和計(jì)算機(jī)網(wǎng)絡(luò)安全兩門課程,因此可以在計(jì)算機(jī)網(wǎng)絡(luò)安全課程中對(duì)安全編程進(jìn)行一些了解與實(shí)踐。
從技術(shù)上來(lái)說,安全問題主要由系統(tǒng)和網(wǎng)絡(luò)引起,因此針對(duì)安全的編程也可以分為兩大類型,針對(duì)系統(tǒng)的安全編程可歸結(jié)為惡意代碼及其防治,主要內(nèi)容包括系統(tǒng)編程,注冊(cè)表操作,日志記錄分析,操作系統(tǒng),系統(tǒng)軟件安全等內(nèi)容,如緩沖區(qū)溢出,病毒,遠(yuǎn)程控制技術(shù),瀏覽器安全等;針對(duì)網(wǎng)絡(luò)傳輸安全的編程主要基于密碼學(xué)與安全協(xié)議進(jìn)行,目前開發(fā)趨于標(biāo)準(zhǔn)化,對(duì)于關(guān)注應(yīng)用的人員來(lái)說可以從底層算法解脫出來(lái),掌握一些實(shí)用的安全編程工具對(duì)提高安全編程能力顯得很重要。
即使對(duì)于不從事開發(fā)工作的人,通過學(xué)習(xí)安全編程提高安全能力,也是很有好處的,使用工具過于浮淺,難以深入了解,難以跟上技術(shù)變化,而且工具的深入應(yīng)用也需要扎實(shí)的基礎(chǔ),只是學(xué)習(xí)原理又顯得有些枯燥和抽象。通過在已有庫(kù)的基礎(chǔ)上,手工組合模塊或集成式的開發(fā),可以加深對(duì)基本原理的理解,又不用花費(fèi)大量時(shí)間精力于底層算法,適合于各種編程基礎(chǔ)的學(xué)習(xí)者。
3 常見安全開發(fā)包
網(wǎng)絡(luò)安全開發(fā)包的種類很多,實(shí)現(xiàn)功能也千差萬(wàn)別,下面介紹一些常見的網(wǎng)絡(luò)安全開發(fā)包:
1) CryptoAPI: Microsoft提供的加密應(yīng)用程序接口(Cryptography API),可以方便地在應(yīng)用程序中加入強(qiáng)大的加密功能,而不必考慮基本的算法。CryptoAPI共有五部分組成:簡(jiǎn)單消息函數(shù)(Simplified Message Functions)、低層消息函數(shù)(Low-level Message Functions)、基本加密函數(shù)(Base Cryptographic Functions)、證書編解碼函數(shù)(Certificate Encode/Decode Functions)和證書庫(kù)管理函數(shù)(Certificate Store Functions)。其中前三者可用于對(duì)敏感信息進(jìn)行加密或簽名處理,可保證網(wǎng)絡(luò)傳輸信息的私有性;后兩者通過對(duì)證書的使用,可保證網(wǎng)絡(luò)信息交流中的認(rèn)證性。
2) OpenSSL: OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫(kù),囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。SSL協(xié)議提供的安全信道有三個(gè)特性:保密性、完整性、安全驗(yàn)證。Apache使用它加密HTTPS,OpenSSH使用它加密SSH,它是一個(gè)多用途的、跨平臺(tái)的密碼工具。OpenSSL采用C語(yǔ)言作為開發(fā)語(yǔ)言,這使得OpenSSL具有優(yōu)秀的跨平臺(tái)性能,OpenSSL支持Linux、Windows、BSD、Mac、VMS等平臺(tái),這使得OpenSSL應(yīng)用廣泛。OpenSSL整個(gè)軟件包大概可以分成三個(gè)主要的功能部分:SSL協(xié)議庫(kù)、命令行應(yīng)用程序以及密碼算法庫(kù),其中算法使用了EVP封裝了加密算法,提供統(tǒng)一的接口,大大提高了開發(fā)效率和代碼的可重用性能。
3) CryptoAPI++: 采用標(biāo)準(zhǔn)C++編寫而成,實(shí)現(xiàn)了多種公開密鑰加密算法、對(duì)稱加密算法、數(shù)字簽名算法、信息摘要算法以及其它相關(guān)算法,適用于常用的操作系統(tǒng)和開發(fā)平臺(tái),實(shí)現(xiàn)功能比CryptoAPI少一些。
4) Cryptix: Sun公司發(fā)布的采用java語(yǔ)言的關(guān)于JCE(Java Cryptography Extension)的開放源碼的API實(shí)現(xiàn)
5) 網(wǎng)絡(luò)數(shù)據(jù)包捕獲開發(fā)包Libpcap和Winpcap: libpcap是unix/linux平臺(tái)下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包,大多數(shù)網(wǎng)絡(luò)監(jiān)控軟件都以它為基礎(chǔ),Winpcap是libpcap的Windows版本。
6) Libnids: Libnids是一個(gè)用于網(wǎng)絡(luò)入侵檢測(cè)開發(fā)的專業(yè)編程接口,它使用了Libpcap所以它具有捕獲數(shù)據(jù)包的功能。同時(shí),Libnids提供了TCP數(shù)據(jù)流重組功能,所以對(duì)于分析基于TCP協(xié)議的各種協(xié)議Libnids都能勝任.Libnids還提供了對(duì)IP分片進(jìn)行重組的功能,以及端口掃描檢測(cè)和異常數(shù)據(jù)包檢測(cè)功能。
由于本校沒有專門的網(wǎng)絡(luò)安全編程課,沒有足夠的課時(shí),因此只能選取其中的一些內(nèi)容教學(xué)。信息傳輸安全的機(jī)密性、認(rèn)證性、驗(yàn)證性是非常重要的概念,也是其它安全協(xié)議和安全服務(wù)的基礎(chǔ),因此選取了應(yīng)用廣泛的CryptoAPI和OpenSSL作為我們的研究對(duì)象,它們包含內(nèi)容豐富,功能強(qiáng)大。
4 教學(xué)實(shí)際情況
在本校實(shí)際的教學(xué)過程中,本部分內(nèi)容采用小組協(xié)作的方式完成編程項(xiàng)目。要求采用CryptoAPI或OpenSSL開發(fā)一個(gè)局域網(wǎng)內(nèi)的通信系統(tǒng),基本功能包括聊天短信息的發(fā)送和文件的傳送,要求使用CryptoAPI或OpenSSL安全庫(kù)函數(shù)進(jìn)行開發(fā),使用各種加解密算法,能保證信息的完整性、機(jī)密性、認(rèn)證性,提供密鑰分發(fā)與管理,證書的頒發(fā)等功能。每三人一個(gè)小組,要提交完整的項(xiàng)目文檔、開發(fā)日志,提供源碼及可執(zhí)行程序,周期為三周時(shí)間,不專門占用課時(shí),利用課余時(shí)間,同時(shí)還要求選擇CryptoAPI的小組和選擇OpenSSL的小組結(jié)成友好小組,完成本組的同時(shí),需要向合作組介紹自己的工作內(nèi)容,相互討論工程計(jì)劃,使得完成一個(gè)工程的同時(shí),對(duì)另一種技術(shù)也有較多了解,開發(fā)日志和討論內(nèi)容等也作為重要的評(píng)價(jià)依據(jù),加強(qiáng)對(duì)項(xiàng)目過程的控制。各小組的成果集中演示,組員自評(píng),小組互評(píng),教師點(diǎn)評(píng)等多種評(píng)價(jià)結(jié)合,極大提高學(xué)生的參與度。
Windows下進(jìn)行OpenSSL編程的主要步驟:
1) 安裝ActivePerl-5.8.6.811-MSWin32-x86-122208.msi。閱讀openssl開發(fā)包中的install.w32 、編譯openssl;
2) 熟悉OpenSSL編程接口,編寫通信的server和client端,功能包括信息傳輸和安全算法的應(yīng)用;
3) 將所需要的文件放到源代碼目錄,調(diào)試并運(yùn)行程序,驗(yàn)證進(jìn)行安全通信的過程及身份認(rèn)證方式
對(duì)于CryptoAPI編程,最終效果和OpenSSL類似,也是提供一個(gè)server端和Client端實(shí)現(xiàn)安全通信,主要步驟:
1) 獲取CSP句柄
2) 創(chuàng)建公私密鑰對(duì),包括簽名、會(huì)話密鑰、傳輸會(huì)話密鑰用到的密鑰對(duì)。
3) 加解密,對(duì)數(shù)據(jù)進(jìn)行各種處理,包括數(shù)字信封,數(shù)字簽名等。
經(jīng)過兩期的教學(xué)過程,學(xué)生普遍反映課程視野得到開闊,對(duì)網(wǎng)絡(luò)安全的認(rèn)識(shí)也得到了提高,本以為網(wǎng)絡(luò)安全就是優(yōu)化網(wǎng)絡(luò)結(jié)構(gòu),配置防火墻、入侵檢測(cè)系統(tǒng),通過各種安全工具檢測(cè)安全漏洞等內(nèi)容,沒想到還有一個(gè)廣闊的領(lǐng)域存在,本部分的技術(shù)也很適合嵌入到各種網(wǎng)絡(luò)應(yīng)用系統(tǒng)中,網(wǎng)絡(luò)安全已經(jīng)上升為國(guó)家戰(zhàn)略。當(dāng)然也有一些存在的不足,比如有的項(xiàng)目組安全處理的過程不夠透明密鑰的處理不是軟件自動(dòng)完成,需要使用者進(jìn)行一些指令的執(zhí)行或者用戶交互選擇,給用戶的使用造成困擾;還有一些小組組完成了短消息或文件的處理及發(fā)送,而沒有同時(shí)完成二種功能;密鑰管理隨意化,開發(fā)進(jìn)度控制不夠嚴(yán)格等,這些問題還有待于進(jìn)一步規(guī)范化。
5 總結(jié)
安全編程可以算是傳統(tǒng)計(jì)算機(jī)網(wǎng)絡(luò)安全課程的補(bǔ)充內(nèi)容,其開發(fā)與普通的網(wǎng)絡(luò)應(yīng)用程序有明顯差別,學(xué)生通過查閱資料、討論等方式協(xié)作完成一個(gè)有應(yīng)用價(jià)值的安全開發(fā)項(xiàng)目,極大促進(jìn)了他們的學(xué)習(xí)熱情,提高了探索式學(xué)習(xí)的能力,同時(shí)加深了對(duì)安全協(xié)議的理解,當(dāng)然也提升了編程能力,還豐富了網(wǎng)絡(luò)安全課程的課程形式。同時(shí),還有助于學(xué)生對(duì)陌生內(nèi)容的恐懼感的消除,不少同學(xué)從該領(lǐng)域完全不熟,對(duì)名詞都感到陌生,經(jīng)過努力完成了一個(gè)實(shí)用的工具,增強(qiáng)了面對(duì)未知領(lǐng)域的信心。作為一名網(wǎng)絡(luò)管理員或者網(wǎng)絡(luò)安全員,不能滿足于各種工具的使用和設(shè)備的配置,還應(yīng)該對(duì)原理、開發(fā)有一定了解。
參考文獻(xiàn):
[1] 陳卓,阮鷗,沈劍.網(wǎng)絡(luò)安全編程與實(shí)踐[M].長(zhǎng)沙:國(guó)防工業(yè)出版社,2008,8.
[2] 陳波,張碧云.基于OpenSSL的C/S安全通信[J].計(jì)算機(jī)安全與維護(hù),2007,8.
[3] 裴照君,段哲民,王海濤.基于Microsoft CryptoAPI框架下的數(shù)據(jù)安全通信系統(tǒng)開發(fā)[J].微型電腦應(yīng)用 2008,10.
[4] 敷彥銘,陳攀.以實(shí)驗(yàn)為中心的網(wǎng)絡(luò)安全課程教學(xué)改革探索[J].軟件導(dǎo)刊,2012,6.
[5] 周敏.計(jì)算機(jī)網(wǎng)絡(luò)安全實(shí)驗(yàn)教學(xué)改革[J].實(shí)驗(yàn)技術(shù)與管理 ,2013,6.
[6] 袁素春,王育民.李綱OpenSSL程序設(shè)計(jì)[J].計(jì)算機(jī)安全,2005,10.