雙離線支付的最關鍵問題是解決已簽名交易報文的防僞識別,包括驗證數字貨幣本身的真僞,以及驗證簽發該交易的付款方是否爲該數字貨幣的屬主。

推薦閱讀:《鏈聞精選好文|深入解讀 DCEP 與各國央行數字貨幣架構與影響

原文標題:《央行數字貨幣 DCEP 雙離線支付場景和方案淺析》
撰文:許剛,摩聯科技 CTO

2019 年 6 月,由 Facebook 主導的加密貨幣項目 Libra 發佈白皮書以來,全球主要國家央行開始密集釋放研發數字貨幣的信號。中國人民銀行自 2019 年 8 月份以來,多次表態將加快推進法定數字貨幣(央行 DC/EP)的研發步伐。

中國人民銀行支付結算司副司長穆長春在《科技金融前沿:Libra 與數字貨幣展望》課程中提到,央行數字貨幣能夠像紙鈔一樣實現「雙離線支付」,即在收支雙方都離線的情況下仍能進行支付,未來只要兩個人都安裝了央行數字貨幣的數字錢包,不需要網絡,也不需要信號,只要手機有電,兩個手機相互碰一碰就能實現實時轉賬。

截至目前,關於「雙離線支付」具體如何實現,雖無大量文獻進行剖析,但從已有文獻可以探究些許端倪。本文嘗試從交易設備端的角度,對雙離線支付的原理、難點和技術方案進行粗淺的探討。

概述

央行數字貨幣的主要交易場景是聯網的,交易結果立即反映在央行數字貨幣登記系統中。雙離線支付場景是指數字貨幣交易的收付雙方,在交易期間,均無法直接或間接連接到在線賬本的場景,這是聯網交易場景之外的補充。

根據公開新聞報道和文獻資料 [1] 的解讀,中國央行數字貨幣擬採用中心化發行和管理的雙層運營體系,每枚數字貨幣的屬主由央行數字貨幣登記系統記錄和變更,具體的場景中,還有商業銀行等參與。

爲簡化起見,本文將央行數字貨幣的賬本和管理機制統稱爲央行數字貨幣登記系統,並將交易過程中終端(可能經由商業機構)到央行數字貨幣登記系統之間交互協議和密鑰體系,簡略爲終端向央行數字貨幣登記系統提交由付款方私鑰簽名的交易報文。

爲簡化起見,本文只探討收付雙方的交易終端均爲智能手機的場景。收款方爲智能手機,付款方爲數字貨幣實體芯片卡的場景,或者其中一方或雙方爲安裝有專用數字貨幣芯片的專用設備的場景,也基本適用本文所述原則。

本文提出以下觀點:

1、數字貨幣雙離線支付的基本原理是,付款方在離線狀態下構造交易報文並簽名,將已簽名的交易報文通過近場通信交給收款方,並在後續聯網時提交給央行數字貨幣登記系統入賬。該過程可以類比爲付款方現場開具支票,收款方事後憑支票去銀行兌現。

2、雙離線支付的最關鍵問題是解決已簽名交易報文的防僞識別,包括驗證數字貨幣本身的真僞,以及驗證簽發該交易的付款方是否爲該數字貨幣的屬主。智能手機上的央行數字貨幣錢包必須在央行強監管下。解決防僞問題的關鍵技術措施是利用智能手機 TEE 保護央行數字貨幣錢包,抵抗作惡動機。

3、若雙離線支付只要求單次離線交易,即離線收入的數字貨幣必須聯網確認入賬後才能再次交易,則數字貨幣採用不定面額更有利於提高使用便捷性。若要求支持數字貨幣在離線狀態下二次流轉,即離線收入的數字貨幣可以離線花出去,則數字貨幣採取固定面額安全性更高。實現離線二次流轉的關鍵技術措施也是由 TEE 保護的央行數字貨幣錢包。

4、一個央行數字貨幣錢包同一時刻只能綁定一臺符合安全要求的智能手機,保證一個控制人(數字貨幣的屬主)的一個公私密鑰對賬號,同一時刻只能在一臺智能手機上付款,收款方要對付款方錢包是否爲央行認證的合法錢包進行驗證,從而抵抗離線雙花。實現錢包手機綁定的關鍵技術手段是基於手機根信任的遠程認證(Remote Attestation)技術。

雙離線支付的特點與技術要素

