欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

當(dāng)前位置:主頁(yè) > 區(qū)塊鏈 > 區(qū)塊鏈技術(shù) > Schnorr 簽名如何提升比特幣

區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣

2021-12-13 15:45:14 | 來(lái)源: | 作者:佚名
這篇文章主要介紹了區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣的相關(guān)資料,希望這篇關(guān)于Schnorr簽名如何提升比特幣的文章,能夠幫助到各位朋友對(duì)Schnorr簽名的深入了解。

在閱讀 Blockstream 撰寫的 MuSig 論文時(shí),我一直在想象,這對(duì)于我一個(gè)比特幣用戶來(lái)說(shuō),到底意味著什么。我發(fā)現(xiàn) Schnorr 簽名的一些特性實(shí)在是非常棒而且便利,但某一些特性則非常煩人。在這篇文章里,我希望能跟各位分享我的想法。不過(guò),我們先快速回顧一下。

橢圓曲線簽名算法

當(dāng)前比特幣的所有權(quán)體系用的是 ECDSA(橢圓曲線簽名算法)。在簽名一條消息 $m$ 時(shí),我們先哈希這條消息,得出一個(gè)哈希值,即 $z = hash(m)$ 。我們也需要一個(gè)隨機(jī)數(shù)(或者至少看似隨機(jī)的數(shù))$k$ 。在這里,我們不希望信任隨機(jī)數(shù)生成器(有太多的錯(cuò)誤和漏洞都與不合格的隨機(jī)數(shù)生成器有關(guān)),所以我們通常使用 RFC6979,基于我們所知的一個(gè)秘密值和我們要簽名的消息,計(jì)算出一個(gè)確定性的 k。

使用私鑰 $pk$ ,我們可以為消息 $m$ 生成一個(gè)簽名,簽名由兩個(gè)數(shù)組成:$r$(隨機(jī)點(diǎn) $R = k * G$ 的 x 坐標(biāo))和 $s = (z + r*pk)/k$。

然后,使用我們的公鑰 $P = pk * G$ ,任何人都可以驗(yàn)證我們的簽名,也就是檢查 $(z/s)×G+(r/s)×P$ 的 x 坐標(biāo)確為 $r$。

區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣

- ECDSA 算法圖解。為便于說(shuō)明,橢圓曲線作在實(shí)數(shù)域上 -

這種算法是很常見(jiàn)的,也非常好用。但還有提升空間。首先,簽名的驗(yàn)證包含除法($1/s$)和兩次點(diǎn)乘法,而這些操作的計(jì)算量都非常大。在比特幣網(wǎng)絡(luò)中,每個(gè)節(jié)點(diǎn)都要驗(yàn)證每一筆交易,所以當(dāng)你在網(wǎng)絡(luò)中發(fā)出一筆交易時(shí),全網(wǎng)幾千個(gè)節(jié)點(diǎn)都要驗(yàn)證你的簽名。因此,即使簽名的過(guò)程開(kāi)銷變得更大,讓驗(yàn)證簽名變得更簡(jiǎn)單也還是非常有好處的。

其次,節(jié)點(diǎn)在驗(yàn)證簽名時(shí),每個(gè)簽名都要單獨(dú)驗(yàn)證。在一個(gè) m-n 的多簽交易中,節(jié)點(diǎn)必須多次驗(yàn)證同一個(gè)簽名。比如一筆 7-11 的多簽名交易,里面包含了 7 個(gè)簽名,網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都要分別驗(yàn)證 7 個(gè)簽名。另外,這種交易的體積也非常大,用戶必須為此付出多得多的手續(xù)費(fèi)。

Schnorr 簽名

Schnorr 簽名的生成方式有些許不同。它不是兩個(gè)標(biāo)量 $(r, s)$,而是一個(gè)點(diǎn) $R$ 和一個(gè)標(biāo)量 $s$ 。類似于 ECDSA 簽名,R 是一個(gè)橢圓曲線上的隨機(jī)點(diǎn) $R = k * G$。而簽名的第二部分 s 的計(jì)算過(guò)程也有一些不同: $s = k + hash(P,R,m) ⋅ pk$ 。這里 pk 就是你的私鑰,而 $P = pk * G$ 是你的公鑰,m 就是那條消息。驗(yàn)證過(guò)程是檢查 $s * G = R + hash(P,R,m) * P$。

