加密編程方法概述

馬若望

http://kodefun.blog.51cto.com

http://blog.sina.com.cn/kodefun

1. 加密的用途和必要性

電子形態的信息易於被竊取和篡改。對一份電子文檔的拷貝、修改並不會留下物理上的痕跡,也不能通過筆跡之類的手段看出誰編輯過它。泄漏的賬戶數據庫、照片、視頻、文檔和電子郵件給人們造成了不同程度的麻煩和困擾。可信賴的信息系統必須具備保護信息不被非法獲取或者篡改的能力。我們所使用的計算機終端、服務器和網絡在不同程度上是開放的,這使得僅通過物理手段或者程序控制邏輯無法保障信息的安全。加密可以使得在開放環境中存儲和傳輸的電子信息具備保密、防篡改的能力,這使得加密成爲當前保護電子信息安全的存儲和傳輸的關鍵機制。對於電子商務等依賴於信息的保密和防篡改能力的應用系統,加密是必須的信息處理環節。

2. 算法和密鑰

加密算法和密鑰一起完成信息明文與密文之間的轉換。加密技術在古代就被用來保護軍事情報,通過加密防止信使在戰場上被敵方捕獲時泄漏所攜帶的情報。在很長的時期裏,加密和解密都依賴於手工,對密碼的破譯則是一種類似於猜字謎的智力遊戲。20世紀20年代以來,加密進入了機械化時代,第二次世界大戰中,交戰各方都大量使用了機械與電子結合的密碼機。在這種情形下,對密碼的破譯也相應採用了機械化手段。二戰中的分析活動最後形成了密碼學嚴謹的信息論與數學理論基礎,一些公開的密碼理論研究成果在二戰末期發表。密碼分析和設計理論的進步使得非正式的加密算法在現代正規密碼分析手段面前不堪一擊。以DES、RSA等算法爲代表的工業加密標準算法的發佈和推廣爲數據加密技術的廣泛應用建立了堅實的基礎。民用領域最先大規模應用現代標準密碼技術是在金融領域,早在1980年代,金融機構就開始建立與使用電子轉賬系統。現代密碼技術加密的防護能力在電子金融中通過了***者的考驗。今天標準密碼技術的加密能力可以使得一份電子文檔具備超越金庫和保險櫃的保密性。具有比紙質文件上的簽名更難以僞造的可驗證性。數十年的應用,使得工業標準加密算法的安全性得到全球範圍的證實,在應用中暴露出的算法實現和密鑰管理等過程中的薄弱環節也得到了相應的增強,形成了一套行之有效的防範措施。這一切,使得人們在開放的Internet網絡上建立信任成爲可能,正確的實現相關加密技術成爲網銀、網購等電子商務活動的前提條件之一。

3. 加密的安全目標和基本過程

加密實現的基本安全目標有機密性、完整性和可認證性(數字簽名)等。

3.1. 機密性

發送者想要在一個不安全的開放信道(如Internet)上發送信息給接收者。發送者對可理解的信息(稱爲明文)進行處理,將其變換成不可理解的亂碼(稱爲密文),使得非授權者難以從信道上直接獲得的密文中獲取信息,這個處理過程稱爲加密。解密者使用加密的逆過程從密文獲取明文,這個過程稱爲解密(也稱脫密)。

解密用的算法稱爲解密算法,密鑰稱爲解密密鑰。相應的算法稱爲加密算法,密鑰稱爲加密密鑰。採用相同的密鑰加密和解密的算法稱爲對稱算法(體制),採用不同的密鑰加密和解密的算法稱爲非對稱算法(體制)。非對稱算法加密的密鑰可以公開,解密的密鑰則只有密鑰對的所有者擁有,適宜於開放系統的安全需要。非對稱密碼算法一般比較慢,所以一般結合對稱算法使用。使用非對稱算法保護對稱的信息加密密鑰,然後使用受保護的對稱密鑰以對稱算法加密大量的用戶信息,這稱爲混合加密體制(如圖X所示)。

公開的對稱加密算法標準有DES、AES等。公開的非對稱算法標準有RSA、ECC等。

3.2. 完整性/鑑別

從信息中不可逆的生成一個唯一的定長特徵值的過程,稱爲散列。在用戶身份鑑別過程中,一般使用傳輸散列值的方式防止口令在信道上被截獲。數字簽名時,常常採用對信息的散列值簽名的方法提高簽名速度和安全性。網絡下載文件時,經常使用散列值校驗下載內容的正確性。常用的散列算法有MD5、SHA-1、SHA-256等等。

3.3. 數字簽名

簽名者將信息變換稱爲一種可驗證的證據的過程,稱爲簽名。簽名所使用的算法稱爲簽名算法,密鑰稱爲簽名密鑰。一個實體(個人或者組織)的簽名密鑰一般是私有的,這樣只有簽名者能夠產生自己對信息的簽名值。對信息的簽名進行檢驗的過程,稱爲驗證。驗證所使用的算法稱爲驗證算法,密鑰稱爲驗證密鑰。驗證密鑰一般是公開的,且與簽名密鑰一一對應,這樣,其他人能夠方便的驗證信息的簽名值的有效性,從而確認信息是否來自特定的實體,並確知其未被篡改。根據各國的電子簽名法令,這種簽名信息是具備法律效力的。