根據中國人民銀行有關表態,央行數字貨幣主要目的是替代 M0,即紙鈔的數字化。以紙鈔爲參照,央行數字貨幣除了可以像今天的網上銀行、微信支付、支付寶等一樣進行聯網收付以外,還必須能夠像紙鈔一樣便於離線使用。

交易設備端視角探討央行數字貨幣雙離線支付原理、難點與技術方案

以下逐項分析對央行數字貨幣上述特徵的推測理由。

離線交易

與紙鈔沒有屬主標識不同,央行數字貨幣具有屬主標識,並由央行數字貨幣登記系統的中心化賬本維護數字貨幣的屬主標識。由於央行數字貨幣的所有權,最終是由央行數字貨幣登記系統予以確權,央行數字貨幣的主流交易形態,應當是聯網交易 [iii],而雙離線交易,是聯網交易的補充。

聯網交易的基本原理是付款方用與其綁定的私鑰,對支付承諾(付給誰多少錢)進行簽名,並將其提交給央行數字貨幣登記系統,央行數字貨幣登記系統驗證交易的數字貨幣有效,付款方簽名和支付承諾有效後,完成交易確認。

雙離線支付的本質是一種收付雙方均認可的延遲交易。雙離線支付過程是付款方用與其綁定的私鑰,對支付承諾進行簽名,然後將已簽名的支付承諾交給收款方。收款方在恢復聯網之後,向央行提交該支付承諾。由於該支付承諾已經被付款方簽名,雖然是由收款方提交給央行的,但央行驗證通過後,同樣可以完成交易確認。這類似於付款方開具支票,收款方事後憑支票向銀行要求兌付。

雙離線支付的基本流程如圖 1 所示。

交易設備端視角探討央行數字貨幣雙離線支付原理、難點與技術方案圖 1 央行 DC/EP 雙離線場景基本流程

紙鈔具有無限次流轉的能力,比方說,商戶 A 收到顧客甲支付的紙鈔,可以作爲找零付給顧客乙,顧客乙又可以拿這張紙鈔付給商戶 B。

央行數字貨幣在離線交易上,面臨兩種選擇:僅支持單次離線交易,即離線收入的數字貨幣必須聯網確認入賬後才能再次交易;或者是支持離線狀態下數字貨幣二次流轉,即離線收入的數字貨幣可以離線花出去。

離線二次流轉是以該數字貨幣最近的聯網狀態爲基礎,由其各次離線流轉中的屬主依次進行交易簽名構成連續的簽名序列。只要簽名序列中的起始簽名的屬主與央行數字貨幣登記系統中登記的一致,簽名序列是依次連續且有效的,那麼聯網後,央行數字貨幣系統就能夠把數字貨幣兌付給最後一個簽名中指定的收款方。離線二次流轉類似於在支票上背書,只要背書是連續有效的,銀行就可以兌付給最後一個背書所指定的收款人。由於央行數字貨幣所有權的最終確權必須聯網進行,出於風險控制考慮,對每枚數字貨幣在離線狀態下的流轉次數,央行有可能會做一定限制。一枚數字貨幣的離線流轉次數超過一定閾值後,有可能必須聯網與央行數字貨幣登記系統進行同步,才能再次離線流轉。

離線單次交易和二次流轉本質上只是單次和多次的區別,但二次流轉面臨更嚴苛的防僞考驗,以及不得不爲此付出使用便捷性等方面的代價(詳見後文「貨幣標識和貨幣面額」和「防僞」章節)。

若作爲紙鈔和硬幣的替代,爲了達成與之相似的離線流通能力,央行數字貨幣應當能夠在離線狀態下二次流轉。然而,考慮今天中國幾乎無處不在的網絡覆蓋,探討是否值得爲小概率的數字貨幣離線二次流轉而付出相關代價,這超出了本文的範圍,不做展開。

賬戶 /Token 範式

參考電子化的非現金 M1、M2 賬戶,微信支付、支付寶賬戶,以及比特幣、以太坊等公鏈數字貨幣,有兩種典型的範式:賬戶範式和 Token 範式。

今天的銀行賬戶屬於賬戶範式。開設賬戶一般需要審批,個人銀行賬戶和支付賬戶尤其要滿足嚴格的身份驗證要求。

