一、背景:
一直以來,用戶隱私數據的安全都是 MDUKEY 的重中之重。作為最優先級的事項,MDUKEY 存儲服務使用代理重加密、多層加密(應用層、網關層、文件系統層)等技術保護用戶隱私數據,並對用戶數據數據進行最小拆分,分布式存儲,減少數據大面積洩露 的風險,同時保證服務的高可用性。
而在數據安全的基礎上,MDUKEY 使用對稱加密與非對稱加密技術結合的加密方式,以及專業的加解密硬體,提高加解密的速率,保證服務的高吞吐量。
其中,非對稱加密作為區塊鏈領域中的基石,雖然被很多人聽說過,但並不被具體了解。
因此,本文將從加密方式引申開,深入淺出介紹關於非對稱加密算法中的「籤名與加密」。
二、什麼是非對稱加密?
非對稱加密(asymmetric cryptography),也稱為公開密鑰加密(Public-key cryptography),是密碼學的一種算法。它需要兩個密鑰,一個是公開密鑰,另一個是私有密鑰。顧名思義,公鑰可以任意對外發布;而私鑰必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給要通信的另一方。
非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰並將公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密後再發送給甲方;甲方再用自己私鑰對加密後的信息進行解密。甲方想要回復乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。
非對稱加密具有兩個重要的性質:
2.1 加密的雙向性
加密具有雙向性,即公鑰和私鑰中的任一個均可用作加密,此時另一個則用作解密。
使用其中一個密鑰把明文加密後所得的密文,只能用相對應的另一個密鑰才能解密得到原本的明文,甚至連最初用來加密的密鑰也不能用作解密,這是非對稱加密最重要的性質或者說特點。
2.2 公鑰無法推導出私鑰
必須確保使用公鑰無法推導出私鑰,至少妄想使用公鑰推導私鑰必須在計算上是不可行的,否則安全性將不復存在。
雖然兩個密鑰在數學上相關,但如果知道了公鑰,並不能憑此計算出私鑰;因此公鑰可以公開,任意向外發布;而私鑰不公開,絕不透過任何途徑向任何人提供。
三、常見的非對稱加密算法:
目前常見的非對稱加密有RSA算法、 Elgamal算法和橢圓曲線數字籤名算法(ECDSA),其中橢圓曲線數字籤名算法(ECDSA)是區塊鏈中應用最多的方法。
3.1 RSA算法
RSA 是被研究得最廣泛的公鑰算法,從提出到現在已有四十年的歷史,經歷了各種攻擊考驗。RSA的安全性主要依賴大數分解,優勢是秘鑰長度可以增加到任意長度。RSA運算方式造成了籤名內容如果較短,會被很容易修改為攻擊者想要的內容,所以一般還需要將籤名內容進行一次哈希運算,並填充至和私鑰差不多的長度。此外,隨著計算能力的增長,為防止被破解,秘鑰長度也需要不斷增長,目前認為安全的秘鑰長度是2048bit。同時RSA的私鑰生成需要兩個質數的組合,因此尋找更長私鑰的計算速度也更慢。
3.2 Elgamal算法
Elgamal由Taher Elgamal於1985年發明,其基礎是DiffieˉHellman 密鑰交換算法,後者使通信雙方能通過公開通信來推導出只有他們知道的秘密密鑰值[DiffieˉHellman]。
DiffieˉHellman是Whitfield Diffie和Martin Hellman於1976年發明的,被視為第一種 非對稱加密算法,DiffieˉHellman 與RSA的不同之處在於,DiffieˉHellman不是加密算法,它只是生成可用作對稱密鑰的秘密數值。
在DiffieˉHellman密鑰交換過程中,發送方和接收方分別生成一個秘密的隨機數,並根據隨機數推導出公開值,然後,雙方再交換公開值。DiffieˉHellman算法的基礎是具備生成共享密鑰的能力。只要交換了公開值,雙方就能使用自己的私有數和對方的公開值來生成對稱密鑰,稱為共享密鑰。對雙方來說,該對稱密鑰是相同的,可以用於使用對稱加密算法加密數據。
3.3 橢圓曲線數字籤名算法(ECDSA)
橢圓曲線算法是利用在有限域上的橢圓曲線的離散對數問題來加密或籤名的。橢圓曲線的秘鑰和RSA不同,有效範圍會受橢圓曲線參數的限制,因此不能像RSA一樣可以通過增加私鑰長度來提高安全性,對於安全性不夠的曲線,必須修改橢圓曲線的參數,不如RSA靈活。
和RSA算法比,橢圓曲線的優勢在於:私鑰可以選取有效範圍內的任意數,私鑰的生成速度遠快於RSA算法的私鑰。最重要的是相同秘鑰長度的橢圓曲線安全性能高很多,因此達到相同安全等級需要的橢圓曲線秘鑰的長度遠小於RSA秘鑰的長度,因此佔用的存儲空間相對較小,對於存儲比較受限的區塊鏈來說,橢圓曲線更適用。