非對稱算法簽名和驗證的運算量很大,速度較慢。爲了提高處理效率,實際應用中一般先計算需要簽名的信息的散列,然後對定長的散列值計算簽名值。

3.4. 加密信息交換的規範

爲了使得不同的設備之間能夠正確的交換和解析加密的信息,業界形成了幾種應用較廣泛的加密相關的規範的標準,常用的有PKCS系列規範、Xml加密規範。

4. 系統內置的加密應用

Windows操作系統內置有加密文件系統(EFS),應用程序簽名機制。IE、Chrome、Firefox等瀏覽器均支持加密的https方式。這些應用均基於混合加密體制,使用數字證書中的密鑰加密保護信息。

5. 加密功能應用編程接口(API)

作爲建立安全應用系統的基礎支撐構件之一,在Windows、Linux、Android、iOS等操作系統環境中,都內置了標準加密算法及規範的實現,提供了加密API接口供應用程序使用。PKCS系列規範是加密信息交換的工業標準,各種操作系統的加密API均在不同程度上支持PKCS規範。幾種常見操作系統和開發技術提供的加密API有:CSP、CNG、.NET加密API、Java加密API、OpenSSL等。

5.1. CryptoAPI

CryptoAPI是Windows SDK平臺應用編程接口(Platform API)的一部分,是系統提供的原生Win32加密接口。CryptoAPI使用CSP所提供的加密/數字簽名等密碼服務。CSP是Windows平臺下實現加密算法的標準接口,符合CSP規範的加密算法實現模塊註冊到Windows系統之後,應用程序即可通過CryptAPI函數調用CSP中所實現的算法完成應用數據的加解密。Windows系統中內置的CSP實現了常用的各種加密算法,這些算法實現的正確性經過了NSA的認證。Windows 2000、XP、2003、Vista、7、8均支持CryptAPI。

5.2. CNG

CNG是微軟自Windows Vista以來引入的新一代加密編程接口,長期計劃是替換掉CryptoAPI。CNG的設計具有多個層次和可擴展性。CNG包括如下新的特性:一個新的密碼配置系統,支持更好的密碼敏捷性,更細粒度抽象的密鑰存儲(從算法操作中分離存儲)。對長生命期的密鑰的操作進行隔離,可替換的隨機數發生器(RNG),減少了導出簽名的限制,線程安全性,提供內核模式的密碼API。此外,CNG還包括支持Suite B算法,支持橢圓曲線密碼(ECC)。CNG通過了美國聯邦信息處理標準(FIPS)140-2級別2認證。NSA允許經過認證的Suite B實現用來保護美國政府和軍方的機密(Top Secret)和祕密(Secret )及其以下級別(如過去被描述爲敏感而非密Sensitive-But-Unclassified)的信息。

CNG也是平臺原生的Win32 API的一部分,支持CNG的Windows版本有Vista及其以後的Windows 7、Windows 2008、Windows 8等較新的Windows。

5.3. .NET

.NET的System.Security.Cryptography 命名空間中的類提供了CryptoAPI所支持的全部密碼算法和密鑰操作功能,這些類有些是CrytoAPI的託管封裝,有些是算法的純託管代碼實現。3.5版本以後的.NET支持Suite B和CNG所包含的加密功能。

5.4. Java

Java平臺的javax.crypto包中的類提供了加密相關的API。Java的加密體系有着與CryptoAPI的CSP類似的提供者機制,加密運算可以是軟件的,也可以在智能卡、硬件加密加速卡等硬件上實現。Java平臺內置了最常用各種加密算法的實現,包括 RSA、DSA和ECDSA 非對稱算法, DES、AES和 ARCFOUR 對稱加密算法, MD5、SHA-1,、SHA-256散列算法,Diffie-Hellman 和密鑰協商算法

5.5. OpenSSL

OpenSSL是一個開源的加密軟件庫,它不僅僅實現了SSL協議,而且提供了各種的常見標準算法、數字證書處理等加密的實現,是一個完整的加密軟件包。Openssl在Linux和Windows下均能夠正常編譯運行,很多開源應用程序採用openssl支持加密的通信,如wget等。Openssl含有硬件加密引擎機制,可以方便的使用各種硬件加密模塊。

6. 硬件加密模塊

對於服務器性能和客戶端安全性有較高要求的應用,如網銀、電子商務等,需要用到硬件加密模塊。服務器端主要是密碼加速卡,客戶端有智能卡、USBKey等。這些硬件加密模塊一般會提供驅動,使得應用軟件可以通過CSP、openssl等通用編程接口使用它們。

6.1. 密碼加速卡

加密是計算密集型操作,對於併發數較多的服務器,使用軟件實現的加密將顯著降低服務器吞吐量。密碼加速卡使用硬件實現安全連接所需的算法,硬件隨機數發生器用於快速生成高質量的密鑰,能有效提高ssl、IPSec等安全連接的併發速度。

6.2. USBKey、智能卡

由於計算機病毒、***、盜版軟件等因素,Internet上的客戶端計算機的安全狀況較差,存儲在本機硬盤上的文件證書中的私鑰面臨的安全風險較大。爲了網銀、企業計算環境等應用的安全性,用戶可以使用USBKey或者智能卡等硬件保證交易信息的安全性。USBKey及智能卡均內置有算法的實現和硬件隨機數發生器,無私鑰輸出接口,從而保證了私鑰的安全性。有些USBKey還採用指紋、硬件pin按鍵等方式增強了使用安全性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章