文章專區

2014-02-01道高一尺 魔高一丈:比特幣是怎麼回事? 530 期

Author 作者 薛智文/任教台灣大學資訊工程學系與資訊網路暨多媒體研究所。
(文中紅色文字段落為作者補充連結)
比特幣(bitcoin)一開始就是個「有心」設計的電子貨幣,因為發明人後來神祕消失了!電子貨幣(或稱為數位貨幣)就像悠遊卡一樣是種可以在真實世界使用的虛擬貨幣,雖然像某知名網路遊戲的「天幣」或是PTT網路論壇的「P幣」這樣的虛擬貨幣也可以在真實世界交易,不過比特幣最大的特性是去中心化(decentralized);其目的在於交易雙方不需要透過第三者(如金融機構)的幫助,而能直接以「對等」(peer-to-peer, P2P)方式進行安全的線上付款。「peer-to-peer」常有人翻成「點對點」,因為易與「point-to-point」(點對點傳輸)混淆,本文採用「對等」與縮寫P2P。P2P方式使得用戶可以隨時隨地自主交易,任何個人或組織都無法干預,所有紀錄都匿名公開,只透過數位簽章與串連,不加密就可以保證不容易導致重複花費(double-spending),也不容易被竄改。

自從化名「中本聰」(Satoshi Nakamoto)的發明人在2008 年發表了比特幣的白皮書,他(或是她、它、他們)就積極地實作比特幣系統,並在2009 年 1 月3 日首次發行了50 元比特幣。2011 年4 月,在中本聰發出「要去忙別的事」的通知之後,就消失無蹤,而他本人自始就從未現身過。不過,比特幣自2010 年5 月首度以一萬元交易了約25 美元的披薩後,到2013 年全球已有十多個地方設立了比特幣交易所與自動櫃員機,其中最先成立的日本交易所Mt.Gox,其比特幣兌美元匯率從年初的13.3 到年底漲成806.01,甚至最高在11 月29 日達到1242。香港企業家李嘉誠也在同年底投資了跨國比特幣支付公司Bitpay,利用Bitpay,台灣第一個接受比特幣付款的購物平台Wmall 則在2014 年1 月1 日開始營運,而台灣央行卻在2013年12 月30 日禁止銀行與第三方支付公司交易比特幣。

由於安全、自主、限量、與即時全球流通,比特幣應該比任何貨幣更適合當國際貨幣,不過,發明五年多來陸續經歷乏人問津、惡意攻擊與仿製、洗錢查封,到一元比特幣價格接近一盎司黃金的瘋狂炒作……等等事件。因為價格變動太大與怕擾亂金融秩序等因素,各國對比特幣的定位差異很大。目前表態的
三十多國中只有少數國家承認比特幣是合法貨幣或商品資產,也有部分國家正式課稅與立法限制、甚至完全禁止,而大部分國家可能因為比特幣流通的規模還不算太大,採取不承認也不禁止的態度;台灣央行總裁則認為它是相當於產量有限的貴金屬商品,例如黃金。比特幣目前全球每日交易額最高將近3 億美金,但交易數每10 分鐘平均只有數百筆。至於未來的發展如何,我們必須先從比特幣的基本運作與原理看起。

比特幣的運作概況

比特幣用戶首先要取得一個或多個電子錢包作為交易的工具。電子錢包是可加密的,其中包含多個帳戶,每個帳戶包含多個私鑰。公鑰與私鑰是密碼學中必須配合使用的成對數字,常用其中一個加密,而用另一個才能解密,公鑰常公開發佈,私鑰則由私人保管。比特幣位址由公鑰得出,其中採用了Base58 編碼(58 個字母和數字組成)來去掉容易看錯的「0OiI」等字元,一般是以1 開頭,透過私鑰就能使用,以3 開頭的則要透過多個私鑰才能使用,相當於要人背書。轉帳是針對比特幣位址,而帳戶只是管理工具。每個位址只會被用來轉帳一次,只要私鑰丟掉了,相對位址的比特幣就會永久遺失,所以發行過的比特幣只會越來越少,遺失也不能補發,目前估計約已遺失50 萬元比特幣。每個錢包會預先產生100 個比特幣位址,所以備份後只有接下來的100 次位址使用才安全。

