關於私鑰加密、公鑰加密、簽名在生活中的場景 -开发者知识库

關於私鑰加密、公鑰加密、簽名在生活中的場景 -开发者知识库,第1张

1. 私鑰加密:也就是對稱加密。這種算法采用同一個密鑰(Key)對數據進行加密和解密,雖然可以通過設置初始化向量(IV),但因為在加密方和解密方中需要共享這兩部分信息,相對而言,它不夠安全。

但一般來說,它也已經足夠安全,而且足夠簡單,尤其是對於加密數據而言。很多硬件設備(例如ATM提款機)都是內置了私鑰加密方法的,據說是DES算法

私鑰加密算法使用單個私鑰來加密和解密數據。由於具有密鑰的任意一方都可以使用該密鑰解密您的數據,或加密他們自己的數據並聲稱該數據源自您,因此必須保護密鑰不被未經授權的代理得到。

私鑰加密又稱為對稱加密,因為同一密鑰既用於加密又用於解密。私鑰加密算法的速度非常快(與公鑰算法相比),它特別適用於對較大的數據流執行加密轉換。從數學角度而言,非對稱加密算法(例如 RSA)在可加密的數據量方面存在限制。對稱加密算法一般則沒有這些問題。

 

私鑰加密的方式速度比較快,但它的密鑰通常需要非對稱的方式來進行保護。

假定小紅和小明是希望在非安全信道上通信的雙方,他們可以按如下方式使用私鑰加密:小紅和小明都同意對特定的密鑰和 IV 應用一種特定的算法(例如 AES)。小紅撰寫一條消息並創建要在其上發送該消息的網絡流。接下來,她使用該密鑰和 IV 加密文本,並通過 Internet 發送該文本。她不能向小明發送密鑰,但可以發送 IV。小明在收到該加密文本后,可使用預先商定的密鑰和 IV 對它進行解密。即使傳輸的內容被人截獲,截獲者也無法恢復原始消息,因為他並不知道密鑰。在這個方案中,密鑰必須保密,但 IV 不需要保密。在一個實際方案中,將由小紅或小明生成私鑰並使用公鑰(不對稱)加密將私鑰(對稱)傳遞給對方

.NET Framework 提供了以下類來實現私鑰加密算法:

  • AesManaged(在 .NET Framework 3.5 版中引入)。

  • DESCryptoServiceProvider。

  • HMACSHA1(從技術上講,這是一種私鑰算法,因為它表示結合使用加密哈希函數和私鑰計算的消息身份驗證代碼。請參見本主題后面的哈希值。)

  • RC2CryptoServiceProvider。

  • RijndaelManaged。

  • TripleDESCryptoServiceProvider

 

2. 公鑰加密:也就是非對稱加密。這種算法采用公鑰和私鑰兩個密鑰,如果利用公鑰進行加密,而用私鑰解密,這種場景屬於數據保護。而如果利用私鑰加密,利用公鑰解密,雖然是行得通的 ,但其實不可能會這樣用,因為任何擁有公鑰的接收方都可以解開數據,而公鑰本來就是公開的,這樣實現不了數據保護的目的。

公鑰加密使用一個必須對未經授權的用戶保密的私鑰和一個可以對任何人公開的公鑰。公鑰和私鑰在數學上是關聯在一起的;用公鑰加密的數據只能用私鑰解密,而用私鑰簽名的數據只能用公鑰驗證。公鑰可以提供給任何人;公鑰用於對要發送到私鑰持有者的數據進行加密。公鑰加密算法又稱為非對稱算法,原因是需要用一個密鑰加密數據,而用另一個密鑰來解密數據。對於每個通信會話,這兩個密鑰應該都是唯一的。不過,盡管非對稱算法具有此項要求,但在實踐中,非對稱密鑰通常卻有較長的生存期。

再來看一個例子

 

雙方(小紅和小明)可以按照下列方式使用公鑰加密: 首先,小紅生成一個公鑰/私鑰對。如果小明想要給小紅發送一條加密的消息,他將向她索要她的公鑰。小紅通過非安全網絡將她的公鑰發送給小明,小明接着使用該密鑰加密消息。小明將加密的消息發送給小紅,而小紅使用她的私鑰解密該消息。如果小明通過非安全信道(例如公共網絡)接收小紅的密鑰,則小明可能會受到“中間人”攻擊。因此,小明必須與小紅驗證他收到的公鑰副本是否正確。

