Categories
程式開發

央行數字貨幣在技術上是如何實現的


央行數字貨幣在技術上是如何實現的 1

最近關於央行數字貨幣DCEP(Digital Currency Electronic Payment)的消息不斷湧現,加上Facebook 的libra 對數字貨幣的推波助瀾,以及政府將區塊鏈定位為核心技術自主創新重要突破口,一下子區塊鏈的風頭無出其右。在看了央行數字貨幣研究所所長穆長春先生對 DCEP 以及 libra 的分析對比後,本人對 DCEP 的頂層設計非常好奇,但是苦於當前關於 DCEP 的相關報導都是基於宏觀方面的。

作為一個技術人員迫切的想知道DCEP 與區塊鏈的切合點,於是在仔細閱讀了人行的數字貨幣系統的專利後,寫一篇作為一個技術人員或者說區塊鏈從業人員的角度來看DCEP的某些技術細節。

在看完數字貨幣系統專利後,整體的感覺就是,DCEP 並沒有採用區塊鏈技術,而是一個以央行為中心的系統。其實也能理解,畢竟權利與義務是對等的,央行承擔著法幣兌付的義務,因此這個記賬的權利自然也應該由他承擔。當然在部分自由主義者看來,這種做法似乎不夠純粹,不夠 Decentralization。但是去中心化並不是銀彈,不能夠寄希望他來解決一切問題。相反的,是否選擇去中心化是需要和當前場景的主要矛盾相符合,如果當對公平或者透明的訴求成為了主要矛盾,那麼去中心化將是一個不錯的解決方法,但是在當前很多領域中,對效率的需求還是主要矛盾,所以在這些場景下,採用去中心化效果並不是會很好,反而會起到不斷消耗的反作用。

接下來,本文將根據數字貨幣系統專利,從 DCEP 的特徵、實現細節、離線支付場景來著重介紹。

DCEP 的特徵

DCEP 的特徵主要體現在兩大方面,一個是金融上的特徵,一個是技術上的特徵。專利上主要闡述了技術上的特徵,關於金融上的特徵,主要源自穆長春先生在公開課中的報導。

關於金融上的特徵

  • 替代 M0—— 首先DCEP 是對M0 的替代,也就是對現金的替代,之所以只對M0 替代,是因為M1、M2 已經實現了數字化,如果把M0 也數字化後,那麼央媽對資金的監管就比較完整了。另外,之所以從現金入手,一部分原因也是因為現金只是承擔了貨幣的功能,所以對社會的影響並不會非常大。

  • 雙層運營模式 —— 是指上面一層是人行對商業銀行,下面一層是商業銀行或者商業機構對老百姓。也就是說,商業銀行向人行交付 100% 的準備金,然後人行給與商業銀行等額的 DCEP,接下來用戶通過現金或者存款等向商業銀行兌換 DCEP。如果人行直接面向老百姓,理論上也是可以的,這樣的話,人行就需要面對全中國所有的消費者,他就需要設計一個既滿足用戶體驗又滿足高性能要求的系統,顯然人行是不擅長做這個的,所以最好的方式由市場經濟來決定,也就是說將面向用戶的那一端交給商業銀行或者機構來做,充分發揮市場競爭。

關於技術上的特徵

