區塊鏈中的數字簽名算法


數字簽名算法

常見的數字簽名算法主要有 RSA、DSA、ECDSA 三種。橢圓曲線簽名算法 ECDSA 是用於數字簽名,是 ECC 與 DSA 的結合,整個簽名過程與 DSA 類似,所不一樣的是簽名中采取的算法為 ECC,最后簽名出來的值也是分為 r,s。而 ECC(全稱 Elliptic Curves Cryptography)是一種橢圓曲線密碼編碼學。

secp256k1

secp256k1 是高效密碼組標准(SECG) 協會開發的一套高效的橢圓曲線簽名算法標准。 在比特幣流行之前,secp256k1 並未真正使用過。secp256k1 命名由幾部分組成:sec 來自 SECG 標准,p 表示曲線坐標是素數域,256 表示素數是 256 位長,k 表示它是 Koblitz 曲線的變體,1 表示它是第一個標准中該類型的曲線。

比特幣/以太坊為何選擇secp256k1

那為什么比特幣要選擇 secp256k1 簽名算法而不是其他已流行的算法呢?比特幣開發者社區曾討論過 secp256k1 是否安全。中本聰沒有明確解釋,只是說道”有根據的推測”。從社區的討論中,有推測是其它的曲線,比如secp256r1中的參數是美國國安局精心挑選的,相當於安全性受到權威機構的干涉。總的來說選擇secp256k1是安全和性能考量的結果。
以太坊沿用了比特幣中的數字簽名算法。

libsecp256k1和openssl

長期以來,實現了該算法的第三方庫只有openssl,因此btcoin core一直都引用了此庫。openssl是一個龐大的開源庫,不僅僅實現了橢圓曲線加密算法,在橢圓曲線加密算法中也不僅僅實現了secp256k1這一種橢圓曲線。不久大家就發現了openssl的一些問題,除了自身結構復雜龐大,文檔也不全面,最重要的是,opensssl的算法一致性也有潛在的問題,這會導致區塊鏈發生不可預料的分叉,造成難以估量的損失。
所以自2016年2月13日起,在新發布的bitcoin core 0.12.0版本中,libsecp256k1庫代替了openssl ecdsa。 libsecp256k1中只實現了一種橢圓曲線算法,代碼簡練,很快大部分社區就接收了這種改變。ibsecp256k1已經成為bitcoin社區事實上的標准,成為開發者唯一能選擇的官方庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM