亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

當(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 撰寫(xiě)的 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   簽名   比特幣  

你可能感興趣的文章

幣圈快訊

  • 6只香港虛擬資產(chǎn)ETF今日成交額為884.48萬(wàn)港元

    2025-07-09 16:25
    金色財(cái)經(jīng)報(bào)道,港股行情數(shù)據(jù)顯示,截止收盤,今日6只香港虛擬資產(chǎn)ETF成交額為884.48萬(wàn)港元,其中:華夏比特幣ETF(3042.HK)的交易額為254萬(wàn)港元,華夏以太幣ETF(3046.HK)的交易額為118萬(wàn)港元,嘉實(shí)比特幣ETF(3439.HK)的交易額為337萬(wàn)港元,嘉實(shí)以太幣ETF(3179.HK)的交易額為64.97萬(wàn)港元,博時(shí)HashKey比特幣ETF(3008.HK)的交易額為46.04萬(wàn)港元,博時(shí)HashKey以太幣ETF(3009.HK)的交易額為64.48萬(wàn)港元。
  • 美聯(lián)儲(chǔ)會(huì)議紀(jì)要凌晨2點(diǎn)公布

    2025-07-09 16:22
    ChainCatcher消息,美聯(lián)儲(chǔ)將于今夜凌晨2:00公布6月會(huì)議紀(jì)要,會(huì)議紀(jì)要或?qū)⒔沂久缆?lián)儲(chǔ)內(nèi)部“鷹鴿之爭(zhēng)”,下半年走向的關(guān)鍵信號(hào)即將揭曉。(金十)
  • ChainCatcher將于明日20:00舉辦「2025下半場(chǎng),AI+Crypto的新看點(diǎn)與新挑戰(zhàn)」主題Space

    2025-07-09 16:09
    ChainCatcher消息,ChainCatcher將于明日20:00在X平臺(tái)上舉辦「2025下半場(chǎng),AI+Crypto的新看點(diǎn)與新挑戰(zhàn)」主題Space活動(dòng)。出席本次Space活動(dòng)嘉賓有:Neura核心貢獻(xiàn)者Kevin、InfinityGroundCOOJenny、0Glabs大中華區(qū)負(fù)責(zé)人Eligos、DeagentAI聯(lián)合創(chuàng)始人Joe。 AI+Crypto作為備受關(guān)注的賽道之一,2025年上半年有哪些突破性進(jìn)展和發(fā)展瓶頸?接下來(lái),又有哪些值得提前關(guān)注的新趨勢(shì)? 明晚20:00,鎖定ChainCatcherXSpace,和我們一起探討AI+Crypto的新看點(diǎn)和新挑戰(zhàn)。
  • 北京:警惕利用“穩(wěn)定幣”等新型概念進(jìn)行非法集資

    2025-07-09 16:07
    金色財(cái)經(jīng)報(bào)道,北京市互聯(lián)網(wǎng)金融行業(yè)協(xié)會(huì)發(fā)布警惕利用“穩(wěn)定幣”等新型概念進(jìn)行非法集資的風(fēng)險(xiǎn)提示:近期,以“穩(wěn)定幣”為代表的各類數(shù)字貨幣及相關(guān)概念受到市場(chǎng)關(guān)注,一些不法機(jī)構(gòu)與個(gè)人,假借“金融創(chuàng)新”“區(qū)塊鏈技術(shù)”“數(shù)字經(jīng)濟(jì)”“數(shù)字資產(chǎn)”等噱頭,利用社會(huì)公眾對(duì)新型金融概念認(rèn)知尚不深入的特點(diǎn),通過(guò)發(fā)行或炒作所謂“虛擬貨幣”“數(shù)字資產(chǎn)”“穩(wěn)定幣投資項(xiàng)目”等方式,承諾高額回報(bào),誘導(dǎo)公眾投入資金參與交易炒作。
  • 北京互金行業(yè)協(xié)會(huì):警惕利用“穩(wěn)定幣”等新型概念進(jìn)行非法集資

    2025-07-09 16:07
    ChainCatcher消息,據(jù)金十報(bào)道,北京市互聯(lián)網(wǎng)金融行業(yè)協(xié)會(huì)發(fā)布警惕利用“穩(wěn)定幣”等新型概念進(jìn)行非法集資的風(fēng)險(xiǎn)提示:近期,以“穩(wěn)定幣”為代表的各類數(shù)字貨幣及相關(guān)概念受到市場(chǎng)關(guān)注,一些不法機(jī)構(gòu)與個(gè)人,假借“金融創(chuàng)新”“區(qū)塊鏈技術(shù)”“數(shù)字經(jīng)濟(jì)”“數(shù)字資產(chǎn)”等噱頭,利用社會(huì)公眾對(duì)新型金融概念認(rèn)知尚不深入的特點(diǎn),通過(guò)發(fā)行或炒作所謂“虛擬貨幣”“數(shù)字資產(chǎn)”“穩(wěn)定幣投資項(xiàng)目”等方式,承諾高額回報(bào),誘導(dǎo)公眾投入資金參與交易炒作。
  • 查看更多