比特幣、以太坊等區塊鏈虛擬貨幣則屬於 Token 範式,對用戶高度開放,任何人只要根據數字簽名算法生成一個公私密鑰對,就可以擁有區塊鏈內的地址。Token 範式根據交易過程和餘額計量的不同,又有兩種主要的模型:餘額模型和 UTXO 模型 [iv]。

本節闡述 UTXO 模型時以固定面額 UTXO 模型爲例,詳見「貨幣標識和貨幣面額」一節。

交易設備端視角探討央行數字貨幣雙離線支付原理、難點與技術方案

根據中國人民銀行等機構公開的信息,央行數字貨幣較大可能會採用 Token 範式的 UTXO 模型。本文從離線支付角度,認爲 UTXO 模型比餘額模型更適合央行數字貨幣。

餘額模型在處理離線條件下的二次流轉時,有嚴重的兌現次序問題。例如,某商戶賬戶上原有 50 元錢,先離線收了顧客甲支付的 100 數字貨幣(顧客甲簽名的支付承諾),然後又向供應商 A 離線支付了 120 元數字貨幣的貨款(商戶簽名的支付承諾)。

倘若商戶尚未恢復聯網的時候,供應商 A 先聯網並向央行提交了商戶簽名的 120 元貨款的支付承諾,這時央行賬本上該商戶只有 50 元錢,無法完成 120 元的付款。解決該問題的方法是,商戶將顧客甲支付 100 元的已簽名支付承諾一併給到供應商 A,供應商 A 先將顧客甲的已簽名支付承諾提交給央行,再將商戶的已簽名支付承諾提交給央行。

然而這並不完美,當顧客和供應商很多時,離線交易次數很多時,要求多方互相協商已簽名支付承諾向央行的提交順序,這在實踐中是難以操作的。

而 UTXO 模型的支付過程是圍繞每個數字貨幣進行的。UTXO 模型下,數字貨幣多次離線流轉過程,實際是該貨幣在流轉過程中的各次屬主,依次對其支付承諾簽名,並連同之前的各次已簽名支付承諾一起轉交給下一屬主。只要各次簽名能連續向前追溯,且最前面的簽名與央行數字貨幣登記系統中所記錄的屬主一致,那麼這枚數字貨幣就能被兌現給最後一個已簽名支付承諾中指定的收款人。任何人離線收到的數字貨幣都可以在聯網時去兌現,與其他人無關,也沒有任何兌現次序要求。因此,從離線支付角度看,UTXO 模型比較適合央行數字貨幣。

貨幣標識和貨幣面額

UTXO 根據面額是否固定,細分又有不定面額 UTXO 和固定面額 UTXO 兩種子模型。

比特幣採用不定面額 UTXO 模型。當一個或多個 UTXO 在一筆交易中被花費時,它會分裂成給一個或多個收款方的一個或多個 UTXO、找零給自己的一個 UTXO (如果有找零的話),以及給礦工的交易費三部分,這三部分的金額之和等於被花費的 UTXO 金額之和。

在該模型下,UTXO 不是永久存在的,UTXO 存續期間有唯一屬主(即上一屬主所簽名的交易中指定的收款人)且屬主不可變更,它一旦被花費就會被銷燬,同時誕生新的 UTXO,新的 UTXO 的屬主又是在當次交易中被指定的。UTXO 由產生該 UTXO 的交易來標識。例如,比特幣用交易報文的散列值加上該 UTXO 在該交易中的輸出序號來標識該 UTXO。

固定面額 UTXO 模型則與紙鈔非常相似。該模型中,每個 UTXO 在發行時,編有永久唯一標識,賬本維護了每個標識的 UTXO 的屬主是誰。在消費時,與紙幣一樣,固定面額 UTXO 只能按其面額參與交易,如果交易金額不等於面額,那要麼用多個不同面額的 UTXO 來湊到交易金額,要麼收款方找零。如果收付雙方都沒有足夠的零錢,那麼交易可能就無法進行。

固定面額 UTXO 模型下,UTXO 除非被髮行方標記爲銷燬,其標識是永久的,其交易實際上是 UTXO 的屬主的更改。

對比特幣而言,由於交易需要支付金額不等的交易費,只能採用不定面額 UTXO 模型。倘若採用固定面額 UTXO 模型,那可能就需要本交易以外的 UTXO 來湊交易費,而動用其他 UTXO 實際上又構造了新的交易,新的交易又產生交易費,最後導致交易模型無法收斂。

