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