這一塊是指 DCEP 在設計上所需要滿足的幾個特徵,這幾個特徵與 BTC 等基於區塊鏈的虛擬貨幣概念比較相似。當然,與其說和 BTC 等虛擬貨幣的概念比較相似,不如說滿足那幾個基本特徵的才算是數字貨幣。

  • 安全性 —— 這個要求防止商務中任意一方更改或者非法使用數字貨幣,這個更多的是體現在對 DCEP 使用的監管上,甚至於說可以終止某次非法的交易。

  • 不可重複花費性 —— 這個是指數字貨幣只能使用一次,重複花費容易被檢查出來。之所以提這個,是因為一旦現金被數字化後,那麼數據的複制就是難免了,比如有個用戶用面額是100 的DCEP 買了一張電影票,但是又復制了這麼一份相同的DCEP 去進行消費,那麼就是對同一份數字貨幣進行重複花費,所以對於數字貨幣來說這個是基本特性。對於 BTC 來說,是通過 UTXO 來實現防止雙花,而對於 Ethereum、libra 來說則是通過交易的 seq 來防止雙花。對於 DCEP 來說,則是採用類似 UTXO 的方式,至於這裡的 UTXO 與 BTC 的 UTXO 的區別,會在下一篇文章中介紹。而現金則由於難以偽造的特性,在物理上可以保證只此一份。

  • 可控匿名性 —— 這個意思是說,即使商業銀行和商戶相互勾結,也不能跟踪 DCEP 的使用,換句話說就是除了 DCEP 的發行方(人行)外,其他的結構都無法追踪用戶的購買行為。終於可以擺脫部分隱私洩露的問題了。

  • 不可偽造性 —— 比較好理解,除了發行方以外,不能偽造假的數字貨幣。對於現金來說,是通過物理上的防偽手段來保證。對於 DCEP 來說,做法比較簡單,就是只有經過央行的私鑰簽名的才是真的 DCEP。岔開說下,之前Google 暴出量子計算的新聞,幣圈各種自嗨,覺得BTC 會被破解,量子計算真出來了,他的攻擊目標就算不是核武器,怎麼也得是央行這種級別,幣圈真的是太把自己當回事了。

  • 公平性 —— 支付過程是公平的,保證交易雙方的交易過程要么都成功,要么都失敗,更貼切的應該是滿足交易原子性。

  • 兼容性 這個表示 DCEP 的發行和流通環節,要盡可能的參照現金的發行與流通。

DCEP 實現細節

這裡的實現細節主要針對上述的特性來展開講解。

貨幣模型

基於對當前各個專利的研究,大致能確定 DCEP 是一種類似 UTXO 結構的貨幣模型。DCEP 的發行模式有三種方式(這里為了簡單我們稱央行的發行的數字貨幣為 D 幣)

  1. 按照最小面額產生,比如說央行發行總量為 100 元,並且最小面額是 1 分,那麼央行將發行 10000 個面額為 1 分的 D 幣;

  2. 根據用戶具體提款金額來生產,例如某個用戶通過轉賬得到了 12.34 元的 D 幣,那麼央行相當於發行了一個面額的 12.34 的 D 幣;

  3. 按照流通中實際貨幣面額產生,這個是最貼近當前實際現金的,例如央行發行面額為100、50、20、10、5、1 元等的D 幣,那麼後續流通過程中都是以這些面額的D 幣進行流通。

關於 UTXO 結構,這塊與 BTC 有很大不同,UTXO 表示未花費的交易,BTC 中通過這個未花費的交易來表示你擁有的餘額。比如說Alice 轉給Bob 一個BTC,對於Bob 來說如果沒有花掉這個BTC 的話,那麼Bob 就擁有了一個金額為1 BTC 的UTXO,就像現金一樣Bob 拿到了紙鈔,只要不花掉,那麼就是你的錢。 Bob 如何證明他的確擁有這個 UTXO 呢?簡單地說,誰擁有解開 UTXO 的鎖的鑰匙,這個 UTXO 就是誰的,至於有哪些鎖,如何開鎖,大家可以查詢下 P2PKH,P2SH 等信息,我們也會在接下來的文章中詳細介紹。在 DCEP 中,是通過登記中心來完成 UTXO 的功能,至於如何做的會在下面仔細介紹。

系統核心要素

央行的 DCEP 系統主義功能就是對法定數字貨幣的資金轉移,它由中央銀行與各商業銀行一起聯合運營。總的來說 DCEP 的核心要素有:一種幣,兩類庫,三個中心。

  • 一種幣 :這裡的一種幣就是指央行發行的法定數字貨幣,也就是說系統中只能轉移央行發行的這個法定數字貨幣。正如前面說的,只有央行私鑰簽名的才是法定數字貨幣,因此我們的電子錢包等都會內置央行的公鑰,用來驗證該數字貨幣是否為央行發行的。

  • 兩類庫 :兩類庫是發行庫和商業銀行庫,這兩個庫是數據庫。比如說,根據數字貨幣發行總量,央行根據上面說的方式用它的私鑰簽名生成對應總量的數字貨幣,此時這些數字貨幣是存放在央行的發行庫中。如果某個商業銀行需要提取一定量的數字貨幣,那麼系統就會將對應的數字貨幣發送到該商業銀行的商業銀行庫中,即數字貨幣從發行庫到銀行庫的轉移。需要注意的是,用戶從商業銀行提取數字貨幣,是數字貨幣從銀行庫進入到電子錢包的過程,屬於流通環節。

  • 三個中心 :三個中心一共兩種類型,一個是登記中心,另外一個是認證中心。