央行數字貨幣,根據公開報道的其旨在替代 M0 的目的,應當沒有交易費,因此,技術上不定面額和固定面額 UTXO 模型都可以採用。

央行數字貨幣如果採用不定面額 UTXO 模型,那麼:

  • 用戶使用中無需零錢湊金額,找零不受固定面額限制,便捷性接近支付寶、微信支付等第三方支付;
  • 除了央行初始發行的 UTXO 由央行產生以外,其他 UTXO 均是由交易輸出產生;
  • 若要滿足離線二次流轉要求,那麼 UTXO 的標識,必須由且僅由交易報文經某種算法產生(央行發行的初始 UTXO 除外)。這是因爲,離線交易中,只有經簽名的交易報文能夠通過近場通信流轉,如果 UTXO 的標識的生成需要交易報文以外的信息,那就無法在離線時生成 UTXO 標識,進而無法二次流轉;
  • 由於上一條的原因,若要滿足離線二次流轉要求,央行只可能對初始發行的 UTXO 進行簽名(用於防僞),其他由交易產生的 UTXO 只能由發起該交易的用戶的私鑰簽名(離線交易中也只能通過驗證 UTXO 屬主的簽名來判定真僞),安全性相對於固定面額 UTXO 模型要弱;
  • 央行數字貨幣登記系統的索引可能是基於交易的,因爲 UTXO 標識是動態由交易報文來標識的。

央行數字貨幣如果採用固定面額 UTXO 模型,那麼:

  • 用戶使用方法接近於紙鈔、硬幣,需要備零錢,便捷性弱於支付寶、微信支付等第三方支付;
  • 數字貨幣在央行發行時打上永久標識,並以央行數字貨幣發行私鑰簽名,用戶設備通過預置的央行數字貨幣發行公鑰驗籤可以判斷數字貨幣的真僞,在離線二次流轉中也可以驗證,安全性高於不定面額 UTXO 模型;
  • 央行數字貨幣登記系統的索引可能是基於 UTXO 數字貨幣標識的,因爲 UTXO 在流通中其標識不變,賬本數據結構相對簡單。

比較兩種模型,不定面額 UTXO 模型不需要備零錢,使用較爲便捷,但 UTXO 標識不固定,央行監管較爲複雜。在離線交易情況下,交易產生的 UTXO 央行無法對其進行認證,攻擊者僞造數字貨幣可能不易察覺。雖然收款方長期不聯網的可能性較低,但一旦發生僞鈔,可能在羣衆中造成不良印象,影響央行數字貨幣離線交易的健康發展。而爲了控制其風險,採用不定面額 UTXO 模型的話,可能要限制一枚數字貨幣只能進行一次離線交易,之後必須聯網和央行數字貨幣登記系統同步後,才能再次交易。

固定面額的 UTXO 模型雖然需要備零錢,使用便捷性略差,但由於可以用央行數字貨幣發行公鑰對任意一枚數字貨幣的真僞進行驗籤,即使發生離線惡意攻擊,攻擊者也只能以「雙花」的方式將同一枚數字貨幣多次離線支付給多個不同的人,而無法僞造數字貨幣本身。這更有利於防範金融風險的發生,並且能夠支持離線二次流轉。

後文「防僞」一節,將進一步闡述利用 TEE,實現防僞,尤其是離線防僞的能力。

根據以上分析,本文認爲,若雙離線支付只要求單次離線交易,即離線收入的數字貨幣必須聯網確認入賬後才能再次交易,則數字貨幣採用不定面額更有利於提高使用便捷性。若要求支持數字貨幣在離線狀態下二次流轉,即離線收入的數字貨幣可以離線花出去,則數字貨幣採取固定面額安全性更高。

貨幣擁有者標識

數字貨幣使用公私密鑰對中的公鑰(或公鑰的某種散列值)來標識擁有者,僅與其成對的私鑰所簽署的數字簽名可以被該公鑰成功驗籤,只有成功驗籤,才能對數字貨幣進行使用。相關原理本文不再贅述。

匿名性

匿名性指貨幣的擁有者的真實身份是否公開。

由於數字貨幣的擁有者是用公鑰來標識的,因此匿名性的問題,實際上就是公鑰與掌握該公私密鑰對的人的真實身份的關聯關係是不是公開的。

對於央行數字貨幣,匿名性取決於使用者開通數字錢包時所進行的 KYC (Know Your Customer)的程度。一般解讀認爲,僅央行在較高等級的 KYC 層級下,能通過 KYC 過程掌握使用者的真實身份,而一般商業機構均不掌握公鑰和使用者真實身份的關聯關係。

