□文/張 天 顏秀銘
(河北聯合大學 河北·唐山)
隨著網絡技術的發展,網絡安全成為當今網絡社會的焦點,我們經常需要一種措施來保護我們的數據,防止被一些懷有不良用心的人看到或者破壞。因此,在客觀上就需要一種強有力的安全措施來保護機密數據不被竊取或篡改。現代的電腦加密技術就是適應了網絡安全的需要而應運產生的,它為進行一般的電子商務活動提供了安全保障,如在網絡中進行文件傳輸、電子郵件往來和進行合同文本的簽署等。其實加密技術也不是什么新生事物,只不過應用在當今電子商務、電腦網絡中還是近幾年的歷史。
數據加密的基本過程就是對原來為明文的文件或數據按某種算法進行處理,使其成為不可讀的一段代碼,通常稱為“密文”,使其只能在輸入相應的密鑰之后才能顯示出本來內容,通過這樣的途徑來達到保護數據不被非法竊取、閱讀的目的。該過程的逆過程為解密,即將該編碼信息轉化為其原來數據的過程。
在傳統上,我們有幾種方法來加密數據流,所有這些方法都可以用軟件很容易地實現。當我們只知道密文的時候,是不容易破譯這些加密算法的。最好的加密算法對系統性能幾乎沒有影響,并且還可以帶來其他內在的優點。例如,大家都知道的pkzip,它既壓縮數據又加密數據。又如,dbms的一些軟件包總是包含一些加密方法以使復制文件功能對一些敏感數據是無效的,或者需要用戶的密碼。所有這些加密算法都要有高效的加密和解密能力。
在所有的加密算法中最簡單的一種就是“置換表”算法,這種算法也能很好地達到加密的需要。每一個數據段(總是一個字節)對應著“置換表”中的一個偏移量,偏移量所對應的值就輸出成為加密后的文件。加密程序和解密程序都需要一個這樣的“置換表”。事實上,80x86 cpu系列就有一個指令“xlat”在硬件級來完成這樣的工作。這種加密算法比較簡單,加密解密速度都很快,但是一旦這個“置換表”被對方獲得,那這個加密方案就完全被識破了。更進一步講,這種加密算法對于黑客破譯來講是相當直接的,只要找到一個“置換表”就可以了。這種方法在計算機出現之前就已經被廣泛的使用。
對這種“置換表”方式的一個改進就是使用2個或者更多的“置換表”,這些表都是基于數據流中字節的位置的,或者基于數據流本身。這時,破譯變得更加困難,因為黑客必須正確地做幾次變換。通過使用更多的“置換表”,并且按偽隨機的方式使用每個表,這種改進的加密方法已經變得很難破譯。比如,我們可以對所有的偶數位置的數據使用a表,對所有的奇數位置的數據使用b表,即使黑客獲得了明文和密文,他想破譯這個加密方案也是非常困難的,除非黑客確切的知道用了兩張表。
與使用“置換表”相類似,“變換數據位置”也在計算機加密中使用。但是,這需要更多的執行時間。從輸入中讀入明文放到一個buffer中,再在buffer中對他們重排序,然后按這個順序再輸出。解密程序按相反的順序還原數據。這種方法總是和一些別的加密算法混合使用,這就使得破譯變得特別困難,幾乎有些不可能了。例如,有這樣一個詞,變換字母的順序后,slient可以變為listen,所有的字母都沒有變化,沒有增加也沒有減少,只是字母之間的順序變化了。
還有一種更好的加密算法,只有計算機可以做,就是字/字節循環移位和xor操作。如果我們把一個字或字節在一個數據流內做循環移位,使用多個或變化的方向(左移或右移),就可以迅速產生一個加密的數據流。這種方法是很好的,破譯它就更加困難!而且,更進一步是,如果再使用xor操作,按位做異或操作,就使得破譯密碼更加困難了。如果使用偽隨機的方法,要產生一系列的數字,我們可以使用fibbonaci數列得到一個結果,然后循環移位這個結果的次數,將使破譯此密碼變的幾乎不可能!但是,使用fibbonaci數列這種偽隨機的方式所產生的密碼對我們的解密程序來講是非常容易的。
在一些情況下,我們想能夠知道數據是否已經被篡改了或被破壞了,這時就需要產生一些校驗碼,并且把這些校驗碼插入到數據流中。這樣做對數據的防偽與程序本身都是有好處的。但是感染計算機程序的病毒不會在意這些數據或程序是否加過密,是否有數字簽名,所以加密程序在每次下載到內存要開始執行時,都要檢查一下本身是否被病毒感染,對于需要加、解密的文件都要做這種檢查。很自然,這樣一種方法體制應該保密,因為病毒程序的編寫者將會利用這些來破壞別人的程序或數據。因此,在一些反病毒或殺病毒軟件中一定要使用加密技術。
循環冗余校驗是一種典型的校驗數據的方法。對于每一個數據塊,它使用位循環移位和xor操作來產生一個16位或32位的校驗和,這使得丟失一位或兩個位的錯誤一定會導致校驗和出錯。這種方式很久以來就應用于文件的傳輸,例如xmodem-crc。這種方法已經成為標準,而且有詳細的文檔。但是,基于標準crc算法的一種修改算法對于發現加密數據塊中的錯誤和文件是否被病毒感染是很有效的。
一個好的加密算法的重要特點之一是具有這種能力:可以指定一個密碼或密鑰,并用它來加密明文,不同的密碼或密鑰產生不同的密文。加密算法分為兩種方式:對稱密鑰算法和非對稱密鑰算法。所謂對稱密鑰算法就是加密解密都使用相同的密鑰,非對稱密鑰算法是加密解密使用不同的密鑰。非常著名的pgp公鑰加密以及rsa加密方法都是非對稱加密算法。加密密鑰(即公鑰)與解密密鑰(即私鑰)是非常不同的。從數學理論上講,幾乎沒有真正不可逆的算法存在。例如,對于一個輸入‘a’執行一個操作得到結果‘b’,那么我們可以基于‘b’,做一個相對應的操作,導出輸入‘a’。在一些情況下,對于每一種操作,我們可以得到一個確定的值,或者該操作沒有定義(比如,除數為0)。對于一個沒有定義的操作來講,基于加密算法,可以成功地防止把一個公鑰變換成為私鑰。因此,要想破譯非對稱加密算法,找到那個唯一的密鑰,唯一的方法只能是反復的試驗,而這需要大量的處理時間。rsa加密算法使用了兩個非常大的素數來產生公鑰和私鑰。即使從一個公鑰中通過因數分解可以得到私鑰,但這個運算所包含的計算量是非常巨大的,以至于在現實上是不可行的。加密算法本身也是很慢的,這使得使用rsa算法加密大量的數據變得有些不可行。這就使得一些現實中加密算法都基于rsa加密算法。pgp算法(以及大多數基于rsa算法的加密方法)使用公鑰來加密一個對稱加密算法的密鑰,然后再利用一個快速的對稱加密算法來加密數據。這個對稱算法的密鑰是隨機產生的,是保密的,因此得到這個密鑰的唯一方法就是使用私鑰來解密。
現在又出現了一種新的加密算法,據說是幾乎不可能被破譯的。這個算法在1998年6月1日才正式公布。簡單地說,這種算法就是使用一系列的數字(比如說128位密鑰),產生一個可重復的但高度隨機化的偽隨機數字序列。一次使用256個表項,使用隨機數序列來產生密碼轉表,把256個隨機數放在一個矩陣中,然后對他們進行排序,使用這樣一種方式(我們要記住最初的位置)來產生一個隨意排序的表,表中的數字在0~255之間。下面提供了一些原碼使我們明白是如何來做的。假如產生了一個具體的256字節表,讓隨機數產生器接著產生這個表中其余的數,以至于每個表是不同的;下一步,就是產生解碼表,表的順序是隨機的,產生這256個字節的隨機數使用的是二次偽隨機,使用了兩個額外的16位密碼。現在,已經有了兩張轉換表,基本的加密解密就是這樣的。
(一)在電子商務方面的應用。電子商務要求顧客可以在網上進行各種商務活動,不必擔心自己的信用卡會被人盜用。在過去,用戶為了防止信用卡的號碼被竊取到,一般是通過電話訂貨,然后使用用戶的信用卡進行付款。現在人們開始用RSA(一種公開/私有密鑰)的加密技術,提高信用卡交易的安全性,從而使電子商務走向實用成為可能。
許多人都知道NETSCAPE公司是Internet商業中領先技術的提供者,該公司提供了一種基于RSA和保密密鑰的應用于因特網的技術,被稱為安全插座層(SSL)。也許很多人知道Socket,它是一個編程界面,并不提供任何安全措施,而SSL不但提供編程界面,而且向上提供一種安全的服務,SSL3.0現在已經應用到了服務器和瀏覽器上,SSL2.0則只能應用于服務器端。SSL3.0用一種電子證書來實行身份進行驗證后,雙方就可以用保密密鑰進行安全的會話了。它同時使用“對稱”和“非對稱”加密方法,在客戶與電子商務的服務器進行溝通的過程中,客戶會產生一個Session Key,然后客戶用服務器端的公鑰將Session Key進行加密,再傳給服務器端,在雙方都知道Session Key后,傳輸的數據都是以Session Key進行加密與解密的,但服務器端發給用戶的公鑰必需先向有關發證機關申請,以得到公證。基于SSL3.0提供的安全保障,用戶就可以自由訂購商品并且給出信用卡號了,也可以在網上和合作伙伴交流商業信息并且讓供應商把訂單和收貨單從網上發過來,這樣可以節省大量的紙張,為公司節省大量的電話、傳真費用。
(二)加密技術在VPN中的應用。現在,越來越多的公司走向國際化,一個公司可能在多個國家都有辦事機構或銷售中心,每一個機構都有自己的局域網LAN,但在當今網絡社會,用戶希望將這些LAN聯結在一起組成一個公司的廣域網,這就是通常所說的虛擬專用網(VPN)。當數據離開發送者所在的局域網時,該數據首先被用戶湍連接到互聯網上的路由器進行硬件加密,數據在互聯網上是以加密的形式傳送的,當達到目的LAN的路由器時,該路由器就會對數據進行解密,這樣目的LAN中的用戶就可以看到真正的信息了。
[1] 郭麗.關于網絡安全之數據加密技術[J].安徽電子信息職業技術學院學報,2008.1.
[2] 房玉勇.談計算機數據加密概念及方法[J].科技信息,2011.3.
[3] 王淑鳳.初探加密技術概念、加密方法以及應用[J].科技資訊,2007.3.