智能手机TEE:央行数字货币DC/EP离线应用的助推器

——央行数字货币DC/EP双离线支付场景和方案浅析

本文作者:aitos.io CTO 许刚

郑重声明:截至本文撰写时止(2019-12-05),中国人民银行没有正式公开文件系统阐述央行数字货币DC/EP设计。本文所有观点,均是基于对央行有关领导的公开讲话、相关专利等公开渠道信息所作分析和推测。本文不代表中国人民银行观点。

2019年6月,由Facebook主导的加密货币项目Libra发布白皮书以来,全球主要国家央行开始密集释放研发数字货币的信号。中国人民银行自2019年8月份以来,多次表态将加快推进法定数字货币(央行DC/EP)的研发步伐。

中国人民银行支付结算司副司长穆长春在《科技金融前沿:Libra与数字货币展望》课程中提到,央行数字货币能够像纸钞一样实现“双离线支付”,即在收支双方都离线的情况下仍能进行支付,未来只要两个人都安装了央行数字货币的数字钱包,不需要网络,也不需要信号,只要手机有电,两个手机相互碰一碰就能实现实时转账。

截至目前,关于“双离线支付”具体如何实现,虽无大量文献进行剖析,但从已有文献可以探究些许端倪。本文尝试从交易设备端的角度,对双离线支付的原理、难点和技术方案进行粗浅的探讨。

1 概述
央行数字货币的主要交易场景是联网的,交易结果立即反映在央行数字货币登记系统中。双离线支付场景是指数字货币交易的收付双方,在交易期间,均无法直接或间接连接到在线账本的场景,这是联网交易场景之外的补充。

根据公开新闻报道和文献资料[1]的解读,中国央行数字货币拟采用中心化发行和管理的双层运营体系,每枚数字货币的属主由央行数字货币登记系统记录和变更,具体的场景中,还有商业银行等参与。

为简化起见,本文将央行数字货币的账本和管理机制统称为央行数字货币登记系统,并将交易过程中终端(可能经由商业机构)到央行数字货币登记系统之间交互协议和密钥体系,简略为终端向央行数字货币登记系统提交由付款方私钥签名的交易报文。

为简化起见,本文只探讨收付双方的交易终端均为智能手机的场景。收款方为智能手机,付款方为数字货币实体芯片卡的场景,或者其中一方或双方为安装有专用数字货币芯片的专用设备的场景,也基本适用本文所述原则。

本文提出以下观点:

  1. 数字货币双离线支付的基本原理是,付款方在离线状态下构造交易报文并签名,将已签名的交易报文通过近场通信交给收款方,并在后续联网时提交给央行数字货币登记系统入账。该过程可以类比为付款方现场开具支票,收款方事后凭支票去银行兑现[i]。

  2. 双离线支付的最关键问题是解决已签名交易报文的防伪识别,包括验证数字货币本身的真伪,以及验证签发该交易的付款方是否为该数字货币的属主。智能手机上的央行数字货币钱包必须在央行强监管下。解决防伪问题的关键技术措施是利用智能手机TEE保护央行数字货币钱包,抵抗作恶动机。

  3. 若双离线支付只要求单次离线交易,即离线收入的数字货币必须联网确认入账后才能再次交易,则数字货币采用不定面额更有利于提高使用便捷性。若要求支持数字货币在离线状态下二次流转,即离线收入的数字货币可以离线花出去,则数字货币采取固定面额安全性更高。实现离线二次流转的关键技术措施也是由TEE保护的央行数字货币钱包。

  4. 一个央行数字货币钱包同一时刻只能绑定一台符合安全要求的智能手机,保证一个控制人(数字货币的属主)的一个公私密钥对账号,同一时刻只能在一台智能手机上付款,收款方要对付款方钱包是否为央行认证的合法钱包进行验证,从而抵抗离线双花。实现钱包手机绑定的关键技术手段是基于手机根信任的远程认证(Remote Attestation)技术。

2 双离线支付的特点与技术要素

根据中国人民银行有关表态,央行数字货币主要目的是替代M0,即纸钞的数字化。以纸钞为参照,央行数字货币除了可以像今天的网上银行、微信支付、支付宝等一样进行联网收付以外,还必须能够像纸钞一样便于离线使用。

以下逐项分析对央行数字货币上述特征的推测理由。
2.1 离线交易
与纸钞没有属主标识不同,央行数字货币具有属主标识,并由央行数字货币登记系统的中心化账本维护数字货币的属主标识。由于央行数字货币的所有权,最终是由央行数字货币登记系统予以确权,央行数字货币的主流交易形态,应当是联网交易[iii],而双离线交易,是联网交易的补充。

联网交易的基本原理是付款方用与其绑定的私钥,对支付承诺(付给谁多少钱)进行签名,并将其提交给央行数字货币登记系统,央行数字货币登记系统验证交易的数字货币有效,付款方签名和支付承诺有效后,完成交易确认。

