4.4 在線錢包和交易所

我們已經討論了自己儲存和管理比特幣的不同方法。下面,我們將討論如何通過他人提供的服務實現上述目的。最直接的方法是使用在線錢包。

在線錢包

在線錢包和隨身帶的錢包一樣,只是在線錢包的信息儲存在雲端,你可以通過網頁或手機應用來讀取。2015年年初,比較流行的在線錢包服務是比特幣基地公司(Coinbase)和區塊鏈信息公司(blockchain.info)。

從安全性的角度考慮,最關鍵之處在於網站不僅在你的瀏覽器或手機應用軟件(APP)上運行代碼,而且,網站還儲存著你的密鑰。至少,網站是能夠接觸到你的密鑰的。通常情況下,網站使用密碼來保護密鑰,而密碼只有你一個人知道。當然,你需要信任這個網站,相信它不會洩露你的密鑰或是密碼。

在線錢包的一大優點是方便。你不需要在電腦上安裝任何軟件就可以使用在線錢包;在手機上,你只需安裝一個手機軟件就可以使用錢包,而且,不需要下載區塊鏈。在線錢包可以在各種設備上使用:無論是個人電腦還是手機,因為真正的錢包信息儲存在雲端。

但是,在線錢包也有安全隱患。如果網站或者是網站工作人員有惡意,那麼在線錢包中的比特幣就有危險。在線錢包的服務器運行著所有的代碼,很容易竊取你的比特幣,在線錢包服務提供商如有惡意,情況就不妙了。

通常情況下,網站或者服務提供商由訓練有素的網絡安全專家運行。他們比我們更專業,所以我們會認為他們幫我們保管比特幣會更安全。但歸根結底,前提是專家們不會故意搞破壞。

比特幣交易所

要想理解比特幣交易所,我們先要討論一下傳統的銀行是如何運作的。你給銀行一筆錢——做一筆存款,銀行日後會按照你的要求把錢還給你。當然,銀行並不會把你的錢一直鎖在保險櫃裡,銀行只是答應,當你提款的時候把錢給你,在這期間,銀行通常會把錢用於投資。許多銀行會保留一部分錢作為儲備金,保證人們來提款的時候,有足夠的現金。很多銀行通常按存款的固定比例來留存儲備金。

現在來談比特幣交易所。至少在用戶使用的角度看,比特幣交易所和銀行很像。交易所可以辦理比特幣存款,日後需要用錢的時候,可以到交易所提款。你還可以把法定貨幣(法幣)——例如美元、歐元等存到比特幣交易所,交易所承諾日後會按照你的要求把錢——比特幣或法幣,或兩者都有——還給你。也可以通過交易所辦理類銀行業務,例如,用比特幣付款或收款。還可以通過交易所把比特幣兌換成法幣,或把法幣兌換成比特幣,交易所在該業務中通常起撮合作用,它們同時尋找願意兌換法定貨幣和願意兌換比特幣的人,並安排他們作為交易對手,如果交易對手對於匯率達成一致意見,交易所就促成這筆交易。

舉個例子,假設你在某交易所的賬號裡有5 000美元和3個比特幣。你想用580美元/比特幣的價格買兩個比特幣,這時交易所幫你找到交易對手並促成交易。現在,你的賬號裡有5個比特幣和3 840美元。

值得注意的是,當你在交易所完成上述交易的時候,區塊鏈上並不會記錄任何交易。交易所不需要在區塊鏈裡把比特幣從一個地址轉到另一個地址。交易所只是修改了和你的合約,交易前,它說「我們日後會還給你5 000美元和3個比特幣。」交易完成後,它說「我們日後會還給你3 840美元和5個比特幣。」所以,交易前後,比特幣並沒有真正在區塊鏈中移動,只是你和銀行的合約變化了而已。對於你的交易對手而言,也是如此。

交易所有優點也有缺點。優點之一是交易把比特幣經濟和法幣經濟相結合起來,這兩種貨幣實現了自由轉換。如果我賬戶裡有比特幣和美元,我可以隨心所欲將比特幣換成美元,或把美元換成比特幣,這是相當方便的。

缺點就是風險。交易所面臨和銀行一樣的風險,主要包括以下三大類風險:

三類風險

第一類風險是擠兌。擠兌就是大家同時都去銀行提款。由於銀行一般只保存部分存款,所以可能無法應付所有的提款要求。當銀行無法兌現的謠言四起之時,大家開始恐慌,然後更多人去銀行取錢,造成崩塌效應。

第二類風險是銀行本身可能就是一個龐氏騙局。龐氏騙局的通常做法就是不斷借新還舊,從儲戶吸收存款,答應日後提供一定的收益,但實際上這筆錢並沒有用於投資,而是用於支付先前儲戶的收益,這類騙局最終必然會崩潰,使人們損失慘重。2008年的麥道夫騙局就是龐氏騙局的最新案例。

