最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

橢圓曲線簽名算法

當(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 算法圖解。為便于說明,橢圓曲線作在實(shí)數(shù)域上 -

這種算法是很常見的,也非常好用。但還有提升空間。首先,簽名的驗(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)證你的簽名。因此,即使簽名的過程開銷變得更大,讓驗(yà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ì)算過程也有一些不同: $s = k + hash(P,R,m) ⋅ pk$ 。這里 pk 就是你的私鑰,而 $P = pk * G$ 是你的公鑰,m 就是那條消息。驗(yàn)證過程是檢查 $s * G = R + hash(P,R,m) * P$。

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

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

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

1. 批量驗(yàn)證

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

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

但有了 Schnorr 簽名,我們可以把所有的簽名驗(yàn)證等式加起來并節(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)算的角度看,簡直是免費(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ì)希望使用至少兩把不同的私鑰來控制比特幣。一個(gè)在筆記本電腦或者手機(jī)(在線錢包,熱錢包)上使用,而另一個(gè)放在 硬件錢包/冷錢包 里面。即使其中一個(gè)泄露了,我們還是掌控著自己的比特幣。

當(dāng)前,實(shí)現(xiàn)這種錢包的所發(fā)是通過 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 $ )。最后,把它們都加起來即可獲得簽名 $ (R, s) = (R1+R2, s1+s2) $,這就是我們的共享簽名,可用共享公鑰來驗(yàn)證。其他人根本無法看出這是不是一個(gè)聚合簽名,它跟一個(gè)普通的 Schnorr 簽名看起來沒有兩樣。

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

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

這在體驗(yàn)上跟我們現(xiàn)在能做到的沒有什么區(qū)別,而且每當(dāng)你加多一把私鑰,問題就會(huì)變得更加復(fù)雜。假設(shè)你有一筆財(cái)富是用 10 把私鑰共同控制的,而 10 把私鑰分別存放在世界各地,這時(shí)候你要發(fā)送交易,該有多麻煩!在當(dāng)前的 ECDSA 算法中,每個(gè)設(shè)備你都只需要訪問一次,但如果你用上 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è)備都能確保你沒有在知道其他人的隨機(jī)數(shù)之后改變主意收集所有的數(shù)字 Ri 并計(jì)算公共的 R簽名

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

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

在這次攻擊中,黑客獲得了同一筆交易的兩個(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$ 或者說 $pk2=(s2-s2')/(hash(P,R1+R2,m)-hash(P,R1'+R2,m))$。我發(fā)現(xiàn)這就是密鑰聚合最不方便的地方 —— 我們每次都要使用一個(gè)好的隨機(jī)數(shù)生成器,這樣才能安全地聚合。

3. Musig

MuSig 解決了其中一個(gè)問題 —— rogue key 攻擊將不能再奏效。這里的目標(biāo)是把 多方/多個(gè)設(shè)置的簽名和公鑰聚合在一起,但又無需你證明自己具有與這些公鑰相對(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)造特殊的公鑰來發(fā)動(dòng)攻擊。即使攻擊者知道他的 $ hash(L,Patk)×Patk $ 應(yīng)該是什么,他也無法從中推導(dǎo)出 Patk 來 —— 這就跟你想從公鑰中推導(dǎo)出私鑰是一樣的。

簽名構(gòu)造的其它過程跟上面介紹的很像。在生成簽名時(shí),每個(gè)聯(lián)合簽名者都選擇一個(gè)隨機(jī)數(shù) ki 并與他人分享 $Ri = ki * G$。然后他們把所有的隨機(jī)點(diǎn)加起來獲得 $ 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. 默克爾樹多簽名

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

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

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

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

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

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

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

結(jié)論

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

免責(zé)聲明:本文只為提供市場訊息,所有內(nèi)容及觀點(diǎn)僅供參考,不構(gòu)成投資建議,不代表本站觀點(diǎn)和立場。投資者應(yīng)自行決策與交易,對(duì)投資者交易形成的直接或間接損失,作者及本站將不承擔(dān)任何責(zé)任。!
Tag:Schnorr   簽名   比特幣  

你可能感興趣的文章