双离线支付的本质是一种收付双方均认可的延迟交易。双离线支付过程是付款方用与其绑定的私钥,对支付承诺进行签名,然后将已签名的支付承诺交给收款方。收款方在恢复联网之后,向央行提交该支付承诺。由于该支付承诺已经被付款方签名,虽然是由收款方提交给央行的,但央行验证通过后,同样可以完成交易确认。这类似于付款方开具支票,收款方事后凭支票向银行要求兑付。

双离线支付的基本流程如图 1所示。
2.1
图 1 央行DC/EP双离线场景基本流程

纸钞具有无限次流转的能力,比方说,商户A收到顾客甲支付的纸钞,可以作为找零付给顾客乙,顾客乙又可以拿这张纸钞付给商户B。

央行数字货币在离线交易上,面临两种选择:仅支持单次离线交易,即离线收入的数字货币必须联网确认入账后才能再次交易;或者是支持离线状态下数字货币二次流转,即离线收入的数字货币可以离线花出去。

离线二次流转是以该数字货币最近的联网状态为基础,由其各次离线流转中的属主依次进行交易签名构成连续的签名序列。只要签名序列中的起始签名的属主与央行数字货币登记系统中登记的一致,签名序列是依次连续且有效的,那么联网后,央行数字货币系统就能够把数字货币兑付给最后一个签名中指定的收款方。离线二次流转类似于在支票上背书,只要背书是连续有效的,银行就可以兑付给最后一个背书所指定的收款人。由于央行数字货币所有权的最终确权必须联网进行,出于风险控制考虑,对每枚数字货币在离线状态下的流转次数,央行有可能会做一定限制。一枚数字货币的离线流转次数超过一定阈值后,有可能必须联网与央行数字货币登记系统进行同步,才能再次离线流转。

离线单次交易和二次流转本质上只是单次和多次的区别,但二次流转面临更严苛的防伪考验,以及不得不为此付出使用便捷性等方面的代价(详见后文“货币标识和货币面额”和“防伪”章节)。

若作为纸钞和硬币的替代,为了达成与之相似的离线流通能力,央行数字货币应当能够在离线状态下二次流转。然而,考虑今天中国几乎无处不在的网络覆盖,探讨是否值得为小概率的数字货币离线二次流转而付出相关代价,这超出了本文的范围,不做展开。

2.2 账户/Token 范式

参考电子化的非现金M1、M2账户,微信支付、支付宝账户,以及比特币、以太坊等公链数字货币,有两种典型的范式:账户范式和Token范式。

今天的银行账户属于账户范式。开设账户一般需要审批,个人银行账户和支付账户尤其要满足严格的身份验证要求。

比特币、以太坊等区块链虚拟货币则属于Token范式,对用户高度开放,任何人只要根据数字签名算法生成一个公私密钥对,就可以拥有区块链内的地址。Token范式根据交易过程和余额计量的不同,又有两种主要的模型:余额模型和UTXO模型。

本节阐述UTXO模型时以固定面额UTXO模型为例,详见“货币标识和货币面额”一节。

UTXO(Unspent Transaction Output)是比特币引入的术语,本文中用该术语描述类似比特币的Token范式。

根据中国人民银行等机构公开的信息,央行数字货币较大可能会采用Token范式的UTXO模型。本文从离线支付角度,认为UTXO模型比余额模型更适合央行数字货币。

余额模型在处理离线条件下的二次流转时,有严重的兑现次序问题。例如,某商户账户上原有50元钱,先离线收了顾客甲支付的100数字货币(顾客甲签名的支付承诺),然后又向供应商A离线支付了120元数字货币的货款(商户签名的支付承诺)。

倘若商户尚未恢复联网的时候,供应商A先联网并向央行提交了商户签名的120元货款的支付承诺,这时央行账本上该商户只有50元钱,无法完成120元的付款。解决该问题的方法是,商户将顾客甲支付100元的已签名支付承诺一并给到供应商A,供应商A先将顾客甲的已签名支付承诺提交给央行,再将商户的已签名支付承诺提交给央行。

然而这并不完美,当顾客和供应商很多时,离线交易次数很多时,要求多方互相协商已签名支付承诺向央行的提交顺序,这在实践中是难以操作的。

而UTXO模型的支付过程是围绕每个数字货币进行的。UTXO模型下,数字货币多次离线流转过程,实际是该货币在流转过程中的各次属主,依次对其支付承诺签名,并连同之前的各次已签名支付承诺一起转交给下一属主。只要各次签名能连续向前追溯,且最前面的签名与央行数字货币登记系统中所记录的属主一致,那么这枚数字货币就能被兑现给最后一个已签名支付承诺中指定的收款人。任何人离线收到的数字货币都可以在联网时去兑现,与其他人无关,也没有任何兑现次序要求。

因此,从离线支付角度看,UTXO模型比较适合央行数字货币。

2.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,实现防伪,尤其是离线防伪的能力。
根据以上分析,本文认为,若双离线支付只要求单次离线交易,即离线收入的数字货币必须联网确认入账后才能再次交易,则数字货币采用不定面额更有利于提高使用便捷性。若要求支持数字货币在离线状态下二次流转,即离线收入的数字货币可以离线花出去,则数字货币采取固定面额安全性更高。

2.4 货币拥有者标识

