Ed25519 使用了扭曲愛德華曲線,簽名程序和之前介紹過的 Schnorr,secp256k1, sm2 都不一樣,最大的區別在于沒有使用亂數,這樣產生的簽名結果是確定性的,即每次對同一訊息簽名結果相同,
一般說來亂數是安全措施中重要的一種方法,但是亂數的產生也是安全隱患,著名的索尼公司產品 PS3 密鑰泄露事件,就是亂數產生的問題導致的,如果你對之前紹過的 Schnorr,secp256k1,sm2 等簽名程序比較熟的的話,就容易理解如果在簽名程序中出現了這個相同的亂數 r,那么私鑰將很容易被計算出來,造成泄露,
Why EdDSA ?
為什么要有愛德華簽名機制?
這就要從其發展歷史來看,從前幾篇的介紹,我們可以知道,愛德華曲線族的研究比較晚,在愛德華數字簽名體制出現之前,已經有了橢圓曲線簽名 EcDSA 機制,基于 Weierstrass 曲線, 代表性的是 secp256r1 和 secp256k1,前者就是 NIST P256 橢圓曲線演算法,
如同任何事物都是不斷發展向前的, 基于橢圓曲線的數字簽名亦是如此,EdDSA 旨在克服傳統的 EcDSA 的一些不足而誕生,
那么 EcDSA 有哪些不足呢?主要如下:
簽名程序中不安全的使用亂數【包括安全的亂數發生器實作的困難性與程式員正確使用亂數的困難性】,可能導致密鑰泄露
ECDSA 簽名的可鍛造性,參考此篇
簽名偽造:如果不需要提供簽名訊息, 可以根據已有簽名值偽造對應私鑰的簽名值
當然效率上的提升是公共點,不單獨列出, 關于第三點很有意思,“澳本聰”就曾經利用“偽造‘的簽名來冒充”中本聰“,詳細的程序下一節在說,
好了, EdDSA 是為改進這些不足和提高效率而產生,
關于 Edwards 曲線和 Weierstrass 曲線的發展,下面一組圖很生動形象:

圖一:兩種曲線原始形狀

圖二:形狀類比海星和烏龜

圖三:比賽賽跑
07 年以后,愛德華曲線的研究取得快速發展,后來居上,但都是在學術界,真正的廣泛使用是在 13 年斯諾登事件以后,
EdDSA 簽名機制優點
實作上做了優化,可在多種計算平臺上都能達到較高的性能;
簽名程序中不需要唯一的亂數,能夠避免亂數引發的安全問題;
無分支和秘密資料索引操作,對于側信道攻擊等具有更好的免疫效果;
公鑰和簽名值都較小 (Ed25519 公鑰為 32 個位元組, 簽名值為 64 位元組),【注:這一點其實不明顯,和 secp256r1 和 secp256k1 一樣】
計算公式是完備 (Complete), 無需對不相信的點執行點的驗證操作;
抵抗碰撞, 弱哈希函式的碰撞不會破壞簽名機制 (PureEdDSA).
問題來了,既然 Ed25519 簽名比較優秀,位元幣為什么沒有采用?
因為出現時間較晚!
后來的一些區塊鏈專案開始采用,包括 Stellar、Near Protocol 等,
小結
本文主要說了 EdDSA 簽名機制的發展及其優點,當然了也不是完美的,也有若干瑕疵,后續在說吧,
到此我們已經多次提到不安全的隨機的可能導致泄漏密鑰的問題, 具體是怎樣的呢?EcDSA 簽名機制的弱點,其中有一項就是可以一定程度是“偽造”簽名,通過簽名驗證,之所以說是一定程度,就代表不是真正意義上的簽名,
Ed25519使用了扭曲愛德華曲線,簽名程序和之前介紹過的Schnorr,secp256k1, sm2都不一樣,最大的區別在于沒有使用亂數,這樣產生的簽名結果是確定性的,即每次對同一訊息簽名結果相同,
CSDN認證博客專家
大司徒
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/231491.html
標籤:區塊鏈
