天天看點

密鑰系統簡介

        公用密鑰加密技術使用不對稱的密鑰來加密和解密,每對密鑰包含一個公鑰和一個私鑰,公鑰是公開,而且廣泛分布的,而私鑰從來不公開,隻有自己知道。

  用公鑰加密的資料隻有私鑰才能解密,相反的,用私鑰加密的資料隻有公鑰才能解密,正是這種不對稱性才使得公用密鑰密碼系統那麼有用。

  使用公用密鑰密碼系統進行認證

  認證是一個驗證身份的過程,目的是使一個實體能夠确信對方是他所聲稱的實體。

    下面用簡單的例子來描述如何使用公用密鑰密碼系統來輕易的驗證身份。

注:下面的 key 表示something 已經用密鑰 key 加密或解密。

1. 加密解密雛形

  假設A要認證B,B有一個密鑰對,即一個公鑰和一個私鑰,B透露給A他的公鑰(至于他是怎麼做的将在以後讨論)。然後A 産生一段随機的消息,然後把它發給B。

A-->B random--message 

B用自己的私鑰來加密這段消息,然後把加密後的消息傳回給A。

  B-->A B's--private--key

  A接到了這段消息,然後用B以前發過來的公鑰來解密。她把解密後的消息和原始的消息做比較,如果比對的話,她就知道自己正在和B通信。一個入侵者應該不知道B的私鑰,是以就不能正确的加密那段A要檢查的随機消息。

  2. 數字簽名

  除非你确切的知道你在加密什麼,否則用你的私鑰加密一些東西,然後發給别人永遠不是一件好事。這是因為加密後的資料可能會背叛你(記住,隻有你能加密,因為隻有你才有密鑰)。

  是以,我們不加密A 發送的原始消息,取而代之的是,由B構造一個消息摘要,然後加密它。消息摘要是從随機消息中以某種方式提取出來的,并且具有以下特點:

  - 摘要很難逆轉,任何假冒B的人不能從摘要得到原始消息

  - 假冒者無法找到具有相同摘要的不同消息

  通過使用摘要,B能夠保護自己。他首先計算出A發給他的随機消息的摘要并加密,然後把加密後的摘要傳回給A,A可以計算出相同的摘要,通過解密B的消息然後對比一下就可以認證B的身份。

這個過程就是傳說中的數字簽名。

  A-->B hello,are you B?

  B-->A A,This Is B{digest[A,This Is B]}B's-private-key

  當B使用這個協定的時候,他知道自己發給A的是什麼消息,并且不介意簽名。他首先發送沒有加密的消息“A,This Is B” 然後發送加密的摘要。A能夠輕易的判斷B是B,并且B沒有簽任何他不願意簽的東西。

3. 分發公鑰與證書

  B如何以一種可信賴的方式分發他的公鑰呢?我們假設認證協定是這個樣子的:

  A-->B hello

  B-->A Hi, I'm B, B's-public-key

  A-->B prove it

  B-->A A, This Is B{ digest[A, This Is B] } B's-private-key

  如果使用這個協定的話,任何人都可以是B。你需要的隻是一個公鑰和私鑰,你跟A慌稱你是B,接着你用自己的公鑰代替B的公鑰,然後你通過用你的私鑰加密的東西來證明,這樣A就不能分辨出你不是B。

  為了解決這個問題,标準化組織發明了一個叫做證書的東西,一個證書包括下面的一些内容:

  - 證書發行者的名字

  - 證書發送給的團體

  - 主題的公鑰

  - 一些時間戳

  證書是由證書發行者的私鑰簽名的,每個人都知道證書發行者的公鑰(即證書發行者有一個證書,等等)。證書是一種把公鑰綁定到名字的标準方式。

  通過使用證書這種技術,每個人都可以通過檢查B的證書來判斷B是不是僞造的。假設B嚴格的控制着他的私鑰,并且的确是b得到了他的證書,那麼一切都好。下面是補償協定:

   B-->A Hi, I'm B, B'S-certificate

  當A收到B的第一條消息,她可以檢查證書,核實簽名(如上,使用摘要和公鑰加密),然後,核實主題(B的名字)來判斷那是不是真的B。這樣她就相信公鑰是B的公鑰,然後要求B證明他的身份。B則重新進行一次上面的相同過程,計算消息的摘要,簽名之後發給A,A可以用從證書得到的公鑰檢查B的消息摘要,進而判斷B的身份。

4. 防止資料篡改與消息認證碼

  假設有個壞家夥H,雖然不能發現A和B交換的秘密,但是他可以幹預并且破壞他們的對話。

舉例來說,如果H位于A和B之間,他可以選擇讓大多數的消息傳回以及向前繼續傳輸沒有改變,但是破壞了特定位的消息。

  A-->H hello

  H-->B hello

B-->H Hi, I'm B, B's-certificate

   H-->A Hi, I'm B, B's-certificate

  A-->H prove it

  H-->B prove it

  B-->H A, This Is B{ digest[A, This Is B] } B's-private-key

  H-->A A, This Is B{ digest[A, This Is B] } B's-private-key

  A-->H ok B, here is a secret B's-public-key

  H-->B ok B, here is a secret B's-public-key

  B-->H {some message}secret-key

  H-->A Garble[ {some message}secret-key ]

  H一直讓資料沒有改變的通過,直到A和B分享一個秘密。然後H通過改變B發送給A的消息來進入這個方式中。這時候A是相信B的,是以她就可能相信這個改變的消息,然後按照它來做。注意H并不知道這個秘密-他能做的所有事就是破壞用這個秘密的密鑰加密的資料。他可能不能利用這個協定制造出一條有效的消息,但是下一次,他可能會幸運一點。

  為了防止這種破壞,A和B在他們的協定中引入了一種消息認證碼(MAC)。MAC是根據秘密的密鑰和傳輸的資料計算出來的,上面描述的摘要算法的屬性正好可以用于構造抵抗H的MAC功能。

  MAC := Digest[ some message, secret ]

  因為H不知道這個秘密的密鑰,是以他無法計算出這個摘要的正确數值。即使H随機的改變消息,如果摘要資料很大的話,他成功的可能性也很小。舉例來說,通過使用MD5,A和B能和他們的消息一起發送128位的MAC值。H猜中這個正确的MAC值的幾率是 18,446,744,073,709,551,616 分之1。

  下面是樣本協定,又訂正了一次:

  B-->A Hi, I'm B, B's-certificate

   B-->A {digest[A, This Is B] } B's-private-key

  ok B, here is a secret B's-public-key

  {some message,MAC}secret-key

  H現在有麻煩了,H可以改變任何的消息,但是MAC的計算将揭露他的欺詐行為。A和B能發現僞造的MAC值并停止會話,H就不能僞造B的消息了。

  但是這樣同樣不能防範H鹦鹉學舌。如果H記錄了會話的過程,他雖然可能不知道會話的内容,但是他可以重放這些會話。實際上,H能在A和B之間做一些真正龌龊的事。

上一篇: LAMP
下一篇: ×××LAMP

繼續閱讀