数字货币使用公私密钥对中的公钥(或公钥的某种散列值)来标识拥有者,仅与其成对的私钥所签署的数字签名可以被该公钥成功验签,只有成功验签,才能对数字货币进行使用。相关原理本文不再赘述。

2.5 匿名性

匿名性指货币的拥有者的真实身份是否公开。

由于数字货币的拥有者是用公钥来标识的,因此匿名性的问题,实际上就是公钥与掌握该公私密钥对的人的真实身份的关联关系是不是公开的。

对于央行数字货币,匿名性取决于使用者开通数字钱包时所进行的KYC(Know Your Customer)的程度。一般解读认为,仅央行在较高等级的KYC层级下,能通过KYC过程掌握使用者的真实身份,而一般商业机构均不掌握公钥和使用者真实身份的关联关系。

2.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安全地将交易金额呈现给收款人以供确认。

3 一种双离线支付的方法

3.1作恶动机分析
如前所述,双离线支付的基本过程是付款方用其私钥对交易报文签名,然后通过近场通信提供给收款方,付款方或收款方事后联网时将这笔交易提交给央行数字货币登记系统实现入账。本节分析该过程中可能的作恶动机。

由于双离线支付的入账要等收款方恢复联网之后,才能将交易在央行数字货币登记系统中确认,在实施交易行为,和交易确认之间的存在一个时间差。交易双方(主要是付款方),有可能利用这个时间差作恶。

例如,双离线场景下,甲方给予乙方已签名的交易报文,并使乙方相信该报文可以按预期实现向乙方的转账,乙方于是向甲方提供了某种商品。但乙方如果事后恢复在线时,发现该报文无法实现预期的入账,此时甲方已经离开,并且由于央行数字货币的匿名性,乙方无法知道甲方具体是谁,可能难以追溯。

3.2 一种抗作恶的双离线支付方案
3.2.1 总体架构
根据前述分析,本节介绍一种双离线支付方案。方案总体架构如图 2所示。
3.2
图 2 一种央行数字货币双离线支付方案的总体架构
(1)央行数字货币登记系统
本文中,简化整个央行数字货币的运营体系为“央行数字货币登记系统”。该系统负责央行数字货币的发行、销毁和属主的变更。

(2)智能手机和钱包
本文中,央行数字货币以智能手机为载体。钱包敏感部分在可信执行环境TEE中实现。
联网时,钱包与央行数字货币登记系统同步该钱包中的账号所拥有的UTXO信息。离线交易时,收付双方通过近场通信(NFC、蓝牙、互扫二维码等),交互交易信息和交易报文。收款方后续恢复联网时,向央行数字货币登记系统提交离线期间的已签名交易报文,完成交易入账。

(3)手机远程认证系统
手机远程认证系统由手机的芯片厂商或者手机厂商提供。该功能用于验证特定数据是不是由特定手机发出来。在央行数字货币钱包应用中,该功能用于实现一个账户只能在一个钱包中并绑定一台手机。

3.2 主要过程
(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在离线流转过程中的所有已签名交易报文。

参考文献

  1. 零壹智库中国央行数字货币:运行框架与技术解析
  2. 《中国金融》姚前:基于区块链的新型金融市场基础设施
  3. 万向区块链&PlatON首席经济学家邹传伟:对人民银行DC/EP的初步分析
  4. 专利CN201811240336-基于数字货币的离线支付方法、终端及代理投放设备,中国人民银行印制科学技术研究所,姚前等
  5. 专利CN201610179317-使用数字货币芯片卡进行离线支付的方法及系统,中国工商银行股份有限公司,昝传晖等
  6. Bitcoin Transactions: Bitcoin - Open source P2P money
  7. Mastering Ethereum: GitHub - ethereumbook/ethereumbook: Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood
  1. 如无特殊说明,本文中的术语“兑现”或“兑付”与经过离线流转的数字货币合用时,特指事后联网时,将央行数字货币登记系统中该数字货币的属主更新为与其离线状态的属主一致。
  2. 央行数字货币在离线交易中的双花问题与公链数字货币的双花问题不一样。公链数字货币的双花问题是由不同节点的账本不一致(通常指恶意行为导致的)引起,通过最长链或最大工作量证明等策略决定以哪份账本为准来解决。央行数字货币是中心化的,不存在公链数字货币的双花问题,但存在付款方趁离线交易中无法立即入账的特点,恶意在离线期间重复花费已经花过的数字货币的可能。
  3. 本文中使用“联网交易”的术语与“离线交易”相对应。“联网交易”指交易双方至少有一方联网的线下交易。为了与交易双方在互联网交易平台上进行的非当面交易做区分,本文不使用“在线交易”术语。
  4. UTXO(Unspent Transaction Output)是比特币引入的术语,本文中用该术语描述类似比特币的Token范式。
  5. 比特币、以太坊等虚拟货币一旦在交易中被发往没有私钥可以掌控的地址,则这些虚拟货币不再可能“抢救”回来。央行数字货币由于采用中心化管理,理论上即便在交易中被发往了无效地址(例如离线交易中),央行数字货币登记系统仍然有可能“回滚”该交易。
2 个赞