區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣

- 圖解 Schnorr 簽名和驗(yàn)證 -

這個(gè)等式是線性的,所以多個(gè)等式可以相加相減而等號(hào)仍然成立。這給我們帶來(lái)了 Schnorr 簽名的多種良好特性。

1. 批量驗(yàn)證

在驗(yàn)證區(qū)塊鏈上的一個(gè)區(qū)塊時(shí),我們需要驗(yàn)證區(qū)塊中所有交易的簽名都是有效的。如果其中一個(gè)是無(wú)效的,無(wú)論是哪一個(gè) —— 我們都必須拒絕掉整個(gè)區(qū)塊。

ECDSA 的每一個(gè)簽名都必須專門驗(yàn)證,意味著如果一個(gè)區(qū)塊中包含 1000 條簽名,那我們就需要計(jì)算 1000 次除法和 2000 次點(diǎn)乘法,總計(jì)約 3000 次繁重的運(yùn)算。

但有了 Schnorr 簽名,我們可以把所有的簽名驗(yàn)證等式加起來(lái)并節(jié)省一些計(jì)算量。在一個(gè)包含 1000 筆交易的區(qū)塊中,我們可以驗(yàn)證:

$(s1+s2+…+s1000) × G=(R1+…+R1000)+(hash(P1,R1,m1)×P1+ hash(P2,R2,m2)×P2+…+hash(P1000,R1000,m1000)×P1000)$

這里就是一連串的點(diǎn)加法(從計(jì)算機(jī)運(yùn)算的角度看,簡(jiǎn)直是免費(fèi)的)和 1001 次點(diǎn)乘法。已經(jīng)是幾乎 3 倍的性能提升了 —— 驗(yàn)證時(shí)只需為每個(gè)簽名付出一次重運(yùn)算。

區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣

- 兩個(gè)簽名的批量驗(yàn)證。因?yàn)轵?yàn)證等式是線性可加的,所以只要所有的簽名都是有效的,這幾個(gè)等式的和等式也必成立。我們節(jié)約了一些運(yùn)算量,因?yàn)闃?biāo)量和點(diǎn)加法比點(diǎn)乘法容易計(jì)算得多。 -

2. 密鑰生成

我們想要安全地保管自己的比特幣,所以我們可能會(huì)希望使用至少兩把不同的私鑰來(lái)控制比特幣。一個(gè)在筆記本電腦或者手機(jī)(在線錢包,熱錢包)上使用,而另一個(gè)放在 硬件錢包/冷錢包 里面。即使其中一個(gè)泄露了,我們還是掌控著自己的比特幣。

當(dāng)前,實(shí)現(xiàn)這種錢包的所發(fā)是通過(guò) 2-2 的多簽名腳本。也就是一筆交易需要包含兩個(gè)獨(dú)立的簽名。

有了 Schnorr 簽名,我們可以使用一對(duì)密鑰 (pk1,pk2),并使用一個(gè)共享公鑰 $P = P1 + P2 = pk1 * G + pk2 * G $ 生成一個(gè)共同簽名。在生成簽名時(shí),我們需要在兩個(gè)設(shè)備上分別生成一個(gè)隨機(jī)數(shù) (k1, k2),并以此生成兩個(gè)隨機(jī)點(diǎn) $Ri = ki * G$,再分別加上 $hash(P, R1 + R2, m)$,就可以獲得 s1 和 s2 了(因?yàn)?$si = ki + hash(P, R, m)* pki $ )。最后,把它們都加起來(lái)即可獲得簽名 $ (R, s) = (R1+R2, s1+s2) $,這就是我們的共享簽名,可用共享公鑰來(lái)驗(yàn)證。其他人根本無(wú)法看出這是不是一個(gè)聚合簽名,它跟一個(gè)普通的 Schnorr 簽名看起來(lái)沒(méi)有兩樣。

