![Penta 剖析|Penta數字簽名方案介紹](http://p2.ttnews.xyz/loading.gif)
概述
當區塊鏈網絡中的分佈式節點之間進行通信交互時,需要依靠數字簽名技術實現對身份的確認以及驗證信息的真實性、完整性和不可抵賴性從而達成互信。
數字簽名的作用在於:
(1)驗證消息發送方的身份;
(2)驗證消息的完整性。
數字簽名的實現原理是簽名者使用自己的私鑰sk對消息M進行簽名,得到簽名結果S,然後將簽名S和消息M一起發送出去。接收者使用簽名者的公鑰pk對簽名者的簽名進行驗證。
Penta團隊在深入分析考察了多種主流的數字簽名方案後,基於自身獨特設計的賬戶模型和實際業務場景,搭建並實施了Penta數字簽名方案,下面將對此做一個詳細的介紹。
非對稱算法
非對稱算法中每個通信方使用一個公私鑰對(pk,sk),其中私鑰sk自己保密存儲,公鑰pk是公開的。非對稱算法主要有兩個方面的應用:(1)加密方案:使用公鑰對消息進行加密,然後使用私鑰對消息進行解密;(2)簽名:使用私鑰對消息進行簽名,然後使用公鑰對簽名進行驗證。常用的非對稱算法有:
- RSA算法
RSA算法是1977年由Ron Rivest、Adi Shamir和Leonard Adleman共同提出的,是現今使用最廣泛的公鑰密碼算法。RSA算法的安全性基於大整數難分解問題,給定兩個大素數p、q 很容易相乘得到n,而想對n進行因式分解卻異常困難。
- ECC算法
ECC(Elliptic Curve Cryptography)即橢圓曲線密碼算法,其定義了在有限域上的橢圓曲線y²=x³+ax+b(mod p),a,b, p的取值均要滿足一定的構造條件,從而形成基於不同參數的橢圓曲線。橢圓曲線密碼體制的安全性基於橢圓曲線離散對數問題(ECDLP)的困難性,至今沒有有效的破解方法。
ECC和RSA相比,在許多方面都有絕對的優勢,比如抗攻擊性強、計算量小、處理速度快、存儲空間佔用小和帶寬要求低等等。所以在區塊鏈底層技術中更多的使用到了ECC算法。
ECDSA簽名算法
ECDSA全名是Elliptic Curve Digital Signature Algorithm,即橢圓曲線數字簽名算法。其簽名過程如下:
![Penta 剖析|Penta數字簽名方案介紹](http://p2.ttnews.xyz/loading.gif)
鑑於ECC算法具有很好的公鑰算法特性,比特幣使用了基於secp256k1的橢圓曲線的ECDSA作為其數字簽名算法,而以太坊也沿用了這一方案。值得注意的是,ECDSA是一種非確定性的簽名算法。因為隨機數k的存在,對於同一條消息,同一個人每次產生的簽名卻是不一樣的。從函數的角度來理解,簽名函數對同樣的輸入會產生不同的輸出,因為將隨機數混入了簽名函數。
Penta的簽名方案
由於比特幣UTXO模型和以太坊賬戶模型相對較為簡單,並且被簽名的消息大多是普通交易,所以非確定性的ECDSA算法可以很好地勝任簽名和驗證工作。但Penta出於提高系統整體安全性的考慮,在賬戶模型中獨創性地設計了安全私鑰、交易私鑰、共識私鑰和種子私鑰四種不同的私鑰,所以並不能完全遵循傳統的區塊鏈簽名算法。
通過分析,安全私鑰、交易私鑰和共識私鑰相關的消息仍然視為普通交易,所以可以安全地沿用ECDSA算法。但根據DSC共識中隨機抽籤算法的設計,種子私鑰簽名後的值經過Hash後將會作為新的隨機種子來決定下一輪出塊人, 如果沿用非確定性的ECDSA算法,將導致當前出塊人能夠通過反覆簽名產生多個結果,最後選擇一個有利於自己成為下一出塊人的簽名消息向全網廣播,這樣一來就可以操控隨機抽籤算法的隨機種子,從而影響區塊鏈網絡出塊的隨機性、公平性和安全性。
這就是所謂的Stake Grinding攻擊——攻擊者通過執行某些計算或步驟來嘗試以自己的偏好影響隨機性。所以針對種子私鑰的簽名,需要一種確定性簽名方案使其不具有可操控性。Penta團隊經過深入研究和反覆驗證選擇了目前較為先進且成熟的BLS簽名方案。
BLS 簽名方案在 2003 年由 Boneh,Lynn 和 Shacham 三人提出,該簽名方案產生的簽名很短,通常也被稱為短簽名方案。該方案的簽名是橢圓曲線群上的元素,驗證算法使用的是雙線性映射。該方案是一個基於雙線性映射且具有唯一確定性的簽名方案。
BLS 簽名方案主要包含如下四個算法:
目前用來實現雙線性映射的橢圓曲線根據參數設置不同主要分為以下兩類:
BN(Barreto-Naehrig)曲線:一簇易於做雙線性映射的橢圓曲線, 根據簽名長度可分為BN-254、BN-381和BN-512等等。
BLS(Barreto-Lynn-Scott)曲線:一簇稍微古老的Pairing友好的橢圓曲線,代表曲線為BLS12-381。
目前 Zcash 和Dfinity項目使用的均是 BN-254 的曲線,但是近期有研究報告使用數域篩法證明,該曲線安全級別只能達到將近110 比特安全。而BN-381和BLS12-381曲線均能達到 128 比特安全,安全性提高了16%,而相比BN-512的安全級別雖然更高,但隨之帶來的是系統吞吐量下降以及額外的數據存儲開銷。
由於在實際應用中128比特已經保證足夠安全,最終Penta團隊選擇了技術實施上更成熟、代碼庫更完善、應用也更加廣泛的BLS12-381用於種子私鑰簽名。
各種簽名方案的安全級別和簽名長度對比
結語
在本文中,我們介紹了Penta項目中涉及到的包括ECDSA和BLS簽名算法在內的算法相關技術,可見區塊鏈本身的安全性離不開數字簽名技術的可靠性。在未來,Penta團隊仍然會基於最先進的簽名算法進行深入研究,並結合項目實際應用場景不斷加以創新和改進,推進區塊鏈數字簽名和區塊鏈安全技術的持續迭代 。
閱讀更多 Penta公鏈中文社區 的文章