防僞

防僞是雙離線支付的核心問題。本節以固定面額 UTXO 模型爲主來闡述防僞的實現,必要處闡述不定面額 UTXO 模型的差異點。

在聯網交易中,向央行數字貨幣登記系統提交已簽名交易報文後,央行數字貨幣登記系統負責對交易報文的有效性進行權威判斷,如果通過,收款方能夠立即從央行數字貨幣登記系統獲得相關 UTXO 屬主更改的確認。

央行數字貨幣登記系統至少要對以下幾點進行判斷:

  • 判斷該交易報文中參與交易的 UTXO 標識是不是發行流通的 UTXO。如果不是,說明這個 UTXO 是僞造的。
  • 判斷該交易報文中 UTXO 的屬主,與央行數字貨幣登記系統賬本中該 UTXO 的屬主是否一致。如果不一致,說明這個 UTXO 可能是僞造或者試圖被雙花的。
  • 判斷該交易報文的簽名是否能被該 UTXO 屬主的公鑰正確驗籤。如果驗籤失敗,說明這筆交易不是由 UTXO 的屬主發起的,是僞造交易。
  • 判斷該交易報文中指定的收款方地址是不是一個在央行數字貨幣登記系統中登記過的使用者地址。如果收款方地址不存在,則拒絕交易,否則轉入無效收款方的數字貨幣將會因爲沒有人知道與該無效收款方對應私鑰而無法繼續流通(相當於紙鈔被燒掉了 [v])

在雙離線支付中,交易報文的有效性只能由交易參與者通過交易終端來判斷。顯然,交易終端必須具備一定的由央行數字貨幣登記系統背書的權威性,上述判斷才能做出。

由此推斷,用於交易的央行數字貨幣錢包,必須由央行強監管,執行嚴格的安全標準,強制檢測認證。具體應具備以下特點:

  • 安裝錢包軟件的智能手機必須支持可信執行環境(TEE),且啓用了安全啓動、安全顯示(TUI)等能力。錢包軟件必須利用 TEE 對央行數字貨幣發行公鑰、央行錢包認證根公鑰、央行錢包認證子私鑰、央行數字貨幣登記系統的服務器根證書、UTXO 賬本信息、用戶私鑰等敏感信息加以保護;簽名 / 驗籤、近場通信中交互的交易信息、UTXO 交易報文組裝等敏感處理和用戶信息的顯示 / 輸入,必須在 TEE/TUI 內進行,以防被篡改或竊取。儘管 SE 可以提供更高級別的安全保護,但 TEE 可以提供幾乎覆蓋所有智能手機的普適性,而能支持 SE 的手機則少得多。本文認爲,放置在 TEE 中的敏感信息除用戶私鑰和央行錢包認證子私鑰有不可泄露不可篡改的較高要求外,其他敏感信息主要是要求不可篡改,安全性要求相對低。用戶私鑰放置在 TEE 中雖然安全性低於 SE,但央行可以限制綁定在智能手機上的數字錢包的最大存幣量,從而控制其風險(更大的存幣量要求可以使用數字貨幣芯片卡而非智能手機錢包)。央行錢包認證子私鑰則可以通過限制有效期,聯網時定期更新,來控制風險。並且,作爲兜底,必要時央行數字貨幣登記系統有可能通過回滾中心化賬本而挽回損失。此外,用戶有備份私鑰以便更換手機時可以在新手機上導入錢包的要求,而 SE 出於安全考慮,一般只能導入私鑰而無法導出私鑰,因此用戶私鑰保存在 TEE 中也便於用戶離線備份。
  • 每個用戶賬號只能綁定在一個錢包上,並且只能在一臺智能手機上激活。激活時,手機必須聯網,並由央行數字貨幣登記系統對手機安全性進行遠程認證(例如檢測手機沒有被 root,也不是在調試狀態,詳見「一種抗作惡的雙離線支付方案」一節),通過後,登記手機標識信息。更換手機遷移賬號必須在聯網狀態下完成。該過程中,央行數字貨幣登記系統通過驗證碼、身份證等方式進行用戶身份驗證。確保每個用戶賬號只能在一臺智能手機上發起交易,是爲了保證離線狀態下,只有一套 UTXO 離線賬本,防止惡意用戶在多個設備上對同一 UTXO 簽署多個不同的交易報文(抗「雙花」)。
  • 錢包應當在 TA (Trusted Application 可信應用,指錢包軟件運行在 TEE 中的部分)中初始內置央行數字貨幣發行公鑰、央行數字貨幣登記系統的服務器根證書、以及央行錢包認證根公鑰。
  • 錢包在激活過程中,應當安全下載央行爲其派生的唯一錢包認證私鑰並保存在 TEE 中。錢包應當在 TA 中初始內置用於驗證的央行錢包認證根公鑰。
  • 錢包應當在聯網時與央行數字貨幣登記系統同步。錢包內始終應存儲所綁定的用戶賬號的 UTXO 的最新信息,以便離線時使用這些信息發起交易,以及將離線狀態的已簽名交易報文提交給央行數字貨幣登記系統。
  • 在以上基礎上,在交易中執行前述判斷。

