LOADING...
LOADING...
LOADING...
當前位置: 玩幣族首頁 > 區塊鏈資訊 > 智能手機TEE:央行數字貨幣DC/EP離線應用的助推器

智能手機TEE:央行數字貨幣DC/EP離線應用的助推器

2019-12-06 新聞匯 來源:區塊鏈網絡

鄭重聲明:截至本文撰寫時止,中國人民銀行沒有正式公開文件系統闡述央行數字貨幣DC/EP設計。本文所有觀點,均是基于對央行有關領導的公開講話、相關專利等公開渠道信息所作分析和推測。本文不代表中國人民銀行觀點。

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

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

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

?概述?

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

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

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

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

本文提出以下觀點:

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

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

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

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

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

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

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

1、離線交易

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

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

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

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

圖1央行DC/EP雙離線場景基本流程

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

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

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

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

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

2、賬戶/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模型比較適合央行數字貨幣。

3、貨幣標識和貨幣面額

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,實現防偽,尤其是離線防偽的能力。

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

4、貨幣擁有者標識

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

5、匿名性

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

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

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

6、防偽

防偽是雙離線支付的核心問題。本節以固定面額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中的公鑰/證書的作用是:

(1)央行數字貨幣發行公鑰

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

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

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

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

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

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

(3)央行錢包認證根公鑰

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

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

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

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

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

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

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

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

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

?一種雙離線支付的方法?

作惡動機分析

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

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

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

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

總體架構

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

圖2一種央行數字貨幣雙離線支付方案的總體架構

(1)央行數字貨幣登記系統

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

(2)智能手機和錢包

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

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

(3)手機遠程認證系統

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

主要過程

(1)生產時的預置要求

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

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

(2)錢包激活

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

①用戶在手機上下載央行數字貨幣錢包

②數字貨幣錢包連接央行數字貨幣登記系統服務器并利用TEE中預置的央行數字貨幣登記系統根證書,驗證服務器是真的

③央行數字貨幣登記系統利用手機遠程認證系統,對手機進行驗證,確認手機是真實的且狀態是安全的(不是安卓模擬器,沒有被root等),并通過驗證過程獲得手機的可信標識(與IMEI不同,該標識是關聯手機遠程認證功能的公私密鑰對的公鑰,可對手機在遠程認證中的簽名進行認證),登記用戶數字貨幣賬戶與手機可信標識的關聯。遠程認證本質上是利用手機生產時在安全條件下預埋的公私密鑰對,對后續在手機上產生的數據(包括手機可信標識)進行進行簽名認證。華為的手機根密鑰模塊、高通的QWES(Qualcomm Wireless Edge Service)等均提供了該功能。遠程認證的具體方案超出了本文的范圍,不再贅述。

④用戶進行必要的KYC過程。KYC有強弱不同的多個層次。從弱到強可能包括:手機驗證碼認證,姓名身份證號認證,拍攝身份證的照片+人臉比對認證,刷二代身份證或eID公民網絡身份+人臉比對認證,柜面辦理面簽認證等。除柜面辦理外,其他均可在線完成。

⑤央行數字貨幣登記系統派生錢包認證密鑰,并將派生參數和生成的子私鑰下發至錢包。

⑥所有通信過程均加密

(3)賬本同步

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

UTXO永久標識

UTXO的屬主

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

(4)離線交易

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

①收付雙方建立近場通信通道,互發Challenge和己方錢包認證密鑰派生參數給對方,對方使用TEE中預置的央行錢包認證根公鑰派生對方錢包子公鑰,判定其在有效期內,并對其交易報文進行驗證,確保對方為央行認證的錢包。隨后雙方進行近場通信密鑰協商,后續過程均加密。

②收款方錢包發送交易金額和收款方數字貨幣賬號給付款方

③付款方錢包根據交易金額組合其擁有的各種面額的UTXO湊出交易金額。若央行數字貨幣采用固定面額UTXO模型,如果無法湊出,則通過近場通信和收款方協商找零。或者提示用戶進行人工協商。若采用不定面額UTXO模型,只需湊出大于等于交易金額的UTXO即可。

④付款方錢包構造交易報文并進行簽名

⑤付款方錢包將已簽名交易報文發送給收款方。如果是離線二次流轉,還要把參與交易的UTXO之前尚未聯網入賬的所有簽名交易報文給收款方

⑥收款方錢包使用央行數字貨幣發行公鑰驗證數字貨幣是真的

⑦收款方錢包驗證交易簽名,核對收款賬號,更新本地離線UTXO賬本信息,并將交易金額通過TUI呈現給收款人

⑧收款人確認無誤后,將付款人購買的商品交與付款人

⑨若央行數字貨幣采用固定面額UTXO模型,如果有找零,則發起一次收款人向付款人的支付,過程同前。若采用不定面額UTXO模型,則找零的UTXO由付款方在支付交易中把屬主指向自己實現。

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

(5)延遲交易入賬

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

(本文作者系摩聯科技CTO)

參考文獻

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

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

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

專利CN201811240336-基于數字貨幣的離線支付方法、終端及代理投放設備,中國人民銀行印制科學技術研究所,姚前等

專利CN201610179317-使用數字貨幣芯片卡進行離線支付的方法及系統,中國工商銀行股份有限公司,昝傳暉等

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

Mastering Ethereum:https://github.com/ethereumbook/ethereumbook

轉自:摩聯科技

—-

編譯者/作者:新聞匯

玩幣族申明:我們將尊重作者/譯者/網站的版權,促進行業健康發展,如有錯誤或不完整之處請與我們聯系。

LOADING...
LOADING...
新快3