交易所頻頻被盜,fomo3d大獎被黑客利用bug獲取,這些都在提醒我們區塊鏈技術目前還不夠成熟,存在許多技術問題,今天班主任就帶大家了解區塊鏈存在的技術問題。
區塊鏈分叉
我們在前面區塊鏈的擴容問題中講到,區塊鏈的擴容就需要升級,那么升級會不會出現問題呢?
在區塊鏈中,數據是存儲在節點中的。如果區塊鏈升級,升級后的版本不能識別之前的版本,用戶們又不會統一升級,可能就有一部分升了級,有一部分沒升級,但大家還是在那記賬、工作。這樣,升級后的用戶會產生新區塊,沒升級的也會產生新區塊,區塊鏈就有了分叉。
如果沒升級的老節點完全無法接受新節點創建的區塊,這就是硬分叉。而老節點如果能接受新節點區塊,但卻不能完全理解和驗證新區塊,那就是軟分叉。
這也是為什么比特幣的每次升級都會造成社區的激烈討論。
什么是重放攻擊?
重放攻擊是黑客常用的一種攻擊手段。是指攻擊者將某個消息或者數據原封不動地多次發送給節點,如果節點多次接收信息或數據不能進行有效識別,就會有重放漏洞。
舉個例子:張三去包子鋪買包子。包子鋪規定先付款再拿包子。張三用支付寶付款。他付完款后給一個服務員看,服務員給了他幾個包子。然后張三又將這個付款信息給另一個服務員看,另一個服務員在不知情的情況下,又給了張三幾個包子。如此重復進行,張三就獲得了不少包子。而這家包子鋪就遇到了重放攻擊。
重放攻擊在區塊鏈上發生分叉時最容易出現。如果新老版本計算機互相不兼容, 黑客就可以將同樣的信息先發給新版本用戶,再發給舊版本用戶,從而使區塊鏈遭受重放攻擊,造成損失。
“雙花問題”如何解決?
張三去包子鋪花了5元錢買包子,他出來后發現饅頭店的饅頭也不錯,想買饅頭,但摸口袋沒錢了,他想用剛才在包子鋪的那5元錢再買饅頭, 可能嗎?
這是不可能的,除非他把包子退給包子鋪。
那如果張三用的不是現金,是數字貨幣呢,數字貨幣就是一些數據,他如果把數據復制下來再去使用呢。
這就出現了雙重支付,也就是區塊鏈的雙花問題。在系統中,可能由于不當操作導致一筆數字資產被重復使用。
時間戳就是解決雙花問題的關鍵。時間戳可以證明他已經在那個時間花掉了那筆錢,不能再用了。
區塊鏈中大家都做算術題不是嗎?如果有兩個人同時解出了這道算術題,怎么解決呢?這也是區塊鏈的雙花問題。
區塊鏈同樣解決了這個問題:如果兩個人同時上傳,雖然這個概率非常小,但是如果發生,我們就要看最后哪一個區塊的鏈條最先連接上6個區塊,才能被確認成功,之后所有的區塊都要在這個鏈上進行,另一條就失效。
什么是51%攻擊問題?
大部分區塊鏈現在看起來是通過誰算得快來爭取記賬權,生成區塊的。但是,如果有一天,有一個節點練就了一種絕技,算得最準最快,每一次都是他獲得記賬權,生成區塊,再如果他有壞心眼的話,那就麻煩了。
石頭村原來是通過擲骰子來決定誰當會計,每個人擲6次,誰擲出的點數多誰當會計。 可是有一天,張三練就了一手絕活,每次都能擲出6點。而村里的其他人都競爭不過他,他就可以一直當這個會計,就可以做手腳。
當一個節點擁有了超過一半的算力,也就是對區塊的絕對力量時,就可以說他擁有了一定的破壞能力,這就叫51%攻擊。
51%攻擊可以有以下一些場景:
實現雙花攻擊。比如他生成區塊后,先不向別人廣播,而是跑到交易所平臺把自己的數字貨幣換成紙質幣提出來。如果提出錢以后,區塊鏈長度還沒有變,而他構造的區塊鏈長度已經是10了,他再廣播出去,網絡也會確認他的是正確的。這時錢已經取出來了,而他廣播出去的區塊卻并沒有提錢的記錄,等于數字貨幣還在他的地址中。
自己有記賬權,就可以阻止一些別人的交易。
他能輕易阻止別的節點獲得記賬權,因為他有絕技。
一項新技術的誕生,注定會面臨很多的問題,但是隨著時間的推進,問題會越來越少,技術也越來越成熟。區塊鏈現在還處于萌芽階段,我們需要給與足夠的耐心和支持,相信未來區塊鏈一定會有顛覆世界的能力。