[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 應用技術 > SSL > 正文
SSL原理解密
本文出自:http://noc.cstnet.net.cn/ 范曉明 (2001-06-08 12:10:00)
    RSA公鑰加密在計算機產業中被廣泛使用在認証和加密。可以從RSA Data Security Inc.獲得的RSA公鑰加密許可証。公鑰加密是使用一對非對稱的密碼加密或解密的方法。每一對密碼由公鑰和私鑰組成。公鑰被廣泛發布。私鑰是隱密的,不公開。用公鑰加密的數據只能夠被私鑰解密。反過來,使用私鑰加密的數據只能用公鑰解密。這個非對稱的特性使得公鑰加密很有用。 

使用公鑰加密法認証 

認証是一個身份認証的過程。在下列例子中包括甲和乙,公鑰加密會非常輕鬆地校驗身份。符號{數據} key意味著"數據"已經使用密碼加密或解密。假如甲想校驗乙的身份。乙有一對密碼,一個是公開的,另一個是私有的。乙透露給甲他的公鑰。甲產生一個隨機信息發送給乙。 甲〉乙:random-message 

乙使用他的私鑰加密消息,返回甲加密的消息。 乙〉甲:{random-message}乙的私鑰 

甲收到這個消息然使用乙的以前公開過的公鑰解密。他比較解密的消息與他原先發給乙的消息。如果它們完全一致,就會知道在與乙說話。任意一個中間人不會知道乙的私鑰,也不能正確加密甲檢查的隨機消息。 

除非你清楚知道你加密的消息。用私鑰加密消息,然發送給其他人不是一個好主意。因為加密值可能被用來對付你,需要注意的是:因為只有你才有私鑰,所以只有你才能加密消息。所以,代替加密甲發來的原始消息,乙創建了一個信息段並且加密。信息段取自隨機消息(random-message)並具有以下有用的特性: 

1. 這個信息段難以還原。任何人即使偽裝成乙,也不能從信息段中得到原始消息; 

2. 假冒者將發現不同的消息計算出相同的信息段值; 

3. 使用信息段,乙能夠保護自己。他計算甲發出的隨機信息段,並且加密結果,並發送加密信息段返回甲。甲能夠計算出相同的信息段並且解密乙的消息認証乙。 

這個技術僅僅描繪了數字簽名。通過加密甲產生的隨機消息,乙已經在甲產生的消息簽名。因此我們的認証協議還需要一次加密。一些消息由乙產生: 

甲〉乙:你好,你是乙? 

乙〉甲:甲,我是乙 

{信息段[甲,我是乙] } 乙的私鑰 

當你使用這個協議,乙知道他發送給乙的消息,他不介意在上面簽名。他先發送不加密的信息,"甲,我是乙。",然發送信息段加密的消息版本。甲可以非常方便地校驗乙就是乙,同時,乙還沒有在他不想要的信息上簽名。 

提交公鑰 

那,乙怎樣以可信的方式提交他的公鑰呢?看看認証協議如下所示: 

甲〉乙:你好 

乙〉甲:嗨,我是乙,乙的公鑰 

甲〉乙:prove it 

乙〉甲:甲,我是乙 {信息段[甲,我是乙] } 乙的私鑰 

在這個協議下,任何人都能夠成為"乙"。所有你所要的只是公鑰和私鑰。你發送給甲說你就是乙,這樣你的公鑰就代替了乙的密碼。然,你發送用你的私鑰加密的消息,証明你的身份。甲卻不能發覺你並不是乙。 為了解決這個問題,標準組織已經發明了証書。一個証書有以下的內容: 

* 証書的發行者姓名 

* 發行証書的組織 

* 標題的公鑰 

* 郵戳 

証書使用發行者的私鑰加密。每一個人都知道証書發行者的公鑰(這樣,每個証書的發行者擁有一個証書)。証書是一個把公鑰與姓名綁定的協議。通過使用証書技術,每一個人都可以檢查乙的証書,判斷是否被假冒。假設乙控制好他的私鑰,並且他確實是得到証書的乙,就萬事大吉了。 

這些是修訂的協議: 

甲〉乙:你好 

乙〉甲:嗨,我是乙,乙的校驗 

甲〉乙:prove it 

乙〉甲:甲,我是乙 {信息段[甲, 我是乙] } 乙的私鑰 

現在當甲收到乙的第一個消息,他能檢查証書,簽名(如上所述,使用信息段和公鑰解密),然檢查標題(乙的姓名),確定是乙。他就能相信公鑰就是乙的公鑰和要求乙証明自己的身份。乙通過上面的過程,制作一個信息段,用一個簽名版本答復甲。甲可以校驗乙的信息段通過使用從証書上得到的公鑰並檢查結果。 

如果一個黑客,叫H 

甲〉H:你好 

H〉不能建立一個令甲相信的從乙的消息。 

交換密碼(secret) 

一旦甲已經驗証乙,他可以發送給乙一個只有乙可以解密、閱讀的消息: 

甲〉乙:{secret}乙的公鑰 

唯一找到密碼的方法只有使用乙的私鑰解碼上述的信息。交換密碼是另一個有效使用密碼加密的方法。即使在甲和乙之間的通訊被偵聽,只有乙才能得到密碼。 

使用密碼作為另一個secret-key增強了網絡的安全性,但是這次這是一個對稱的加密算法(例如DES、RC4、IDE甲)。因為甲在發送給乙之前產生了密碼,所以甲知道密碼。乙知道密碼因為乙有私鑰,能夠解密甲的信息。但他們都知道密碼,他們都能夠初始化一個對稱密碼算法,而且開始發送加密的信息。這兒是修定的協議: 

甲〉乙:你好 

乙〉甲:嗨,我是乙,乙的校驗 

甲〉乙:prove it 

乙〉甲:甲,我是乙 {信息段[甲,我是乙] }乙的私鑰 

甲〉乙:ok 乙,here is a secret {secret}乙的公鑰 

乙〉甲:{some message}secret-key 

黑客竊聽 

那如果有一個惡意的黑客H在甲和乙中間,雖然不能發現甲和乙已經交換的密碼,但能幹擾他們的交談。他可以放過大部分信息,選擇破壞一定的信息(這是非常簡單的,因為他知道甲和乙通話採用的協議)。 

甲〉H:你好 

H〉乙:你好 

乙〉H:嗨,我是乙,乙的校驗 

H〉甲:嗨,我是乙,乙的校驗 

甲〉H:prove it 

H〉乙:prove it 

乙〉H:甲,我是乙 {信息段[甲,我是乙] }乙的私鑰 

H〉甲:甲,我是乙 {信息段[甲,我是乙] }乙的私鑰 

甲〉H:ok 乙,here is a secret {secret} 乙的公鑰 

H〉乙:ok 乙,here is a secret {secret} 乙的公鑰 

乙〉H:{some message}secret-key 

H〉甲:Garble[{some message}secret-key ] 

H忽略一些數據不修改,直到甲和乙交換密碼。然H幹擾乙給甲的信息。在這一點上,甲相信乙,所以他可能相信已經被幹擾的消息並且盡力解密。 

需要注意的是,H不知道密碼,他所能做的就是毀壞使用秘鑰加密的數據。基協議,H可能不能產生一個有效的消息。但下一次呢? 

為了阻止這種破壞,甲和乙在他們的協議中產生一個校驗碼消息(message authentication code)。一個校驗碼消息(MAC)是一部分由密碼和一些傳輸消息產生的數據。信息段算法描述的上述特性正是它們抵御H的功能: 

MAC= Digest[some message,secret ] 

因為H不知道密碼,他不能得出正確的值。即使H隨機幹擾消息,只要數據量大,他成功的機會微乎其微。例如,使用HD5(一個RSA發明的好的加密算法),甲和乙能夠發送128位MAC值和他們的消息。H猜測正確的MAC的幾率將近1/18,446,744,073,709,551,616約等零。 

這是又一次修改的協議: 

甲〉乙:你好 

乙〉甲:嗨,我是乙,乙的校驗 

甲〉乙:prove it 

乙〉甲:嗨,我是乙,乙的校驗 

甲,我是乙 

{信息段[甲,我是乙] } 乙的私鑰 

ok 乙,here is a secret {secret} 乙的公鑰 

{some message,MAC}secret-key 

現在H已經無技可施了。他幹擾了得到的所有消息,但MAC計算機能夠發現他。甲和乙能夠發現偽造的MAC值並且停止交談。H不再能與乙通訊。 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
 

★  樊強制作 歡迎分享  ★