1. 程式人生 > >密碼學總體介紹與分析 2

密碼學總體介紹與分析 2

訊息認證碼

單向雜湊可以解決篡改的問題,但訊息是來自可信一方,還是來自偽裝者,卻無法解決。偽裝者完全可以傳送有害的資訊和該資訊的雜湊,而接受者卻無法分辨

訊息認證碼技術可以解決此類問題。

訊息認證碼(Message Authentication Code),MAC。通過傳送方與接收方共享金鑰,通過該共享金鑰對計算 MAC 值。

 

MAC使用步驟

訊息認證碼使用步驟:

  1. 傳送方 A 與接收方 B 共享金鑰
  2. 傳送方 A 通過金鑰計算 MAC 值 = MAC-A
  3. 傳送方 A 傳送原訊息 + MAC-A
  4. 接收方 B 對原訊息通過金鑰計算 MAC 值 = MAC-B
  5. 接收方 B 比較 MAC-A 與 MAC-B,若一致則成功

 

MAC實現

MAC 實現的關鍵,是獲得一串需要與共享金鑰相關而且足夠有區分度的串

因此,可以通過多種方式獲得 MAC 值,如單向雜湊、分組密碼擷取最後一組作為 MAC 值、流密碼、非對稱加密等。

 

針對MAC問題

  • 金鑰配送的問題,因為 MAC 需要傳送者與接收者使用相同的金鑰
  • 重放攻擊,竊取某一次通訊中的正確的 MAC,然後攻擊者重複多次傳送相同的資訊。由於資訊與 MAC 可以匹配,在不知道金鑰的情況下,攻擊者就可以完成攻擊。以下方法可以避免:
    • 序號,約定資訊中帶上遞增序號,MAC 值為加上序號的 MAC。
    • 時間戳,約定資訊中帶上時間戳
    • 隨機數 nonce,每次傳遞前,先發送隨機數 nonce,通訊是帶上 nonce
  • 暴力破解
  • 無法防止否認,因為金鑰是共享的,接收者可以偽造對傳送者不利的資訊。

 

數字簽名

由於 MAC 無法解決否認的問題是由於採用的相同的金鑰,那麼採用公私鑰對就可以解決啦~

採用非對稱加密的訊息認證碼的技術,就是數字簽名。

  • 在非對稱加密中,私鑰用來解密,公鑰用來加密
  • 在數字簽名技術中,私鑰用來加密,公鑰用來解密

 

數字簽名步驟

  1. 簽名方 A 生成非對稱公私鑰對 public-key、private-key
  2. A 向訊息接收方 B 傳送公鑰 publi-key
  3. A 採用 private-key 加密(一般是對訊息的雜湊值進行加密),生成數字簽名
  4. A 將訊息與數字簽名發往 B
  5. B 採用 public-key 解密數字簽名
  6. B 驗證數字簽名

由於用於解密的是公鑰,是公開的。因此任何人都可以驗證數字簽名。

 

數字簽名實現

數字簽名的核心,就是非對稱加密,在前文已經介紹了一些非對稱加密演算法,均可用於數字簽名之中。

常見的有如下幾種:

  • RSA
  • ElGamal
  • DSA
  • ECDSA(Elliptic Curve Signature Algorithm),結合橢圓曲線演算法的數字簽名技術
  • Rabin

 

數字簽名的問題

數字簽名由於採用了非對稱加密,因此可以防止否認。但傳送方怎麼能知道所收到的公鑰就是接收方私鑰所對應的公鑰呢?

如果不小心採用了攻擊者的公鑰,然後接收了攻擊者私鑰簽名的資訊,公私鑰完全匹配,於是資訊就被接受了,那麼就 GG 了。

因此,業界便推出了證書。由權威機構頒佈,認證公鑰的合法性,那麼就 OK 啦!

 

Reference: https://www.jianshu.com/p/a8070920810d