作者|姚前「中國證監會科技監管局局長」

文章|《中國金融》2022年第9期

近年來,全球主要經濟體的貨幣當局不斷加大對中央銀行數字貨幣(Central Bank Digital Currency,CBDC)的研發力度並取得了諸多階段性成果。 “漢密爾頓計劃”(Project Hamilton)是美國波士頓聯邦儲備銀行與麻省理工學院合作開展的CBDC創新研究項目(Digital Currency Initiative,DCI)。這項計劃已持續開展數年,2022年2月3日,美國波士頓聯邦儲備銀行發布題為“為央行數字貨幣設計的高性能支付處理系統”(A High Performance Payment Processing System Designed for Central Bank Digital Currencies )的技術報告,總結了漢密爾頓計劃第一階段進展。本文擬透過該報告的主要內容,對美聯儲央行數字貨幣原型系統進行簡要分析。

漢密爾頓計劃第一階段的研究目標

漢密爾頓計劃第一階段的第一個目標是探討CBDC系統的性能,即從技術上研發一種高吞吐量、低延遲和富有彈性的CBDC交易處理系統。具體性能目標包括兩個方面:一是在5秒內完成99%交易,包括完成交易驗證、交易執行以及向用戶確認交易,處理速度與美國現有銀行卡支付以及銀行間即時支付系統的相應指標不相上下;二是根據美國目前現金和銀行卡交易量以及預期增長率,該系統每秒至少處理10萬筆交易,且能隨著後期支付量的增長不斷擴展。

第二個目標是探討CBDC系統的韌性。為維持公眾對CBDC的信任,CBDC系統必須確保服務連續性且資金可用。系統韌性的研究重點在於,當多個數據中心發生故障時,如何保證系統訪問不中斷,數據不丟失。

第三個目標是探討CBDC的隱私保護。研發團隊認為,最安全的隱私保護方法就是從交易伊始就減少數據收集,因此在CBDC交易系統中設計了一種盡量減少交易數據留存的方案。

美聯儲數字貨幣原型系統設計

幣的形式:未花費的交易輸出(Unspent Transaction Output,UTXO)

漢密爾頓系統有三類參與者:交易處理器(transaction processor)、發行方(issuer)和用戶(user)。交易處理器記錄CBDC,並根據指令驗證和執行相關交易。同比特幣一樣,漢密爾頓計劃採用UTXO的貨幣表達式。 CBDC僅能通過發行方的行為而進出系統,發行方鑄幣(mint)增加交易處理器中的資金,贖回(redeem)則減少交易處理器中的資金。用戶執行資金轉移(transfer)操作,以原子方式變更資金所有權,但存儲在交易處理器中的資金總額不變,變化的是資金的權屬。用戶使用其數字錢包的公鑰/私鑰來處理和簽署交易。資金轉移交易過程中,使用付款方的未花費資金就是交易輸入(input),生成新的未花費資金就是交易輸出(output)——包括收款方和找零給付款方的未花費資金。一項有效交易必須保持平衡:交易輸入值之和須與輸出值之和相等。

未花費資金定義為三元組utxo:=(v,P,sn)。其中,v為金額,P為安全鎖鎖頭(encumbrance predicate,可以理解為持有者公鑰),sn為序列號(serial number)。發行方的鑄幣操作會創建新的未花費資金,並將UTXO添加到交易處理器存儲的UTXO集合,而贖回操作則從UTXO集合中刪除已有的未花費資金,使其不可重複使用。發行方必須為新鑄UTXO選擇唯一序列號。將其設置為均勻隨機數或單調遞增計數器值(發行方鑄造第i個UTXO時,會將其序列號設置為i)均可。

分離驗證與UTXO壓縮