每次交易可能會用到多個比特幣位址,而比特幣位址
約有2160 個,相當於如果每秒用4.6×1032 個可以連續用一億年,所以不用擔心重複或是用完,而且該私鑰與位址可以離線自行產生,非常自主。不過為了減少遺失,最好經常備份。為了安全,有將私鑰用實體複製出來而將電子形式錢包刪除的紙錢包,以及為了防止實體私鑰也遺失而用人腦比較容易記憶的語句來再加密過的腦錢包等技術。不過因為所有交易紀錄都公開在網路上,只要記得位址就可以查到該位址裡有多少比特幣。遺失了私鑰,比特幣還是「看」得到,卻用不到!

交易可以透過交易所或私下進行,是指用比特幣交換其他貨幣、實物、或服務,例如看廣告收比特幣、用比特幣買房子、賭博、或環遊世界等。如圖一,用戶可以到交易所交易來換得比特幣,也可以參與挖礦或礦池營運獲得比特幣,有了比特幣就可以轉帳進行更多的交易。稱為挖礦是因為比特幣的產生是透過電腦運算「猜」出來的,就像挖礦一樣要猜哪裡有礦石。為了要控制挖礦速度與安全考量,設計需要大量運算猜到特定的數字才算挖到礦。參與挖礦的用戶稱為礦工,挖礦所用的電腦稱為礦機。礦池集合礦工的運算能力一起挖礦,也接受資金參與。每一筆交易資訊都要廣播給所有礦工(與礦池)確認,礦工要根據上次挖到礦的部份資訊與所收到的交易資訊來挖礦,也要幫忙檢驗這些資訊是否正確。

圖一:比特幣的運作概念。(作者繪製)

 
所謂廣播就是以P2P 方式進行,是透過網際網路中繼聊天(internet relay chat, IRC), 以一傳十、十傳百的方式進行。因為網路傳遞速度不一樣,所以各個礦工所收到的交易資訊也可能不一樣。因此,每次挖到礦的礦工必須要將上次挖到礦的部份資訊、新礦資訊,與所收到的交易資訊打包成一個區塊(block)再廣播給其他礦工檢驗。礦工會拒絕接受太遲(前11 個區塊生成時間的中位值)或太新(兩小時後)的區塊。礦工若有把握可選擇繼續未完成的挖礦,不然就從已蒐集的交易資訊中剔除所收到區塊內的交易資訊,然後接著在此區塊重新挖礦,這樣表示接受並確認了此區塊。

挖到礦的礦工可能會獲得一些比特幣當區塊獎勵與手續費獎勵。當然,電腦的運算能力越強越容易挖到礦,所以目前是以每挖出2016 次礦,系統會調整挖礦的難度使得平均約每10 分鐘可以挖到一次,也就是約兩星期調整難度一次,比特幣白皮書中是調整每小時平均挖到礦的次數,但卻沒有定義數值。挖礦時每猜一次就是執行一連串的雜湊(hash)函數,每秒一百萬次雜湊稱為MH/s,十億次雜湊稱為 GH/s,一般電腦桌機大約能執行少數個MH/s。難度1 大約是7 MH/s,2014 年1 月1 日的難度是11 億8092 萬3195, 已挖出了超過27 萬8050 次礦,當時雜湊率(hashrate)約為1072萬1481 GH/s,也就是整個比特幣系統運算能力的總估計值,預估下次挖到礦的難度約增加18%。

每挖到礦會廣播一個區塊,所有的區塊先後會串連起來形成一條有分支的區塊鍊(blockchain),如圖二。其中,每個區塊都可以回溯到第一個區塊(格子花紋),也就是可以從第一個區塊找到之後的所有資訊。會有分支的原因是礦工不可能同時收到所有的廣播區塊,只能選擇最先收到的一個來串連,再繼續挖礦。將來如果選擇其他區塊的礦工挖得比較快,可以再調整回來,而被超過的區塊(深色)還是會被保留。從第一個區塊到各分支末端中所有區塊難度總和最高的分支稱為主分支,通常也是分支長度最長的。區塊要再經過100 次挖到礦後才被認為成熟,只有主分支上的成熟區塊才能獲得獎勵。每筆交易被包在區塊中廣播出來就相當於一次確認,該區塊之後每多串連一個區塊也多一次確認。一般交易所或電子錢包的交易都會要求6 次確認以上,因為假設在網路暢通下,不誠實的礦工有雜湊率10%的運算能力,這樣被駭的風險會在0.1%以下。若是網路不暢通,則成熟與確認所需的次數都要增加!