幣圈快訊

  • 特朗普周五指示美軍不要在伊朗發(fā)動(dòng)新的打擊

    2026-07-26 01:05
    7月26日,據(jù)Axios新聞報(bào)道,兩位消息人士稱,特朗普于當(dāng)?shù)貢r(shí)間周五指示美國軍方不要在伊朗發(fā)動(dòng)新的打擊,打破了近兩周的每日連續(xù)攻擊。特朗普的指令是在此前連續(xù)13天對(duì)伊朗進(jìn)行打擊后作出的。目前尚不清楚特朗普周五的命令是一次性的,還是意味著這種平靜狀態(tài)將持續(xù)下去。特朗普的決定既反映了他愿意為外交留出更多空間,也承認(rèn)了在當(dāng)前未恢復(fù)大規(guī)模作戰(zhàn)行動(dòng)的情況下,美軍打擊的效果已達(dá)到極限。如果特朗普下令恢復(fù)打擊,美軍可以在相對(duì)較短的時(shí)間內(nèi)進(jìn)行動(dòng)員。消息人士稱,美軍仍在為可能恢復(fù)大規(guī)模作戰(zhàn)行動(dòng)制定計(jì)劃,但特朗普尚未下達(dá)朝這一方向推進(jìn)的命令。白宮未作出回應(yīng)。(金十)
  • 俄羅斯最大銀行Sberbank計(jì)劃在12月1日前推出加密交易基礎(chǔ)設(shè)施

    2026-07-26 01:03
    俄羅斯最大銀行Sberbank計(jì)劃在12月1日前推出加密交易基礎(chǔ)設(shè)施和數(shù)字存管服務(wù),以支持受監(jiān)管金融體系。俄羅斯加密交易、托管和結(jié)算新規(guī)將于9月1日生效,持牌中介機(jī)構(gòu)相關(guān)要求將自2027年7月起適用。俄羅斯公開加密交易將限于滿足嚴(yán)格流動(dòng)性和市值門檻的資產(chǎn),境內(nèi)商品和服務(wù)支付仍禁止使用加密資產(chǎn)。
  • Jupiter上已質(zhì)押超過10億枚JUP占代幣總供應(yīng)量約15%

    2026-07-26 00:43
    7月26日,據(jù)MessaribyBlockworks披露,Solana生態(tài)聚合器Jupiter已質(zhì)押超過10億枚JUP,占代幣總供應(yīng)量約15%。
  • 美國銀行預(yù)測:美國今年財(cái)政赤字將突破2萬億美元

    2026-07-26 00:14
    7月26日,美國銀行預(yù)測:美國今年財(cái)政赤字將突破2萬億美元,年度債務(wù)利息支出達(dá)1萬億美元。(新浪財(cái)經(jīng))
  • Solana鏈上累計(jì)代幣化股票交易量已突破80億美元

    2026-07-25 23:44
    7月25日,據(jù)TokensonSolana披露,Solana鏈上累計(jì)代幣化股票交易量已突破80億美元,占鏈上代幣化股票歷史總交易量的96%以上。
  • 查看更多
更多

熱門幣種

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

    BTC

    比特幣

    $ 64210.21¥ 434715.96
    +0.36%
  • ethereum ETH 以太坊

    ETH

    以太坊

    $ 1865.93¥ 12632.71
    +0.38%
  • tether USDT 泰達(dá)幣

    USDT

    泰達(dá)幣

    $ 0.9991¥ 6.7641
    +0.01%
  • binance-coin BNB 幣安幣

    BNB

    幣安幣

    $ 567.61¥ 3842.83
    +1.25%
  • usdc USDC USD Coin

    USDC

    USD Coin

    $ 1.0008¥ 6.7756
    +0%
  • ripple XRP 瑞波幣

    XRP

    瑞波幣

    $ 1.1027¥ 7.4654
    +1.49%
  • solana SOL Solana

    SOL

    Solana

    $ 74.3162¥ 503.13
    +0.64%
  • tron TRX 波場

    TRX

    波場

    $ 0.3321¥ 2.2483
    +0.45%
  • hyperliquid HYPE Hyperliquid

    HYPE

    Hyperliquid

    $ 57.9241¥ 392.15
    -1.38%
  • dogecoin DOGE 狗狗幣

    DOGE

    狗狗幣

    $ 0.072118¥ 0.4882
    +4.96%
潼关县| 布拖县| 正阳县| 尼勒克县| 仙居县| 江源县| 泸水县| 江西省| 呼伦贝尔市| 祁门县| 陕西省| 通河县| 天峨县| 沭阳县| 华容县| 金昌市| 台南市| 建平县| 河曲县| 福建省| 淮安市| 连城县| 濮阳市| 鄢陵县| 新密市| 漳平市| 金秀| 当雄县| 扎囊县| 宜州市| 钟祥市| 南汇区| 贵德县| 山东省| 阿拉善左旗| 大冶市| 灵台县| 彭山县| 天等县| 财经| 泰和县|