.NET框架中的數(shù)據(jù)加密技術
.Net框架目前已經(jīng)成為Windows環(huán)境下的重要開發(fā)工具,那么針對.NET框架中的數(shù)據(jù)加密,我們該采用什么方法呢?我們即可以采用非托管Microsoft _CryptoAPI,也可以采用純粹的托管實現(xiàn)。雖然這些類的屬性很多。但是我們創(chuàng)建一個加密算法類的新實例時,大多數(shù)情況下可以采用默認屬性。
一、數(shù)據(jù)加密技術概述
數(shù)據(jù)加密主要防止數(shù)據(jù)被非法查看或修改,并且可以把不安全的信道改造成安全的通訊信道。
例如,可以使用加密算法對數(shù)據(jù)進行加密,在加密狀態(tài)下傳輸數(shù)據(jù),然后由預定的接收方對數(shù)據(jù)進行解密。如果第三方截獲了加密的數(shù)據(jù),將難以解密該數(shù)據(jù)。
加密主要解決一下幾個問題:
1、保密性:
防止用戶的標識或數(shù)據(jù)被讀取。
2、數(shù)據(jù)完整性:
防止數(shù)據(jù)被更改。
3、身份驗證:
確保數(shù)據(jù)發(fā)自特定的一方。
為了實現(xiàn)上述的要求,我們可以采用以下加密方法。
二、對稱加密算法
對稱加密算法使用單個私鑰來加密和解密數(shù)據(jù)。由于具有密鑰的任意一方都可以使用該密鑰解密數(shù)據(jù),因此必須保護密鑰不被未經(jīng)授權的人非法得到。對稱加密也稱為私鑰加密。原因是同一密鑰既用于加密又用于解密。對稱加密算法非常快(與公鑰算法相比)并特別適合于對大型數(shù)據(jù)流執(zhí)行加密轉換。
一般情況下,對稱加密法用于一次加密一個數(shù)據(jù)塊。塊密碼(如RC2、DES、Tricpple DES和Rijndael)通過加密將n字節(jié)的輸入塊轉換為加密字節(jié)的輸出塊。如果要加密或解密字節(jié)序列,必須逐塊進行。由于n的大小很小(對于RC2、DES、Tricpple DES,n=8字節(jié);n=16[默認值];n=24;對于Rijndael,n=32),因此必須對大于n字節(jié)的值分成一個個小塊,一次加密一個塊。
.NET框架的基類庫中提供的塊密碼類使用稱作密碼塊鏈(CBC)的鏈模式,它使用一個密鑰和一個初始化向量(IV)對數(shù)據(jù)執(zhí)行加密轉換。對于給定的私鑰k,不使用初始化向量的簡單塊密碼將把相同的明文輸入塊加密為同樣的密文輸出塊。如果在明文流內(nèi)有重復的塊,那么在密文流內(nèi)也會有重復的塊。如果未經(jīng)授權的用戶知道有關明文塊的結構的所有信息,就可以使 用該信息解密已知的密文塊并有可能獲得密鑰。為了解決這個問題,我們可將上一個塊中的信息混合到加密下一個塊的過程中。這樣,兩個相同的明文塊的輸出就會不同。由于該技術使用上一個塊加密下一個塊,因此,使用了一個IV來加密數(shù)據(jù)的第一個塊。使用該系統(tǒng),未經(jīng)授權的用戶有可能知道的公共消息標頭將無法用于對密鑰進行反向工程。
破解這樣的加密數(shù)據(jù),最常用的方法是對每個可能的密鑰執(zhí)行窮舉搜索。根據(jù)用于執(zhí)行加密的密鑰大小,即使使用最快的計算機執(zhí)行這種搜索,也極其耗時,因此難以實施。使用較大的密鑰大小將使解密更加困難。雖然從理論上說加密不會使對手無法檢索加密的數(shù)據(jù),但它確實極大增加了這樣做的成本。如果執(zhí)行徹底搜索來檢索只在幾天內(nèi)有意義的數(shù)據(jù),需要花費幾個月的時間,那么窮舉搜索的方法是沒有意義的。
對稱私鑰加密的缺點是它假定雙方已就密鑰和IV取得了一致,并且互相傳達了密鑰和IV的值。并且,密鑰必須對未經(jīng)授權的用戶保密。由于這些問題,對稱加密通常與公鑰加密一起使用以秘密地傳達密鑰和IV的值。
.NET框架提供以下實現(xiàn)私鑰加密算法的類:
DESCrypto ?Service Provider
RC2Crypto Service ?Provider
Rijndael Managed
Triple DESCrypto ServiceProvider
分別對應于DES、RC2、Rijndael 和Triple?DES加密算法。
三、公鑰加密
公鑰加密使用一個必須對未經(jīng)授權的用戶保密的私鑰和一個可以對任何人公開的公鑰。公鑰和私鑰都在數(shù)學上相關聯(lián);用公鑰加密的數(shù)據(jù)只能用私鑰解密,而用私鑰加密的數(shù)據(jù)只能用公鑰解密。公鑰可以被任何人使用;該密鑰用于加密要發(fā)送到私鑰持有者的數(shù)據(jù)。兩個密鑰對于通訊會話都是唯一的。公鑰加密算法也稱為不對稱算法,原因是需要用一個密鑰加密數(shù)據(jù)而需要用另一個密鑰來解密數(shù)據(jù)。
公鑰加密算法使用固定的緩沖區(qū)大小,而私鑰加密算法使用可變長度的緩沖區(qū)。公鑰算法無法像私鑰算法那樣將數(shù)據(jù)鏈接在一起而成為流,原因是只可以加密少量數(shù)據(jù)。因此,不對稱操作不使用與對稱操作相同的流模型。
公鑰加密具有更大的密鑰空間(或密鑰的可能值范圍),因此不大容易受到對每個可能密鑰都進行嘗試的窮舉攻擊的影響。由于不必保護公鑰,因此它易于分發(fā)。公鑰算法可用于創(chuàng)建數(shù)字簽名以驗證數(shù)據(jù)發(fā)送方的標識。但是,公鑰算法非常緩慢(與私鑰算法相比),而且不是為加密大量數(shù)據(jù)而設計的。公鑰算法僅對傳輸很少量的數(shù)據(jù)有用。通常,公鑰加密用于加密私鑰算法要使用的密鑰和IV。傳輸密鑰和IV后,私鑰加密將用于該會話的其余部分。
.NET框架提供以下實現(xiàn)公鑰加密算法的類:
DSACrypto _Service _Provider
RSACrypto _Service _Provider
分別實現(xiàn)DSA、RSA加密算法。
四、數(shù)字簽名
公鑰算法還可用于構成數(shù)字簽名。數(shù)字簽名驗證 發(fā)送方的標識,并保護數(shù)據(jù)的完整性。
.NET框架提供以下實現(xiàn)數(shù)字簽名算法的類:
DSACrypto _Service _Provider
RSACrypto _Service _Provider
五、HASH值
HASH算法將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值稱為HASH值。HASH值是一段數(shù)據(jù)唯一且極其緊湊的數(shù)值表示形式。如果散列一段明文而且哪怕只更改該段落的一個字母,隨后的HASH都將產(chǎn)生不同的值。要找到散列為同一個值的兩個不同的輸人,在計算上是不可能的。
消息身份驗證代碼(MAC)HASH函數(shù)通常與數(shù)字 簽名一起用于對數(shù)據(jù)進行簽名,而消息檢測代碼(MDC)HASH函數(shù)則用于數(shù)據(jù)完整性。
.NET框架提供以下實現(xiàn)數(shù)字簽名算法的類:
HMAC SHA1
MACriple _DES
MD5 _Crypto _Service _Provider
SHA1 Managed
SHA256Managed
SHA384Managed
SHA512Managed
六、隨機數(shù)生成
隨機數(shù)生成是許多加密操作不可分割的組成部分。 例如,加密密鑰需要盡可能地隨機,以便使它們很難被復制。加密隨機數(shù)生成器必須生成在計算上無法進行推算(低于P<.05的概率)的輸出;即,任何推算下一個輸出位的方法不得具有比隨機猜測更高的成功幾率。.NET框架中的類使用隨機數(shù)生成器生成加密密鑰。
RNGCrypto _Service _Provider是隨機數(shù)生成器算法的實現(xiàn)。
以上就是.NET框架中支持的加密算法的種類和定義的類,通過以上的加密類我們可以完成大多數(shù)數(shù)據(jù)加密過程,在電子商務中很好的解決數(shù)據(jù)的安全問題。
小知識之.NET
.NET 是 Microsoft XML Web services 平臺。XML Web services 允許應用程序通過 Internet 進行通訊和共享數(shù)據(jù),而不管所采用的是哪種操作系統(tǒng)、設備或編程語言。Microsoft .NET 平臺提供創(chuàng)建 XML Web services 并將這些服務集成在一起之所需。對個人用戶的好處是無縫的、吸引人的體驗。