第三類風險就是黑客入侵。有人——有的甚至就是交易所的僱員——試圖入侵交易所的安全系統。由於交易所儲存大量密鑰,而這些密鑰可以支取比特幣,所以交易所需要非常小心地監控軟件的安全性及其操作流程——例如,如何管理冷熱儲存等。如果某個環節出了差錯,我們存在交易所的比特幣就會被盜取。

上述風險都實際發生過。有的交易所因為擠兌而倒閉,有的交易所因為管理員的監守自盜而倒閉,也有的交易所因為黑客入侵而倒閉。實際上,統計數據並不令人樂觀。2013年的一項研究顯示,40家比特幣中有18家由於存款到期無法兌付或其他問題而倒閉。

倒閉的交易所中,最有名的就是門頭溝(Mt.Gox)。門頭溝曾經是世界上最大的比特幣交易所,最後因存款到期無法兌付而宣告倒閉,許多投資者血本無歸。門頭溝現在還在日本與美國法院走破產清算程序,人們到現在都沒有搞清楚他們的錢到底去了哪裡。我們只知道一點:門頭溝曾經擁有很多比特幣,而現在已經一無所有了。這對於所有交易所都是一個警示。

反觀傳統銀行業,並沒有高達45%的破產率。政府的監管在其中發揮了重要的作用。政府對銀行的監管主要體現在以下方面:

銀行監管

政府首先要求銀行有一個最低準備金要求。在美國,銀行隨時要保留總儲蓄量3%~10%的現金來應付突發的提款請求。政府通常還會對銀行的投資類別以及資金管理方法進行監管,政府要求銀行的資產投向低風險資產,因為這些錢大多是儲戶的血汗錢,而不是銀行自有的資金。

政府不僅僅對銀行進行監管,還會在必要時為銀行或儲蓄者提供保護。首先,政府會提供儲蓄保險。如果一個遵紀守法的銀行破產,政府會償還儲戶一部分存款。其次,政府有時候也會充當「最後借款人」角色。如果銀行短期經營困難,但仍有一定的償債能力,政府給銀行提供貸款,直到銀行有足夠的資金周轉,從而讓銀行渡過難關。

傳統銀行的監管大抵如此,但比特幣交易所的監管則並非這樣。比特幣交易所需不需要被監管,我們會在第7章討論。

準備金證明

比特幣交易所或者其他提供比特幣管理服務的機構,可以使用一種稱為「準備金證明」(proof of reserve)的密碼學技術來向儲戶證明他們留存了一部分儲備金——例如,按照儲蓄額的25%留存——從而消除投資人的擔心。

準備金證明包括兩方面的內容:首先是證明你有多少準備金。這比較容易,交易所只需發起一筆向自己轉賬的交易,轉賬的金額等於其公佈的準備金金額即可。如果交易所聲稱留存了100 000個比特幣作為準備金,那麼它們會發起一筆100 000個比特幣的轉賬交易,收款人就是交易所本身,然後向客戶說明這筆交易的有效性。之後,它們會用同一個私鑰去為一條查詢指令簽名,這個查詢指令是公正的第三方隨意發出的字符串。這樣就可以證明出具準備金證明的人至少知曉該私鑰(即使他不是私鑰的擁有者)。

我們應注意到兩點:首先,嚴格地說,準備金證明並無法證明交易所真正擁有這些準備金,只能說明真正擁有這筆比特幣的人願意參與準備金證明的過程。換句話說,準備金證明只是證明了某人(交易所)可以控制這一筆錢,或者某人(交易所)所熟悉的人可以控制這一筆錢。其次,準備金是可能被瞞報的,一個交易所可能留存了150 000個比特幣的準備金,但只向人們證明它留存了100 000個比特幣的準備金。因此,準備金證明不能證明準備金的上限金額,而只能證明其下限金額,即證明某人(交易所)「至少」有多少準備金。

負債證明(proof of liabilities)

目前,交易所只證明了留存的準備金規模,為了證明準備金留存比例,還需要證明其吸收的存款規模。知道了準備金規模和存款規模,那麼將這兩個數相除就得到了準備金留存比例。我們接下來會展示一種方法,可以確保交易所不會瞞報存款規模(但可以多報),這樣,由於交易所向人們證明了準備金「至少」是多少,存款規模「至多」是多少,這樣,在計算準備金比例時,分子偏小而分母偏大,因此,我們可以得到準備金比例的保守估計。