圖二:區塊鍊。(作者繪製)

 
新加入的礦工會下載一份最新的區塊鍊,從主分支末端開始挖礦。除了少數未成熟的區塊外,所有礦工的區塊鍊資訊都應該一致,電子錢包也會下載區塊鍊資訊來檢驗交易資訊。區塊鍊的大小隨著挖礦與交易持續成長,已經超過12 吉位元組,光是開一個新的電子錢包就可能要一天的時間,之後也要定時去更新區塊鍊。有心作弊的礦工除非擁有超過雜湊率一半的運算能力才有機會主導尚未成熟的區塊生成,但是還是沒辦法竄改已廣播過的資訊。雖然有機會暫時擾亂交易資訊,但是隔一段時間還是會被查出來,所以相當可靠。

區塊獎勵從2009 年開始是50 元比特幣,檢驗確認後可以立即發行與交易。每四年減半,所以2013~2016 年是25 元比特幣,這樣到最後全部能挖到的總額是有限的,不會超過2100 萬元比特幣。因為比特幣最小單位是10-8 元,所以2140 年之後區塊獎勵就會小於最小單位,也就是挖礦獎勵只有剩下手續費。事實上,比特幣頭四年就挖出了一半,目前已挖出約1200 萬元比特幣,接近全部的60%,在2022 年中就會挖出超過90%。

由於比特幣協定是公開的,軟體也是開放源碼(open source),所以只要能上網,任何人都可以免費使用或提供包括電子錢包、開戶、挖礦、與轉帳交易等服務,不過,也有要付費的服務,譬如說可以更快也更安全地確定完成交易。因為比特幣交易雖然快,但還是需要時間透過P2P 方式相互檢驗,只要有不誠實的用戶,還是會有不安全的疑慮。開戶一般都是免費的服務,只要能提供計算能力的電腦就能參與挖礦,手續費與交易匯率原則上是雙方約定即可,但是有系統內建的交易規則防止有人亂用,例如無手續費的交易處理優先權比較低,交易資訊太大,也就是包含很多筆轉出轉入,轉出金額又小會要求最少0.0001元以上與資訊大小成比例的手續費,金額小於0.0000546 元不准交易等

重要原理

比特幣運用了許多密碼學與P2P網路的技術,最主要的是雜湊函數。所有資訊,包含文字與數字等,都可以用一個整數來表示。如圖三(a),雜湊函數可以看成是將一個整數m 中的資訊打亂混合出另一個整數n(稱為雜湊值)的函數。其特性是不同數字之雜湊值重複的機率相當小,從雜湊值不容易推算出輸入數字,而且輸入數字稍微有點不同,其雜湊值就會非常不同。

如果雜湊值的範圍比輸入數字要小很多,雜湊函數可以達到「摘要」的功能,也就是用較少資訊的雜湊值做為摘要來代表原來較多的資訊。如果有一筆一筆前後相關的資訊,我們可以將前一筆資訊或其摘要加上該筆的部分資訊做雜湊而得到摘要,再將整筆資訊或該摘要傳給下一筆資訊做摘要,而形成緊密關聯的資訊串連。這樣一來,確定了每筆資訊產生時間的先後順序,而且只要中間有任何竄改,除非重做該竄改位置之後的資訊串連,否則很容易會被發現。比特幣不採用傳統的RSA 加密演算法而採用橢圓曲線數位簽章演算法(ECDSA)來製作公鑰與私鑰,其中簽章也用到了雜湊函數;ECDSA 中由私鑰很容易算出公鑰,但是公鑰不容易算回私鑰。公私鑰的長度越長越難破解,一般相信,相同長度的ECDSA 比RSA 更難破解。
圖三:雜湊函數與資訊結構。(作者繪製)
 
每筆交易包含多筆轉入資訊與轉出資訊,不同於白皮書中轉出只有兩個。如圖三(b),一般轉入資訊包含該轉入交易的摘要、該轉入位址公鑰與該私鑰做的簽章等,轉出資訊包含轉出金額(最小單位)與位址等。透過轉入資訊可以查到並檢驗該筆轉入金額,就像收到支票驗證真偽,不過要花掉時需要背書簽章且不准轉讓,並且要換成新支票(轉出資訊)用掉,若需找零時則特別要將零錢轉支給自己。錢包軟體根據優先權設定選擇帳戶裡的轉入金額與相關資訊,並製作轉出資訊,然後合成交易資訊廣播給大家檢驗,其中轉入總額不能小於轉出總額,差額就是手續費。該檢驗是用腳本(script)寫成的,所以有很大的彈性,例如要另設密碼才能提取,是錢包或用戶可以自行增加的功能。這些交易資訊形成資訊串連的交易網。

