很多人认为数字人民币的编号是与纸币一样,这是惯性思维,其实按固定面额编号没有意义

【本文来自《中国加入多边央行数字货币桥研究项目,探索数字货币跨境支付》评论区,标题为小编添加】

    老饕

    你头脑过于简单了,一张数字币必须是加密的,必须是不可复制和破译的。面额当然可以仍然是1分、2分、5分、1毛、2毛、5毛、1元、2元、5元、10元、20元、50元、100元、200元、500元、1000元等等。每一张或者说每一份都需要身份唯一,不能出现假币。那么在双离线环境下,我用数字币支付你75.3元,给你一个100的好理解,你是不是该找我24.7元?假如你的数字钱包内也只有100数字币,这个事儿怎么办?必然有一方要现场拆分自己的100元数字币,这个现场拆分和现场生成小面额数字币的过程的程序被破解了怎么办?这样就千疮百孔了。

    还有另外一个办法,就是设备公开密钥法,那就是每个数字钱包设备都是加密解密机器,有唯一的解密密码和加密密码,密码的长度必须在万位以上这样才能确保不被破译。你要付钱给我,我把加密密码发给你,你把你付款的金额加密以后发还给我,我用解密密码解密得到金额数据,把这个数据和我原来账号上的数字相加再存储。你把你的金额减去这个数字以后再存储。看起来似乎是安全了,但是要注意的是既然这个数字钱包是程序,那么算法就可知了,有算法那么自行生成加密密钥和解密密钥也就没有难处了,那么假如我做个伪数字钱包(秘钥对不是央行给我的,但是符合央行的算法),我这个钱包里有100亿,我拿着到处去支付是不是很危险?当然央行一段时间后会发现伪钞的出现,因为这个密钥对他从来没发行过。但是假如有更狠的,就干脆用大型机去不断生成密钥对,然后只选择市面上出现过的加密密码的密钥对,拿去伪造数字钱包。这个时候,只要不是现场抓获,公安也不知道哪次支付是用的伪钞。

    总而言之,不管是货币加密还是设备加密都有很大漏洞。央行四次发行数字币,其中在深圳甚至是发到手机上,装个APP,用NFC去支付。老天,这特码险过剃头啊。难为是只有几千万,玩得起而已。

很多人认为数字人民币的编号是与纸币一样,都是编在票面上,一张纸币一个编号,其实这是惯性思维。在数字化环境下,使用者只会关心账户里有没有钱,够不够付,不会像传统钱包那样数一数有几张钞票,所以按固定面额编号没有任何意义。从目前各方面信息来看,现在的央行数字货币在交易方式上应该是使用了与比特币一样的UTXO模式,叫做'未花费的交易输出',通俗地讲就是自己钱包中可用的余额,但又和通常的余额概念不一样,不是一个总数概念。数字人民币的编号是编在UTXO上面的,你的钱包里可以有多个UTXO,加总起来就是你钱包的可用总额。UTXO一旦生成,就不可分割,并且只能在一笔交易中整体使用。就用你的数字举例,假如我钱包里有一个面值100的UTXO,我要付给你75.3元,同时找我24.7元的零,底层处理过程就是100元的UTXO被注销,同时收款人的钱包里生成了75.3元的UTXO,加上自己钱包里生成了24.7元UTXO的找零,而这个24.7元的UTXO的编号与原来100元的是不一样的。

所以交易的关键是收款人必须要验证付款人的UTXO是真的,或者不能被两次使用。钱包在线时,可以联网到存储区块的节点去验证。因为交易成功后交易被打包成区块上链,交易信息包含已用和未用的UTXO往来情况,通过检索很容易追溯其来源,由此可以得到验证。如果要凭空造一个UTXO,则链上的交易信息都必须要跟着改,才能保证不穿帮,而这几乎是不可能的。如果钱包是离线状态,可以使用类似默克尔树和轻钱包这样在比特币上经过检验的简单支付验证技术。但这样也只能是暂时离线,过一段时间还是要必须联网更新数据,否则离线时间越长验证的安全性就越差。不过,看央行这么着重强调自己的离线支付技术,可能是有一些创新或突破,我们可以拭目以待。

站务

全部专栏