2017年3月27日 星期一

如何對Bitcoin進行Consensus Attack攻擊?

本篇從安全的角度,探討Bitcoin的原理。研究一套系統,若沒有深入思考安全的問題,就談不上真正的了解。如果能對Consensus Attack解釋清楚,那麼對Bitcoin的架構,也差不多了解一半了。

下面的例子,取自於「Mastering Bitcoin」這本書。本來,書中只有文字說明,難懂,何況是英文。我花了一些時間研讀,搞懂之後,用自己的方式,用中文,並且圖文並茂,希望能說明清楚。



Mallory向Carol買一幅畫「The Great Fire」,並且雙方同意用Bitcoin交易。不過Mallory是一個不懷好意的買家,他想用Consensus Attack方式,騙取這幅畫。他要如何做到?

首先,由Mallory的錢包產生兩筆Transaction:tx1和tx2。tx1是用$25,000金額購買這幅畫,錢是給Carol。而tx2是惡意產生出來的Double Spending Transaction,$25,000錢是給Mallory自己。

我們知道,正常情況下,Bitcoin是不允許Double Spending Transaction存在的。因此Consensus Attack就是利用這一點來進行騙取。

Mallory將產生的tx1傳送給Carol,Carol檢查tx1,並且等10分鐘,讓tx1進入blockchain的最新Block,也就是這時tx1的confirmation次數為1。Carol認為這樣交易沒問題,拿到錢,就把這幅畫賣給Mallory。

其實,Mallory將tx1傳給Carol同時,愉愉將惡意的tx2傳給Paul。Paul是惡意的挖礦集團,手下控制Bitcoin世界51%以上的礦工。他們努力挖礦,10分鐘後,也產生新的包含tx2的Block。這個時候,Bitcoin世界就產生Blockchain分叉。

Paul為了搶得自己的那一條Blockchain,他叫手下的礦工,繼續挖礦。他大概有1半以上的機率,先挖到礦,因為他控制了Bitcoin世界51%以上的礦工。再過10分鐘後,如果是他挖到了,那麼他自己的那條Blockchain就變長了,於是他的Blockchain就將會變成主幹。

再經過10分鐘,會有新的Block進來。不管是Paul集團挖到的,還是別人挖到的。這個新的Block會加入Paul的Blockchain。為什麼?因為Paul的Blockchain最長。而較短的那一條Blockchain就會被丟棄,同時裡面的tx1也將會被丟棄。

大家會想,tx1從Block脫離後,為何不能回到Transaction Pool,等待加入下一個Block?我們知道Bitcoin不允許Double Spending Transaction出現。這個時候,tx2己經在blockchain而tx1被踢出去了,tx1反而成為Double Spending Transaction,所以它不會回到transaction pool,而是直接被終結掉。

最後的情況就是,tx1被終結了,只留tx2。於是Carol沒有拿到錢,可是畫已經被Mallory拿走了。

Carol如何預防這種情況?一般來說,大筆金額的交易,要被6個block壓住,才算妥當。所以Carol最好等1個小時,確認tx1被confirm 6次,才能把畫給Mallory。

中本聰論文,最後一段,有算出Consensus Attack的成功機率。個人認為,這是論文的精華之處,以後再為大家解釋一下。

-Count

沒有留言:

張貼留言