非對稱加密算法

非對稱加密算法

非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

基本信息

起源

非對稱加密算法(asymmetric cryptographic algorithm)又名“公開密鑰加密算法”,非對稱加密算法需要兩

非對稱加密算法非對稱加密算法
個密鑰:公開密鑰publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法

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

作用

非對稱加密算法非對稱加密算法

構想你的朋友需要傳送一些非常重要、非常機密的信息給你,而你跟外界的每一條通路都被監聽了。那還不簡單,你的朋友用DES對信息加密後傳送給你不就行了,沒有密鑰,就算被人監聽,他也不知道什麼意思呀。可是問題在於你也需要密鑰才能查看這些信息!你必須要知道你的朋友給信息加密的密鑰才能完成對信息的接收!而你的朋友是沒有一種安全的方法傳遞密鑰給你的。如果說經常跟你通信的朋友還可以事先跟你約定好密鑰,那么Internet上那么多人和機構是沒有辦法跟你事先就約定好的。公開密鑰系統(也就是非對稱加密系統)的作用就在於,此時,你可以先將加密密鑰正常傳送給你的朋友,讓你的朋友用這個加密密鑰對信息進行加密後傳送給你,然後你再用解密密鑰恢復信息的明文進行閱讀,在這個過程中解密密鑰不會以任何形式傳送,只掌握在你的手中,也就是說你的朋友對信息加密後,他自己也沒辦法再解開進行驗證。監聽者得到了加密密鑰,卻無法得出解密密鑰,也就無法查看信息的明文。
加密密鑰和解密密鑰是相對的說法,如果用加密密鑰加密那么只有解密密鑰才能恢復,如果用解密密鑰加密則只有加密密鑰能解密,所以它們被稱為密鑰對,其中的一個可以在網路上傳送、公布,叫做公鑰,而另一個則只有密鑰對的所有人才持有,叫做私鑰,非對稱公開密鑰系統又叫做公鑰系統,是我們現代金融業的基石。

密算法時最棘手的問題,它不僅涉及如何將密鑰值安全地分發給所有通信方,還涉及密鑰的生命周期管理、密鑰被破解時應採取什麼措施等問題。Alice和Bob的密鑰管理需求可能並不複雜,他們可以通過電話(如果確定沒人監聽)或通過掛號信來交換密碼。但如果Alice不僅需要與Bob安全通信,還需要與許多其他人安全通信,那么她就需要與每個人交換密鑰(通過可靠的電話掛號信),並管理這一系列密鑰,包括記住何時交換新密鑰、如何處理密鑰泄漏和密鑰不匹配(由於使用的密鑰不正確,接收方無法解密訊息)等。當然,這些問題不只Alice會遇到,Bob和其他每個人都會遇到,他們都需要交換密鑰並處理這些令人頭痛的密鑰管理問題(事實上,X9.17是一項DES密鑰管理ANSI標準[ANSIX9.17])。

工作原理

公鑰和私鑰的產生

假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰:
隨意選擇兩個大的質數p和q,p不等於q,計算N=pq。
根據歐拉函式,不大於N且與N互質的整數個數為(p-1)(q-1)
選擇一個整數e與(p-1)(q-1)互質,並且e小於(p-1)(q-1)
用以下這個公式計算d:d×e≡1(mod(p-1)(q-1))
將p和q的記錄銷毀
(N,e)是公鑰,(N,d)是私鑰。(N,d)是秘密的。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。
加密訊息
假設Bob想給Alice送一個訊息m,他知道Alice產生的N和e。他使用起先與Alice約好的格式將m轉換為一個小於N的整數n,比如他可以將每一個字轉換為這個字的Unicode碼,然後將這些數字連在一起組成一個數字。假如他的信息非常長的話,他可以將這個信息分為幾段,然後將每一段轉換為n。用下面這個公式他可以將n加密為c:

加密公式

計算c並不複雜。Bob算出c後就可以將它傳遞給Alice。
解密訊息
Alice得到Bob的訊息c後就可以利用她的密鑰d來解碼。她可以用以下這個公式來將c轉換為n:

解密公式

得到n後,她可以將原來的信息m重新復原。
解碼的原理是

解碼原理1

以及ed≡1(modp-1)和ed≡1(modq-1)。由費馬小定理可證明(因為p和q是質數)

解碼原理3解碼原理2

這說明(因為p和q是不同的質數,所以p和q互質

解碼原理5

主要套用

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

//加密
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、HD,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在收到加密訊息後,用自己的私鑰進行解密從而恢復原始文檔。

相關搜尋