1. 程式人生 > >公鑰密碼的基本原理

公鑰密碼的基本原理

公鑰密碼:基於數學函式而非基於代替和置換;公鑰密碼使用兩個獨立的金鑰。

公鑰密碼術語:

  1. 非對稱金鑰:公鑰和私鑰,用來加密和解密,或用來生成簽名或驗證簽名;
  2. 公鑰證書:是有簽證機構用自己的私鑰簽名的數字檔案;
  3. 公鑰密碼演算法:從公鑰推私鑰是不可行的;
  4. 公鑰基礎設施(PKI):用於管理證書,公私鑰對,並負責產生,維護和廢除公鑰證書的集合。

公鑰密碼學解決了傳統密碼學中最困難的兩個問題:1)金鑰分配問題;2)數字簽名問題。
對稱密碼進行金鑰分配的要求:

  1. 通訊雙方已共享一個金鑰,而該金鑰已通過某種方法分配給通訊雙方;
  2. 利用金鑰分配中心(key distribute center,KDC)。

數字簽名問題:因為私鑰是資訊傳送者才擁有的金鑰,所以可以通過該特性來確定某個資訊是否從資訊傳送者發出的,即實現了“簽名“。

公鑰密碼體制

特點:

  1. 僅根據密碼演算法和加密金鑰來確定解密金鑰從計算上是不可行的;
  2. 兩個金鑰中任何一個都可用來加密,另一個用來解密。

組成部分:

  1. 明文
  2. 加密演算法
  3. 公鑰和私鑰
  4. 密文
  5. 解密演算法

步驟:

  1. 每個使用者產生一對金鑰,用於加密和解密;
  2. 每個使用者將其中一個金鑰公開,該金鑰稱為 公鑰;另一金鑰保持私密,該金鑰稱為 私鑰;
  3. 若B要給A傳送訊息,則B用A的公鑰對資訊加密;
  4. A收到後用A的私鑰解密。因為只有A直到私鑰,故其他人無法解密。

這裡寫圖片描述
如圖9.1(a)所示,即為上述加密傳輸步驟的圖示。A的公鑰誰都可以訪問,而A的私鑰只有自己知道,在不暴露的情況下該傳輸就是安全的。
Y = E(PUb, X)
X = D(PRb, Y)
其中
X:明文
Y:密文
PUb:B的公鑰(Public Key)
PRb:B的私鑰(Private Key)

如圖9.1(b)所示,使用私鑰進行加密可以實現認證功能。
Y=E(PRa, X)
X=E(PUa, Y)
A向B傳送通過A的私鑰PRa加密的資訊,B用A的公鑰PUa解密。由於用A的私鑰對資訊加密,所以只有A可加密資訊,因此整個加密後的資訊就是數字簽名,可用於認證源和資料完整性。

為提高效率,只對一段稱為“認證符“的資料加密,是該資訊的函式,一旦資訊修改則引發認證符的變化。若對認證符加密,則結果可作為數字簽名來驗證資訊源,資訊和通訊序列的有效性。
但注意!因為認證方式是用私鑰加密,公鑰解密,而公鑰和加密後的資訊都能夠被攻擊者接收到,因此用私鑰加密的資訊不具備保密性。除此之外,除了認證符外部分都是明文資訊故這部分也不具有保密性。
這裡寫圖片描述

解決方法:兩次公鑰加密。
Z=E(PUb, E(PRa, X))
X=D(PUa,D(PRb, X))
這裡寫圖片描述
即對A的數字簽名再用B的公鑰加密,這樣只有B可以用其私鑰進行解密得到A的數字簽名,再用A的公鑰解密檢查是否正確。

公鑰密碼體制的應用

  • 加密/解密:用對方公鑰加密,對方用自己私鑰解密。
  • 數字簽名:傳送方用自己私鑰對資訊加密,接收方用傳送方公鑰解密。加密的資訊可以為整個訊息,也可為認證符,認證符是整個資訊的函式。
  • 金鑰交換:通訊雙方交換會話金鑰,使用了通訊一方或雙方的私鑰。

常用演算法的支援:
這裡寫圖片描述

對公鑰密碼的要求

要求
分析:
要想滿足上述條件,關鍵是一個單向陷門函式
單向函式:每個函式值存在唯一的擬,但計算函式值容易,求逆不可行。(函式概念裡的雙射條件:單射+滿射的一一對映,但是從變數到值可算,值到變數不可算)
單向陷門函式:一個函式若計算函式值很同意,並在缺少一些附加資訊時計算函式的逆是不可行的,但是已知這些附加資訊時,可在多想是時間內計算出函式的逆。
單向陷門函式
對映關係如下所示:
對映
(其中gk(Y)是fk(X)的你逆函式)
我覺得可以這樣理解:
X:明文;
Y:密文;
fk(X):公鑰;
gk(Y):私鑰;
k:加密演算法輸入。
其中gk(Y)函式公開,傳送方用k,加密演算法和接收方的fk(X)加密,接收方用k,加密演算法和gk(Y)解密。

對公鑰密碼的攻擊

  1. 窮舉攻擊:金鑰長度可增加窮舉攻擊的難度,但加/解密太慢,公僅限於金鑰管理和簽名中;
  2. 從給定的公鑰計算出私鑰的方法;
  3. 窮舉訊息攻擊:比如傳輸56位DES金鑰,用公鑰對所有可能的金鑰加密,並與傳送的密文匹配從而解密任何資訊,解決方法為訊息後面附加隨機數。

窮舉訊息攻擊:
這裡寫圖片描述

總結

這一部分簡單介紹了公鑰的相關原理,用接收方公鑰加密則為傳送保密資訊,用自己私鑰加密既可用於數字簽名;公鑰密碼的關鍵技術是找到一個單向陷門函式;同時介紹了哪些演算法支援哪些應用以及對於公鑰密碼的攻擊手段。下一節將主要講解公鑰密碼中廣泛使用的RSA演算法。