比特幣現金不想採用 SegWit 的主要原因是什麼?
SegWit 的主要風險/缺點是什麼?為什麼比特幣現金社區會進行有風險的硬分叉來避免它?
沒有技術理由不支持隔離見證。
主要的情緒論點是,硬分叉比軟分叉更好,但這最終會導致結果塊中的少數字節不同。SegWit 最初被設計為一個硬分叉,然後才意識到它可以使用傳統的升級路徑來實現,以舉例說明這一點。作為一個硬分叉,SegWit 會大大增加網路中斷,從而獲得幾乎無法估量的效率提升。
當時聲稱礦工可以從 SegWit 地址竊取輸出的說法顯然是錯誤的。P2SH 以類似的方式工作,並且具有相同的威脅模型,即使當時在其腳本中儲存了價值數十億美元的比特幣。由於規則是由節點而不是礦工執行的,這種說法主要是基於對比特幣安全模型的誤解。
它將通過 ASICboost 禁用比特大陸的 ASIC 優勢,目前它仍然適用於比特大陸控制很多的 Bcash。
在此處查看更多詳細資訊:
<https://medium.com/@WhalePanda/asicboost-the-reason-why-bitmain-blocked-segwit-901fd346ee9f>
和:
<https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2017-April/013996.html>
一個月前,我解釋了 ASICBOOST 所利用的比特幣 SHA2 hashcash 的攻擊,以及如果它成為問題,可以用來在網路中阻止它的各種步驟。
雖然大多數關於 ASICBOOST 的討論都集中在公開的實現方法上,但也存在使用它的隱蔽方法。
當我解釋了一種抑制隱蔽 ASICBOOST 的方法時,我意識到我的話幾乎也描述了 SegWit 承諾結構。
SegWit 提案的作者做出了特別努力,以不與任何採礦系統不兼容,特別是在某一時刻改變了設計,以適應具有強制支付地址的採礦晶片。
如果有人意識到利用這種攻擊,就會努力避免不兼容——只是為了分離關注點。但是實施隱蔽攻擊的最佳方法與幾乎任何擴展比特幣交易能力的方法都明顯不兼容;擴展塊除外(它們有自己的問題)。
不兼容將在很大程度上解釋採礦生態系統中某些方面的一些更莫名其妙的行為,因此我開始尋找支持證據。
特定採礦晶片的逆向工程最終證明 ASICBOOST 已在硬體中實現。
在此基礎上,我提供以下 BIP 草案供討論。該提議總體上並不能阻止攻擊,而只是抑制了與比特幣協議改進不兼容的隱蔽形式。
我希望即使是我們這些強烈希望完全阻止 ASICBOOST 的人也可以團結起來支持一項保護措施,通過禁止隱蔽使用它來分離關注點,這可能會阻礙協議的改進。
具體的啟動高度我目前沒有強烈的意見,所以我暫時沒有說明。
BIP:待定層:共識標題:抑制隱蔽 攻擊比特幣 POW 函式作者:Greg Maxwell 狀態:草稿類型:標準跟踪創建: 2016-04-05 許可證:PD
==摘要==
該提案禁止秘密利用比特幣工作量證明功能中的已知漏洞。
本文件中的關鍵詞“必須”、“不得”、“要求”、“應”、“不應”、“應該”、“不應”、“推薦”、“可以”和“可選”是按照 RFC 2119 中的說明進行解釋。
==動機==
由於設計疏忽,比特幣工作量證明功能存在潛在的攻擊,可以讓攻擊礦工節省高達 30% 的能源成本(儘管由於實施成本更可能接近 20%)。
Timo Hanke 和 Sergio Demian Lerner 聲稱擁有這種攻擊的專利,但他們迄今尚未獲得免費和公開使用的許可。他們一直在以商品名 ASICBOOST 行銷其專利許可。該文件對專利的有效性或可執行性不採取任何立場。
利用底層漏洞的主要方法有兩種:一種是高度可檢測且目前未在網路上使用的明顯方法,另一種是與比特幣協議有顯著互動和潛在干擾的隱蔽方法。隱蔽機制不容易被發現,除非通過它對協議的干擾。
特別是,隱蔽方法的協議互動可以阻止良性改進的實施,例如隔離見證。
在撰寫本文時,利用此漏洞可能會導致每年高達 1 億美元的回報(假設 50% 的雜湊算力礦工獲得 30% 的電力優勢,否則採礦處於利潤平衡狀態)。這可能會通過將採礦排除在所有其他參與者的盈利能力之外來產生驚人的集中效應,並且秘密使用這種優化的收入可能會被濫用以顯著扭曲比特幣生態系統以保持優勢。
來自一家主要製造商的採礦 ASIC 的逆向工程顯示,它包含一種未記錄的、未公開的利用這種攻擊的能力。(聲稱擁有該技術專利的各方完全不知道這種用途。)
在上述基礎上,隱蔽利用此漏洞的可能性以及由此導致的採礦過程中的不平等以及對有用改進的干擾對比特幣系統構成了明顯且目前的危險,需要做出回應。
==背景==
這種攻擊的總體構想是 SHA2-256 是一個 merkle damgard 雜湊函式,一次消耗 64 字節的數據。
比特幣探勘過程反复散列一個 80 字節的“塊頭”,同時確定一個位於該頭數據末尾的 32 位隨機數。這意味著對標頭的處理涉及壓縮函式 run 的兩次執行——一次消耗標頭的前 64 個字節,第二次處理剩餘的 16 個字節和填充。
SHA2-256 函式的每個步驟中的初始“消息擴展”操作僅對該步驟的 64 字節輸入進行操作,而不受輸入散列的先前數據的影響。
因此,如果礦工能夠準備一個具有多個不同的前 64 字節塊但相同的 16 字節第二塊的塊頭,他們可以將初始擴展的計算重用於多次試驗。這降低了功耗。
利用這種攻擊有兩種廣泛的方法。顯而易見的方法是嘗試使用不同版本號的候選人。除了擾亂比特幣節點中的軟分叉檢測邏輯之外,這幾乎沒有負面影響,但它非常顯眼並且很容易被阻止。
另一種方法基於這樣一個事實,即送出交易的 merkle 根包含在前 64 個字節中,除了最後 4 個字節。如果礦工發現多個候選根值具有相同的最終 32 位,則他們可以使用該攻擊。
為了找到具有相同尾隨 32 位的多個根,礦工可以使用有效的碰撞查找機制,該機制將找到與預期的 2^16 個候選根的匹配,2^24 次操作以找到 4 路命中,儘管記憶體不足方法需要更多的計算。
生成不同候選者的一個明顯方法是額外研磨 coinbase,但對於非空塊,每次嘗試都需要 13 次左右的額外 sha2 執行,這是非常低效的。
這種低效率可以通過計算散列樹左側候選的 sqrt 數量(例如使用額外的 nonce 研磨)然後使用事務置換或替換小數字的樹右側的額外 sqrt 數量的候選來避免的交易。然後將左側和右側的所有組合與僅單個散列操作相結合,實際上消除了所有與樹相關的成本。
通過這個最終優化,找到具有中等記憶體量的 4 路衝突需要 ~2^24 散列操作,而不是
> > 2^28 次操作需要額外的隨機數研磨,這將大大削弱攻擊的好處。 > > >
該提案阻止的正是這個最終優化。
==新的共識規則==
從區塊 X 開始,直到區塊 Y,每個區塊的 coinbase 交易必須包含 BIP-141 隔離見證承諾或 ID 為 0xaa21a9ef 的正確 WTXID 承諾。
(詳見 BIP-141“承諾結構”)
使用礦工的現有隔離見證自動與此提議兼容。非隔離見證礦工可以通過簡單地包含與作為 getblocktemplate 的一部分返回的預設承諾值匹配的附加輸出變得兼容。
礦工不應在到期高度自動終止承諾。
==討論==
樹左側對右側所有事務的承諾完全阻止了最終的 sqrt 加速。
以要求塊時間戳的最低有效位等於標頭前 64 字節的散列的形式對隱蔽攻擊進行更強的抑制。這會將碰撞空間從 32 位增加到 40 位或更多位。根值可能需要滿足特定的雜湊前綴要求,以增加嘗試候選根所需的計算工作。這些變化將更具破壞性,沒有理由相信目前是必要的。
提議的規則會自動失效。如果由於引入更嚴格的規則或接受版本研磨形式而不再需要它,則沒有理由繼續此要求。如果它在到期時仍然有用,則可以簡單地通過設置更長日期範圍的新軟分叉來擴展規則。
這種日落避免了技術債務的積累,因為在不再需要該規則時保留執行該規則,而無需硬分叉將其刪除。
== 公開攻擊 ==
通過要求標頭版本與 coinbase 交易版本匹配,可以輕鬆阻止非隱蔽形式。
這個提議不包括這個塊,因為這個方法將來可能會不受限制地普遍可用,通常不會干擾協議的改進,並且因為它很容易被檢測到,如果它在未來成為問題,它可能會被阻止.