Privacy
為什麼不在 Taproot 的 Tapscript 中加鹽?
使用 MAST 解鎖 UTXO 時需要提供相應的 Merkle 證明,其中將包含未使用腳本的雜湊。對於觀察,似乎可以從雜湊中猜出未使用的腳本。例如,我可能能夠從實際正在執行的腳本中獲取一些公鑰,然後我將其中一個與一些時間鎖結合起來嘗試進行雜湊衝突。
在腳本中添加鹽似乎很容易防止這種情況發生,那麼為什麼 Taproot 沒有這樣做呢?是不是因為上面描述的hash衝突基本不可行,加鹽佔用了額外的witness空間?
一般來說,這不應該是一個問題,因為幾乎可以肯定每個腳本都至少包含一個公鑰,並且您可以在每個分支中使用新的公鑰。
如果您仍然擔心公開腳本的隱私,您可以手動調整其中的公鑰,其中包含所有參與者之間共享的一些秘密(例如,在調整之前,其中所有腳本的串聯雜湊)。或者您甚至可以使用推送操作碼和 OP_DROP 向其中添加額外數據。
鹽用於諸如密碼儲存之類的事情,其中多個使用者可能使用相同的密碼。通過使用鹽,它使數據庫的觀察者混淆了哪些使用者由於不同的鹽而使用相同的密碼。在 Taproot 腳本上使用 salt 的唯一動機是使用者是否使用相同的 Taproot 腳本。但至少使用者的公鑰會有所不同(除非他們使用相同的私鑰),因此除非由同一使用者控制,否則沒有任何 Taproot 腳本是相同的。
顯然使用者不應該對非比特幣服務使用相同的密碼(糟糕的密碼衛生),但對於比特幣來說更嚴重。如果使用者不生成具有足夠熵的比特幣私鑰,他們的比特幣很可能會被盜。
對於觀察,可以從雜湊中猜測未使用的腳本。
猜測安全散列函式的原像是不可行的。它只能通過蠻力(嘗試很多可能的原像)來完成,但是有很多可能的原像,就像大海撈針一樣。