8.5 權益證明和虛擬挖礦

在結束本章之前,我們討論一下這個想法:用虛擬挖礦(virtual mining)來替代計算力挖礦。虛擬挖礦是指一組不同的挖礦方法但它們都有一個共同的特點——對參與的礦工只要求少量的計算資源。

建立一個封閉挖礦系統

作為一個思想實驗,假設比特幣或是其他加密數字貨幣成為全球主要支付手段。礦工起初會擁有一些加密數字貨幣來購買挖礦設備和支付電耗,以此獲取一些新幣來作為挖礦的獎勵(見圖8.3)。這基本上是個消耗資源的過程。

圖8.3 比特幣挖礦的資源循環

一旦挖礦設備變成了一種商品,並且電力也是一種商品(本來就是),沒有礦工有任何優勢可以更有效地把他們起初擁有的加密數字貨幣轉化成挖礦獎勵。除非有細微的效能差距,挖礦投入最多的礦工將會獲得最大的挖礦獎勵。

推動虛擬挖礦的基本問題是:如果我們把挖礦設備和能耗這一環節省去,會產生什麼結果?畢竟,這個過程主要是用來證明誰在挖礦這件事情上投入最多。為什麼不簡單地把挖礦「算力」按比例分配給當前所有的持幣人?

回憶一下比特幣挖礦的初衷是在區塊鏈上建立起一個投票機制,有更多算力的礦工會得到更多的投票權力。因此,我們可以設計一個「投票」系統,選票(投票權力)是由每個人所擁有的當前幣量所決定的。

虛擬挖礦的優勢

這個方法的優勢是顯而易見的:它把如圖8.3中右邊浪費資源的一半去掉了,留下了一個封閉的系統,如圖8.4所示。

圖8.4 虛擬挖礦的資源循環

除了簡單化之外,這個方法會大大減少比特幣對環境的影響。它不會把能耗降到零,因為礦工總是會消耗一些計算資源來和網絡通信驗證,有一些虛擬挖礦方案也要求少量的挖礦計算力。但總體上,比特幣裡絕大部分的挖礦工作量可以被省去。

虛擬挖礦還可以阻止中心化的發展趨勢。因為沒有硬件,所以也不必擔憂有ASIC的問題。每一個礦工挖礦的效率都和其他人完全一樣。任何虛擬礦機所用的解謎算法都是反ASIC的。

這可能是虛擬挖礦最重要的一點。虛擬挖礦可能解決了我們在討論反ASIC解謎算法時候所遇到的問題,也就是考慮到貨幣的長期健康,礦工可能不會去投資挖礦設備的生產。任何一個比特幣的持有人其實也是這個貨幣的利益相關者,一個強大的虛擬礦工(比如持有51%或更多的幣)是一個非常大的利益相關者。他們有原動力來做對整個系統有利的事,因為這樣一來他們所持有的幣也會增值。這比「礦工已經投入了大量的挖礦設備,且設備價值會基於未來的幣值,所以沒有人會進行惡意行為」的說法更有力。

這就是「權益證明」這個名字的來源。除了節省挖礦設備和節省能源之外,可能虛擬挖礦的最大動力,來自這個貨幣的利益相關者有著強烈的意願成為這個系統的維護者。

實施虛擬挖礦:點點幣

有許多種不同的虛擬挖礦,我們在這裡只討論最常見的幾種。我們要強調的是,這些想法還沒有被嚴格地用科學的方法研究過,也沒有像比特幣的工作量證明一樣因為比特幣的普遍性而經過實戰洗禮。

我們先看一下在2012年啟動的點點幣(Peercoin),是第一個使用權益證明的另類幣。點點幣是工作量證明與權益證明的一種混合體,「擁有量」以「幣齡」為計價單位。一個特定的還沒有被使用交易的輸出的幣齡,是「這個輸出裡的幣量」與「這個輸出裡還沒有被使用過的區塊數量」的乘積。現在,為了挖到一個區塊,點點幣的礦工也必須像比特幣的礦工一樣去進行一個SHA-256的解謎運算。但是,這個解謎運算的難度會隨著他們想消耗多少幣齡調整,消耗越少難度就越低。為了做到這一點,這個區塊包括一個特殊的「幣擁有量交易」(coinstake transaction),在這個交易裡,有些交易被用掉只是為了把它們的幣齡重設成零。這些在幣擁有量交易中被消耗的幣齡總和,決定了工作量證明解謎運算中發現一個有效區塊的難度。