在漢密爾頓系統中,交易處理器驗證交易的正確性,並通過刪除輸入和創建輸出來執行交易。驗證分為交易局部驗證(transaction-local validation,無需訪問共享狀態)和存在性驗證(existence validation,需要訪問共享狀態)。對於這種分離,漢密爾頓系統設計了專用組件——哨兵(sentinel),專門用於接收用戶交易並執行交易局部驗證。局部驗證內容包括:核實交易格式正確;確認每個輸入都有適用於其花費輸出的有效簽名;確認交易保持平衡(即輸出之和等於輸入之和)。如果交易符合標準,哨兵將向負責存在性驗證的執行引擎轉發交易,否則就僅向用戶提示交易錯誤。

存在性驗證主要核驗未花費資金是否存在。為了實現隱私保護,漢密爾頓系統將資金作為不透明的32字節哈希值存儲在未花費資金哈希集合(Unspent funds Hash Set,UHS),h:= H(v,P,sn),而不是存儲完整的utxo:= (v,P,sn),其中H是一個哈希函數,漢密爾頓系統使用了SHA-256算法。用UHS集合替換UTXO集合,不僅有助於隱私保護,而且減少了存儲要求並提高系統的性能。

為了進行存在性驗證,系統需要預先將通過局部驗證的交易轉換為應用於UTXO哈希集合的交易,該過程被稱為壓縮(compaction)。具體而言,由哨兵計算輸入UTXO的哈希值,並將輸入UTXO與輸出安全鎖和價值一起,導出輸出UTXO的序列號,從而計算輸出UTXO的哈希值,然後將這兩個哈希列表發送給保存UHS的交易處理器,進行存在性檢查和執行。

存在性驗證與UHS互換

假定某交易已通過交易局部驗證並進行了壓縮轉換,交易處理器將按如下方式更新UHS集合:檢查UHS集合是否存在所有交易的輸入UTXO,如果有輸入UTXO缺失,那麼中止進一步處理,否則,處理繼續進行;交易處理器從UHS集合中刪除該交易的輸入UTXO對應的UHS,並將新創建的與輸出UTXO對應的UHS添加到UHS集合中。上述一刪一增的操作被稱為互換(swap)。

高性能架構

為實現高吞吐量、低延遲以及高容錯性的交易處理,漢密爾頓計劃設計了兩種架構。第一種是原子服務器(atomizer)架構,系統利用排序服務器為所有交易創建線性的歷史記錄。第二種是兩階段提交(two-phase commit,2PC)架構,系統並行執行數筆無衝突交易(即那些不會支付或收到同筆資金的交易),而不創建統一排序的交易記錄。

在這兩種架構中,UHS都可實現跨服務器分區,提高吞吐量並不斷擴展。執行單筆交易通常涉及多個服務器,每種架構使用不同技術協調一筆交易在多個服務器中的一致應用。中心化的原子服務器架構使用Raft協議對所有來自於哨兵驗證過的更新排序,然後將這些更新應用於全系統。 2PC架構則利用分佈式共識節點來執行原子交易和可串行化所需的鎖定,使用不同資金的交易不會衝突,可以並行執行;一旦某有效交易的資金被確認為未花費,交易就能連續進行,可同時批量處理多筆交易。

漢密爾頓計劃第一階段的實驗結果

漢密爾頓計劃在第一階段開發了兩套完整的計算源代碼或代碼庫。一個是中心化原子服務器架構的代碼庫,每秒能夠處理大約17萬筆交易,其中99%的交易尾部延遲不到2秒,50%的交易尾部延遲為0.7秒。由於原子服務器無法跨多個服務器進行分片,因此儘管可以將原子服務器狀態機中的功能簡化為只對一小部分交易進行輸入排序和去重,但該架構的系統吞吐量仍有限。也就是說,對有效交易進行強排序的設計會限制吞吐量。另一個是2PC架構的代碼庫,每秒能夠處理170萬筆交易,其中99%的交易可在1秒之內完成,50%的交易尾部延遲不到0.5秒,遠高於設定目標需要達到的每秒10萬筆交易的基本要求。此外,2PC架構若添加更多共識節點,還可進一步提高吞吐量,且不會對延遲產生負面影響。