區塊鍊也是一種資訊串連,如圖三(c),區塊i 中將前一區塊中的摘要與一個特殊數字nonce 和其他資訊合成本區塊的摘要。其他資訊中也包含了所有交易資訊的摘要,交易1 就是自己挖到礦的交易資訊,所以就算是不同區塊使用相同nonce,其摘要也不容易重複。交易1 跟第一次花區塊獎勵的交易資訊與一般的不同,有一些沒有使用的欄位,保留了將來擴充的相容空間。所謂挖到礦就是要猜到一個nonce 值讓該區塊的摘要值小於一個會根據難度而線性調整的目標值,這就是白皮書裡所說的工作量證明機制(proof-of-work)。

工作量證明機制提到要猜到一個nonce 值使得摘要值前面有一連串的0,其實越多0 越難猜。由於電腦不會真的猜,所以只好一個一個試所有可能的nonce 值,因此需要相當的運算能力,不過檢驗其正確性卻很簡單。但是並不是純粹算有幾個前導零,否則每次難度的調整就只能以2 的次方倍數來進行。實作上採用小於目標值的方式能更精確地調整難度,更能接近每10分鐘挖到一次礦的目標,再加上摘要也不容易重複,使得運算能力與挖到礦的機率更接近成等比例的線性關係。第一個比特幣是以難度1 挖出來的,五年後難度變成11 億8092 萬3195, 相當於是整個比特幣系統運算能力的成長倍數。

大家多投入的運算能力浪費在猜更難的nonce, 並沒有多挖出任何比特幣,相當不環保!原本個人礦工用一般桌機就能挖到礦,利用顯示卡的繪圖處理器(graphic processing unit, GPU)可以加速數十到數百倍,做成「場式可程式閘陣列」(field programmable gate array, FPGA) 的硬體更可以加速一級,最後做成特殊應用積體電路(application-specific integrated circuit, ASIC)的礦機甚至可以達到數百GH/s。不過,個人礦工還是難敵難度增加的速度,而礦池可以利用分配 nonce 的範圍,讓轄下礦工的運算能力得以完全整合,所以最大礦池最高已經超過40%雜湊率,而且前兩大礦池合起來也常常超過51%。若是前兩大礦池聯手作弊就能主導區塊鍊的生成,甚至製造不實的交易資訊,造成信心破產,系統就會崩解。

這就是著名的賭徒破產問題:如果賭徒有一些籌碼,假設莊家贏率較大,一直賭下去,賭徒一定會輸光;就算是莊家贏率較小,賭徒還是有機會輸光。因為比特幣是以主分支上的區塊贏得獎勵,所以如果以不誠實礦工落後最新的區塊之個數作為籌碼,不誠實礦工挖到礦籌碼減1,沒挖到籌碼加1,籌碼個數為0 時便是趕上誠實礦工,也就是誠實區塊會被不誠實區塊所取代,於是形成賭徒破產問題,所以誠實礦工總會有機會輸光。雖然輸光的機率很低,所以相當安全,但是安全並不是造成比特幣炒作的主要原因。

炒作的主要原因

2008 年的全球貨幣流通量(circulation)總計已經超過4 兆美元,其中最多的是歐元,佔24.3 %,其次是美元,佔19.97%。2013 年底美元流通量已經超過1.2 兆,假設現有的1200 萬元比特幣取代美元一半的流通量,每元比特幣平均會是五萬美元。目標價如此之高,難怪大家知道了這種貨幣或商品之後會爭相買入,要不是因為種種疑慮與使用不方便,史上最高匯率會更高。既然是貨幣或商品的公開自由交易,就是一個願打一個願挨,不算是龐式騙局(俗稱老鼠會),更有助於炒作!

雖然比特幣是匿名電子貨幣,從使用行為上還是可以估計所擁有者的分佈狀況。2013 年12 月的統計是在超過2300 萬的比特幣位址裡,所屬用戶中估計有120 多萬戶擁有超過0.001 元比特幣、28 多萬戶超過1 元比特幣、930 多戶超過1000 元比特幣,其中一戶(可能是中本聰)超過98 萬元比特幣,最高價時超過十億美金!這樣分佈懸殊的狀況,再加上早期挖礦的成本低,炒作對既得利益者更有利,對眼紅者也更有吸引力。比特幣目前壟斷在少數人手中,雖然已經有人另起爐灶、另建比特幣區塊鍊,不過因為對雙方都有利,後來應該是被「吸收」了!各種山寨幣也不少,匯率超過一美元的就有十多種,不過,大家還是習慣炒作比特幣。