對於比特幣交易所而言,如果不考慮儲戶隱私的話,可以將所有的存款記錄公佈,即公佈所有儲戶的姓名和金額,這樣,人們就可以計算交易所的儲蓄規模(即交易所的負債規模),而且,如果交易所瞞報數據,那麼某些儲戶將發現自己並不在公佈名單內或者發現自己的儲蓄額少了,這時,儲戶就會將此曝光,因此,交易所不可能瞞報存款規模。但是,交易所可以在存款記錄中加入一些虛構的客戶,這樣,由於公佈的數據真假摻和,在一定程度上可以保護儲戶的隱私,只是這麼做會使交易所的總負債被高估。這種情況下,只要沒有收到儲戶投訴其儲蓄被少報或漏報,人們就可以相信,交易所公佈的負債規模肯定不低於實際的負債規模。

當然,以上做法是以犧牲儲戶隱私為代價的。實際上,我們會用梅克爾樹來證明存款規模。我們在第1章就說過,梅克爾樹就是一棵哈希值構成的二叉樹,每個指針不僅告訴我們去哪裡找到一個信息,而且還告訴我們這個信息的哈希值。交易所想要證明其負債,可以先構建一棵二叉樹,二叉樹的每個葉節點都代表一個儲戶,如圖4.5所示(當然,這裡也同樣需要儲戶來核實自己是否在這棵二叉樹上),之後,我們還需要讓儲戶可以核實交易所申明的負債規模,要實現這點,我們需要為每個節點添加一個字段(下文簡稱為存款金額字段),這個字段顯示其最近的兩個子節點的存款金額之和。

圖4.5 負債證明

註:交易所構建這樣一棵梅克爾樹:每個儲戶對應一個葉節點,每個葉節點的存款金額字段保存儲戶存款金額。每個節點的存款金額字段等於與其最相近的兩個子節點的存款金額之和,這樣,根節點的存款金額字段就代表著存款總規模。每個儲戶都可以要求交易所證明該儲戶在梅克爾樹上,並且可以核實根節點所顯示的總存款規模。

交易所構建完梅克爾樹之後,把根節點的哈希指針和根節點的存款金額字段進行加密簽名,然後在網絡上廣播。根節點的存款金額字段自然就是存款總規模——也就是我們最關心的數據。此外,交易所還需要聲明所有儲戶都可以對應到葉節點上,而且所有儲戶的存款數據都是正確的,並且每個父節點在加總子節點的存款數據時也沒有出現差錯,因此,根節點的存款金額字段正確無誤地說明了存款總規模。

現在,每個客戶都可以向交易所索取存款證明,交易所也必須向儲戶出具相應證明。這種證明實際上就是一棵包含該客戶所對應的節點的子樹,子樹應包括根節點和葉節點,如圖4.6所示,之後,客戶可以核實以下幾點:

1.子樹根節點的哈希指針和存款金額字段,與交易所廣播的值一致。

2.從子樹的根節點遍歷到葉節點,每個節點對應的哈希值確實是其所指向的子節點的哈希值。

3.每個葉節點對應的客戶賬號信息(客戶名、賬號和存款金額)都是正確無誤的。

4.每個節點的存款金額字段正好等於與其最相近的子節點的存款金額之和。

圖4.6 以梅克爾樹(子樹)的形式提供存款證明

註:子樹包含葉節點、根節點和之間的所有子節點及其兄弟節點。

上述做法的優點在於,二叉樹的每個分支都會被遍歷一遍,而且,總有人會核實每個節點的存款金額字段恰恰等於與其相鄰的兩個子節點的存款金額之和。關鍵的是,不同的客戶獲得的子樹中,如果有相同的節點,那麼這些節點的哈希值以及存款金額字段也必定是相同的,否則就會產生哈希碰撞(hash collision)。

我們總結一下。首先,交易所為了證明其留存了X比特幣的準備金,發起了一筆向自己轉賬的交易,轉賬金額為X個比特幣,並且在網絡上廣播這筆交易。之後,交易所證明其吸收的存款規模不少於Y比特幣。這樣,我們就知道這個交易所的準備金比例至少是X/Y。這意味著,如果一個比特幣交易所想向人們證明自己的準備金比例是25%,可以通過上述方法讓所有人都可能對此進行獨立審計,而不是依靠中央權威機構來驗證。

你也許發現了上述兩種方法(存款證明和負債證明)洩露了很多私密信息,其中包括很多敏感信息,例如交易所使用的賬戶、存款準備金總規模以及交易所總負債規模,甚至是儲戶的個人賬戶餘額等。實際上,交易所並不願意公佈這些信息,因此在實際應用中,存款準備金證明用得很少。

最近推出的一個被稱為「準備金」(provision)的協議,也可以提供償付能力證明,而且不需要披露總負債和總的存款準備金規模,也不需要披露正在使用的賬戶地址。該協議使用的加密技術更加先進,在此不深入討論。但是這個技術又一次證明,加密技術能夠幫助保護隱私。

償付能力是一項可以執行的監管措施(比特幣交易所可以自主選擇遵守),其他方面的監管措施則更難執行,請參見第7章。

《區塊鏈:技術驅動金融》