登記中心主要負責管理數字貨幣的整個生命週期,包括印製、轉移、銷毀、回籠等過程。他主要有兩張表,一個為數字貨幣權屬登記表,另外一張為交易流水錶。這個權屬登記表的作用是記錄某面額的數字貨幣是屬於誰的(如下圖所示),每當數字貨幣發生了轉移,在央行的登記中心都會對對應的數字貨幣的屬主進行更改,通過這個表可以實現確權查詢。這裡的重點是,登記中心確定用戶到底有多少錢。

央行數字貨幣在技術上是如何實現的 2

認證中心分為兩類,一個是 CA 認證,一個 IBC 認證。

CA 認證主要用於相對來說比較高級的機構,而 IBC 認證則是用於個人的。這裡引入認證中心的原因是,當用戶或者機構發起一筆 DCEP 的轉賬時,需要通過自己的私鑰進行簽名,也就是說這筆轉賬的合法性是通過簽名來保證的。在一般意義中的BTC、Ethereum 或者Libra 中,私鑰是用戶自己創建,由自己保管,並且用戶的地址是由私鑰對應的公鑰通過一系列運算(Hash,checksum)等得到的,這種方式的優點是資產賬戶和私鑰是天然綁定的,你擁有了私鑰​​也就擁有了其對應的資產。但是在DCEP 中,由於存在監管這個特性,資產歸屬和私鑰是分開的,也就是說央行會在用戶註冊了一個DCEP 錢包後,會通過認證中心給錢包用戶分配一個私鑰,這個私鑰用來證明是這個用戶,至於這個用戶是否擁有數字貨幣,是在登記中心來確定的。所以這裡的重點是,用戶私鑰是央行生成的。

另外,這裡簡單介紹下IBC 認證,IBC(Identity-Based Cryptograph)是基於身份標識的密碼系統,還是基於非對稱的秘鑰體系,他與CA 認證的最大區別就是不需要證書,而是通過用戶標識例如手機號碼、郵箱等作為公鑰,由IBC 認證中心根據用戶標誌生成對應的私鑰,由於用戶標誌本身就是一個公鑰,通過用戶標誌就能確認身份有效性了,從而就不用再依賴證書和證書管理系統了。當然,此時央行的公鑰還有用戶的私鑰、證書數據就相當的重要了,需要將該數據存儲在 SE 區域。

通過對一種幣,兩類庫,三個中心的介紹,大致可以了解 DCEP 的一些頂層設計原則,接下來會結合具體的場景,來實際將頂層設計的邏輯走一遍。

DCEP 具體場景描述

在貨幣模型中提到了 DCEP 關於面額一共有三種方案,我們這里以第三種固定面額來介紹。

印製

相比紙幣的印製過程,DCEP 的印製其實就是產生一串由央行簽名過的數字,這裡根據數字貨幣系統專利來介紹如何生成這串分量十足的數字。

  1. 由央行的主密碼與面額數字 1,5,10,20,50,100 分別產生 6 個基本加密密碼。這 6 個加密密碼分別是用於不同面額的數字貨幣。

  2. 由 Hash 算法生成系統隨機數,這個隨機數就跟紙幣上的冠字號碼一樣。

  3. 由步驟 1 生成的基本加密密碼與隨機數加密,生成加密密碼。這個加密密碼其實就已經對應特定冠字號的數字貨幣了。

  4. 央行通過私鑰對加密密碼進行簽名,此時一枚新的法定數字貨幣就產生了。

下圖是印製的過程

央行數字貨幣在技術上是如何實現的 3

用戶登錄

