比特幣術語opt-out replay protection是什麼意思?


謝邀。

這要分成兩個部分解釋:

1,什麼叫replay protection(重放攻擊保護)呢?實際上這個東西在比特幣語境中的意義和一般信息安全中的意義不太相同。我們拿BCC舉例——BCC是從比特幣分出來的,但是,它的核心只是加大了區塊。所以,從理論上來講,如果你在BTC里授權了一筆交易發給B,同樣的代表這個交易的代碼,放在BCC里也是合法的交易,畢竟兩者的規則除了區塊大小都是完全一樣的。

於是,豈不是我從你那買了10個BTC,等你把這個交易發給BTC的礦工加入到BTC的鏈里之後,我複製下來發給BCC的礦工,礦工可不會管這個交易是誰發給他的,他們只校驗你有沒有合法的簽名——而因為兩者的規則是完全一致的,所以,既然這筆交易在BTC里合法,那麼在BCC里自然也合法。於是,我免費獲得了你10個BCC。

這種事對於雙方哪邊更有利呢?當然是BTC,設想一下,如果BTC里的所有交易在BCC里都同樣有效,那和沒有分叉有什麼區別?所以說對於BCC來說,這種重放交易的行為是一種攻擊,所以他們需要防止這種攻擊。

方法很簡單,把規定的交易格式稍作變更,於是,BCC不接受BTC的交易,這樣才能徹底從BTC獨立出來。

但另一個問題是,BTC接不接受BCC的交易。這似乎不關BCC的事,而且,給BTC找麻煩似乎也符合BCC的利益。但是設想一下,如果你是交易所,有人從你這買了10個BCC,結果你的BTC也少了10個,這你幹嗎?雖然說交易所也有辦法構造一個防止重放的交易,但是交易所為啥要自找麻煩呢?所以,為了被社區接受,BCC還得把讓自己的交易沒法被BTC接受才行。

目前,BCC兩者都設置了。

2,opt-in和opt-out原本是郵政的術語,在這裡指選擇性接受或者選擇性排除,而opt-in和opt-out replay protection,就是我設計一個replay protection的功能,opt-in就是默認這個功能關閉,你可以選擇開啟,而opt-out就是這個功能默認開啟,你可以選擇關閉。你可以理解成前者是默認不加入,後者是默認加入。舉個例子,opt-in就是我加個「不接受交易里出現abc這個字元串的交易」,然後,你可以選擇加入字元串abc來防止replay。opt-out就是我加個「我只接受交易里出現abc這個字元串的交易」,然後,如果你按照原來的規則寫交易的話(不加入字元串abc),你的交易就不會被replay。兩者唯一的區別就是,如果你按照原規則來的話,前者是不防止重放攻擊,後者防止重放攻擊。

我猜題主問這個的原因是最近core和segwit2x的人關於這個的糾紛——具體點說,就是core要求礦工在11月硬分叉的時候加上重放攻擊保護。

這問題其實是這樣——所謂的重放攻擊,是在分叉的情況下才會出現的。而對於現在占多數的礦工派而言,他們是不想分叉的,他們認為11月的硬分叉只是一個升級,大部分的算力都會升級到segwit2x。所以,對於他們而言他們完全沒有任何動力去做重放攻擊保護,因為對於他們而言根本就沒有分叉,不存在重放攻擊,加了保護反而鼓勵了分叉。

然而,core不這麼想,core說你們就是在分叉,你們就是山寨幣,你們的軟體就是惡意軟體。你們是硬分叉的一方所以你們得負責加重放保護,否則,你們這種使不升級的用戶(core的支持者和不明真相的群眾)可能遭受損失的行為是犯法的,我要告你們。

所以,在core的強烈要求下,現在礦工不情不願地寫了個opt-in的重放攻擊保護。

然後,毫無懸念地,被core怒斥為不要臉,耍流氓等等——因為知道重放攻擊的人不用opt-in也能找到別的方法重放保護,而不知道的,大部分也不會知道該怎麼開啟這個重放保護功能。

然而這是可以預料的——因為礦工本來就不想給你加重放保護,這樣你自己不加重放保護就沒法分叉。可是,core自己加重放保護的話,則免不了要面臨硬分叉的風險。

這件事我們還可以持續關注。


bcc的交易簽名格式在分叉點之後就變了,之後的btc交易在bcc網路無法廣播因為格式對不上,反之亦然。這些都是寫到代碼里的,並不需要用戶自己設置開關之類的操作,這也是btcabc的團隊吸取了etc分叉的教訓,避免了重放攻擊帶來的混亂。


推薦閱讀:

中國人民銀行準備發行自己的數字貨幣會是什麼?這對比特幣來說意味著什麼?
怎麼看9.4號出台的關於ICO的新政策?
如何看待ico被判為非法?
如果升級BTS2.0至3.0,有哪些應該改進的地方?
相比POS和DPOS,POW更有利於區塊鏈原生代幣的價格穩定嗎?

TAG:比特幣Bitcoin | 區塊鏈Blockchain |