非對稱加密算法

非對稱加密算法

密鑰的保密方法
非對稱加密算法是一種密鑰的保密方法。[1]非對稱加密算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,隻有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。 非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰并将公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密後再發送給甲方;甲方再用自己私鑰對加密後的信息進行解密。甲方想要回複乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。另一方面,甲方可以使用自己的私鑰對機密信息進行簽名後再發送給乙方;乙方再用甲方的公鑰對甲方發送回來的數據進行驗簽。甲方隻能用其私鑰解密由其公鑰加密後的任何信息。 非對稱加密算法的保密性比較好,它消除了最終用戶交換密鑰的需要。非對稱密碼體制的特點:算法強度複雜、安全性依賴于算法與密鑰但是由于其算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。對稱密碼體制中隻有一種密鑰,并且是非公開的,如果要解密就得讓對方知道密鑰。所以保證其安全性就是保證密鑰的安全,而非對稱密鑰體制有兩種密鑰,其中一個是公開的,這樣就可以不需要像對稱密碼那樣傳輸對方的密鑰了。這樣安全性就大了很多。
  • 中文名:非對稱加密算法
  • 外文名:
  • 所屬學科:
  • 英文名:asymmetric cryptographic algorithm
  • 其他外文名:公開密鑰加密算法
  • 需要密鑰:公開密鑰、私有密鑰

起源

W.Diffie和M.Hellman 1976年在IEEE Trans.on Information刊物上發表了“ New Direction in Cryptography”文章,提出了“非對稱密碼體制即公開密鑰密碼體制”的概念,開創了密碼學研究的新方向

工作原理

1.A要向B發送信息,A和B都要産生一對用于加密和解密的公鑰和私鑰。

2.A的私鑰保密,A的公鑰告訴B;B的私鑰保密,B的公鑰告訴A。

3.A要給B發送信息時,A用B的公鑰加密信息,因為A知道B的公鑰。

4.A将這個消息發給B(已經用B的公鑰加密消息)。

5.B收到這個消息後,B用自己的私鑰解密A的消息。其他所有收到這個報文的人都無法解密,因為隻有B才有B的私鑰。

主要應用

非對稱加密(公鑰加密):指加密和解密使用不同密鑰的加密算法,也稱為公私鑰加密。假設兩個用戶要加密交換數據,雙方交換公鑰,使用時一方用對方的公鑰加密,另一方即可用自己的私鑰解密。如果企業中有n個用戶,企業需要生成n對密鑰,并分發n個公鑰。假設A用B的公鑰加密消息,用A的私鑰簽名,B接到消息後,首先用A的公鑰驗證簽名,确認後用自己的私鑰解密消息。由于公鑰是可以公開的,用戶隻要保管好自己的私鑰即可,因此加密密鑰的分發将變得 十分簡單。同時,由于每個用戶的私鑰是唯一的,其他用戶除了可以通過信息發送者的公鑰來驗證信息的來源是否真實,還可以通過數字簽名确保發送者無法否認曾發送過該信息。非對稱加密的缺點是加解密速度要遠遠慢于對稱加密,在某些極端情況下,甚至能比對稱加密慢上1000倍。

DSACryptoServiceProviderRSACryptoServiceProvider

//加密

UnicodeEncoding encoding = new UnicodeEncoding();

byte[] PasswordBytes = encoding.GetBytes(password);//将密碼轉換為字節數組RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//RSA加密算法,非對稱PasswordBytes=crypt.Encrypt(password ,false);//加密字節數組,這是加密後的密碼值,放入數據庫中的表字段中。

string key=crypt.ToXmlString(true);//輸出密鑰為XML格式的字符串,且包含私鑰,這個字符串要作為數據庫表中的一個字段同用戶的密碼放在一起。

//解密

RSACryptoServiceProvider crypt=new RSACryptoServiceProvider();//已随機生成了一個密鑰對

crypt.Clear();//毀掉當前密鑰對

crypt.FromXmlString(key)//輸入密鑰對,key是從數據庫表字段中讀取的那個XML格式的字符串,即密鑰字段PasswordBytes=crypt.Decrypt(password ,false);//解密字節數組,返回原始密碼給用戶

上面方法的一個特點是每個用戶對應一個密鑰對(包含公鑰和私鑰),它們都是随機生成的,所以各不相同。不過缺點也是很明顯的,就是密鑰存儲在數據庫中,如果數據庫被攻破密鑰就洩漏了。