這裡簡單說下登錄過程,商業銀行系統對連接央行的認證中心和登記中心。

  1. 用戶下載對應的某商業銀行的電子錢包 APP

  2. 用戶在 APP 的登錄頁註冊相關信息,例如姓名,身份證號,手機號,住址等信息

  3. 商業銀行通過上述註冊信息,利用手機號作為 IBC 的公鑰進行登記,在 IBC 完成唯一性驗證後,IBC 為該用戶生成私鑰。

  4. 用戶登錄後,下載用戶用戶私鑰和央行公鑰數據,並將這些數據存儲在 SE 區域。

央行數字貨幣在技術上是如何實現的 4

提取

這裡介紹下用戶通過商業銀行賬戶提取法定數字貨幣(簡稱 D 幣),例如用戶從自己的工商銀行賬戶取 150 元,然後兌換成 D 幣。

  1. 用戶登錄錢包 APP,選擇 “提取數字貨幣”,並選擇工商銀行,輸入銀行賬戶以及兌換的數字貨幣額度。

  2. 商業銀行驗證該請求的合法性:校驗賬戶密碼,用戶賬戶資金是否足夠,以及該商業銀行的銀行庫中的 D 幣是否足夠。若通過合法性校驗,那麼將該用戶的在商業銀行中的賬戶扣除250 元,商業銀行從銀行庫中支出D100、D50 (D100 表示面額為100 的D 幣),並將這些信息發送至央行數字貨幣系統。

  3. 央行數字貨幣系統收到商業銀行數字貨幣系統的請求後,進行發核心校驗,例如判斷發送過來的 D100 和 D50 是否歸屬於該商業銀,以及對應的簽名驗證等。在校驗通過後,登記中心變更商業銀行發送過來的 D 幣的屬主信息,將工商銀行的屬主變更為該用戶,並且記錄對應的交易流水。完成完整動作後,返回處理成功的信息給商業銀行。

  4. 商業銀行將 D 幣發送到用戶手機端,至此,用戶的手機端便有了 D100 和 D50。需要注意的是,真正決定你是否擁有這 150 元 D 幣,不是你手機端存儲了這 150D 幣,而是登記中心決定的。

這里岔開一下,在另外幾篇專利中,我們發現,並不是通過更改屬主關係,而是直接將原有的D 幣進行銷毀,再重新生成新的D 幣,也就是說央行在收到請求併校驗通過後,是將商業銀行的那250 元D 幣直接銷毀,然後再重新生成一個新的250 元D 幣,這樣的優點在於,只要央行不公佈交易流水,只單單公佈一個數字貨幣確權信息,那麼外部是無法將數字貨幣的轉移信息給串聯起來的,這樣既符合了匿名,又滿足了央行的監管,因此後續有可能採取銷毀的方案。

支付

這裡指用戶 A 和用戶 B 之間進行 D 幣的在線支付,假設 A 用戶的電子錢包中有 D100,D50 總計 150 元的 D 幣,先需要支付 150 元給 B 用戶,支付步驟如下。

  1. A 用戶登錄 APP,選擇付款功能,並輸入:付款金額,收款人(例如手機號),點擊發送

  2. A 用戶的 APP 根據付款金額,自動選擇總額為 150 的 D 幣,並將信息發送至商業銀行數字貨幣系統。

  3. 商業銀行校驗支付信息的合法性,例如:D100 和 D50 的合法性,交易金額與數字貨幣是否等值,以及接收用戶的相關校驗。校驗通過後,將請求發送至央行的數字貨幣系統。

  4. 央行數字貨幣系統收到請求後,驗證 D100、D50 是否為交易發起者等,在登記中心更改 D100、D50 的屬主為 B 用戶,並記錄對應的流水。最後將成功信息返回給商業銀行數字貨幣系統

  5. 商業銀行收到成功信息後,將 D100 和 D50 發送到 B 用戶 APP 中,並分別向 A、B 用戶的 APP 發送交易成功的信息。

這裡的支付和提取的流程基本一致,只要明白屬主信息是在央行的登記中心進行修改就可以了。

如何實現匿名、監管