以上代碼已經開源,漢密爾頓計劃稱之為“開源央行數字貨幣項目(OpenCBDC)”,目的是促進CBDC研發合作。

比較分析

與電子現金(E-cash)的比較

1982年,美國計算機科學家和密碼學家大衛·喬姆(David Chaum)發表了一篇題為《用於不可追踪的支付系統的盲簽名》的論文。論文中提出了一種基於RSA算法(RSA algorithm)的新密碼協議——盲簽名(blind signature)。利用盲簽名構建一個具備匿名性、不可追踪性的電子現金系統,這是最早的數字貨幣理論,也是最早能夠落地的試驗系統,得到了學術界的高度認可。其中有兩項關鍵技術:隨機配序和盲化簽名。隨機配序產生的唯一序列號可以保證數字現金的唯一性;盲化簽名能夠確保銀行對該匿名數字現金的信用背書。

漢密爾頓計劃採用了與E-cash相似的思路:一方面,通過全局唯一且每次交易都需要係統驗證的序列號,保證貨幣(UTXO)的唯一性;另一方面,採用中央處理模式,並利用加密算法實現系統的安全與抗攻擊性。但漢密爾頓計劃克服了E-cash的不足。在大衛·喬姆建立的E-Cash模型中,每個使用過的E-Cash序列號都會被存儲在銀行數據庫中。隨著交易量的上升,該數據庫就會變得越來越龐大,驗證過程也會越來越困難。而漢密爾頓計劃通過分離驗證和壓縮處理,盡可能減少交易處理器的存儲計算壓力,並利用分片技術和高性能架構,從而大幅提升交易性能。

簡言之,已花費的交易輸出與未花費的交易輸出,是兩種相反相成的設計思路。後者優化了前者面臨的數據無限膨脹的問題,這也是比特幣超越E-Cash的精髓所在。

與比特幣的比較

與比特幣相似,漢密爾頓計劃對幣的設計也採用了UTXO模式。但二者的區別在於:比特幣的區塊鏈存儲了所有UTXO信息;而漢密爾頓計劃沒有採用區塊鏈模式,幣不可簡單追溯,且其交易處理器並未存儲UTXO明細信息,僅存儲UTXO的哈希值。尤其是,漢密爾頓計劃的信任基礎與比特幣的分佈式共識機製完全不同,其平台將由可信任的中心機構管理,共識算法僅用於協調系統中各分區服務器的一致性,更類似於第三方支付後台的分佈式系統設計。

在防止雙重花費、無重放攻擊等威脅方面,比特幣採用的是工作量證明機制(Proof of Work,PoW),而漢密爾頓計劃的設計則依靠哈希算法,且高度依賴發行方和交易系統的安全可信。具體來說,對於漢密爾頓交易處理器中的每次轉移,其UTXO輸出的序列號都是經過哈希算法處理後所確定,只要從原始鑄幣交易開始的序列號是全局唯一的,後續遞推得到的每個UTXO序列號也將均具有全局唯一性,不會與過去或未來UTXO集合中的任何其他項重合。序列號的全局唯一性不僅是一個技術細節,而且可達到兩個效果。一是無雙重花費。互換操作會將UTXO永久標記為已花費。由於序列號是唯一的,因此任何UTXO只能被花費一次,且在花費後不能被重建。二是防止重放攻擊。因為每筆交易都對應著具有全局唯一性的一個或多個UTXO輸入,其簽名將覆蓋整個交易,包括相關的所有輸入和輸出。因此,一個交易的簽名對除此交易外的其他任何UTXO(包括未來創建的UTXO)都無效,而且,交易無法被複製,同一筆交易也不能被多次執行。漢密爾頓計劃設計的風險點在於:中心機構是否一定可信?發行方鑄幣的序列號是否全局唯一?交易處理器是否足夠安全從而可保證存儲的UHS集合不被篡改?