還有另外一個方法就是依照上面方法随機生成一個密鑰對(包含公鑰和私鑰),通過ToXmlString(true)方法導出,然後把這個XML字符串格式的密鑰放到你的Web程序的Web.config文件的AppSetting節點裡面,然後通過FromXmlString(key)方法讀入密鑰,這樣就意味着所有的用戶密碼都用同一個密鑰對加密和解密。

主要功能

非對稱加密體系不要求通信雙方事先傳遞密鑰或有任何約定就能完成保密通信,并且密鑰管理方便,可實現防止假冒和抵賴,因此,更适合網絡通信中的保密通信要求。

主要算法

RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。

使用最廣泛的是RSA算法,Elgamal是另一種常用的非對稱加密算法。

Elgamal由Taher Elgamal于1985年發明,其基礎是DiffieˉHellman密鑰交換算法,後者使通信雙方能通過公開通信來推導出隻有他們知道的秘密密鑰值[DiffieˉHellman]。DiffieˉHellman是Whitfield Diffie和Martin Hellman于1976年發明的,被視為第一種 非對稱加密算法,DiffieˉHellman 與RSA的不同之處在于,DiffieˉHellman不是加密算法,它隻是生成可用作對稱密鑰的秘密數值。在DiffieˉHellman密鑰交換過程中,發送方和接收方分别生成一個秘密的随機數,并根據随機數推導出公開值,然後,雙方再交換公開值。DiffieˉHellman算法的基礎是具備生成共享密鑰的能力。隻要交換了公開值,雙方就能使用自己的私有數和對方的公開值來生成對稱密鑰,稱為共享密鑰,對雙方來說,該對稱密鑰是相同的,可以用于使用對稱加密算法加密數據。

與RSA相比,DiffieˉHellman的優勢之一是每次交換密鑰時都使用一組新值,而使用RSA算法時,如果攻擊者獲得了私鑰,那麼他不僅能解密之前截獲的消息,還能解密之後的所有消息。然而,RSA可以通過認證(如使用X.509數字證書)來防止中間人攻擊,但Diff ieˉHellman在應對中間人攻擊時非常脆弱。

算法區别

非對稱加密算法與對稱加密算法的區别  

首先,用于消息解密的密鑰值與用于消息加密的密鑰值不同;

其次,非對稱加密算法比對稱加密算法慢數千倍,但在保護通信安全方面,非對稱加密算法卻具有對稱密碼難以企及的優勢。

為說明這種優勢,使用對稱加密算法的例子來強調:

Alice使用密鑰K加密消息并将其發送給Bob,Bob收到加密的消息後,使用密鑰K對其解密以恢複原始消息。這裡存在一個問題,即Alice如何将用于加密消息的密鑰值發送給 Bob?答案是,Alice發送密鑰值給Bob時必須通過獨立的安全通信信道(即沒人能監聽到該信道中的通信)。

這種使用獨立安全信道來交換對稱加密算法密鑰的需求會帶來更多問題:

首先,有獨立的安全信道,但是安全信道的帶寬有限,不能直接用它發送原始消息。

其次,Alice和Bob不能确定他們的密鑰值可以保持多久而不洩露(即不被其他人知道)以及何時交換新的密鑰值

當然,這些問題不隻Alice會遇到,Bob和其他每個人都會遇到,他們都需要交換密鑰并處理這些密鑰管理問題(事實上,X9.17是一項DES密鑰管理ANSI标準[ANSIX9.17])。如果Alice要給數百人發送消息,那麼事情将更麻煩,她必須使用不同的密鑰值來加密每條消息。例如,要給200個人發送通知,Alice需要加密消息200次,對每個接收方加密一次消息。顯然,在這種情況下,使用對稱加密算法來進行安全通信的開銷相當大。

非對稱加密算法的主要優勢就是使用兩個而不是一個密鑰值:一個密鑰值用來加密消息,另一個密鑰值用來解密消息。這兩個密鑰值在同一個過程中生成,稱為密鑰對。用來加密消息的密鑰稱為公鑰,用來解密消息的密鑰稱為私鑰。用公鑰加密的消息隻能用與之對應的私鑰來解密,私鑰除了持有者外無人知道,而公鑰卻可通過非安全管道來發送或在目錄中發布。

Alice需要通過電子郵件給Bob發送一個機密文檔。首先,Bob使用電子郵件将自己的公鑰發送給Alice。然後Alice用Bob的公鑰對文檔加密并通過電子郵件将加密消息發送給Bob。由于任何用Bob 的公鑰加密的消息隻能用Bob的私鑰解密,因此即使窺探者知道Bob的公鑰,消息也仍是安全的。Bob在收到加密消息後,用自己的私鑰進行解密從而恢複原始文檔。

相關詞條

相關搜索

其它詞條