非對稱加密算法
使用過程:
乙方生成兩把密鑰(公鑰和私鑰)
甲方獲取乙方的公鑰,然后用它對信息加密。
乙方得到加密后的信息,用私鑰解密,乙方也可用私鑰加密字符串
甲方獲取乙方私鑰加密數據,用公鑰解密
優點:
更安全,密鑰越長,它就越難破解
缺點:
加密速度慢
常用算法:
RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)
非對稱加密方法
1公鑰私鑰的使用原則
①每一個公鑰都對應一個私鑰。
?、诿荑€對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
? ? ? ? ③如果用其中一個密鑰加密數據,則只有對應的那個密鑰才可以解密。
?、苋绻闷渲幸粋€密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。
非對稱密鑰密碼的主要應用就是公鑰加密和公鑰認證。
2公鑰加密、解密
加密的目的,是不希望第三者看到當前兩個通訊用戶的通訊內容。
2.1加密
A(客戶)想給B(服務器)發送一段文字,但是不想讓別人看到,因此想使用非對稱加密方法來加密這段文字,當然,B需要有一對公鑰和私鑰:
?、?B將他的公鑰發送給A
② A用B給他的公鑰加密這段文字,然后傳給B
③ B用他的私鑰解密A發過來的消息,這里要強調的是,只要B的私鑰不泄露,這封信就是安全的,即使落在別人手里,也無法解密。
通過這幾步,B就能成功收到A發送的信息,同時又達到了保密的目的。
2.2解密
如果B想給A回信息,就簡單的多了:
① B將要回復的信息通過自己的私鑰加密,然后傳送給A
② A用B之前給他的公鑰解出這份信息。
3、公鑰認證
在公鑰加密、解密里面描述的通訊過程看似簡單,但想想這個問題:在過程2中,A怎么B給他的回信在傳遞過程中,有沒有被人修改?這就涉及到數字簽名的概念。
3.1數字簽名(digital signature)
微軟官方給出的定義:“數字簽名”是指可以添加到文件的電子安全標記。使用它可以驗證文件的發行者以及幫助驗證文件自被數字簽名后是否發生更改。
3.1.1數字簽名原理
要達到這個目的,一般是對信息做一個hash計算得到一個hash值,注意,這個過程是不可逆的,也就是說無法通過hash值得出原來的信息內容。在把信息發送出去時,把這個hash值加密后做為一個簽名和信息一起發出去。 接收方在收到信息后,會重新計算信息的hash值,并和信息所附帶的hash值(解密后)進行對比,如果一致,就說明信息的內容沒有被修改過,因為這里hash計算可以保證不同的內容一定會得到不同的hash值,所以只要內容一被修改,根據信息內容計算的hash值就會變化。當然,不懷好意的人也可以修改信息內容的同時也修改hash值,從而讓它們可以相匹配,為了防止這種情況,hash值一般都會加密后(也就是簽名)再和信息一起發送。
3.1.2數字簽名使用方式
下面通過例子來說明這個過程:
B給A回信時,采用了數字簽名的方式
1、B先用hash函數,生成信件的摘要(digest)
2、B使用自己的私鑰,對這個摘要加密,這樣就生成了數字簽名(signature)
3、B將這個簽名附在要回復的信息后面,一起發給A
4、A收到B的信息后,取下數字簽名,并通過B的公鑰解密,得到信件的摘要信息
5、A在對B發送的信息本身使用B指定的hash函數,將得到的結果同上一步解密得到的摘要進行對比,如果兩者一致,就說明B發過來的信息未被修改過。
3.2數字證書(Digital Certificate)
問題就這樣結束了嗎?遠沒有,試想,雖然A確定了B回給他的信息是未修改過的,但是怎么確定給他回信息的就是B?如果有不懷好意的C把A保存的B的公鑰偷偷換成自己的,并冒用B的名義給A發信息呢?
要解決這個問題,A只要能確定自己持有的公鑰到底是不是B的就行了,這就需要用到數字證書。
數字證書是用來驗證公鑰所屬的用戶身份。在日常生活中,如果我們要驗證一個人的身份,通常的做法是查看他的身份證。我們信任身份證頒發機構即政府機構的公信力,因此只要驗證一個人的身份證不是偽造的,我們就相信這個人的身份和身份證上所描述的是一致的。
數字證書就是一個人或者組織在網絡世界中的身份證,其發證機關是證書管理機構(certificate authority,CA)。CA用自己的私鑰對用戶的身份信息(主要是用戶名和該用戶的公鑰)進行簽名,該簽名和用戶的身份信息一起就形成了證書。
3.2.1數字證書的構成
證書的發布機構(Issuer)
指出是什么機構發布的這個證書,也就是指明這個證書是哪個證書中心(certificate authority,簡稱CA)發布的的(只是創建證書,不是指證書的使用者)。
證書的有效期(Valid from , Valid to)
也就是證書的有效時間,或者說證書的使用期限。 過了有效期限,證書就會作廢,不能使用了。
公鑰 (Public key)
這個我們在前面介紹公鑰密碼體制時介紹過,公鑰是用來對消息進行加密解密的,是很長的一串數字。
證書所有者(Subject)
這個證書是發布給誰的,或者說證書的所有者,一般是某個人或者某個公司名稱、機構的名稱、公司網站的網址等。
簽名所使用的算法 (Signature algorithm)
指的這個數字證書的數字簽名所使用的加密算法,這樣就可以使用證書發布機構的證書里面的公鑰,根據這個算法對指紋進行解密。指紋的加密結果就是數字簽名
指紋以及指紋算法 (Thumbprint, Thumbprint algorithm)
這個是用來保證證書的完整性的,也就是說確保證書沒有被修改過。 其原理就是在發布證書時,發布者根據指紋算法(一個hash算法)計算整個證書的hash值(指紋)并和證書放在一起,使用者在打開證書時,自己也根據指紋算法計算一下證書的hash值(指紋),如果和剛開始的值對得上,就說明證書沒有被修改過,因為證書的內容被修改后,根據證書的內容計算的出的hash值(指紋)是會變化的。
3.2.2數字證書的生成過程
1、使用數字證書申請者的身份信息生成數字簽名
2、將證書申請者的身份信息和數字簽名一起組成數字證書
3.2.3數字證書原理
有了數字證書以后,A和想跟B通信,就可以通過B的數字證書來獲取B的公鑰,以達到驗證自己手中的公鑰到底是不是B的目的。過程是這樣的:
1、B給A回信的時候,在信息后面附上了自己的數字證書
2、A收到B的回信以后,會取出附帶的數字證書,并讀取證書中的發布機構(Issuer),然后從操作系統的受信任證書機構列表中查找該證書辦發機構的公鑰,如果找不到,說明這個證書頒發機構是個不受信任的,B發過來的信息當然也是不安全的
3、使用上一步取到的證書頒發機構的公鑰,解出數字證書,得到可能是B的用戶信息和數字簽名
4、A通過證書中指定的加密算法對可能是B的用戶信息進行hash加密
5、加密后的結果和證書中解出的數字簽名進行對比,如果相同,就說明這份用戶信息確實是B的,也就是說用戶信息中包含的公鑰確實是B的
這樣就驗證了B身份的真實性。
下圖很形象的表示了這個過程:
3.2.4證書發布中心(CA)的公鑰的嵌套驗證
這里有一個有趣的問題,用戶A使用證書機構的公鑰來驗證用戶B的數字證書,但如果A和B使用的證書認證中心(CA)不同怎么辦呢?由于證書認證中心可以通過另外一個更高級別的認證中心對該證書機構的公鑰頒發一個證書,這樣形成了一個公鑰證書的嵌套循環,該循環的終點就是根證書機構。根證書機構較少,其公鑰可以通過安全的方式發布,如通過USB拷貝、書面文件當面移交。如此依賴,A就必須從B的CA的樹形結構底部開始,從底層CA往上層CA查詢,一直到找到共同的信任CA為止。
整個過程如下圖所示:
3.2.5證書發布機構
3.2.5.1誰可以成為證書發布機構
到這里,你可能會想,那我們自己就不能發布證書嗎?就一定要花錢去申請?
當然不是,我們自己也可以成立證書發布機構,但是需要通過一些安全認證等等,只是有點麻煩。另外,如果數字證書只是要在公司內部使用,公司可以自己給自己生成一個證書,在公司的所有機器上把這個證書設置為操作系統信任的證書發布機構的證書(這句話仔細看清楚,有點繞口),這樣以后公司發布的證書在公司內部的所有機器上就可以通過驗證了(在發布證書時,把這些證書的Issuer(發布機構)設置為我們自己的證書發布機構的證書的Subject(主題)就可以了)。但是這只限于內部應用,因為只有我們公司自己的機器上設置了信任我們自己這個所謂的證書發布機構,而其它機器上并沒有事先信任我們這個證書發布機構,所以在其它機器上,我們發布的證書就無法通過安全驗證。
我們自己可以去注冊一家公司來專門給別人發布證書,但是很明顯,我們自己的專門發布證書的公司是不會被那些國際上的權威機構認可的,人家怎么知道你是不是個狗屁皮包公司?因此微軟(或其它操作系統提供商)在它的操作系統中,并不會信任我們這個證書發布機構,當應用程序在檢查證書的合法信的時候,一看證書的發布機構并不是操作系統所信任的發布機構,就會拋出錯誤信息。也就是說windows操作系統中不會預先安裝好我們這個證書發布機構的證書,不信任我們這個發布機構。
3.2.5.2不受信任的證書發布機構的危害
為什么一個證書發布機構受不受信任這么重要?我們舉個例子。假設我們開了一個狗屁公司來為別人發布證書,并且我和微軟有一腿,微軟在他們的操作系統中把我設置為了受信任的證書發布機構?,F在如果有個小公司叫hisunsray花了10塊錢讓我為他們公司申請了一個證書,并且公司慢慢壯大,證書的應用范圍也越來越廣。然后有個奸商的公司baidu想冒充hisunsray,于是給了我¥10000,讓我為他們頒布一個證書,但是證書的名字(Subject)要寫hisunsray,假如我為了這¥10000,真的把證書給了他們,那么他們以后就可以使用這個證書來冒充hisunsray了。
如果是一個優秀的證書發布機構,比如你要向他申請一個名字叫hisunsray的證書,它會讓你提供很多資料證明你確實可以代表hisunsray這個公司,也就是說他回去核實你的身份。證書發布機構是要為他發布出的證書負法律責任的。
3.2.6如何查看數字證書
我們的操作系統中會預先安裝好一些證書發布機構的證書,我們可以通過證書管理器進行證書的增、刪操作,下面介紹如何找到它們。
3.2.6.1windows
開始菜單-》運行,輸入certmgr.msc,回車
3.2.6.2mac
打開keychain,選擇鑰匙串中的系統根證書,種類中的證書即可看到下圖所示的收信人證書發布機構列表:
評論
查看更多