因為現金交易存在匿名的特性,如果 DCEP 不能滿足匿名性,那麼有很多的場景下,普通用戶可能還會選擇用現金,因此 DCEP 必然需要滿足匿名性。但是,DCEP 的另外一個功能是為了滿足監管需求,因此 DCEP 目前對匿名也是前台匿名後台實名的方式。

  • 匿名 —— 在上面支付的場景中,交易信息M 可以設計為M = 交易代碼|| 發送者公鑰||D 幣信息|| 支付金額|| 接受者公鑰,再通過Hash 算法將M 信息做摘要,並用發送者的私鑰對摘要進行簽名得到m,最後將M||m 信息發送到商業銀行的數字貨幣系統。由於對交易雙方做了一定的匿名處理,若再採取每次轉賬都銷毀再生成的方式,商業銀行和機構是難以追踪資金轉移的。

  • 監管 —— 由於在認證中心需要用戶登記身份標識作為公鑰,同時在註冊時用戶會上傳對應的信息,因此央行的後台系統對用戶信息是一清二楚的,同時登記中心會記錄交易流水,因此通過大數據分析可以做到一定的監管。

關於雙離線支付場景分析

DCEP 相比支付寶等電子支付有一個特性,就是離線支付。這個特性非常重要,因為DCEP 是現金的數字化,因此需要具備現金的特性,可以想像下,如果有一天出現了極端惡劣的情況例如大地震、戰爭等,導致網絡不可用,如果DCEP 不支持雙離線支付,那麼就意味著普通百姓沒辦法進行正常的生活了。因此,即使出現雙離線支付的場景概率非常小,但是還是必須支持這個功能。

在數字貨幣系統專利中,提到了雙離線支付的解決​​方案。例如 A 用戶的電子錢包中有 D100,現在 A、B 用戶都離線的情況下需要支付 D100 給 B 用戶。

  1. A 用戶打開 APP 後,選擇離線支付功能,輸入付款金額和接收方信息後點擊支付。

  2. A 用戶對上述信息利用自己的私鑰進行簽名,並用收款人的手機號或者其他標識收款人的信息通過 NFC 等近場通訊的方式進行加密傳輸。

  3. B 用戶 APP 接收到加密信息後,解密並驗證 D 幣的合法性,以及金額是否等值。此時對於A、B 用戶來說已經完成了雙離線支付,但是此時B 其實並沒有真正收到A 轉給他的D 幣,在APP 界面上來說,接受到的D 幣應該是出於不正常狀態(不可用)。接下來,B 用戶的 APP 會在聯機狀態後,將支付信息發送給商業銀行數字貨幣系統。

  4. 商業銀行收到這個支付信息後,在校驗了合法性後,會將這個信息發送給央行數字貨幣系統。

  5. 央行數字貨幣系統收到支付信息後,在完成與在線支付一樣的校驗後,就會更改屬主,將原本屬於 A 的 D 幣,變更為 B 用戶,最後將結果返回給商業銀行。

  6. 商業銀行收到成功信息後,通知 A、B 用戶 APP 發送交易成功的消息,此時 B 用戶接收到的 D 幣狀態才會變成可用狀態。

因此,如果 A 轉給 B,那麼 B 在聯網之前,A 轉給 B 的 D 幣無法轉給 C 的,這個雙離線支付並不能完成鍊式的支付。總體感覺,這個解決方案只能用於臨時性的離線情況,例如在地下停車場或者網絡不好的場所進行支付。

另外,在雙離線支付場景中,若用戶利用某些漏洞實施了雙花,從專利來看,是通過事後追責的形式來處理的。

為什麼要推 DCEP

要推行 DCEP 的理由,對內一方面是加強對資金轉移的監管,提高金融穩定性,增強反腐、反洗錢的能力。對外,有利於人民幣國際化,不過人民幣國際化,不會因為人民幣數字化了而成功,國際化的背後必然是我國國力強大,堅持通過用真理說服人。但是,DCEP 可以降低國際友人的使用門檻,隨著中國消費者走出國門進行境外的消費,說不定在不久的將來,我們的國際友人也可以通過手機號註冊一個錢包,直接收款,而不必再通過開通銀行賬號。

在不久的將來,自上而下的通過整理說服人,自下而上的通過消費者帶動國際友人使用人民幣。

本文轉載自:

深入淺出區塊鏈(ID:blockchaincore)

原文鏈接:

https://learnblockchain.cn/2019/11/06/DCEP-research

作者知乎:

https://zhuanlan.zhihu.com/c_1124734224619773952