但是,在傳輸小紅的公鑰期間,未經授權的代理可能會截獲該密鑰。而且,同一代理可能截獲來自小明的加密消息。但是,該代理無法用公鑰解密該消息。該消息只能用小紅的私鑰解密,而該私鑰並沒有被傳輸。小紅不使用她的私鑰加密給小明的答復消息,原因是任何具有公鑰的人都可以解密該消息。如果小紅想要將消息發送回小明,她將向小明索要他的公鑰並使用該公鑰加密她的消息。然后,小明使用與他相關聯的私鑰來解密該消息。

在此方案中,小紅和小明使用公鑰(非對稱)加密來傳輸私鑰(對稱),並對其會話的其余部分使用私鑰加密。

.NET Framework 提供了以下類來實現公鑰加密算法:

  • DSACryptoServiceProvider

  • RSACryptoServiceProvider

  • ECDiffieHellman(基類)

  • ECDiffieHellmanCng

  • ECDiffieHellmanCngPublicKey(基類)

  • ECDiffieHellmanKeyDerivationFunction(基類)

  • ECDsaCng

RSA 允許同時進行加密和簽名,但 DSA 只能用於簽名,Diffie-Hellman 只能用於生成密鑰。通常情況下,公鑰算法比私鑰算法具有更多的使用限制。

 

注意:證書從本質上說是一種特殊的公鑰加密手段,特殊之處在於它可以存儲在機器上,並且可以導出文件進行傳遞。

 

3. 數字簽名

公鑰算法還可用於構成數字簽名。數字簽名驗證發送方的身份(如果您信任發送方的公鑰)並幫助保護數據的完整性。使用由小紅生成的公鑰,小紅的數據的接收者可以通過將數字簽名與小紅的數據和小紅的公鑰進行比較來驗證是否是小紅發送了該數據。

為了使用公鑰加密對消息進行數字簽名,小紅首先將哈希算法應用於該消息以創建消息摘要。該消息摘要是數據的緊湊且唯一的表示形式。然后,小紅用她的私鑰加密該消息摘要以創建她的個人簽名。在收到消息和簽名時,小明使用小紅的公鑰解密簽名以恢復消息摘要,並使用與小紅所使用的相同的哈希算法來散列消息。如果小明計算的消息摘要與從小紅那里收到的消息摘要完全一致,小明就可以確定該消息來自私鑰的持有人,並且數據未被修改過。如果小明相信小紅是私鑰的持有人,則他將知道該消息來自小紅。

由於發送方的公鑰為大家所共知,並且它通常包含在數字簽名格式中,因此任何人都可以驗證簽名。此方法不保守消息的機密;若要使消息保密,還必須對消息進行加密。

.NET Framework 提供了以下類來實現數字簽名算法:

  • DSACryptoServiceProvider

  • RSACryptoServiceProvider

  • ECDsa(基類)

  • ECDsaCng

 

4. 哈希

哈希值

哈希算法可將任意長度的二進制值映射為固定長度的較小二進制值,這個小的二進制值就稱為哈希值。哈希值是一段數據的數值表示形式。散列一段純文本時,即使只更改段落中的一個字母,隨后的散列計算都會產生不同的值。如果哈希已進行強加密,其值將發生顯著更改。例如,如果更改了消息的一個位,強哈希函數就可能生成相差 50% 的輸出。很多輸入值可能會散列為相同的輸出值。但是,要找到散列為同一個值的兩個不同的輸入,在計算上是不可行的。

雙方(小紅和小明)可按以下方式使用哈希函數,以確保數據完整性:小紅撰寫要發送給小明的消息,並創建該消息的哈希。隨后,小明可以散列該消息,並將得到的哈希與原始哈希進行比較。如果這兩個哈希值相同,則說明消息未被更改。如若不同,則說明該消息在由小紅撰寫后已被他人更改。為了使此系統發揮作用,小紅必須對除小明外的所有人保密原始的哈希值。此外,也可以公開該哈希值,但條件是沒有人能夠對它進行修改。

.NET Framework 提供了以下類來實現數字簽名算法:

  • HMACSHA1。

  • MACTripleDES。

  • MD5CryptoServiceProvider。

  • RIPEMD160。

  • SHA1Managed。

  • SHA256Managed。

  • SHA384Managed。

  • SHA512Managed。

  • 所有安全哈希算法 (SHA)、消息摘要 5 (MD5) 和 RIPEMD-160 算法的 HMAC 變體。

  • 所有 SHA 算法的 CryptoServiceProvider 實現(托管代碼包裝)。

  • 所有 MD5 和 SHA 算法的下一代加密技術 (CNG) 實現。

注意:

1966 年,人們發現了 MD5 的設計缺陷,並建議改用 SHA-1。2004 年,人們又發現了 MD5 的其他缺陷,因此認為這種算法已不再安全。另外,SHA-1 算法也暴露出不安全的方面,現在已建議改用 SHA-2。

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复