簡言之,雖然比特幣和漢密爾頓計劃都使用了UTXO的數據模型,但漢密爾頓計劃維護的是一套中心化的哈希登記系統,而比特幣維護的是一套分佈式的區塊鏈哈希登記系統。

其他比較

漢密爾頓計劃的技術報告引用了筆者在2018年國際電信聯盟(ITU)法定數字貨幣焦點組第二次會議上的工作論文。該論文主要是對數字人民幣原型系統的綜述,核心思想為“一幣、兩庫、三中心”的技術架構(《中國法定數字貨幣原型構想》,見《中國金融》2016年第17期),以及基於銀行賬戶與數字貨幣錢包分層並用的雙層業務架構(《數字貨幣和銀行賬戶》,見《清華金融評論》2017年第7期)。

漢密爾頓計劃當前的整體架構可以表達為“一幣,一錢包,一中心”。一幣指的是數字美元,即中央銀行簽名發行的以UTXO數據結構表達的加密數字串;一錢包是指個人或單位用戶使用的數字貨幣錢包,也是存儲用戶公私鑰的載體;一中心是指交易登記中心,記錄存儲數字貨幣未花費交易資金的哈希值,完成數字貨幣產生、流通及消亡全過程的權屬登記。

在數字貨幣設計方面,兩個原型項目都強調加密數字串的貨幣屬性和央行負債的屬性。在流通環節,兩個項目都以錢包為主要載體,強調用戶對數字貨幣的擁有和操作權限。在交易確權登記方面,兩個項目都設計了交易登記中心,也設計了“網上驗鈔機”。總體來說,兩個原型項目在設計理念層面有相通之處,均採用了中心化加密貨幣思路,交易處理“一次一密”,充分考慮了數字貨幣的安全性。技術路線又不囿於區塊鏈技術,既吸納了其中的先進成分,又擯棄了可能的技術堵點。兩個項目不同之處在於,漢密爾頓計劃第一階段沒有探索中介的技術角色以及如何實現用戶隱私與合規性的平衡;筆者提出的數字貨幣原型系統則考慮和設計了中介機構的角色,並提出認證中心和登記中心分離的設計思路,既可實現隱私保護又能滿足監管合規要求。值得一提的是,漢密爾頓計劃通過層層哈希計算,在登記服務器存儲的是交易信息的哈希,而不是明文信息,降低了系統開銷,在隱私保護的考慮上更為精細。

結 語

總體而言,漢密爾頓計劃第一階段的原型設計並不是一個完整的系統,不具備一個有效CBDC所需的全部功能,尚不能達到實際應用標準。後續漢密爾頓計劃將繼續探索CBDC的實現路徑,不斷提高系統的安全性、可審計性、可編程性、合規性、互操作性,完善離線支付功能,明確中介機構的角色,增強抵禦內部攻擊、拒絕服務攻擊、對抗量子攻擊的能力。漢密爾頓計劃給各國央行數字貨幣研發提供了兩個重要的啟示。

一是技術的包容性。漢密爾頓計劃在設計CBDC過程中,並不囿於某一技術路線。它不僅充分吸收了E-cash、比特幣等加密貨幣的優點並規避了可能的缺點,而且有效吸納了分佈式系統的高性能、高容錯架構設計。由此表明,CBDC設計的選擇不應畫地為牢,無須將思路限定在某一技術框架或領域。

二是技術的開放性。目前各國CBDC的試驗基本上是比較秘密的“曼哈頓工程”,而漢密爾頓計劃則秉持開放、眾智、敏捷的現代研發理念,主動將第一階段代碼進行了開源,創建了OpenCBDC項目並在github上公開。目前,漢密爾頓計劃仍積極尋求外界對開源代碼庫的貢獻以及吸納新的工作組成員,旨在與各方一起共同推進CBDC研發。漢密爾頓計劃這種開放式創新模式,無疑值得各國在CBDC研發實踐中加以學習借鑒。 ■