上述提到的三個需要預置在錢包 TA 中的公鑰 / 證書的作用是:

央行數字貨幣發行公鑰

央行數字貨幣發行私鑰用於簽署每一個央行發行的數字貨幣。其對應公鑰應內置於錢包 TA 中,以便在離線情況下也能驗證數字貨幣的真僞。

若央行數字貨幣採用不定面額 UTXO 模型,那麼只有最後一次聯網交易時產生的 UTXO 可以由央行數字貨幣發行私鑰簽名,而離線交易中產生的 UTXO 無法由央行數字貨幣發行私鑰簽名,無法在後續流轉中驗籤,因此,只能進行單次離線交易。

若央行數字貨幣採用固定面額 UTXO 模型,那麼每一個數字貨幣都由央行在初始發行時用央行數字貨幣發行私鑰簽名,流通過程中不需要重新簽名,因此,可以進行離線二次流轉。

央行數字貨幣登記系統的服務器根證書

該根證書用於錢包軟件連接央行數字貨幣登記系統時,驗證央行數字貨幣登記系統是真實的,從而抗 DNS 攻擊、中間人攻擊等。央行數字貨幣登記系統可能有多個服務入口,根證書用於驗證所有這些入口服務器的證書。

該證書亦用於協商遠程通信的通信密鑰。

央行錢包認證根公鑰

央行錢包認證根公鑰對用於在離線交易時,收付雙方互相驗證對方的數字錢包是經過央行認證的合法錢包。

因爲用戶知道自己的私鑰,惡意用戶有可能利用私鑰簽署形式合法的交易報文,在離線情況下,對自己的一個數字貨幣簽發多次交易。爲抵禦離線雙花攻擊,收款方必須驗證付款方的交易報文,是由經過央行認證的數字錢包發出的。

錢包在激活過程中,央行通過手機遠程認證完成錢包和智能手機的綁定後,由央行錢包認證根私鑰根據錢包標識、綁定時刻、密鑰有效期等要素,派生出該錢包的認證子私鑰,並通過央行數字貨幣登記系統的服務器根證書所建立的安全通道,下載到錢包內並保存在 TEE 中。

交易中,付款方必須使用上述錢包認證子私鑰,對交易中通信的報文(其中包含派生該子私鑰的要素和由用戶私鑰簽名的交易報文)進行簽名。收款方必須根據派生要素,從預置的央行錢包認證根公鑰派生出與該付款錢包對應的子公鑰,檢查該密鑰在有效期內,並驗證交易通信報文是否來自合法錢包。

該密鑰對亦用於協商近場通信的通信密鑰。

除了上述特點外,爲了便於用戶在雙離線支付中使用,央行數字貨幣錢包還應該具有這些能力:

收款方錢包可以通過近場通信將收款地址告訴付款方錢包;

若央行數字貨幣採用採用固定 UTXO 模型,付款方錢包應驗證是否有足夠的 UTXO 用於支付,並通過和收款方錢包協商找零,確定如何組合適當的 UTXO 湊出交易金額以及湊出找零;

收款方錢包應檢測付款方提供的已簽名交易報文中的收款方是否正確,並利用 TUI 安全地將交易金額呈現給收款人以供確認。

一種雙離線支付的方法

作惡動機分析

如前所述,雙離線支付的基本過程是付款方用其私鑰對交易報文簽名,然後通過近場通信提供給收款方,付款方或收款方事後聯網時將這筆交易提交給央行數字貨幣登記系統實現入賬。本節分析該過程中可能的作惡動機。

