摘要:ASP是互聯(lián)網(wǎng)應用較廣泛的網(wǎng)站制作技術之一。該文通過介紹ASP常用的幾種加密技術,從編碼技術、雜湊函數(shù)技術及對稱加密技術三個方面分析各個方法的實用性,并提出一些合理的建議。
關鍵字:ASP加密;編碼;HASH;MS encode
中圖分類號:TP309文獻標識碼:A文章編號:1009-3044(2009)36-10597-02
Analysis of Technology on ASP Encryption
GUAN Shui-neng
(Huangshi Institute of Technology, Huangshi 435300, China)
Abstract: ASP is one of widly used website production technologies. This paper describes several commonly used ASP encryption technology, based on the coding technology, hash function, symmetric encryption technology, analysis the availability of the various methods and make some reasonable suggestions.
Key words: ASP encryption; code; HASH; MS encode
1 ASP加密概述
加密技術是信息安全采取的主要安全保密措施,是最常用的安全保密手段,利用技術手段把重要的數(shù)據(jù)變?yōu)閬y碼(加密)傳送,到達目的地后再用相同或不同的手段還原(解密)。加密技術包括兩個元素:算法和密鑰。算法是將普通的文本(或者可以理解的信息)與數(shù)字密鑰的結(jié)合,產(chǎn)生不可理解的密文的步驟。對數(shù)據(jù)加密的技術分為兩類,即對稱加密和非對稱加密。
在本文中所指的ASP加密是種廣義加密的概念。廣義的加密是指保障數(shù)據(jù)安全的各種方式,包括編碼轉(zhuǎn)換、封裝或通過密鑰進行加密、簽名和身份認證。雖然有些不是嚴格意義的加密技術(有些方法甚至不叫加密),但作為一種加密的概念,確實早就存在。ASP廣義加密是指使用各種編碼技術、對稱加密算法、簡單異或處理及雜湊算法對ASP的代碼、關鍵數(shù)據(jù)及向數(shù)據(jù)庫傳遞的數(shù)據(jù)進行轉(zhuǎn)換處理的過程。本文先對ASP廣義加密的各種方法進行介紹,然后分析各自的實用性,并提出一些合理的建議。
2 ASP加密常用方法
ASP是Active Server pages的縮寫,是微軟提供的一種網(wǎng)站開發(fā)程序,是一種服務器端的指令環(huán)境,用來建立并執(zhí)行交互式Web服務器應用程序。本文提到的ASP加密方法是指利用外部程序?qū)SP設計代碼進行處理或在ASP設計中針對敏感數(shù)據(jù)和信息的保護方法,一般有以下幾種方法。
1)使用微軟的MS Script Encode進行加密
微軟提供了腳本編碼器MS Script Encode,可以對ASP程序進行加密。這是一個簡單的命令行工具,其執(zhí)行文件是SRCENC.EXE,需要在DOS下運行。它只加密頁面中嵌入的腳本代碼,把網(wǎng)頁中之間的ASP代碼轉(zhuǎn)換成不可讀的亂碼,其他部分則保持原樣不變。加密后的程序,必須使用Internet Explorer 5.0以上版本才能正常瀏覽。用SRCENC加密之后,文件中被加密過的部分將變成只讀類型,只要修改了加密部分,就會導致整個文件不能使用。
2)如果要保護開發(fā)的asp代碼,可以通過開發(fā)動態(tài)鏈接庫DLL組件的方法進行保護。DLL是Dynamic Link Library 的縮寫形式,是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的類庫,并不是可執(zhí)行文件。動態(tài)鏈接提供了一種方法,使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。
3)使用Base64編碼進行轉(zhuǎn)換所需要加密的代碼部分。Base64是網(wǎng)絡上最常見的用于傳輸8Bit字節(jié)代碼的編碼方式之一,可用于在HTTP環(huán)境下傳遞較長的標識信息。采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數(shù)據(jù)不會被人用肉眼所直接看到。此方法需要用戶自己定義編碼轉(zhuǎn)換函數(shù)。
4)通過MD5函數(shù)對asp中涉及到的用戶密碼進行函數(shù)處理得到數(shù)字摘要,替換數(shù)據(jù)庫中的明文密碼。MD5即Message-Digest Algorithm 5,用于確保信息傳輸完整一致。它是計算機廣泛使用的雜湊算法之一,主流編程語言包括asp已有MD5實現(xiàn)。
5)通過對需要加密的代碼部分和密鑰種子進行異或處理進行加密。密鑰種子可以是種512位或1024位的數(shù)據(jù),放在服務器較秘密的位置。這是一種簡化的對稱加密算法,需要自定義函數(shù)實現(xiàn)轉(zhuǎn)換。
3 asp加密技術分析
在本文提到的這些ASP加密方法實際上是在不同方面對于ASP進行安全保護,歸類于以下三種操作方式,現(xiàn)分別進行分析。
1)編碼技術
計算機的編碼種類比較多,對于普通ASCII字符或漢字都有各種編碼轉(zhuǎn)換方法。對于ASP程序常用的編碼主要包括GB、UTF-8、UNICODE、ASCII和BASE64等等。因為ASP源代碼是文本文件,因而對它的保護尤其重要。MS encode程序是微軟開發(fā)的一種針對ASP或網(wǎng)頁中客戶端腳本進行加密代碼轉(zhuǎn)換的工具。MS encode程序編碼轉(zhuǎn)換容易,和IIS結(jié)合緊密,但轉(zhuǎn)換后的代碼可以直接使用ZWDECODE程序直接解碼。如果需要保護ASP源代碼的知識產(chǎn)權,MS encode程序顯然用途不大。
Dll文件是被編譯過的機器代碼,如果沒有源項目文件,是很難被反編譯的,所以組件加密這種方法很安全,也不容易被破解。如果使用VB語言進行封裝的話,操作過程如下:新建一個VB的activex dll項目;編寫VB組件;生成安裝文件;在IIS服務器上安裝組件;在網(wǎng)頁中調(diào)用組件。
對于ASP腳本編程語言而言,還可以使用其他編碼技術進行處理。常用的有base64編碼、UNICODE編碼、UTF-8編碼和ASCII轉(zhuǎn)換。這樣就可以把ASP代碼轉(zhuǎn)換成一種不能視覺直接識別的密文,有一定的效果。但是這些密文轉(zhuǎn)換成明文比較容易,雖然可以組合其他方法使用,但筆者認為此類操作略顯繁瑣。
2)HASH函數(shù)技術
Hash函數(shù),就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。這種轉(zhuǎn)換是一種壓縮映射,散列值的空間通常遠小于輸入的空間,不同的輸入可能會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。簡單的說就是一種將任意長度的消息壓縮到某一固定長度的消息摘要的函數(shù)。HASH函數(shù)把一些不同長度的信息轉(zhuǎn)化成雜亂的128位或160位的編碼里,即HASH值。HASH函數(shù)一般包括MD4、MD5、SHA1等算法。
Hash函數(shù)是不可逆的,在ASP中應用是將某些特殊信息處理后保存在數(shù)據(jù)庫中。有人認為將密碼通過MD5算法處理后再保存即使被非法入侵者獲取也不可能計算出明文密碼來,這是錯誤的,入侵者可以通過網(wǎng)站查詢與字典暴力破解等多個方法獲取MD5密文對應的密碼明文,從而輕松入侵系統(tǒng)。但現(xiàn)階段處理網(wǎng)站數(shù)據(jù)庫里的密碼數(shù)據(jù),使用hash函數(shù)生成數(shù)字摘要再進行比較,進而身份驗證是一種較常規(guī)和可用的方法。
3)對稱加密技術
對稱加密算法是應用較早的加密算法,技術成熟。在計算機系統(tǒng)中廣泛使用的對稱加密算法有DES、3DES、IDEA和AES。在ASP程序中完整地使用對稱加密算法并不多見,究其原因筆者認為:加密的對象不好確定,ASP文本文件、關鍵代碼或關鍵數(shù)據(jù)都有可能;密鑰不易保護;ASP頁面包含HTML代碼及特殊字符,對于特殊字符處理,程序?qū)崿F(xiàn)有一定的難度。前面提到的簡單異或處理方法利用到對稱加密中最基本的數(shù)據(jù)分組和異或處理方法,對于處理短數(shù)據(jù)或關鍵代碼來說,方法是有一定的隱蔽性和可用性,密鑰種子也需保存安全,是一種ASP程序員基于網(wǎng)站內(nèi)容的秘密使用。如果用此方法加密用戶名或密碼數(shù)據(jù)的話,因方法的秘密性及數(shù)據(jù)較短,破解還是有一定的難度的。
4 建議
從保護ASP文件代碼、保護隱私數(shù)據(jù)等方面,以上分析了各種ASP的加密技術?;诜治?,筆者提出以下幾點建議:
1)眾所周知,ASP是一種源代碼完全公開的網(wǎng)站開發(fā)技術,但MS Enocde程序并不能很好地保密代碼。像某些商用ASP系統(tǒng)一樣,從保護自己的網(wǎng)站代碼和知識產(chǎn)權的角度出發(fā),將關鍵ASP代碼封裝成DLL文件是種比較好的方法,使得攻擊者難以進行反編譯。封裝的DLL代碼在一定程度上可以防止SQL注入攻擊。
2)對于處理用戶密碼這種重要數(shù)據(jù)的網(wǎng)站程序,使用MD5函數(shù)對密碼進行雜湊函數(shù)處理成數(shù)字摘要,這是一種最常用的方法。雖然理論證明MD5算法不是絕對的安全,并且存在可能的“碰撞”,但一個復雜組合的密碼的HASH值還是很難破解的。在ASP的具體應用中,可以考慮在MD5.asp的源代碼中進行僅僅程序員本人才知道的秘密改動,這樣攻擊者知道了密文也很難暴力破解。
3)除了進行異或處理這種簡易的“類對稱”加密算法以外,還可以考慮使用DES算法或3DES等等加密算法進行加密數(shù)據(jù)。除了保護代碼,還可以對關鍵數(shù)據(jù)進行加密以后保存在數(shù)據(jù)庫中,這樣就可以對數(shù)據(jù)庫進行加密了。密鑰必須保存在一個相對比較安全的地方,這樣才能保護好ASP代碼或關鍵數(shù)據(jù)。
4)在ASP程序中暫時還無法使用基于客戶端證書的非對稱加密算法。要想基于客戶端證書進行公鑰加密或簽名,需要在.NET環(huán)境下進行設計。
5 結(jié)束語
ASP還是現(xiàn)階段互聯(lián)網(wǎng)應用較廣泛的網(wǎng)站制作技術之一。隨著ASP技術的推出,給網(wǎng)站的設計者帶來了開發(fā)的便利性及資源的共享性。從保護ASP的代碼及數(shù)據(jù)安全這兩個方面的分析,筆者認為現(xiàn)有的腳本語言還是有一定局限性,并不能把完整的加密簽名等信息安全技術融入其中。該文的介紹及分析僅限對于現(xiàn)有的ASP技術進行討論,更深入的安全方面的討論需要借助.NET平臺。
參考文獻:
[1] 陳卓,阮鷗,沈劍.網(wǎng)絡安全編程與實踐[M].北京:國防工業(yè)出版社,2008.
[2] 加密技術、密鑰和證書.http://www.microsoft.com/china/technet/security/guidance/secmod39.mspx.
[3] base64.http://baike.baidu.com/view/469071.htm?fr=ala0.
[4] asp加密.http://baike.baidu.com/view/25668.htm?fr=ala0.
[5] hash函數(shù).http://baike.baidu.com/view/604021.htm.