礦工可以在最初用很大的計算力和一些很少的擁有量來挖礦,但是可以用公式來設定難度:當一些幣齡被消耗後,找到有效區塊會變得十分容易。這個運算型解謎的效果主要是為了保證,在有兩個礦工嘗試消耗同樣大小幣齡的情形下,這個過程仍然是隨機的。

許多其他的虛擬挖礦另類幣方案使用了略微不同的設計,包括NxT、BitShares、BlackCoin和Reddcoin。在這些設計方案裡,一定數量的幣被消耗用於使運算型解謎變得極為簡單,這使得解謎運算不再是挖礦過程中最主要的挑戰。

權益的其他形式

有兩種混合模式值得探討:

● 權益證明。最簡單的權益證明模式是使那些擁有大量幣控制權的礦工挖礦更加容易。這類似於點點幣的幣量和幣齡混合證明,只是在這個模式中不考慮幣齡。這個模式的劣處是,不像點點幣那樣每次成功獲得有效區塊之後重置幣齡,最有錢的參與者總是可以最容易地挖礦。

● 儲量證明。在這個模式裡,當一個礦工用一些貨幣來鑄造一個區塊的時候,這些貨幣針對一定數量的區塊被凍結。這可以被想像成幣齡的一個鏡像:這個系統獎勵那些希望在未來一段時間不消費的礦工,而不是那些在過去一段時間內不使用貨幣的礦工。在上述兩種情況下,礦工的收入來自因為不能使用貨幣去做其他事情的機會成本。

無利害關係問題

虛擬挖礦是科研的前沿領域,還有許多未解的問題。即使有一些加密數字貨幣已經啟動並且使用了虛擬挖礦,它們都面臨和比特幣一樣的壓力,即防禦有目的性的攻擊者。

虛擬挖礦有一個常見的漏洞,被稱為「無利害關係問題」(nothing-at-stake problem)或者「股權粉碎攻擊」(stake-grinding attacks)。假設一個有著小於50%的幣擁有量的攻擊者,嘗試製造一個有k個區塊的分叉,如同我們在前面討論過的,這樣的分叉攻擊有著相當高的失敗概率。在傳統挖礦裡,一個失敗的攻擊有著很高的機會成本,因為礦工本可以在挖掘的過程中賺得獎勵,而不是浪費挖掘資源在失敗的攻擊上。

但在虛擬挖礦裡,這個機會成本並不存在。一個礦工可以既在當前最長的區塊鏈上挖礦,同時又可以進行一個創建分叉的嘗試。如果分叉成功,則會消耗掉大量的籌碼;如果失敗,這個失敗的記錄不會出現在最長的區塊鏈上。因此,理性的礦工也會不斷地嘗試分叉攻擊。

對於這個問題,有一些不同的解決辦法。大多數的虛擬挖礦方案都積極地使用檢查點來防禦長分叉攻擊。但是正如之前討論過的,這有點和去中心化的共識協議概念背道而馳了。

分叉攻擊和檢查點

當你下載比特幣核心錢包軟件時,有幾個硬編碼的檢查點,或者過去區塊的拼接。這樣做的根本目的是讓首次下載區塊鏈更加順利。如果沒有檢查點,其他節點可以使用偽造的(但有效的)區塊和分支來衝擊你。對於當今的攻擊者來說,在低區塊高度產生有效的謎題解決方案是非常簡單的,那就是接近起源區塊,因為初始階段的難度相對較低。你最終會發現這些區塊不在最長的有效分支上(更精確地來說,不在最高總體難度的有效分支上),但你必須浪費資源來做這件事情。

有些另類幣,特別是虛擬挖礦計劃,已經採取了以檢查點作為防禦分支攻擊的強大形態。節點會從指定檢查節點收到檢查點的常規更新,該更新由指定的私鑰簽發。節點會放棄與檢查點衝突的分支。這種機制使得檢查點的運作方,尤其是另類幣的創建者,能從分叉和「轉回」區塊中選擇勝出者。這種設計非常有趣,但是已不是去中心化一致認可的協議。

以太坊(Ethereum,一個在2015年啟動的另類幣,我們將在第10章中詳細討論),建議了一個稱為「Slasher」的方法來懲罰嘗試進行分叉攻擊的礦工。在Slasher方案中,使用籌碼去挖礦需要用私鑰對當前區塊進行簽名,來應對那些進行作弊的交易,如果礦工曾經使用相同的籌碼去簽署兩個不連續的區塊鏈(不是前後關係),Slasher允許其他礦工可以在區塊鏈上輸入這兩個簽名作為作弊的證據,並且拿走一部分籌碼以作為獎勵。雖然看起來這個方案非常有效,但是協議本身非常複雜,還沒有被實際部署。

