近期 BitCoin 被炒作得沸沸揚揚,看好的唱衰的,莫衷一是。我們不妨讀解一下 BitCoin 的技術原理。了解原理以后,BitCoin 能夠解決什么問題,尚存什么缺陷,自然就一清二楚。剩下的問題,就是討論隨著 BitCoin 的發(fā)展,將會有什么機會。
我們不妨把 BitCoin 體系拆分為四個問題來談,1. 交易(transaction), 2. 支付(payment), 3. 審計(audit), 4. 鑄幣(mintage)。
【1】 交易(transaction)
交易的基本訴求,是付款人(payer)匯款給收款人(payee)。技術挑戰(zhàn)是加密(cryptography),目的是不讓第三者截獲甚至篡改匯款金額。
BitCoin 的交易加密方式沿用了現成的,基于公鑰(public-key)私鑰(private-key)的非對稱加密體系(asymmetric cryptography)。這里沒有什么創(chuàng)新。
[1] 第二節(jié)的圖例中,最左側的框,解釋了 Owner0 給 Owner1 匯款的交易機制,截圖如下。
1. Owner0 先查到 Owner1 的公鑰。用 Owner1 的公鑰(Public Key)把匯款詳情加密。這樣,只有 Owner1 本人用自己的私鑰(Private Key),才能打開加了密的匯款詳情。在圖例中,沒有畫匯款詳情。不過這個小小的敘述的疏忽無妨大雅。
2. 為了方便 Owner1 驗證這筆匯款的確來自 Owner0,而不是別人,Owner0 發(fā)出的匯款單里,除了有加了密的匯款詳情,還有 Owner0 的數字簽名(Signature)。Owner1 拿到匯款時,為了驗證這筆匯款的確來自 Owner0,他可以用 Owner0 的公鑰,來驗證匯款單中 Owner0 的數字簽名。
3. Owner0 發(fā)出匯款單時,匯款單不僅僅投遞到 Owner1,而且還要廣而告之,任何人只要愿意參與 BitCoin 審計,都可以收到全球所有人發(fā)出的所有匯款單。
4. 沿用 1、2、3 的原理,Owner1 給 Owner2 匯款,然后 Owner2 給 Owner3 匯款。BitCoin 通過 Hash 機制,把涉及同一枚 BitCoin 的所有匯款交易(Tranaction)串連起來,目的是為了追查重復付款(double spending)的欺詐行為。
【2】 支付(payment)
當付款人(payer)向收款人(payee)發(fā)出匯款交易(transaction)后,支付過程(payment)并沒有完成。直到收款人簽收了匯款以后,支付過程才正式結束。
在收款人接受匯款以前,他必須確認匯款人沒有重復付款(double spending)。這就類似于我們接受紙幣前,最好驗證一下紙幣是不是假鈔一樣。
BitCoin 驗證重復付款的辦法,是靠群眾檢舉。當收款人收到匯款時,他把匯款單廣而告之。審計站點收到廣而告之的匯款單時,會檢查匯款單中涉及的 BitCoin,是否出現在其它匯款單中,是否被重復付款。如果出現這種重復付款,審計站點會檢舉,并通知收款人拒絕簽收匯款。
BitCoin 保證重復付款的行為,能夠被檢舉,但是不能保證能夠被當場抓獲。[2] 假設了一個場景,
1. 騙子開設了兩個賬號,A 和 B。他先把一枚 BitCoin 由賬號 A 匯款到賬號 B,賬號 B 立刻簽收。賬戶 B 簽收匯款前,沒有把匯款單廣而告之。
2. 然后騙子去 C 的網店買東西,他把同一枚 BitCoin 由賬號 A 匯款到賬號 C。C 收到匯款單后,等待幾秒鐘,如果各個審計網站沒有檢舉,C 就簽收 A 的匯款,同時交付商品。
3. 但是就在 C 等待的時候,騙子把從 A 到 B 的匯款單廣而告之,并且這是一個已經被 B 簽收了的匯款單。因為從 A 到 B 的匯款單是合法的,這個匯款單被各個審計站點接受。
4. 等到 C 簽收了 A 發(fā)來的匯款單,并廣而告之時,各個審計網站會檢舉,說 A 到 C 的匯款單是重復付款,無效。雖然騙子被檢舉,但是 C 已經交付了商品,C 上當了。
為了防范重復付款,現行 BitCoin 的支付方式,有很多可以改進的地方。例如,可以強制付款人給收款人發(fā)匯款單時,必須把匯款單廣而告之,這時匯款單尚未被簽收。然后,當收款人簽收匯款時,也必須再次廣而告之,不過與第一次不同在于,第二次廣而告之的,是已經被簽收的匯款單。
但是似乎到目前為止,還沒有發(fā)現一種數學上完全嚴謹的辦法,能夠徹底杜絕重復支付的發(fā)生。
【3】 審計(audit)
為了杜絕重復付款的欺詐行為,一個簡單的辦法是全球人民每次匯款時,先把匯款單提交給一個權威機構,例如支付寶。支付寶收下付款人匯來的 BitCoin,然后發(fā)另一枚 BitCoin 給實際收款人。這樣做,可以保證收款人收到的 BitCoin 不會有詐,但是不能保證支付寶,從匯款人那里收到的 BitCoin,沒有被重復支付。
舉個例子,假如權威機構除了支付寶以外,還有 Paypal 等等,付款人用同一枚 BitCoin,向兩個收款人匯款,匯款時分別經過支付寶和 Paypal。假如重復支付成功,兩個收款人沒有損失,但是支付寶和 Paypal 中,一定有一家機構被欺詐。
這種防范欺詐的機制,除了技術上有漏洞以外,依賴權威機構的做法,與 BitCoin 的群眾路線的設計理念相違背。
BitCoin 的做法,是把任何一枚 BitCoin,從誕生到當下,每一次交易都記錄在案,而且按時間順序串聯起來。這就像古董,通常要附帶歷史記錄,從制作出售之初,每一次轉手,都被記錄下來,這樣有利于防范被冒牌頂替。
BitCoin 的每次記錄都被廣而告之,并且記錄下來,并且連綴成串。這樣,每一次 BitCoin 的交易,不僅有付款人和收款人參與,而且有第三方審計人參與。審計人可以是專職機構,也可以是任何一臺電腦。審計不僅能夠及時發(fā)現違法操作,例如重復付款,而且即便當時漏網,事后也能回溯。
[1] 第八節(jié)的圖例中,解釋了 BitCoin 交易記錄的串聯的數據結構,截圖如下。
有兩點值得注意,
1. 為了提高審計效率,BitCoin 把多個交易(Transaction)合并成一個塊(Block),同時用 Merkle Tree(又稱 Hash Tree)[3],把這些交易詳情組織起來。
2. 如果每次交易,只包含一枚 BitCoin,那么每枚 BitCoin 的歷史記錄,是一根單線。但是事實上,每次交易,可以涉及多枚 BitCoins,所以,交易的歷史記錄,不僅有單線,還有多根單線合并成一根線的情況。
【4】 鑄幣(mintage)
在 BitCoin 體系中,任何參與審計的人,都自動參與貨幣的生產。貨幣的生產,即鑄幣(mintage)的過程,在 BitCoin 體系中被稱為挖金礦(gold mining)。
從技術上講,審計和鑄幣完全是可以拆分的兩件事情。把鑄幣權與參與審計綁定在一起,是游戲規(guī)則的設定,目的是發(fā)動群眾,共同維護 BitCoin 的誠信體系。
另外,BitCoin 的總蘊藏量,被預先設定了上限。這樣做的目的,是通過限制貨幣流通量,遏制通貨膨脹。
從技術上來看,完全可以把 BitCoin 體系當成一個工具箱,用這些工具,配置不同的規(guī)則,從而創(chuàng)造另一種貨幣體系。
例如,
1. 可以設定只有政府才有資格挖金礦,從而把鑄幣權收歸政府。
2. 不必設定貨幣流通上限,而是可以根據新增財富,來增加貨幣發(fā)行。
3. 可以通過認證,給每個付款人設定信用值,用于加快支付簽收速度。
4. 也可以通過保險,讓每一筆匯款交易的收款人,立刻簽收匯款。如果出現重復付款,保險公司賠付。
5. 雖然理論上每個人(實際上是每臺電腦),都有資格成為審計員,實際上,必定會出現大型機構,憑借強大的計算和存儲能力,成為專業(yè)審計機構。
推薦閱讀
昨日19點后,登錄“御景灣”項目購房申請網站,網頁打開依舊極其緩慢。網絡截圖 新京報訊昨日,北京首個自住型商品住房項目,位于豆各莊的“御景灣>>>詳細閱讀
本文標題:解密比特幣
地址:http://www.xglongwei.com/a/05/20131202/292038.html