一、加密算法概述
加密算法根據內容是否可以還原分為可逆加密和非可逆加密。
可逆加密根據其加密解密是否使用的同一個密鑰而可以分為對稱加密和非對稱加密。
二、對稱加密算法
對稱加密是指在加密和解密時使用同一個密鑰。
舉個簡單的例子,我們對一個壓縮包進行加密時輸入一個密碼,那么我們在解密時輸入同一個密碼進行解密,一個道理。
這種加密方式有一個很大的缺點就是不安全,因為一旦加密用的密鑰泄露了之后,就可以用這個密鑰破解其他所有的密文。
- 加密過程:明文+密鑰a,進行加密,輸出密文。
- 解密過程:密文+密鑰a,進行解密,輸出明文。
另外在多方通信中,密鑰的管理也會非常的麻煩。在數據傳送前,發送方和接收方必須商定好密鑰,然后使雙方都能保存好密鑰。其次如果一方的密鑰被泄露,那么加密信息也就不安全了。另外,每對用戶每次使用對稱加密算法時,都需要使用其他人不知道的唯一秘密鑰,也就是說每一組收發方所使用的密鑰都是唯一的,例如:A電腦與B、C、D都有通信,那么A就得存儲與B、C、D三台電腦通信所用的密鑰。這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成為雙方的負擔。
小結:
優點:速度快,適合加密大量數據。
缺點:密鑰的傳遞存在着安全隱患,若在網絡上傳輸,密鑰泄露,則消息內容泄露。
常見算法:AES、DES、3DES,國密SM4
三、非對稱加密算法
非對稱加密算法是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。該加密算法的原理就是對一極大整數做因數分解的困難性來保證安全性。
一般有2種用法:
- 公鑰加密,私鑰解密。(加密/解密)
- 私鑰加密,公鑰解密。(簽名/驗簽)
3.1 公鑰加密,私鑰解密。(加密/解密)
通常個人保存私鑰,公鑰是公開的(可能同時多人持有)。
公鑰可以被多人(B、C、D)用於數據加密,生成的密文,只能由對應的私鑰進行解密,而私鑰只有A知道,我們可以通過網絡傳遞公鑰,但私鑰從始至終沒有傳遞,所以在安全性上避免了私鑰泄露導致數據泄露。
小結:
優點:非對稱加密與對稱加密相比,其安全性更好,可以避免秘鑰在傳遞過程中泄露。
缺點:加密和解密花費時間長、速度慢,只適合對少量數據進行加密。
算法過程:B是發送方,A是接收方,A、B都有各自的公鑰和私鑰,B使用A的公鑰對信息進行加密傳輸,A收到密文后使用A的私鑰解開。
常見算法:RSA、ECC,國密SM2
3.2 私鑰加密,公鑰解密。(簽名/驗簽)
上述非對稱加密方式看起來,安全性上似乎完美。但是實際上存在一個問題。
公鑰是公開的,任何人可以獲取,那就意味着,除了B、C、D以外的其他人,可以輕易拿到公鑰,傳遞虛假消息給A,A卻無法分辨消息的真實。
所以,在非對稱加密的基礎上進行了改進,解決密文在傳輸過程中可能會被篡改的問題。
那就是對消息內容進行數字簽名,證明這個數據的來源是B/C/D。
(1)簽名
如上圖,B使用A的公鑰加密數據前,增加了簽名的步驟,將摘要信息用發送者B的私鑰加密,與原始數據m一起,再使用接收者A的公鑰進行二次加密,將密文傳送給接收者。
在進行數字簽名時,我們常使用的是 私鑰簽名,公鑰驗簽。即用私鑰對摘要信息進行加密,用對應的公鑰進行解密,得到摘要信息。
(2)驗簽
如上圖,接收者A首先使用自己的私鑰,對密文進行解密,得到簽名+數據m,然后使用發送者B的公鑰,對簽名進行解密,得到摘要1;
同時采用相同的摘要計算方式,計算數據m的摘要,得到摘要2。
比較摘要1和摘要2是否相同,如果相同,則說明原始數據m,沒有被篡改,這條消息不是偽造的,的確是由B發送。因為B的私鑰,只由B自己保管,其他人只有公鑰無法正確加密摘要信息。
小結:
數字簽名過程:
(1)B生成一對密鑰(公鑰和私鑰),私鑰不公開,B自己保留。公鑰為公開的,任何人可以獲取。
(2)B用自己的私鑰對消息加簽,形成簽名,並將加簽的消息和消息本身一起傳遞給A。
(3)A收到消息后,在獲取B的公鑰進行驗簽,如果驗簽出來的內容與消息本身一致,證明消息是B發送的。
所以在實際應用中,根據實際情況,可以同時使用加密和簽名,達到既不泄露也不被篡改的效果,更能保證消息的安全性。
四、Hash算法
單向算法,密文長度固定
Hash算法特別的地方在於它是一種單向算法,用戶可以通過hash算法對目標信息生成一段特定長度的唯一hash值,卻不能通過這個hash值重新獲得目標信息。
因此Hash算法常用在不可還原的密碼存儲、信息完整性校驗等。
Hash算法是不可逆的,而其他加密算法是可逆的。
常見的Hash算法:MD2、MD4、MD5、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1、RIPEMD160,國密SM3
在2004年,證實MD5算法無法防止碰撞(collision),因此不適用於安全性認證,如SSL公開密鑰認證或是數字簽名等用途。
所以,目前SHA-1是流行的用於創建數字簽名的Hash算法。
五、各種加密算法
5.1 對稱加密算法:DES/3DES/AES
DES、3DES、AES 都是 對稱 的 塊加密算法,加解密 的過程是 可逆的。常用的有 AES128、AES192、AES256 。
DES算法
DES 加密算法是一種 分組密碼,以 64 位為分組對數據加密,它的密鑰長度是 56 位,加密解密用同一算法。
DES 加密算法是對 密鑰 進行保密,而 公開算法,包括加密和解密算法。這樣,只有掌握了和發送方 相同密鑰 的人才能解讀由 DES加密算法加密的密文數據。因此,破譯 DES 加密算法實際上就是 搜索密鑰的編碼。對於 56 位長度的 密鑰 來說,如果用 窮舉法 來進行搜索的話,其運算次數為 2 ^ 56 次。
3DES算法
是基於 DES 的 對稱算法,對 一塊數據 用 三個不同的密鑰 進行 三次加密,強度更高。
AES算法
AES 加密算法是密碼學中的 高級加密標准,該加密算法采用 對稱分組密碼體制,密鑰長度的最少支持為 128 位、 192 位、256 位,分組長度 128 位。
AES 本身就是為了取代 DES 的,AES 具有更好的 安全性、效率 和 靈活性。
5.2 非對稱加密算法:RSA/ECC
RSA算法
RSA 加密算法是目前最有影響力的 公鑰加密算法,並且被普遍認為是目前 最優秀的公鑰方案 之一。RSA 是第一個能同時用於 加密 和 數字簽名 的算法,它能夠 抵抗 到目前為止已知的 所有密碼攻擊,已被 ISO 推薦為公鑰數據加密標准。
ECC算法
ECC 也是一種 非對稱加密算法,主要優勢是在某些情況下,它比其他的方法使用 更小的密鑰。不過一個缺點是 加密和解密操作 的實現比其他機制 時間長 (相比 RSA 算法,該算法對 CPU消耗嚴重)。
5.3 Hash算法:MD5/SHA1
MD5算法
MD5 用的是哈希函數,它的典型應用是對一段信息產生 信息摘要,用於確保文件內容的完整一致性,以防止被篡改。嚴格來說,MD5 不是一種 加密算法而是摘要算法。
無論是多長的輸入,MD5 都會輸出長度為 128bits 的一個串 (通常用 16 進制 表示為 32 個字符)。
SHA1算法
SHA1 是和 MD5 一樣流行的 消息摘要算法,然而 SHA1 比 MD5 的 安全性更強。對於長度小於 2 ^ 64 位的消息,SHA1 會產生一個 160 位的 消息摘要。基於 MD5、SHA1 的信息摘要特性以及 不可逆 (一般而言),可以被應用在檢查 文件完整性 以及 數字簽名 等場景。
六、各種加密算法比較
6.1 對稱加密算法比較
名稱 | 密鑰長度 | 運算速度 | 安全性 | 資源消耗 |
DES | 56位 | 較快 | 低 | 中 |
3DES | 112位或168位 | 慢 | 中 | 高 |
AES | 128、192、256位 | 快 | 高 | 低 |
6.2 非對稱加密算法比較
名稱 | 成熟度 | 運算速度 | 安全性 | 資源消耗 |
RSA | 高 | 中 | 高 | 中 |
ECC | 高 | 低 | 高 | 高 |
6.3 散列算法比較
名稱 | 安全性 | 速度 |
SHA-1 | 高 | 慢 |
MD5 | 中 | 快 |
6.4 對稱/非對稱加密算法比較
6.4.1 對稱加密算法
- 密鑰管理:比較難,不適合互聯網,一般用於內部系統
- 安全性:中
- 加密速度:快幾個數量級 (軟件加解密速度至少快 100 倍,每秒可以加解密數 M 比特 數據),適合大數據量的加解密處理
6.4.2 非對稱加密算法
- 密鑰管理:密鑰容易管理
- 安全性:高
- 加密速度:比較慢,適合 小數據量 加解密或數據簽名
(參考博客:https://blog.csdn.net/zyhse/article/details/108696925,https://blog.csdn.net/baidu_22254181/article/details/82594072,感謝)