不過(guò),這種做法有三個(gè)問(wèn)題。

第一個(gè)問(wèn)題是 UI 上的。要發(fā)起一筆交易,我們需要在兩個(gè)設(shè)備上發(fā)起多輪交互 —— 為了計(jì)算共同的 R,為了簽名。在兩把私鑰的情況下,只需訪問(wèn)一次冷錢包:我們可以在熱錢包里準(zhǔn)備好待簽名的交易,選好 k1 并生成 $R1 = k1 * G$,然后把待簽名的交易和這些數(shù)據(jù)一同傳入冷錢包并簽名。因?yàn)橐呀?jīng)有了 R1,簽名交易在冷錢包中只需一輪就可以完成。從冷錢包中我們得到 R2 和 s2,傳回給熱錢包。熱錢包使用前述的 (k1,R1) 簽名交易,把兩個(gè)簽名加總起來(lái)即可向外廣播交易了。

這在體驗(yàn)上跟我們現(xiàn)在能做到的沒(méi)有什么區(qū)別,而且每當(dāng)你加多一把私鑰,問(wèn)題就會(huì)變得更加復(fù)雜。假設(shè)你有一筆財(cái)富是用 10 把私鑰共同控制的,而 10 把私鑰分別存放在世界各地,這時(shí)候你要發(fā)送交易,該有多麻煩!在當(dāng)前的 ECDSA 算法中,每個(gè)設(shè)備你都只需要訪問(wèn)一次,但如果你用上 Schnorr 的密鑰聚合,則需要兩次,以獲得所有的 Ri 并簽名。在這種情況下,可能不使用聚合,而使用各私鑰單獨(dú)簽名的方式會(huì)好一些 —— 這樣就只需要一輪交互。

文章完成后,我得到了 Manu Drijvers 的反饋:在一個(gè)可證明安全性的多簽名方案中,你需要 3 輪交互:

選擇一個(gè)隨機(jī)數(shù) ki 以及相應(yīng)的隨機(jī)點(diǎn) Ri = ki * G,然后告訴每一個(gè)設(shè)備 Ri 的哈希值 ti=hash(Ri),然后每個(gè)設(shè)備都能確保你沒(méi)有在知道其他人的隨機(jī)數(shù)之后改變主意收集所有的數(shù)字 Ri 并計(jì)算公共的 R簽名

第二個(gè)問(wèn)題是已知的 Rogue 密鑰攻擊。這篇論文講解得非常好,所以我就不贅述了。大概意思是如果你的其中一個(gè)設(shè)備被黑(比如你的熱錢包被劫持),并假裝自己的公鑰是 $(P1 - P2)$,那就可以僅憑私鑰 pk1 便控制兩個(gè)私鑰共享的資金。一個(gè)簡(jiǎn)單的解決方案是,在設(shè)置設(shè)備時(shí),要求使用私鑰給相應(yīng)的公鑰簽名。

還有第三個(gè)重大問(wèn)題。你沒(méi)法使用確定性的 k 來(lái)簽名。如果你使用了確定性的 k,則只需一種簡(jiǎn)單的攻擊,黑客即可獲得你的私鑰。攻擊如下:某個(gè)黑客黑入你的筆記本電腦,完全控制了其中一把私鑰(比如 pk1)。我們感覺(jué)資金仍是安全的,因?yàn)槭褂梦覀兊谋忍貛判枰?pk1 和 pk2 的聚合簽名。所以我們像往常一樣發(fā)起交易,準(zhǔn)備好一筆待簽名的交易和 R1,發(fā)送給我們的硬件錢包,硬件錢包簽名后將 (R2, s2)發(fā)回給熱錢包 …… 然后,熱錢包出錯(cuò)了,沒(méi)法完成簽名和廣播。于是我們?cè)僭囈淮?,但這一次被黑的電腦用了另一個(gè)隨機(jī)數(shù) —— R1' 。我們?cè)谟布X包里簽名了同一筆交易,又將 (R2, s2')發(fā)回給了被黑的電腦。這一次,沒(méi)有下文了 —— 我們所有的比特幣都不翼而飛了。

