在 Taproot 中強制使用不平衡的 Merkle 樹怎麼樣?
我注意到 Taproot 中關於 MAST 建構的這句話。
其餘腳本應組織成二叉樹的葉子。如果這些腳本對應的每個條件都具有相同的可能性,則這可以是一個平衡樹。如果每個條件的機率已知,請考慮將樹構造為 Huffman 樹。
但是在平衡 Merkle 樹的情況下,觀察者可以通過 Merkle 證明推斷樹中的層數,從而獲得葉子(腳本)的近似數量。例如,一個 P2TR 最終以時間鎖解鎖,我從 Merkle 證明推斷總共有 2 個腳本。然後我可以猜到另一個鎖是雜湊鎖(因為這是最常見的腳本,有兩個條件,其中一個是時間鎖)。
似乎強制使用者使用不平衡的默克爾樹也是一種選擇(例如隨機初始化係數,然後建構霍夫曼樹)?或者也許放一些假葉子?
例如,一個 P2TR 最終以時間鎖解鎖,我從 Merkle 證明推斷總共有兩個腳本。
你不能肯定地推斷出這一點。您知道腳本取自 Merkle 樹的哪一層(在本例中為第一層),但在第二層、第三層、第四層等可能存在您不知道的腳本。我同意,如果從第一層獲取腳本,則可能(也許很可能)有兩個腳本。
然後我可以猜測這是一個包含雜湊時間鎖的 MAST(因為這是最常見的腳本,有兩個條件,其中一個是時間鎖)。
我不確定你為什麼認為一個帶有時間鎖的葉子腳本會推斷出另一個葉子腳本包含一個雜湊時間鎖。如果您指的是 Lightning,最常見的通道關閉是合作 2-of-2 關閉,其中不需要在輸出中包含替代腳本路徑。在罕見的不合作關閉的情況下,區塊鏈觀察者很明顯這是一個不合作的閃電通道關閉,您無法隱藏這一點。
似乎強制使用者使用不平衡的默克爾樹也是一種選擇(例如隨機初始化係數,然後建構霍夫曼樹)?或者也許放一些假葉子?
您絕對可以隨心所欲地建構 Taproot 樹。您可以將腳本放置在比它們需要的更低的層中,因此在區塊鏈觀察者看來,腳本路徑比實際更多。通常為了節省費用,您會希望將最有可能使用的腳本放在 Merkle 樹的較高層,但如果您更關心隱私,您可能會選擇不這樣做。
答案很簡單,你無法在不完全了解其結構的情況下獨立驗證使用者是否使用了不平衡的 Merkle 樹——這會使所有匿名性優勢變得毫無意義。但是您高估了可以推斷出多少有關 Merkle 樹的資訊。由於在 Taproot 花費期間只顯示一個 Merkle 路徑,除非腳本位於 Merkle 根的正下方——在這種情況下,它可能是樹中唯一的腳本——無法確定定義了多少個花費條件.
然而,為了防止任何人做出合理的猜測,錢包軟體可以在每筆交易中隨機化 Merkle 樹結構,類似於一些錢包隨機打亂交易輸出以偽裝零錢輸出。