簡話密碼學3 - 常用加密演算法介紹
簡話密碼學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演算法。這樣的演算法組合還有很多,當遇到的時候能夠知道即可。
以上的內容均為基礎知識,未涉及到演算法本身的實現,重在對安全演算法有個整體的理解。如發現有描述不正確的地方,歡迎指正。
相關文章
- RSA加密演算法簡單介紹以及python實現加密演算法Python
- 動態密碼演算法介紹與實現密碼演算法
- 常用 API 演算法介紹API演算法
- 密碼學系列之:bcrypt加密演算法詳解密碼學加密演算法
- 【筆記】【THM】Introduction to Cryptography(密碼學簡介)筆記密碼學
- 支付對接常用的加密方式介紹以及java程式碼實現加密Java
- AES 加密演算法的詳細介紹加密演算法
- 常用密碼演算法要點密碼演算法
- 密碼引擎-3-加密API研究密碼加密API
- 常見國密演算法簡介演算法
- 密碼學系列之:Argon2加密演算法詳解密碼學Go加密演算法
- 密碼學系列之:加密貨幣中的scrypt演算法密碼學加密演算法
- MHA常用指令碼簡介指令碼
- 密碼學之對稱加密密碼學加密
- RSA加密原理&密碼學&HASH加密密碼學
- 密碼學基礎:編碼方式、訊息摘要演算法、加密演算法總結密碼學演算法加密
- MySQL密碼加密認證的簡單指令碼MySql密碼加密指令碼
- 密碼學簡述密碼學
- steam密碼忘了怎麼辦 steam密碼找回方法介紹密碼
- 密碼學常用解碼網站密碼學網站
- GPT 1-3 簡單介紹GPT
- 常用加密演算法加密演算法
- 元學習簡單介紹
- Linux Bash Shell 指令碼入門(3)——Linux常用命令介紹Linux指令碼
- 商密學習-分組密碼加密模式筆記密碼加密模式筆記
- 實驗一-密碼引擎-3-加密API密碼加密API
- 條形碼生成原理介紹及簡介
- golang 密碼學-1. 對稱加密Golang密碼學加密
- 簡單介紹redis加鎖常用幾種方式Redis
- Docker(3):Dockerfile介紹及簡單示例Docker
- Python資料分析--Numpy常用函式介紹(3)Python函式
- 常用正規表示式匹配程式碼介紹
- 實驗一-密碼引擎-3-加密API研究密碼加密API
- Relief 特徵選擇演算法簡單介紹特徵演算法
- linux常用指令介紹Linux
- etcd 常用操作介紹
- Flutter 常用 Widget 介紹Flutter
- JavaScript常用物件介紹JavaScript物件