一個終極的防禦攻擊方式可能存在,就如同我們在傳統挖礦方案中看到的,礦工可以簡單地沒有足夠的動力去進行攻擊,因為即使攻擊成功,也會危害整個系統並使得他們所擁有的籌碼貶值。

虛擬挖礦的其他弱點

虛擬挖礦還有其他兩個弱點值得提及。第一,在某種形式的虛擬挖礦方案中,即使「股權粉碎攻擊」不存在,也可能使得某些類型的攻擊變得容易,因為挖礦「蓄力」(save up)是可能的。例如,大量的幣可以被積蓄起來,直到可以進行一次劇烈的挖礦變化使得分叉成為可能。即使是某個類似於Slasher這樣嚴禁同時在兩個區塊鏈上挖礦的系統上,也是可能的。為了防止這樣的攻擊,點點幣限制了幣齡參數不能超過90天。

第二,如果虛擬挖礦中的某個礦工獲得了51%的籌碼,他可以通過只在他的區塊上挖礦的方式永遠保持這個優勢,基本上也就意味著可以控制整個區塊鏈。如果有新的籌碼和交易費從區塊獎勵中產生,那個擁有51%的礦工也會搶去這些獎勵,這會讓他的籌碼慢慢接近100%。在傳統挖礦模式中,即使有一個51%的礦工存在,永遠可能存在擁有更大算力和更低能耗的其他礦工出現,並且會減少最大礦工的市場份額。在虛擬挖礦裡,很難避免這個問題。

虛擬挖礦有可能真的成功嗎

在比特幣的主流社區裡,虛擬挖礦是有爭議的。有一個說法是,系統的安全性必須建立在真正的資源消耗上,也就是動用真正的電腦硬件和消耗電能去進行解謎運算。如果這個理論成立,工作量證明上的能源耗費可以被看成是系統的安全費用。但這個論點還沒有被證明,就像虛擬挖礦的安全性也沒有被證明一樣。

總結來說,人們想改變比特幣挖礦解謎算法的很多方面,這也是研究與創新的重點區域。到目前為止,還沒有一個替代方案具備理論健全性和實用性。例如,即使Scrypt算法在另類幣中很受歡迎,但是也沒有做到真正的反ASIC,而且其用途也還不清楚。當然,替代的解謎算法完全有可能在未來獲得更大的成功。畢竟,比特幣本身也經歷了數十年的不斷失敗的嘗試與發展,才最終成為一個既有很好的設計理念又有相當的實用性的加密數字貨幣。

延伸閱讀

定義剛性內存功能和建議範本的論文是:

Percival, Colin.「Stronger Key Derivation via Sequential Memory-Hard Functions,」 2009.

您可以通過如下網址閱讀:

https://www.bsdcan.org/2009/schedule/attachments/87_scrypt.pdf.

關於內存範圍(memory-bound)功能的早期論文包括:

Abadi, Martin, Mike Burrows, Mark Manasse, and Ted Wobber.「Moderately Hard, Memory-Bound Functions.」 ACM Transactions on Internet Technology 5(2), 2005.

Dwork, Cynthia, Andrew Goldberg, and Moni Naor.「On Memory-Bound Functions for Fighting Spam.」 In Advances in Cryptology—Crypto 2003 . Berlin: Springer, 2003.

關於Cuckoo Cycle proposal的研究包括:

Tromp, John.「Cuckoo Cycle: A Memory-Hard Proof-of-Work System.」 IACR Cryptology ePrint Archive, 2014.

您可以通過以下網址閱讀:

https://eprint.iacr.org/2014/059.pdf.

關於永久幣的介紹請參閱:

Miller, Andrew, Ari Juels, Elaine Shi, Bryan Parno, and Justin Katz.「Permacoin: Repurposing Bitcoin Work for Data Preservation.」 In Proceedings of the 2014 IEEE Symposium on Security and Privacy , 2014.

您可以通過如下網址閱讀:

http://research.microsoft.com/pubs/217984/permacoin.pdf.

討論不同的哈希函數和SHA-3競爭的論文是:

Preneel, Bart.「The First 30 Years of Cryptographic Hash Functions and the NIST SHA-3 Competition.」 In Topics in Cryptology—CT-RSA,2010 . Berlin: Springer, 2010.

關於不可外包謎題的介紹是:

Miller, Andrew, Elaine Shi, Ahmed Kosba, and Jonathan Katz.「Nonoutsourceable Scratch-Off Puzzles to Discourage Bitcoin Mining Coalitions.」 In Proceedings of the 22nd ACM Conference on Computer and Communications Security , forthcoming.

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