簡話密碼學3 - 常用加密演算法介紹

大川的汽車電子發表於2020-10-20

簡話密碼學3 - 常用加密演算法介紹

  在接觸密碼學的時候估計大家經常會聽到什麼RSA、ECDSA、EDDSA、ECDH等,估計一下就被搞懵了,這篇文章主要就是針對於實際常用的一些加密演算法做詳細的解釋。大致按照前面的分類來解釋,需要說明的一點就是,實際中一些演算法可以同時運用在加密解密、訊息驗證和數字簽名中。

常用的對稱加密

  對稱加密演算法在加密和解密均使用同樣的金鑰, 這種方式由於通訊雙方必須使用同樣的鑰匙,會有以下幾個缺點:
  1、金鑰管理:由於需要儲存和每個通訊物件的金鑰,使得金鑰管理顯得困難。比如金鑰儲存、金鑰更改等。
  2、安全性:由於雙方使用同一樣金鑰,這樣安全性不能夠得到充分的保證。
  但是由於對稱加密運算量相對於非對稱加密要小很多,使得運算速度快,在實際的應用中,往往是先通過非對稱加密或者特定的金鑰交換演算法來確定通訊雙方的對稱加密金鑰,然後再使用對稱加密的方式進行安全通訊。
  常用的對稱加密演算法有AES、DES、RC和Blowfish等,其中有基於DES的3DES,RC又分為RC2、RC4和RC5等。本文暫不對這些演算法的具體實現做介紹,這類演算法網上有較多的資源,有興趣的可以自己去檢視。

常用的非對稱加密演算法

  對於非對稱加密演算法,平常會看到非常多,但其實常用的可以分為兩類RSA和ECC,即使用大素數因式分解和橢圓曲線求解兩類,平常看到的一些演算法名稱通常是這兩類演算法的變種或幾個演算法的結合所得的名字,如ECDSA則是使用ECC對DSA進行數字簽名演算法的模擬而得來,ECDH-ECDSA則是使用ECC結合作為金鑰交換演算法,ECDSA作為數字簽名演算法結合的一套加密方法,搞清楚了這個,再看這些演算法的名字,就顯得沒有那麼迷惑了。

​ 非對稱加密演算法必要重要的有三個應用,加密解密,數字簽名,金鑰交換,其中這裡的加密解密指的是在通訊中對內容的加密解密,實際上前面也說了,一般通訊內容不會直接使用非對稱加密的方式。需要注意的是,一些非對稱加密演算法僅僅只能用於作數字簽名,而一些既可以用於加密解密也可以用作數字簽名,金鑰交換等。

​ 下面是一些常用演算法作簡單的總結。

數字簽名加密解密
RSA
DSA
ECDSA
EdDSA
Ed25519

RSA ( Rivest-Shamir-Adleman )是第一個公鑰密碼系統,廣泛用於安全資料傳輸。它的安全性依賴於整數分解,因此永遠不需要安全的RNG。與DSA相比,RSA更快地進行簽名驗證,但生成速度較慢。

DSA (數字簽名演算法)是數字簽名的聯邦資訊處理標準。它的安全性依賴於離散對數問題。與RSA相比,DSA更快地生成簽名,但驗證速度較慢。如果使用了錯誤的數字生成器,可以打破安全性。

ECDSA (橢圓曲線數字簽名演算法)是DSA的橢圓曲線實現(數字簽名演算法)。橢圓曲線加密能夠提供與具有較小金鑰的RSA相對相同級別的安全級別。它還有一個缺點,即DSA對不良RNG敏感。

EdDSA ( Edwards-curve數字簽名演算法)是一種使用數字簽名方案的數字簽名方案基於 Schnorr簽名的變體Twisted Edwards曲線。簽名建立在EdDSA中是確定性的,其安全性基於某些離散對數問題的難以處理性,因此它比DSA更安全。 ECDSA要求每個簽名具有高質量的隨機性。

Ed25519 是 EdDSA簽名方案,但使用SHA-512/256 和 Curve25519 ; OpenSSH v5.7 中引入),計算上比DSA輕,但區別在於除非你的機器具有很低的處理能力,否則很明顯。

注:以上五段對於演算法的描述為摘抄內容。

常用的訊息摘要演算法

1 CRC

​ CRC(迴圈冗餘校驗)嚴格的來說應該叫資料校驗演算法,但是由於其特徵和功能與訊息摘要演算法類似,這裡也可以勉強的稱作訊息摘要演算法。包括CRC8、CRC16、CRC32,後面的數字代表這校驗值的位數,如CRC32則代表校驗值為4個位元組。更新版本更多是由於先前的版本不夠安全,如現在MD4這些安全性是不如MD5的。

2 MD系列

​ MDx (Message-Digest Algorithm x,訊息摘要演算法版本x),MD後面跟的數字代表著演算法版本,如現在常用的MD5,指的就是第五個版本,

3 SHA系列

​ SHA (Secure Hash Algorithm) 是由美國國家標準技術研究院(NIST)制定的,其中包括SHA1、SHA256,SHA384、SHA512等,SHA後面的數字代表著摘要的bit長度,如SHA256則為32個位元組。

4 RIPEMD系列

​ RIPEMD系列是在分析MD4和MD5缺陷的基礎上優化而來的,這裡不詳說。

常用的數字簽名演算法

​ 如前文中非對稱加密演算法中所說。

常用的金鑰交換演算法

​ 金鑰交換演算法主要用於在雙方通訊時,通過一定的手段,獲取通訊中加密訊息內容的對稱加密金鑰,如前文所說,使用RSA也是可以進行金鑰交換的,原理大致可以理解為通訊的一方使用另一方的公鑰對通訊金鑰加密,由於只有私鑰能夠解密,因此只有擁有私鑰的另一方才能夠獲取到通訊金鑰,這就完成了金鑰交換。當然實際應用中會做更多的安全考慮。

​ 常見的金鑰交換演算法有RSA、DH、DHE、ECDH、PSK、SRP等,由於一些金鑰交換演算法並不具備身份認證功能,所以需要和其他演算法配合,從而真正在實際通訊中應用,如將DH和RSA結合,使用DH作金鑰交換演算法,RSA進行簽名認證,則被稱為DH-RSA演算法。這樣的演算法組合還有很多,當遇到的時候能夠知道即可。

以上的內容均為基礎知識,未涉及到演算法本身的實現,重在對安全演算法有個整體的理解。如發現有描述不正確的地方,歡迎指正。

相關文章