區塊鏈防雙花
Ⅰ 在區塊鏈中,雙花問題是什麼問題呢
什麼是雙花問題呢?
雙花問題,簡單講就是一筆錢能被花兩次三次很多次。為什麼雙花問題會成為比特幣系統裡面一個這么重要的問題呢?
原因就在於:比特幣,是虛擬貨幣,它是虛擬的,通過代碼形式呈現出來的,是可以被復制下來的。一旦被攻破了代碼漏洞,那麼就可以循環使用同一筆比特幣,這樣一來,比特幣這種「錢」就會變得很雞肋。
我們想一下,要是一筆錢可以花很多次,你有500塊錢,你去買一件500塊錢的衣服,還能循環使用,再去買一雙500塊錢的鞋,這樣一來,錢還能叫錢嗎?
所以,中本聰在設定比特幣系統的時候,他所有的技術手段基本上都是圍繞著解決
「雙花問題」的,來保護比特幣作為一種貨幣,它自身的一個支付手段職能。
其實,這個雙花問題在我們現在的中心化世界裡面根本不是問題,因為有銀行,錢的交易結算都是通過銀行,很安全,有問題直接找銀行。
但是,在去中心化世界裡面呢,沒有銀行這樣一個中心機構,還必須保證一筆錢只能花一次,怎麼樣實現在去中心化的前提下,杜絕「雙花問題」呢,這是一個難題。
這里插一句,中本聰為什麼如此執著的追求「去中心化」呢,自找煩惱嗎?不是,他希望能夠通過去中心化,來解決一些社會問題,其中最主要的問題就是:因為權力機構過量發行貨幣造成的通貨膨脹。
所以,我們總結一下他的邏輯:中心化的貨幣增發導致通貨膨脹——所以我們要實現去中心化——去中心化要面臨很多問題,最大的問題是雙花問題——所以我們要解決雙花問題——怎麼解決雙花問題?
這里,中本聰就引入了UTXO和「時間戳」概念,依靠這兩種手段來解決雙花問題。
Ⅱ 區塊鏈的作用和特點是什麼
1.任何節點都可以創建交易,在經過一段時間的確認之後,就可以合理地確認該交易是否為有效,區塊鏈可有效地防止雙花問題的發生。
2.對於試圖重寫或者修改交易記錄而言,它的成本是非常高的。
3.區塊鏈實現了兩種記錄:交易(transactions)以及區塊(blocks)。交易是被存儲在區塊鏈上的實際數據,而區塊則是記錄確認某些交易是在何時,以及以何種順序成為區塊鏈資料庫的一部分。交易是由參與者在正常過程中使用系統所創建的(在加密數字貨幣的例子中,一筆交易是由bob將代幣發送給alice所創建的),而區塊則是由我們稱之為礦工(miners)的單位負責創建。
Ⅲ 什麼是區塊鏈
什麼是區塊鏈?會對以後的生活帶來什麼樣的改變?
區塊鏈是分布式數據存儲、點對點傳輸、共識機制、加密演算法等計算機技術的新型應用模式。
區塊鏈(Blockchain),是比特幣的一個重要概念,它本質上是一個去中心化的資料庫,同時作為比特幣的底層技術,是一串使用密碼學方法相關聯產生的數據塊,每一個數據塊中包含了一批次比特幣網路交易的信息,用於驗證其信息的有效性(防偽)和生成下一個區塊。
比特幣白皮書英文原版其實並未出現 blockchain 一詞,而是使用的 chain of blocks。最早的比特幣白皮書中文翻譯版中,將 chain of blocks 翻譯成了區塊鏈。這是“區塊鏈”這一中文詞最早的出現時間。
國家互聯網信息辦公室2019年1月10日發布《區塊鏈信息服務管理規定》,自2019年2月15日起施行。
狹義來講,區塊鏈是一種按照時間順序將數據區塊以順序相連的方式組合成的一種鏈式數據結構, 並以密碼學方式保證的不可篡改和不可偽造的分布式賬本。
所以終上所述,這無疑是一個改變生活的新技術,未來的整個社會的生產活動都會以區塊鏈作為底層邏輯展開進行,很多事情我們都可以觸手可及,加上人工智慧和大數據的融入,能讓我們輕松搞定現在看來貌似比較繁瑣的事情,比如一些證券市場的交易,和理財活動的智能化匹配。
通俗易懂的說區塊鏈是將人財物,人機物、人場貨一體化,打包做成一個整體;把它放在一個基礎設施上來運行的網路計算中心。
Ⅳ 潛藏在貨幣流轉特性中的秘密,DCEP如何優雅地解決「雙花問題」
上一篇文章我們已經談過,賬戶體系可以完美地解決數據作為貨幣會產生的雙花問題,但由於這種賬戶機制,會使得貨幣的流轉喪失並行的特徵,很難在一個獨立的系統當中容納大量的交易同時進行。
那麼,我們如何才能讓這些賬戶可以實現數據的並行化處理呢?
換一個思路來思考賬戶結構。
我們之前的賬戶體系當中,不同的用戶賬戶所記錄的是一個數字,我們利用一個數字來表示一個用戶手中所持有的貨幣的數量。但現在我們不再使用一個數字來表示賬戶的貨幣數額了,而是將每個貨幣都變為一個獨立的數據段記錄在賬本當中。
當用戶要進行交易的時候,只需要選擇一部分貨幣,並將這這些貨幣復制給新的用戶,同時將原本用戶手裡的貨幣標記為作廢即可。
假設張三的賬戶中存在著100張代表著一元的貨幣,每一個一元貨幣都有著獨一無二的編號,那麼當張三向李四轉移50塊錢的時候,張三隻需要在自己的賬戶當中選擇出這50張貨幣,告訴賬戶的管理者,我要把這50張貨幣轉移給李四。而賬戶的管理者在收到這樣的一個信息請求之後,他就會把這50張貨幣在賬戶當中標記為作廢。與此同時,在李四的賬戶當中產生50張新的一元貨幣。
這種處理方法也就是現在所謂比特幣UTXO結構所採用的一種方式。它的優點在於可以允許貨幣同時由多個賬戶轉向多個賬戶。交易過程中系統會自動加上時間戳,如果用戶用同一筆UTXO付給兩個人,系統中的節點只確認先接收到的那一筆。
然而,實際上比特幣的交易實現,並沒有採用 50 張一元這種做法,而是讓每一個貨幣都有自己的面額。
這也很好理解,因為既然貨幣是可以被生成和銷毀的,那麼為什麼不直接生成一張50元呢,更加簡單便捷。
在比特幣賬戶賬本中,貨幣是以一個字元串的形式來進行記錄的。每一個貨幣都有自己的獨立ID。這個ID是由UTXO交易哈希值與UTXO中的位置索引決定。
這種記賬方式的優勢在於交易邏輯清晰。它可以通過演算法分析出交易之間的依賴關系,並將可以實現一定程度上的交易並行化處理。
盡管並行化的問題得以解決,系統中也存在了真實貨幣的概念,然而用戶並沒有真實擁有這些貨幣,它們被存儲在區塊鏈上。
既然如此,為什麼我們不讓用戶 「拿著」 這些貨幣呢?
聽起來這似乎只是一個簡單的操作,只要將這個貨幣的數據記錄從我們的賬本上拿到用戶手中即可。
但這一個小小的變化,卻能使我們整個系統實現了質的飛躍。
實際上,這就是 DCEP 的設計邏輯。
讓用戶手中真實持有代表貨幣的字元串。這些字元串數據通過數字簽名技術進行簽名,保證貨幣確實由央行發行。
如此,整個DCEP體系擺脫了原有的賬本。體系中流轉的不僅僅是價值,而是現金。用戶的所有交易行為都會被表達為加密字元串的交換過程。通過這樣的方式,真正的實現了貨幣的流轉流程與現金的等價關系。
這種方式可以真正讓數字貨幣的流轉方式模擬了真實貨幣的流轉方式,與現有的任何一種賬本記錄的方式有著本質的區別。
在原本的賬本形式中,用戶所擁有的只是一個證明你身份的字元串,並不是現金。現金是被放在賬本管理機構手中的。換言之,用戶擁有的僅僅是貨幣的價值,而不是貨幣的物理屬性。用戶永遠不知道管理機構利用自己的現金做了什麼。
另外,生活中用戶也並不關注儲存在銀行中的貨幣的編號。他們只需要在使用時,考慮貨幣的面額即可。而這樣的設計會使得貨幣展現出與真實現金的不同特徵。
例如,賬戶中記錄的貨幣是可以被分割的,理論上這種劃分是可以無限進行下去的。賬戶系統中兩個相同的一元並無區別,他們都只是一個在系統中記錄的數字。
說到這里,不得不提及一個來自於區塊鏈行業的概念——NFT。
這個概念與銀行賬戶的價值記錄方式有所不同。它的全稱是非同質化代幣。
簡單來說,就是每一張貨幣都不一樣。如同現金,雖然兩張一百元貨幣的價值都是一百元,但是他們在物理上卻是不相同的。
現實中,每張真實的貨幣都是可以被任何人真實拿在手中的。錢的物理屬性與價值被統一管理。每張貨幣也都擁有一個唯一的編號,這個編號可以用於追蹤貨幣,同時也保證了貨幣本身的獨立性。每一張貨幣都是不可分的。我們不能把一樣百元大鈔撕成兩半,把其中的一半當作五十元來用。那麼,如果我們需要調整貨幣的面額,就要把手中的貨幣進行兌換。
以上這兩種系統的區別,本質上是現金與賬戶的區別。
從這個角度來講,DCEP的設計模式,說明了它就是一種真實的現金。
它的任何屬性,包括流通特性都與真實的現金是一模一樣的。
而在此基礎上,由於數據可以被遠程傳輸和管理,DCEP又比現金有了更大的優勢。
DCEP作為現金的一種表現形式,它的技術設計當然不可能是賬戶機制完成的。
盡管數字貨幣在到達用戶的手中後,可以實現貨幣流通的並行化,但是考慮到由於數據本身是可以被復制的,而用於保證DCEP真實性的數字簽名即使是在被復制之後,也能被正確的驗證,我們仍然需要解決數字貨幣「雙花問題」。
解決這種問題的方法就潛藏在現金貨幣的流轉特性中。
之前已經說過,每一張現金上都是存在一個唯一的編號。
事實上,這個編號就是解決DCEP雙花問題的關鍵。通過編號,我們就能很優雅地解決「雙花問題」。
「雙花問題」問題簡單來說就是,支付方已經將一筆錢付給接收方,但卻依舊擁有被轉移貨幣的支配權。換言之,這筆錢同時被兩個人所擁有了。
從這個角度上來講,避免貨幣「雙花」的核心點,就是保證同一時間,一個貨幣只能被一個人擁有。
在DCEP場景下,通過DCEP本身所具有的編號,我們就可以成功實現追蹤每一張貨幣的所有者。
因此,在 DCEP 體系下,解決問題的方式就是構造一個登記中心,記錄 DCEP 字元串編號與所有者身份編號的映射關系。
正如圖中所述的流程,當Alice向Bob發送一筆數字貨幣時,Alice先向Bob發送自己所擁有的數字貨幣字元串。同時 Alice 也會向數字貨幣登記中心通知,告知數字貨幣登記中心自己的這張貨幣0x001的所有權已經發生了轉移。數字貨幣登記中心會根據Alice所發送的數字簽名信息驗證Alice的身份,確保Alice真實確實是貨幣0x001的所有者的情況下,把這張貨幣的所有權記錄修改為Bob。
雖然我們使用了一個登記中心用於記錄所有貨幣轉移過程的身份變化,但是這個中心並不會限制整個數字貨幣的性能。因為數字貨幣的登記中心所管理的每一張貨幣都是相互獨立的,天然滿足成為 Stateless 的特性。在這個基礎上,整個系統是可以無限並行化擴展的,這也就意味著DCEP的核心系統理論上是可以對外提供無限擴展的高性能支持的。
至於Stateless,這是一個計算機術語。
Stateless的設計可以保證整個系統中不存在性能瓶頸。任何一個系統的設計只要滿足Stateless的特性,那麼這個系統的性能便可以被無限的擴展。
在整個數字貨幣登記中心系統中,每一張貨幣的所有權記錄都是獨立的,正如同真實的現金在社會中流轉的過程。
某種意義上,DCEP的設計目標是為了全國乃至全世界的貨幣流轉過程提供支持。這對整個系統的性能有很高的要求。
而DCEP所採用模擬真實現金流轉過程的技術方案,既能巧妙地解決數字貨幣可能產生的雙花問題,同時又藉助於貨幣流轉的並行化特徵,保證貨幣的流轉結算過程可以被完美地並行化處理。
無論從區塊鏈上加密貨幣的形態上來看,還是從實現的技術特性上來看,DCEP 的設計模式可以說是與區塊鏈完全不相同的設計模式。
本質上,區塊鏈無論採取什麼樣的形式,它都是一種賬本的形態,而 DCEP 的實現則是一種真實的現金。
顯然,DCEP 的設計更加符合數字貨幣這個場景的需求。
Ⅳ 雙花理論是什麼概念
在學習區塊鏈的過程中,大家一定對會聽到「雙花」這個詞,意思就是雙重支付,或者更直白點就是一筆資金被花費了兩次。這篇文章我們來簡單的分析一下為什麼會有雙花,比特幣是如何避免雙花的。
在傳統的交易中,因為有銀行這樣的中心化機構,所以是不會存在雙花問題的:每一筆支付都將從你的銀行賬戶中扣除相應的資金,所有的明細在銀行都有記錄。但是在比特幣中,因為沒有賬戶的概念,而是引入了UTXO即未花費交易輸出。因為沒有銀行這樣的中心化機構的保證,當發生一筆交易時就可能存在著雙花的危險:比方說A有一個比特幣,然後他同時構造兩筆交易T1和T2來花費這1個比特幣,其中一個給了B,從B那裡買件衣服,一個給了C,從C那裡買雙鞋。如果不引入某種機制來避免這種情況,那作為數字貨幣的比特幣將沒有任何存在的意義。接下來就來分析一下比特幣是如何做到防止這種「雙花」攻擊的。
(1) 正常情況
首先我們來看看正常情況,說白了就是絕大多數時候,區塊鏈的共識機制就能將雙花消滅在萌芽狀態。我們還是以上面提到的例子來做說明:
假設A構造了兩筆交易T1和T2,將自己價值1btc的UTXO分別轉給了B和C,妄圖同時從B和C那裡獲得好處。然後A幾乎在同一時間將構造好的這兩筆交易廣播至網路。
假設網路中的礦工節點先收到了交易T1,發現這筆交易的資金來源確實沒有被花費過,於是將T1加入到自己的內存交易池中等待打包進區塊。
大部分情況下,這個礦工節點會在不久後又收到交易T2,此時因為T2所指向的交易輸入與已經加入交易池的T1相同,於是礦工節點會拒絕處理該交易。網路中其他的礦工節點都類似,因此A試圖雙花的嘗試胎死腹中。
(2) 分叉情況
上面說的是正常的情況,但是也有非正常的情況要考慮:假設礦工節點M1和M2幾乎在同一時間挖出了區塊,並且很不幸M1挖到區塊時只收到了交易T1,而M2挖到的區塊時只收到了交易T2,這樣交易T1和T2被分別打包進兩個區塊。因為這兩個區塊是差不多同一時間被挖出,於是造成了區塊鏈的分叉:
網路中某些節點(可能是離M1近的)先收到了M1打包的區塊BLK1,於是用該區塊延長自己的區塊鏈,而另外一些節點(鄰近M2的)則先收到M2打包的區塊BLK2,用該區塊延長自己的區塊鏈,於是整個區塊鏈網路
Ⅵ 區塊鏈鼻祖比特幣之8:分叉帶來的雙花支付、51%攻擊與解決辦法
分叉
前面講到了比特幣通過區塊鏈+工作量證明的獨特設計來解決了時間順序,但是不能保證在同一時刻有兩個節點算出了正確的解,雖然這種可能性很低很低。這就帶來了區塊的分叉。
雖然說幾乎同時有兩個節點計算出這一數學問題的可能性微乎其微,但是仍然存在這樣的可能性,所以分叉就以為著同一個區塊的後面可能會跟上兩個不同的區塊。
規則的打破一直要到下一個區塊被人解開。則會立即轉向最長的區塊,而那些短的區塊則會被拋棄。數學問題使得區塊很難被同時拆解。要連續發生多次更是困難。最終區塊鏈會穩定下來。也就是說所有人對最後幾個區塊順序達成共識。分叉意味著,譬如,若你的交易出現在較短的支鏈,它就會失去進入區塊鏈的位置。一般而言,只代表他會回到未確認交易池。然後被納入到下一個區塊。
比特幣網路如何解決分叉帶來的雙花支付
可惜,交易失去區塊位置的潛在可能,給了本來定序系統防範的重復支付攻擊機會。考慮下面的一個攻擊者A,其首先用自己的比特幣交換B節點的貨物,其立即又支付給自己。然後其通過努力的製造更長的鏈條來讓自己的支付替代掉B節點的支付,從而實現了雙重支付,B節點既得不到錢,還失去了貨物。
這時交易會退回到未確認池中,因為A節點已經利用參照同樣的input交易取而代之。節點就會認為Bob的交易無效。因為已使用掉。
你可能會猜測A節點會預先的計算出一支區塊鏈,然後抓住時機發布到網路。但是每個區塊的數學謎題阻擋了這個可能性。如前面所訴,解開區塊是猜測出一個隨機數的過程。一旦得出答案,解出的哈希值就會成為指紋一樣的區塊識別。只要區塊內容有一丁點變化,下一個區塊的參考值就會完全不同。此機制的結果就是無法在區塊鏈中置換區塊。在得到前一個區塊之前,下位區塊無法被解開。前一個區塊的指紋也是雜湊函數的引數之一。
同時,該工作量證明機制還解決了在集體投票表決時,誰是大多數的問題。如果決定大多數的方式是基於IP地址的,一IP地址一票,那麼如果有人擁有分配大量IP地址的權力,則該機制就被破壞了。而工作量證明機制的本質則是一CPU一票。「大多數」的決定表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那麼誠實的鏈條將以最快的速度延長,並超越其他的競爭鏈條。如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之後所有區塊的工作量,並最終趕上和超越誠實節點的工作量。我們將證明,設想一個較慢的攻擊者試圖趕上隨後的區塊,那麼其成功概率將呈指數化遞減。另一個問題是,硬體的運算速度在高速增長,而節點參與網路的程度則會有所起伏。為了解決這個問題,工作量證明的難度(the proof-of-work difficulty)將採用移動平均目標的方法來確定,即令難度指向令每小時生成區塊的速度為某一個預定的平均數。如果區塊生成的速度過快,那麼難度就會提高。
如果有一台超級電腦,能夠在區塊解題中獲勝?
即便是一台超級電腦,或者時幾百上千台電腦也很難贏得解一個區塊的勝利,因為競爭對手不是任一台電腦,而是整個比特幣網路。你可以用買彩票來比擬。操作千百台電腦,如同買了千百張彩票一樣。
51%攻擊是指的什麼
根據前面的例子,我們知道,要想有50%的概率領先其他人解題得到勝利,就需要掌握全網50%以上的算力。要連續領先他人解出區塊,掌握的運算能力還需要高得多。所以區塊鏈中的交易是受到數學競賽所保護。惡意用戶必須和整個網路較量。區塊連接建立的結果,使得在支鏈越前方的交易越安全。惡意的用戶必須在更長的時間贏過全網路,來達成重復支付,替換前面的區塊鏈。所以,系統只有支端末尾易受到重復支付攻擊。這也是為什麼系統建議多等幾個區塊,才能確認收款成功。
個人博客:https://dreamerjonson.com/
Ⅶ 女巫攻擊與雙花攻擊
女巫攻擊 的名字源於1973年由小說《Sybil》改編的同名電影。電影中的女主人公Sybil Dorsett患有分離性身份認同障礙,本身兼有16種人格。
區塊鏈底層是 P2P網路 。網路中各個節點可以隨時加入或退出,為了維持網路的有效性,一般一份數據常常需要部署在若干個分布式節點上。如果一個惡意節點偽裝有多個身份就存在可獲得全部數據的幾率,下面我打個比方:
假設神龍造出了七顆龍珠,並且要將它們分別投放到地球的各個角落。於是神龍昭告天下,讓每個洲來一個人領取龍珠。此時,精通喬裝易容術的我分別假扮出七個不同地域的人來神龍這拿到了龍珠。本來神龍將龍珠放到世界不同的地方基配圓就是為了平衡各地方力量,但是由於我偽造了身份,成功地拿到了全部龍珠,控制了地球。
以上比喻就是女巫攻擊的本質體現。
雙花攻擊是大多區塊鏈加密數字貨幣都要面對的一種攻擊手段。顧名思義,雙花攻擊就是一筆有效的錢被先後花了兩次。
雙花攻擊的可行性完全是由於區塊鏈的共識機制導致。拿比特幣舉例,由於比特幣的POW共識機制屬於最終一致性共識,一筆交易從發布到全網所有節點都達成統一確認需要一定時間,而攻擊者就是利用這個時間間隙進行攻擊。舉個生活中的例子:
假如銀行A有兩個支行B和C。但是,這個銀行的賬目系統比較低效,支行B和C每過1個小時才會去主行A那裡同步賬本。我在主行A中存了100塊錢,過了一個小時後支行B和C同步了賬本,於是我在B和C中都可以查到我擁有100塊錢。之後,我通過支行B用我的賬戶買了100塊錢的好吃的,隨即又通過支行C用我的賬戶賣唯買了100塊錢好玩的。由於支行B和C之間做不到賬目的隨時同步,所以支行C在我去買好玩的時候依然認為我擁搏塌有100塊錢。
以上就是雙花攻擊,並且「雙花」永遠是一種 流通貨幣 所要解決的首要問題。