区块链中的数学 - EdDSA签名机制
Ed25519 使用了扭曲愛(ài)德華曲線,簽名過(guò)程和之前介紹過(guò)的 Schnorr,secp256k1, sm2 都不一樣,最大的區(qū)別在于沒(méi)有使用隨機(jī)數(shù),這樣產(chǎn)生的簽名結(jié)果是確定性的,即每次對(duì)同一消息簽名結(jié)果相同。
一般說(shuō)來(lái)隨機(jī)數(shù)是安全措施中重要的一種方法,但是隨機(jī)數(shù)的產(chǎn)生也是安全隱患,著名的索尼公司產(chǎn)品 PS3 密鑰泄露事件,就是隨機(jī)數(shù)產(chǎn)生的問(wèn)題導(dǎo)致的。如果你對(duì)之前紹過(guò)的 Schnorr,secp256k1,sm2 等簽名過(guò)程比較熟的的話,就容易理解如果在簽名過(guò)程中出現(xiàn)了這個(gè)相同的隨機(jī)數(shù) r,那么私鑰將很容易被計(jì)算出來(lái),造成泄露。
Why EdDSA ?
為什么要有愛(ài)德華簽名機(jī)制?
這就要從其發(fā)展歷史來(lái)看,從前幾篇的介紹,我們可以知道,愛(ài)德華曲線族的研究比較晚,在愛(ài)德華數(shù)字簽名體制出現(xiàn)之前,已經(jīng)有了橢圓曲線簽名 EcDSA 機(jī)制,基于 Weierstrass 曲線, 代表性的是 secp256r1 和 secp256k1,前者就是 NIST P256 橢圓曲線算法。
如同任何事物都是不斷發(fā)展向前的, 基于橢圓曲線的數(shù)字簽名亦是如此。EdDSA 旨在克服傳統(tǒng)的 EcDSA 的一些不足而誕生。
那么 EcDSA 有哪些不足呢?主要如下:
簽名過(guò)程中不安全的使用隨機(jī)數(shù)【包括安全的隨機(jī)數(shù)發(fā)生器實(shí)現(xiàn)的困難性與程序員正確使用隨機(jī)數(shù)的困難性】,可能導(dǎo)致密鑰泄露
ECDSA 簽名的可鍛造性,參考此篇
簽名偽造:如果不需要提供簽名消息, 可以根據(jù)已有簽名值偽造對(duì)應(yīng)私鑰的簽名值
當(dāng)然效率上的提升是公共點(diǎn),不單獨(dú)列出, 關(guān)于第三點(diǎn)很有意思,“澳本聰”就曾經(jīng)利用“偽造‘的簽名來(lái)冒充”中本聰“,詳細(xì)的過(guò)程下一節(jié)在說(shuō)。
好了, EdDSA 是為改進(jìn)這些不足和提高效率而產(chǎn)生。
關(guān)于 Edwards 曲線和 Weierstrass 曲線的發(fā)展,下面一組圖很生動(dòng)形象:
圖一:兩種曲線原始形狀
圖二:形狀類比海星和烏龜
圖三:比賽賽跑
07 年以后,愛(ài)德華曲線的研究取得快速發(fā)展,后來(lái)居上,但都是在學(xué)術(shù)界,真正的廣泛使用是在 13 年斯諾登事件以后。
EdDSA 簽名機(jī)制優(yōu)點(diǎn)
實(shí)現(xiàn)上做了優(yōu)化,可在多種計(jì)算平臺(tái)上都能達(dá)到較高的性能;
簽名過(guò)程中不需要唯一的隨機(jī)數(shù),能夠避免隨機(jī)數(shù)引發(fā)的安全問(wèn)題;
無(wú)分支和秘密數(shù)據(jù)索引操作,對(duì)于側(cè)信道攻擊等具有更好的免疫效果;
公鑰和簽名值都較小 (Ed25519 公鑰為 32 個(gè)字節(jié), 簽名值為 64 字節(jié)),【注:這一點(diǎn)其實(shí)不明顯,和 secp256r1 和 secp256k1 一樣】
計(jì)算公式是完備 (Complete), 無(wú)需對(duì)不相信的點(diǎn)執(zhí)行點(diǎn)的驗(yàn)證操作;
抵抗碰撞, 弱哈希函數(shù)的碰撞不會(huì)破壞簽名機(jī)制 (PureEdDSA).
問(wèn)題來(lái)了,既然 Ed25519 簽名比較優(yōu)秀,比特幣為什么沒(méi)有采用?
因?yàn)槌霈F(xiàn)時(shí)間較晚!
后來(lái)的一些區(qū)塊鏈項(xiàng)目開(kāi)始采用,包括 Stellar、Near Protocol 等。
小結(jié)
本文主要說(shuō)了 EdDSA 簽名機(jī)制的發(fā)展及其優(yōu)點(diǎn),當(dāng)然了也不是完美的,也有若干瑕疵,后續(xù)在說(shuō)吧。
到此我們已經(jīng)多次提到不安全的隨機(jī)的可能導(dǎo)致泄漏密鑰的問(wèn)題, 具體是怎樣的呢?EcDSA 簽名機(jī)制的弱點(diǎn),其中有一項(xiàng)就是可以一定程度是“偽造”簽名,通過(guò)簽名驗(yàn)證。之所以說(shuō)是一定程度,就代表不是真正意義上的簽名。
Ed25519使用了扭曲愛(ài)德華曲線,簽名過(guò)程和之前介紹過(guò)的Schnorr,secp256k1, sm2都不一樣,最大的區(qū)別在于沒(méi)有使用隨機(jī)數(shù),這樣產(chǎn)生的簽名結(jié)果是確定性的,即每次對(duì)同一消息簽名結(jié)果相同。
總結(jié)
以上是生活随笔為你收集整理的区块链中的数学 - EdDSA签名机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA15.JDK15.7 Hidde
- 下一篇: IETF:名词历史简介互联网精神的典范