在這次攻擊中,黑客獲得了同一筆交易的兩個(gè)有效的簽名:(R1, s1, R2, s2) 和 (R1', s1',R2,s2')。這個(gè) R2 是一樣的,但是 $ R = R1 + R2 $ 和 $ R' = R1' + R2 $ 是不同的。這就意味著黑客可以計(jì)算出我們的第二個(gè)私鑰:$s2-s2'=(hash(P,R1+R2,m)-hash(P,R1'+R2,m))⋅pk2$ 或者說(shuō) $pk2=(s2-s2')/(hash(P,R1+R2,m)-hash(P,R1'+R2,m))$。我發(fā)現(xiàn)這就是密鑰聚合最不方便的地方 —— 我們每次都要使用一個(gè)好的隨機(jī)數(shù)生成器,這樣才能安全地聚合。

3. Musig

MuSig 解決了其中一個(gè)問(wèn)題 —— rogue key 攻擊將不能再奏效。這里的目標(biāo)是把 多方/多個(gè)設(shè)置的簽名和公鑰聚合在一起,但又無(wú)需你證明自己具有與這些公鑰相對(duì)應(yīng)的私鑰。

聚合簽名對(duì)應(yīng)著聚合公鑰。但在 MuSig 中,我們不是把所有聯(lián)合簽名者的公鑰直接相加,而是都乘以一些參數(shù),使得聚合公鑰 $ P = hash(L,P1)×P1 + … + hash(L,Pn)×Pn$ 。在這里,$ L = hash(P1,…,Pn) $ —— 這個(gè)公共數(shù)基于所有的公鑰。L 的非線性特性阻止了攻擊者構(gòu)造特殊的公鑰來(lái)發(fā)動(dòng)攻擊。即使攻擊者知道他的 $ hash(L,Patk)×Patk $ 應(yīng)該是什么,他也無(wú)法從中推導(dǎo)出 Patk 來(lái) —— 這就跟你想從公鑰中推導(dǎo)出私鑰是一樣的。

簽名構(gòu)造的其它過(guò)程跟上面介紹的很像。在生成簽名時(shí),每個(gè)聯(lián)合簽名者都選擇一個(gè)隨機(jī)數(shù) ki 并與他人分享 $Ri = ki * G$。然后他們把所有的隨機(jī)點(diǎn)加起來(lái)獲得 $ R=R1+…+Rn$ ,然后生成簽名 $si = ki + hash(P,R,m) ⋅ hash(L,Pi) ⋅ pki$ 。因此,聚合簽名是 $(R, s)=(R1+…+Rn, s1+…+sn)$ ,而驗(yàn)證簽名的方法與以前一樣:$ s×G = R + hash(P,R,m)×P$ 。

4. 默克爾樹(shù)多簽名

你可能也注意到了,MuSig 和密鑰聚合需要 所有簽名者簽名一個(gè)交易。但如果你想做的是 2-3 的多簽名腳本呢?這時(shí)候我們能夠使用簽名聚合嗎,還是不得不使用通常的 OP_CHECKMULTISIG 和分別簽名?(譯者注:OP_CHECKMULTISIG 是比特幣驗(yàn)證橢圓曲線多簽名腳本的操作碼)

先說(shuō)答案,是可以的,但是協(xié)議上將有些許的不同。我們可以開(kāi)發(fā)一個(gè)類似于 OP_CHECKMULTISIG 的操作碼,只不過(guò)是檢查聚合簽名是否對(duì)應(yīng)于公鑰默克爾樹(shù)上的一個(gè)元素。

舉個(gè)例子,如果我們想用公鑰 P1、P2 和 P3 組成一個(gè) 2-3 的多簽名腳本,我們需要用這幾把公鑰的所有兩兩組合 (P1, P2)、(P2, P3)、(P1, P3) 來(lái)構(gòu)建一棵默克爾樹(shù),并把默克爾樹(shù)根公布在鎖定腳本中。

在花費(fèi)比特幣時(shí),我們需要提交一個(gè)簽名和一個(gè)證據(jù),證明這個(gè)簽名所對(duì)應(yīng)的公鑰位于由這個(gè)樹(shù)根標(biāo)記的默克爾樹(shù)上。對(duì)于 2-3 多簽名合約來(lái)說(shuō),樹(shù)上只有 3 個(gè)元素,證據(jù)只需 2 條哈希值 —— 那個(gè)我們想用的公鑰組合的哈希值,還有一個(gè)鄰居的。對(duì)于 7-11 多簽名腳本來(lái)說(shuō),公鑰組合有 11!/7!/4!=330 種,證據(jù)需要 8 條哈希值。通常來(lái)說(shuō),證據(jù)所包含的元素?cái)?shù)量與多簽名的密鑰數(shù)量大體成正比 ,為 $log2(n!/m!/(n-m))$ 。

但有了默克爾公鑰樹(shù),我們就不必局限于 m-n 多簽名腳本了。我們可以做一棵使用任意公鑰組合的樹(shù)。舉個(gè)例子,如果我們有一個(gè)筆記本電腦,一個(gè)手機(jī),一個(gè)硬件錢包和一個(gè)助記詞,我們可以構(gòu)建一棵默克爾樹(shù),允許我們使用 筆記本電腦 + 硬件錢包、手機(jī) + 硬件錢包 或者單獨(dú)的助記詞來(lái)使用比特幣。這是當(dāng)前的 OP_CHECKMULTISIG 做不到的 —— 除非你使用 “IF - Else” 式的流程控制來(lái)構(gòu)造更復(fù)雜的腳本。

區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣

- 聚合公鑰的默克爾樹(shù)。不僅僅是多簽名 -

結(jié)論

Schnorr 簽名很棒,它解決了區(qū)塊驗(yàn)證中的一些計(jì)算開(kāi)銷問(wèn)題,也給了我們密鑰聚合的能力。后者在使用時(shí)有些不便利,但我們不是在強(qiáng)迫大家使用它 —— 無(wú)論如何,我們都可以仍舊使用普通的多簽名方案,使用單獨(dú)的、不聚合的簽名。

我迫不及待想使用 Schnorr 簽名,希望比特幣協(xié)議能盡快納入這種簽名方案。

另外,我也真心喜歡 MuSig,它是個(gè)優(yōu)雅的方案,論文也淺顯易懂。我強(qiáng)烈建議各位有閑之時(shí)通讀全文。

以上就是區(qū)塊鏈知識(shí):Schnorr 簽名如何提升比特幣的詳細(xì)內(nèi)容,更多關(guān)于Schnorr 簽名如何提升比特幣的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

聲明:文章內(nèi)容不代表本站觀點(diǎn)及立場(chǎng),不構(gòu)成本平臺(tái)任何投資建議。本文內(nèi)容僅供參考,風(fēng)險(xiǎn)自擔(dān)!
Tag:Schnorr   簽名   比特幣  

你可能感興趣的文章

熱門幣種

  • 幣名
    最新價(jià)格
    24H漲幅
  • bitcoin BTC 比特幣

    BTC

    比特幣

    $ 118372.97¥ 848497.44
    +0.53%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 3776.61¥ 27070.74
    +1.17%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 3.1877¥ 22.8494
    +1.52%
  • tether USDT 泰達(dá)幣

    USDT

    泰達(dá)幣

    $ 1.0002¥ 7.1694
    +0.02%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 794.85¥ 5697.48
    +1.53%
  • solana SOL Solana

    SOL

    Solana

    $ 186.53¥ 1337.04
    +0.21%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 0.9995¥ 7.1644
    -0.02%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.2386¥ 1.7102
    +1.02%
  • tron TRX 波場(chǎng)

    TRX

    波場(chǎng)

    $ 0.3206¥ 2.298
    +1.07%
  • cardano ADA 艾達(dá)幣

    ADA

    艾達(dá)幣

    $ 0.8268¥ 5.9265
    +0.54%

幣圈快訊

  • TRMLabs:俄羅斯實(shí)體正利用吉爾吉斯斯坦加密貨幣平臺(tái)規(guī)避制裁

    2025-07-27 11:27
    金色財(cái)經(jīng)報(bào)道,根據(jù)區(qū)塊鏈情報(bào)公司TRMLabs發(fā)布的報(bào)告,俄羅斯實(shí)體正利用吉爾吉斯斯坦加密貨幣平臺(tái)規(guī)避制裁,俄羅斯相關(guān)的加密交易活動(dòng)幾乎占據(jù)了吉爾吉斯斯坦加密貨幣行業(yè)的全部,而該國(guó)的加密貨幣行業(yè)在2022年俄烏戰(zhàn)爭(zhēng)之前「幾乎不存在」。鏈上分析顯示已關(guān)閉的俄羅斯交易平臺(tái)Garantex很可能已更名為Grinex,并利用俄羅斯支持的穩(wěn)定幣(如A7A5)進(jìn)行大規(guī)模盧布兌換加密貨幣交易,吉爾吉斯斯坦虛擬資產(chǎn)服務(wù)提供商的交易量在2022年底達(dá)到5900萬(wàn)美元,而在2024年前七個(gè)月迅速飆升至42億美元。這些平臺(tái)已成為俄羅斯實(shí)體對(duì)抗制裁,維持全球金融系統(tǒng)訪問(wèn)的關(guān)鍵渠道。(decrypt)
  • 疑似DeFianceCapital關(guān)聯(lián)地址增持30,366枚ETH,價(jià)值1.14億美元

    2025-07-27 11:27
    金色財(cái)經(jīng)報(bào)道,據(jù)Lookonchain監(jiān)測(cè),一個(gè)可能與DeFianceCapital關(guān)聯(lián)的錢包在過(guò)去28小時(shí)內(nèi)增持了30,366枚ETH,價(jià)值1.14億美元。
  • 數(shù)據(jù):疑似DeFianceCapital地址28小時(shí)內(nèi)買入3.04萬(wàn)枚ETH,價(jià)值約1.14億美元

    2025-07-27 11:21
    ChainCatcher消息,據(jù)Lookonchain監(jiān)測(cè),0xF436開(kāi)頭地址(疑似與DeFianceCapital有關(guān))在過(guò)去28小時(shí)內(nèi)購(gòu)買了30366枚ETH,價(jià)值約1.14億美元。
  • ProjectHunt:去中心化永續(xù)合約和現(xiàn)貨交易平臺(tái)AmpedFinance為過(guò)去7天新增Top人物關(guān)注者最多的項(xiàng)目

    2025-07-27 11:20
    ChainCatcher消息,根據(jù)Web3資產(chǎn)數(shù)據(jù)平臺(tái)RootDataX追蹤數(shù)據(jù)顯示,過(guò)去7天,去中心化永續(xù)合約和現(xiàn)貨交易平臺(tái)AmpedFinance為新增X(推特)Top人物關(guān)注者最多的項(xiàng)目,新關(guān)注該項(xiàng)目的X影響力人物包括Elizabeth伊麗莎白(@Elizabethofyou)、加密KOL雪球(@xueqiu88)、0xBclub(@0xBclub)。
  • ProjectHunt:第三人稱射擊游戲NyanHeroes為過(guò)去7天被Top人物取關(guān)最多的項(xiàng)目

    2025-07-27 11:20
    ChainCatcher消息,根據(jù)Web3資產(chǎn)數(shù)據(jù)平臺(tái)RootDataX追蹤數(shù)據(jù)顯示,過(guò)去7天,第三人稱射擊游戲NyanHeroes為X(推特)Top人物取關(guān)最多的項(xiàng)目,新取關(guān)該項(xiàng)目的X影響力人物包括Crypto影響力者M(jìn)acnBTC(@MacnBTC)。
  • 查看更多