- 數字貨幣:比特幣數據報告與操作指南
- 李鈞 龔明等
- 371字
- 2019-01-05 10:04:17
2
數字貨幣基本原理
(一)防止貨幣偽造
對于杜絕偽造貨幣,比特幣的解決方案是保留所有貨幣的所有流通信息(即全網總賬本),可對每一個貨幣的來源進行追溯,一直到創造出該貨幣的那個時刻;每進行一次交易,就多記錄一次流通信息,并在點對點網絡上進行廣播,使得所有節點(即參與流通渠道維護的所有計算機)都保存有全部貨幣的全部流通信息。這樣任意一個節點在交易之前就可以輕松發現偽造的貨幣,從而杜絕偽造貨幣的流通。
(二)防止重復支付
為了防止同一個貨幣被同一個人重復花費,中本聰采用了工作量證明法。如前所述,每個交易都要向網絡進行廣播,重復花費多次就意味著多次廣播關于同一個比特幣的交易。其他網絡節點將把其接收到的其中某一次交易放到一個區塊A內(一個區塊包含了多個近期的交易單)進行驗證,驗證方法是進行一次耗時的計算,如果計算成功,則向全網進行廣播。如果另一個節點在區塊A的基礎上完成了下一個區塊B的驗證,它就會把B的區塊掛在A區塊之后,依此類推,形成一個區塊鏈。
對于同一比特幣的多次交易會形成多個區塊鏈,最終的結果就是:哪個鏈條最長,哪個交易就被確認為有效,其他交易則被廢棄。這樣就確保了一個比特幣只能被一個人支付一次。
(三)無須第三方監管
通過工作量證明法,比特幣還基本杜絕了非法篡改歷史交易記錄的可能性,因為歷史記錄一旦被篡改,就意味著某個比特幣的交易記錄出現了一個新分支,篡改者需要自行對新分支進行驗證;與此同時,其他所有網絡節點仍在老分支上進行驗證,持續構造驗證鏈,除非篡改者擁有超越其他所有網絡節點之和的計算能力,否則它的分支增長速度永遠無法追上老分支,結果是他的篡改行為必將被宣告無效。
在所有節點上保存全部交易記錄,通過耗時的計算對交易進行驗證,二者結合起來,就構成了一個安全、可靠的去中心化的支付系統。其本質是把集中監管的工作量交付給一個人人參與的龐大網絡,網絡中的所有節點都承擔監管職責。如欲偽造貨幣或欺騙其他用戶,就是與整個網絡作對,因而無法得逞。
(四)比特幣的發行
比特幣的發行源于貨幣流通渠道自身。由于每個比特幣的每筆交易都需要進行驗證,為了鼓勵節點全身心投入驗證以維護系統的正常運作,中本聰提出了相應的激勵機制:“對每個區塊的第一筆交易進行特殊化處理,該交易產生一枚由該區塊創造者(也就是第一個對交易進行成功驗證的人)擁有的新的電子貨幣。這樣就增加了促使節點支持該網絡的激勵,并在沒有中央集權機構發行貨幣的情況下,提供了一種將電子貨幣分配到流通領域的方法”, “如果某筆交易的輸出值小于輸入值,那么差額就是交易費,該交易費將被增加到該區塊的激勵中”。也就是說,第一批比特幣可被視為“創世紀”比特幣,在被“創造”出來之后進行流通,后續比特幣通過驗證“創世紀”比特幣參與的交易產生,再加入流通渠道,產生滾雪球效應,從而使得比特幣越來越多。
但是比特幣無法永遠增加,由于算法本身的設計,每4年產生的比特幣數值會減半,因而最終比特幣的數量會趨近于2100萬個。
因為對比特幣系統進行維護的人可以通過復雜的計算獲得比特幣獎勵,過程類似于礦工挖礦,因此維護者被稱為“礦工”,其維護行為被稱為“挖礦”。值得注意的是,“礦工”自帶設備(一般為定制化的計算機,又稱礦機)、自發參與維護,因而人數很多且時刻變化,不會形成固定的“第三方監管者”。而在特定的時間間隔內,只有一個礦工能夠得到獎勵,挖礦的爭奪非常激烈,從而保證了系統的安全性和穩固性。
(五)挖礦
比特幣的本質是一個互相驗證的公開記賬系統,而挖礦的本質則是在爭奪記賬權。從工作內容來看,“挖礦”是將過去一段時間內發生的、尚未經過網絡公認的交易信息收集、檢驗、確認,最后打包加密成為一個無法被篡改的交易記錄信息塊,從而成為這個比特幣網絡上公認已經完成的交易記錄,永久保存。
在比特幣的世界里,大約每10分鐘會向公開賬本上記錄一個數據塊,這個數據塊里包含了這10分鐘內全網已被驗證的交易。因為所有的挖礦計算機都在嘗試打包這個數據塊提交,于是最后以誰提交的為最終結果,是需要爭奪的。最終成功生成那個“交易記錄塊”(即區塊)的人,可以獲得伴隨這些交易而生成的交易費用,外加一筆額外的報酬。交易費用一般都是轉出資金方自愿提供給挖礦者的,因此不是系統新增的貨幣;額外的報酬是新生成的比特幣——這就是前面所說的“比特幣的發行”。
比特幣的有限性就由“額外的報酬”數量來控制。依據比特幣系統的設計,大約每10分鐘可以生產一個“交易記錄塊”,最初每生產一個“交易記錄塊”可以獲得50比特幣的額外報酬,這意味著比特幣網絡每天增加7200個比特幣,但是該報酬每4年就會減半,因此最終整個系統中最多只能有2100萬個比特幣。
(六)區塊鏈
礦工們為爭奪記賬權所運行的計算,實際上是根據哈希值反向求解隨機數。大家比賽的是在10分鐘內看誰找到一個隨機數,這個隨機數與上一個數據塊的哈希以及10分鐘內驗證過的新交易記錄合起來可以得到滿足某個條件的最小哈希值。這個值越小對應的比特幣網絡的難度系數越高。由于哈希值的結果相當隨機,無法預知結果大小,所以只能采取窮舉法比拼算力。如果某個礦工10分鐘內沒搶到記賬權,就只能等待下一輪的競爭。
之所以在求解隨機數時要加上一個區塊的哈希,是因為這樣所有的數據塊就被組成了一條可以從前到后不斷驗證的數據鏈條。修改中間任何一個數據塊的任何交易記錄,都會導致從此之后的所有數據塊的哈希無法驗證成功,而如果企圖修改記錄后重新找一個合理值算出符合條件的哈希重新打包,那就意味著之后所有的數據塊都需要重新計算哈希,即使都找到了還必須比整個比特幣網絡計算得更快,才能讓網絡接受你的結果,這意味著攻擊者要擁有超過整個比特幣網絡其他部分的計算力,換句話說,要使用超過整個網絡50%以上的計算力才能保證攻擊有效。
這個數據鏈條就稱為區塊鏈,又稱全網總賬本,它永久保存在每個用戶的計算機上。只有擁有50%以上全網算力才可能篡改這個全網總賬本,比特幣系統就是通過區塊鏈+“挖礦”的機制實現了貨幣無法被偽造、交易無法被篡改和雙重支付無法得逞的目標。
(七)計算難度與確認次數
礦工找到一個有效的哈希值后,就會迅速把生成的數據塊轉發出去,別的礦工收到并認可這個數據塊后,就會以它為基礎進行下一輪的計算。如果期間收到具有更小哈希值的塊,則首先以數據鏈長度為優先,其次以哈希值更小為優先,拋棄之前的結果,在新的基礎上繼續進行下一輪計算。
為了自動協調比特幣的發行速度,系統根據之前若干數據塊生成的平均速度自動調整挖礦難度。如果之前數據塊的生成時間低于10分鐘,就把難度提高,如果高于10分鐘就自動把難度降低。難度提升很簡單,就是降低哈希值的下限,由于哈希算法的特性,這會造成計算量的指數級上升,因而會增加礦工計算的時間。
對于某筆特定的比特幣交易(主要指轉賬,即把比特幣由一個地址轉到另外一個地址),正常情況下,這筆交易的交易單會被打包到當前的數據塊中。當某個礦工計算出了滿足當前數據塊要求的哈希值并廣播出去,這筆交易得到第1次確認。其他礦工過10分鐘后把新的數據塊掛接在當前數據塊之后,區塊鏈延長,每延長一個塊就意味著得到的確認加1。當一筆交易獲得了6次確認,就可以認為這筆交易已經得到了全網的認同,合法、有效,而且不可撤銷。
(八)客戶端錢包軟件
在比特幣體系里,用戶的賬戶(地址)由本地客戶端自動生成,是類似1Gz9XmfTK4aH89MVXky1QxtyMcG44NqDRv的一串字符。用戶告訴別人這一地址后,對方就可以向該地址轉賬了。
比特幣地址其實是一套非對稱密鑰對中的公鑰,這對密鑰通過橢圓曲線算法生成,其獨特之處在于:使用公鑰加密一段信息后,使用公鑰解不開,必須使用私鑰才可以解開;同樣,使用私鑰加密一段信息后,使用私鑰解不開,必須使用公鑰才可以解開。更加獨特的是,根據私鑰可以很容易地算出公鑰,但是根據公鑰幾乎無法算出私鑰。
因此,用戶可以把自己的地址(公鑰)告訴別人,與其進行加密通信。例如,用戶A把自己的公鑰告訴B,然后以自己的私鑰加密信息,用戶B用A的公鑰解開這份加密信息,并可確認該信息由A發出(因為只有用A的公鑰才可以解開);用戶B用A的公鑰加密信息,用戶A用自己的私鑰解開這份加密信息,并可確認該信息是發給自己的(因為只有用自己的私鑰才能解開)。但是用戶絕不能把私鑰告訴別人,因為私鑰唯一確定了地址(公鑰)的所有權,而且無法通過公鑰計算出來。一旦告訴了別人自己的私鑰,就等于把該地址里所存的比特幣拱手讓給了對方,對方可根據私鑰計算出公鑰(地址),然后從區塊鏈(全網總賬本)中查找該地址關聯的比特幣信息,并動用這些比特幣。
用戶賬戶的地址和私鑰都保存在比特幣錢包文件里,一般情況下私鑰是看不見的,由比特幣客戶端軟件自動進行加密、解密運算。因此,錢包文件必須妥善保管,一旦丟失,錢包里所有地址保存的所有比特幣就不安全了,有可能被別人盜走。由于整套比特幣體系的去中心化和匿名性特性,比特幣一旦被盜,沒有任何人有權力或能力找回。
用戶賬戶的地址及對應的私鑰均由客戶端軟件自動生成。由于可使用的地址數目足夠多,理論上超過2160個,而全世界的沙粒僅有約263個,每粒沙子都可以分配297個地址,仍然是一個巨大的天文數字。因此,不同用戶賬戶地址重合的可能性基本上不存在。由于賬戶地址輸入錯誤,導致這一地址恰好是別人賬戶地址的概率,比飛入你眼中的一粒沙,恰好是去年你在海灘踩到的一粒沙的概率還小得多。
(九)比特幣轉賬
因為比特幣不存在現金交易的概念,一切的交易都依靠賬戶間的數字轉移,所以比特幣的支付概念類似于銀行轉賬。假設A有100個比特幣,他要轉賬給B。那么A寫一條信息“從A的地址轉賬100比特幣到B的地址”,然后用自己錢包里的私鑰加密并傳播到整個比特幣網絡上,網絡上的人都用A的地址(公鑰)解密驗證這條信息確實是由A發出,而通過歷史交易數據計算出A的地址確實擁有100個比特幣,于是整個網絡公認此次轉賬操作,搶得記賬權的礦工把當前時間區間內的所有交易記錄(當然包括A給B的轉賬)打包掛在區塊鏈上,A錢包中存款減少100比特幣,B錢包中存款增加100比特幣,并顯示該筆轉賬被確認了一次。大約一個小時后,6次確認完成,B獲得了這100個比特幣的支配權,這次轉賬徹底完成。
非對稱加密技術使這個轉賬過程得以順利實現,礦工的挖礦則保證了交易的合法性、有效性和不可撤回性。
(十)匿名與公開
由于沒有傳統銀行開戶和身份認證的過程,比特幣系統是純匿名的,即無法把用戶賬戶的地址與用戶本人相關聯,擁有某個地址私鑰的人就擁有對該地址的唯一所有權。雖然我們可以根據本地完整的交易記錄查詢每個賬號的流水信息,但卻幾乎沒有辦法知道這個賬號的主人是誰。只要愿意,每個人都可以擁有幾乎無限個地址。同樣也沒有任何人有能力操作他人賬號上的比特幣。這是人類歷史上第一次從技術上保障了“貨幣”不可追蹤、不可凍結、不可未經許可而占有。
反之,賬戶所有人可以輕易證明自己擁有某個地址上的財富。只需要使用私鑰加密一條信息發布出來,大家就可以確認他對該賬戶的擁有權,而不必把私鑰公開,這同樣適用于證明某筆匿名支付確實由某人發出。
當然,雖然比特幣系統是匿名的,但若一個組織愿意公開自己的比特幣賬號,那么整個網絡可以隨時追蹤到該賬號的所有流水信息。每一筆轉賬的到賬時間、數額和支出都可以清晰地看到,相當于直接查詢銀行內部原始賬單。對于NGO(非政府組織)或公益組織來說,可以大幅降低賬目維護成本,做到100%的透明度。2013年的蘆山地震,壹基金就曾接受比特幣捐贈,其比特幣賬目在網絡上清晰可查。
(十一)不可撤銷與不可找回
前面已經提到,如果一筆交易被確認了足夠多次,該交易即不可撤銷、不可逆轉。這意味著,如果一個人錯誤地把比特幣打到另外一個人的合法地址中,除非對方愿意把比特幣再打回來,否則這個人的比特幣將永遠無法追回。因為比特幣世界不存在仲裁者,無法強制用戶進行操作,因此錯誤的交易能否被挽回,只取決于對方的自覺性。
基于同樣的原因,如果用戶的錢包文件(私鑰)損壞,就意味著錢包包含的所有地址上的所有比特幣都徹底丟失了,徹底躺在了交易記錄的歷史中,任何人都可以看到它,但卻得不到。因為這里可沒有拿身份證找回這一碼事。而如果想通過破解私鑰的辦法拿回丟失的比特幣,只能等到量子計算機出現了。依據當前的加密理論,只有量子計算機才有可能在較短時間內破解橢圓曲線加密算法。