密碼學總體介紹與分析 2
阿新 • • 發佈:2018-12-04
訊息認證碼
單向雜湊可以解決篡改的問題,但訊息是來自可信一方,還是來自偽裝者,卻無法解決。偽裝者完全可以傳送有害的資訊和該資訊的雜湊,而接受者卻無法分辨
訊息認證碼技術可以解決此類問題。
訊息認證碼(Message Authentication Code),MAC。通過傳送方與接收方共享金鑰,通過該共享金鑰對計算 MAC 值。
MAC使用步驟
訊息認證碼使用步驟:
- 傳送方 A 與接收方 B 共享金鑰
- 傳送方 A 通過金鑰計算 MAC 值 = MAC-A
- 傳送方 A 傳送原訊息 + MAC-A
- 接收方 B 對原訊息通過金鑰計算 MAC 值 = MAC-B
- 接收方 B 比較 MAC-A 與 MAC-B,若一致則成功
MAC實現
MAC 實現的關鍵,是獲得一串需要與共享金鑰相關而且足夠有區分度的串。
因此,可以通過多種方式獲得 MAC 值,如單向雜湊、分組密碼擷取最後一組作為 MAC 值、流密碼、非對稱加密等。
針對MAC問題
- 金鑰配送的問題,因為 MAC 需要傳送者與接收者使用相同的金鑰
- 重放攻擊,竊取某一次通訊中的正確的 MAC,然後攻擊者重複多次傳送相同的資訊。由於資訊與 MAC 可以匹配,在不知道金鑰的情況下,攻擊者就可以完成攻擊。以下方法可以避免:
- 序號,約定資訊中帶上遞增序號,MAC 值為加上序號的 MAC。
- 時間戳,約定資訊中帶上時間戳
- 隨機數 nonce,每次傳遞前,先發送隨機數 nonce,通訊是帶上 nonce
- 暴力破解
- 無法防止否認,因為金鑰是共享的,接收者可以偽造對傳送者不利的資訊。
數字簽名
由於 MAC 無法解決否認的問題是由於採用的相同的金鑰,那麼採用公私鑰對就可以解決啦~
採用非對稱加密的訊息認證碼的技術,就是數字簽名。
- 在非對稱加密中,私鑰用來解密,公鑰用來加密。
- 在數字簽名技術中,私鑰用來加密,公鑰用來解密。
數字簽名步驟
- 簽名方 A 生成非對稱公私鑰對 public-key、private-key
- A 向訊息接收方 B 傳送公鑰 publi-key
- A 採用 private-key 加密(一般是對訊息的雜湊值進行加密),生成數字簽名
- A 將訊息與數字簽名發往 B
- B 採用 public-key 解密數字簽名
- B 驗證數字簽名
由於用於解密的是公鑰,是公開的。因此任何人都可以驗證數字簽名。
數字簽名實現
數字簽名的核心,就是非對稱加密,在前文已經介紹了一些非對稱加密演算法,均可用於數字簽名之中。
常見的有如下幾種:
- RSA
- ElGamal
- DSA
- ECDSA(Elliptic Curve Signature Algorithm),結合橢圓曲線演算法的數字簽名技術
- Rabin
數字簽名的問題
數字簽名由於採用了非對稱加密,因此可以防止否認。但傳送方怎麼能知道所收到的公鑰就是接收方私鑰所對應的公鑰呢?
如果不小心採用了攻擊者的公鑰,然後接收了攻擊者私鑰簽名的資訊,公私鑰完全匹配,於是資訊就被接受了,那麼就 GG 了。
因此,業界便推出了證書。由權威機構頒佈,認證公鑰的合法性,那麼就 OK 啦!
Reference: https://www.jianshu.com/p/a8070920810d