由於雙離線支付的入賬要等收款方恢復聯網之後,才能將交易在央行數字貨幣登記系統中確認,在實施交易行爲,和交易確認之間的存在一個時間差。交易雙方(主要是付款方),有可能利用這個時間差作惡。

例如,雙離線場景下,甲方給予乙方已簽名的交易報文,並使乙方相信該報文可以按預期實現向乙方的轉賬,乙方於是向甲方提供了某種商品。但乙方如果事後恢復在線時,發現該報文無法實現預期的入賬,此時甲方已經離開,並且由於央行數字貨幣的匿名性,乙方無法知道甲方具體是誰,可能難以追溯。

交易設備端視角探討央行數字貨幣雙離線支付原理、難點與技術方案

一種抗作惡的雙離線支付方案

根據前述分析,本節介紹一種雙離線支付方案。方案總體架構如圖 2 所示。

交易設備端視角探討央行數字貨幣雙離線支付原理、難點與技術方案圖 2 一種央行數字貨幣雙離線支付方案的總體架構

央行數字貨幣登記系統

本文中,簡化整個央行數字貨幣的運營體系爲「央行數字貨幣登記系統」。該系統負責央行數字貨幣的發行、銷燬和屬主的變更。

智能手機和錢包

本文中,央行數字貨幣以智能手機爲載體。錢包敏感部分在可信執行環境 TEE 中實現。

聯網時,錢包與央行數字貨幣登記系統同步該錢包中的賬號所擁有的 UTXO 信息。離線交易時,收付雙方通過近場通信(NFC、藍牙、互掃二維碼等),交互交易信息和交易報文。收款方後續恢復聯網時,向央行數字貨幣登記系統提交離線期間的已簽名交易報文,完成交易入賬。

手機遠程認證系統

手機遠程認證系統由手機的芯片廠商或者手機廠商提供。該功能用於驗證特定數據是不是由特定手機發出來。在央行數字貨幣錢包應用中,該功能用於實現一個賬戶只能在一個錢包中並綁定一臺手機。

主要過程

生產時的預置要求

央行數字貨幣錢包需要事先獲得手機廠商使用其 TEE 的授權。央行數字貨幣錢包 APP 無須在手機出廠時預置入手機,但其位於 TEE 中的可信應用(TA)部分,應當事先獲得手機廠商的簽名,以便用戶下載後,手機允許其安裝和運行。智能手機如何利用其 Rootof Trust 進行安全的啓動並對 TA 是否經過授權進行覈查,超出了本文的範圍,不做展開。

央行數字貨幣錢包的 TA 部分負責預置央行數字貨幣發行公鑰、央行錢包認證根公鑰、央行數字貨幣登記系統的服務器根證書,存儲 UTXO 賬本信息、央行錢包認證子私鑰、用戶私鑰等敏感信息,處理簽名 / 驗籤、近場通信中交互的交易信息、UTXO 交易報文組裝等敏感操作,並使用安全顯示(TUI)實現用戶信息的顯示 / 輸入。

錢包激活

用戶向央行數字貨幣登記系統申請數字貨幣賬號,或者更換手機進行錢包遷移時,需要對錢包進行激活,以便向央行數字貨幣登記系統登記設備標識並關聯其數字貨幣賬號,確保一個賬號只能在一臺手機上進行交易。

  1. 用戶在手機上下載央行數字貨幣錢包。
  2. 數字貨幣錢包連接央行數字貨幣登記系統服務器並利用 TEE 中預置的央行數字貨幣登記系統根證書,驗證服務器是真的。
  3. 央行數字貨幣登記系統利用手機遠程認證系統,對手機進行驗證,確認手機是真實的且狀態是安全的(不是安卓模擬器,沒有被 root 等),並通過驗證過程獲得手機的可信標識(與 IMEI 不同,該標識是關聯手機遠程認證功能的公私密鑰對的公鑰,可對手機在遠程認證中的簽名進行認證),登記用戶數字貨幣賬戶與手機可信標識的關聯。遠程認證本質上是利用手機生產時在安全條件下預埋的公私密鑰對,對後續在手機上產生的數據(包括手機可信標識)進行進行簽名認證。華爲的手機根密鑰模塊、高通的 QWES(Qualcomm Wireless Edge Service) 等均提供了該功能。遠程認證的具體方案超出了本文的範圍,不再贅述。
  4. 用戶進行必要的 KYC 過程。KYC 有強弱不同的多個層次。從弱到強可能包括:手機驗證碼認證,姓名身份證號認證,拍攝身份證的照片+人臉比對認證,刷二代身份證或 eID 公民網絡身份+人臉比對認證,櫃面辦理面籤認證等。除櫃面辦理外,其他均可在線完成。
  5. 央行數字貨幣登記系統派生錢包認證密鑰,並將派生參數和生成的子私鑰下發至錢包。
  6. 所有通信過程均加密。

