理解區塊鏈技術所需的密碼學常識之加解密演算法
1、
密碼學於我而言,是一個非常神祕的概念。今天用“區塊鏈+密碼學”為關鍵詞,Google到一些基礎知識點。主要的學習材料是 ofollow,noindex">《區塊鏈技術》 中“密碼學與安全技術”章節。
咱們繼續。
2、
有關“加密與解密演算法”的新知:
加解密演算法,很重要,是現代密碼學核心技術。
加解密的系統是如何構成的呢?有2個典型元件:演算法和金鑰。——元件這個詞兒很工程師範兒,理解成“元素”,或者“構成模組”也OK吧!其中, 加解密演算法自身是固定不變的,一般是公開可見的!金鑰則是關鍵資訊,需妥善保管。
加解密基本過程圖解:

image
加解密演算法如何分類呢? 按照加解密過程中所使用的金鑰是否相同,分為對稱加密和非對稱加密。
對稱加密Symmetric Cryptography,又稱共有金鑰加密,Common-key cryptography
非對稱加密Asymmetric Cryptography,又稱公鑰加密,Public-key Cryptography
3、
對稱加密演算法:
- 好處是加解密效率(速度快,空間佔用小)和加密強度都很高。
- 缺點是參與方需要提前持有金鑰,一旦有人洩露則系統安全性被破壞;另外如何在不安全通道中提前分發金鑰也是個問題,需要藉助額外的 Diffie–Hellman 協商協議或非對稱加密演算法來實現。
- 對稱加密演算法適用於大量資料的加解密過程;不能用於簽名場景;並且需要提前安全地分發金鑰。
非對稱加密演算法:
- 優點是公私鑰分開,無需安全通道來分發金鑰。
- 缺點是處理速度(特別是生成金鑰和解密過程)往往比較慢,一般比對稱加解密演算法慢 2~3 個數量級;同時加密強度也往往不如對稱加密。
- 適用於簽名場景或金鑰協商過程,但不適於大量資料的加解密。
這兩者的優缺點剛好是顛倒的~
對稱加密和非對稱加密之間,並無誰好誰壞的區別。適用於不同需求,形成互補;有時還能組合使用,形成混合加密機制~
4、
在hash演算法中,我們得知,防碰撞是一件非常重要的事,很多曾經好用的hash演算法因為被成功碰撞而不再商用。那麼在加解密演算法中,是否有這樣明顯的迭代更替,或好壞優劣呢?
有。
其實想來也很正常。密碼學進化的一大天然動力就來自於“解密”,這場“攻防”遊戲持續下去,必然促進雙方共同演化。
對稱加密演算法有:
分組對稱加密代表演算法包括 DES、3DES、AES、IDEA 等。
序列加密,又稱流加密。代表演算法包括 RC4 等。
非對稱加密演算法:
安全性往往基於數學問題,包括大數質因子分解、離散對數、橢圓曲線等經典數學難題。
代表演算法包括:RSA、ElGamal、橢圓曲線(Elliptic Curve Crytosystems,ECC)、SM2 等系列演算法。
以上演算法的專有名詞想來看著很眼暈,盯住看3分鐘,很快也會忘掉吧?不過有個超級常見的專有名詞“橢圓曲線”,還是瞭解下吧!
橢圓曲線演算法:
應用最廣也是強度最早的系列演算法,基於對橢圓曲線上特定點進行特殊乘法逆運算(求離散對數)難以計算的特性。
並非單一演算法,依然是一系列演算法的統稱。
SM2中國國家商用密碼系列演算法標準,也是基於橢圓曲線演算法。
5、
既然是密碼學範疇,那麼任何一個演算法,都需考慮到“攻擊”的可能性與方式。
明文攻擊:利用非對稱加密的公鑰來加密給定明文,獲取對應的密文。
明文攻擊的保護方案:
對同樣的明文使用同樣金鑰進行多次加密,得到的結果完全不同,這就避免了選擇明文攻擊的破壞。
在實現上可以有多種思路。
一種是對明文先進行變形,新增隨機的字串或標記,再對新增後結果進行處理。
另外一種是先用隨機生成的臨時金鑰對明文進行對稱加密,然後再將對稱金鑰進行加密,即利用多層加密機制。
6、
上文提到了對稱加密與非對稱加密各有優劣,於是產生了混合加密。該機制的主要過程為:
先用非對稱加密(計算複雜度較高)協商出一個臨時的對稱加密金鑰(或稱會話金鑰),然後雙方再通過對稱加密演算法(計算複雜度較低)對所傳遞的大量資料進行快速的加密處理。
超沒想到的一件“辣眼睛”,原來眾所熟知的 HTTPS就是混合加密的典型應用案例 :
安全超文字傳輸協議(Hyper Text Transfer Protocol Secure,HTTPS)
與以明文方式傳輸資料的 HTTP 協議不同,HTTPS 在傳統的 HTTP 層和 TCP 層之間引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密層來實現安全傳輸。

image
如果對HTPPS的具體實現過程感興趣,可以直接讀原文。我是暫時直接略過啦。
7、
關於加解密演算法,有幾條重要的常識:
雖然很多加密演算法的安全性建立在數學難題基礎之上,但並非所有演算法的安全性都可以從數學上得到證明。
公認高安全的加密演算法和實現往往是經過長時間充分實踐論證後,才被大家所認可,但不代表其絕對不存在漏洞。使用方式和引數不當,也會造成安全強度的下降。
另一方面,自行設計和發明未經過大規模驗證的加密演算法是一種不太明智的行為。即便不公開演算法加密過程,也很容易被分析和攻擊,無法在安全性上得到足夠保障。
實際上, 現代密碼學演算法的安全性是通過數學難題來提供的,並非通過對演算法自身的實現過程進行保密 。
8、
隨著我的學習筆記學了2個小節,你有沒有暈掉呢?希望沒有~
週末咱們繼續。
著作權所有。如需轉載或引用,請通過本文 PRESS.one 智慧合約 購買授權許可。或採用 PRESSone APP 掃碼:

image.png