交易延展性,我如何更改簽名?
我有點絕望,因為我無法理解一些我不理解的想法。我希望你能幫助我。先感謝您
一切都與隔離見證有關
問題 1)它說當 bob 向 alice 進行交易時,該交易會轉到 bob 的惡意節點。然後 bob 更改簽名,使其仍然保持有效交易。在那之後,這個交易有可能比其他一些節點在 mempool 中的原始交易發生得更快。並且 BOb 有機會獲得 alice 打算轉移的雙倍 * 金額。我很好奇鮑勃的惡意節點在簽名部分發生了什麼變化,它仍然保持愛麗絲的簽名並且仍然有效?這怎麼可能?
問題 2) 隔離見證是如何工作的?我知道 scriptSig 已從交易中刪除,但它保存在哪裡?
問題3)如果它仍然保存在區塊鏈中,那麼它的大小如何更小,區塊如何比現在擁有更多的交易?
問題 4)他們說簽名部分保存為 merkle 根雜湊。但是節點如何檢查特定簽名是否與特定交易相關?
謝謝你們。我希望你的解釋是有道理的
問題 1)它說當 bob 向 alice 進行交易時,該交易會轉到 bob 的惡意節點。然後 bob 更改簽名,使其仍然保持有效交易。在那之後,這個交易有可能比其他一些節點在 mempool 中的原始交易發生得更快。並且 BOb 有機會獲得 alice 打算轉移的雙倍 * 金額。
不,鮑勃不會得到雙倍的。他將看到兩個相互衝突的交易。不會創建或花費額外的硬幣。這很煩人,錢包不能很好地處理這些相互衝突的交易。
我很好奇鮑勃的惡意節點在簽名部分發生了什麼變化,它仍然保持愛麗絲的簽名並且仍然有效?這怎麼可能?
簽名具有延展性。ECDSA 簽名由兩個值組成,
R
和s
。由於簽名驗證算法的工作原理,可以將 替換為s
它的否定 (-s
)。-s
很容易被第三方計算,因此攻擊者可以計算-s
,將s
值替換為倒數,然後發送新交易。因為由於替換了s
with-s
,交易的內容現在不同了,所以交易有不同的 id 所以被認為是不同的。但它仍然是完全有效的。問題 2) 隔離見證是如何工作的?我知道 scriptSig 已從交易中刪除,但它保存在哪裡?
隔離見證定義了一種新的交易格式,它是原始交易格式的擴展。在這種格式中,添加了一個新欄位,稱為
scriptWitness
. 這scriptWitness
是簽名的地方。對於沒有隔離見證的節點,它們只接收舊格式的交易。他們不會看到scriptWitness
.簽名不會從交易中刪除。他們只是搬到別處。
問題3)如果它仍然保存在區塊鏈中,那麼它的大小如何更小,區塊如何比現在擁有更多的交易?
塊實際上在物理上並不更小。塊大小在沒有硬分叉的情況下增加了。
segwit 所做的還是將塊大小的度量從字節重新定義為稱為權重的新單位。要計算一個塊的權重,你必須查看交易。作為原始交易格式一部分的交易的每個字節都計為 4 個權重單位。作為新隔離見證交易格式一部分的每個字節是 1 個權重單位。一個塊中權重單位的最大數量是 4000000。計算結果是,舊節點不會看到數據超過 1 MB 的塊(因為它們沒有接收到新格式的交易)。
因此,有了這個權重單位的新定義,沒有隔離見證的交易比使用隔離見證的交易擁有更多的權重單位。因此交易“更小”,因此更多交易可以容納在一個塊中。
問題 4)他們說簽名部分保存為 merkle 根雜湊。但是節點如何檢查特定簽名是否與特定交易相關?
簽名不保存在 merkle 根雜湊中。您不能將任何數據保存在雜湊中。簽名被送出到 merkle 根雜湊中。這意味著進入 merkle 根雜湊的數據包括簽名。這樣一來,一旦交易在一個塊中,簽名就不會出現。之所以需要這樣做,是因為 merkle 根僅在 txid 之上,而
scriptWitness
es 不是其中的一部分(它們在 txid 計算中被忽略)。因此,完整的交易雜湊(稱為wtxid
)被用於包含在 coinbase 交易中的見證 merkle 根。這導致該雜湊成為 coinbase 交易的 txid 的一部分,該 txid 進入區塊的 merkle 根。