賬本同步

手機聯網時,錢包連接央行數字貨幣登記系統進行賬本同步。賬本同步的信息主要包括該錢包中的數字貨幣賬號所擁有的所有 UTXO 的:

  • UTXO 永久標識
  • UTXO 的屬主

此外,爲了進行風險控制,根據 KYC 等級的不同,央行數字貨幣登記系統可能對特定數字貨幣賬號的單日交易總額、交易筆數、單筆交易金額、離線交易限額、離線最長時限等有所限制。錢包需要下載相關的控制策略,並在交易時實施。

離線交易

離線交易包括收付雙方的多次交互。NFC、藍牙便於雙向通信,較爲方便。二維碼只能單向通信,需要雙方互相掃多次來實現雙向通信,操作較爲不便。

  1. 收付雙方建立近場通信通道,互發 Challenge 和己方錢包認證密鑰派生參數給對方,對方使用 TEE 中預置的央行錢包認證根公鑰派生對方錢包子公鑰,判定其在有效期內,並對其交易報文進行驗證,確保對方爲央行認證的錢包。隨後雙方進行近場通信密鑰協商,後續過程均加密。
  2. 收款方錢包發送交易金額和收款方數字貨幣賬號給付款方。
  3. 付款方錢包根據交易金額組合其擁有的各種面額的 UTXO 湊出交易金額。若央行數字貨幣採用固定面額 UTXO 模型,如果無法湊出,則通過近場通信和收款方協商找零。或者提示用戶進行人工協商。若採用不定面額 UTXO 模型,只需湊出大於等於交易金額的 UTXO 即可。
  4. 付款方錢包構造交易報文並進行簽名。
  5. 付款方錢包將已簽名交易報文發送給收款方。如果是離線二次流轉,還要把參與交易的 UTXO 之前尚未聯網入賬的所有簽名交易報文給收款方。
  6. 收款方錢包使用央行數字貨幣發行公鑰驗證數字貨幣是真的。
  7. 收款方錢包驗證交易簽名,覈對收款賬號,更新本地離線 UTXO 賬本信息,並將交易金額通過 TUI 呈現給收款人。
  8. 收款人確認無誤後,將付款人購買的商品交與付款人。
  9. 若央行數字貨幣採用固定面額 UTXO 模型,如果有找零,則發起一次收款人向付款人的支付,過程同前。若採用不定面額 UTXO 模型,則找零的 UTXO 由付款方在支付交易中把屬主指向自己實現。

爲控制風險,錢包可能限制 UTXO 在離線條件下的流轉次數。超過一定次數後,該枚 UTXO 不再能參與離線交易,必須聯網並和央行數字貨幣登記系統入賬同步。錢包還可能限制離線的最長時間,超過一定時間後,也必須聯網同步。

延遲交易入賬

收款方恢復聯網後,將此前離線收到且未再離線花掉的 UTXO 的已簽名交易報文提交央行數字貨幣登記系統入賬。如果 UTXO 是二次流轉之後獲得,還需要一併提交該 UTXO 在離線流轉過程中的所有已簽名交易報文。

參考文獻:

零壹智庫中國央行數字貨幣:運行框架與技術解析;

《中國金融》姚前:基於區塊鏈的新型金融市場基礎設施;

萬向區塊鏈 &PlatON; 首席經濟學家鄒傳偉:對人民銀行 DC/EP 的初步分析;

專利 CN201811240336-基於數字貨幣的離線支付方法、終端及代理投放設備,中國人民銀行印製科學技術研究所,姚前等 專利 CN201610179317-使用數字貨幣芯片卡進行離線支付的方法及系統,中國工商銀行股份有限公司,昝傳暉等;

https://bitcoin.org/en/transactions-guide

https://github.com/ethereumbook/ethereumbook

來源鏈接:mp.weixin.qq.com