雖然工作量證明與獎勵機制可能真的是為了鼓勵用戶投入挖礦,同時幫忙檢驗,讓P2P 系統行得通。但是自從資本大量投入,引進更強的礦機與礦池後,就變成典型的資本壟斷問題,只要資本能得利,循環投入之後就會貧者愈貧、富者愈富,直到無利可圖為止。其實發行電子貨幣的成本應該是很低的,目前較費「勞力」的交易手續費平均通常佔不到獎勵的0.5%,比信用卡的抽成還高,大家也沒有太大興趣,因此顯然挖礦有利可圖,也還不用開始作弊。有能力挖到礦的人自然會想辦法炒高比特幣匯率,甚至會炒高礦機的價格。於是,一般人就不用挖了,不放棄就只能投入礦池,讓礦池繼續剝削,也讓礦池越長越大,越能興風作浪。

建議

電子貨幣要真正全球流通,限量發行與匯率波動太大都會形成障礙。比特幣遺失不能補發,會造成通貨緊縮,政府無法干預或課稅也是不能穩定匯率。讓政府或銀行組織先根據流通量或人口數掌握發行權來穩定匯率,等到大家習慣了再實作一個線上虛擬組織來穩定匯率可能會更好,也可以消除政府疑慮與比特幣壟斷的問題。比特幣協定也有很多研擬中的改進方案,例如轉帳金額可以換成不同單位,像交易「一斤米」,也就是變成虛擬的以物易物。

目前比特幣的規模與交易量不大,真的普及之後,還是要廣播所有區塊鍊與交易資訊的作法勢必是一大負擔。當然,很少用到的舊資訊可以讓少數用戶儲存就好(如交易所或政府),不過,更可以採用類似分散式雜湊表(distributed hash table)的方式來廣播,既能維護安全也能降低各種額外負擔。

最重要的是改變工作量證明機制中運算能力與挖到礦之機率間的線性關係,才不會讓資本主義的弊病叢生。其實,應該回復到利用必要的運算能力就可以維持機制運作,例如讓運算能力的對數與挖到礦之機率呈線性關係;這樣運算能力強的還是較有利,只是不符資本家的盤算,普羅大眾於是才能踴躍參與,不過還要防止資本家利用人頭,採取人海戰術。有人甚至考慮把比特幣持有時間加進工作量證明機制,以防止短期炒作。如此一來,也許不用政府或銀行介入就能穩定匯率,一舉實現P2P 的精神。

比特幣交易雖然可以即時,但是確認還是需要一段時間。目前的機制還是有可能產生暫時的重複花費,所以還要加強交易資訊重複花費的檢驗與警告。與其用更複雜的機制來防堵作弊,倒不如立法保障賠償來得簡單有效,甚至可以讓司法機關有實名調閱的權利,註冊後遺失也可以補發。這樣一來更能鼓勵各種可由商家擔保的衍生商品,如發行實體比特硬幣或紙幣,不然連悠遊卡都不能普及到夜市,電子錢包怎麼可能普及?

結語

無論「中本聰」是有心還是無意,比特幣在歷史上已經奠定了重要的地位。其設計雖然不盡完美,但是P2P 方式已經證明資訊公開透明的力量與網路鄉民當家自主的可行。雖然現行比特幣很可能無法普遍與永續,但已經有許多人或組織發展更好的電子貨幣來搶食這塊金融大餅,比特幣本身也可以逐漸進化。有智慧的讀者也許將來可以化名「上源慧」,發明更上乘的開源金融改革工具,以對抗不義的剝削與炒作,甚至把P2P 精神應用到其他領域為世界帶來更大的福祉。讓我們發揮集體的智慧,支持比特幣但停止炒作,去忙別的事吧!

延伸閱讀
1. Bitcoin, http://bitcoin.org, Bitcoin Project 2009-2013.
2. Blockchain, https://blockchain.info, December 31, 2013.
3. Bitcoin wiki, https://en.bitcoin.it/wiki/Main_Page, December 31, 2013.