本文共 728 字,大约阅读时间需要 2 分钟。
在铸币交易时,用户A会对区块链发起一个交易,将BTC托管给区块链,同时会选择一个随机序列号S和一个随机值r,计算c=gShr,并将它嵌入到上述区块链交易中,c相当于是生成的零币的凭证。式中的g、h分别是群G的两个生成元,且满足关系:g=hxmod n,x的值对所有用户进行保密,式中的r值是仅有用户A自身才知道的秘密值,在后面的花费交易中表示对某个零币的所有权,S是该零币的一个序列号,当花费交易发生时,会被公布在区块链上,节点在验证交易时,需检查零币的序列号S是否已经出现过,防止双重支付的发生。
Zerocoin对于用户交易的匿名性保护是密码学理论中的双离散对数保证的。在花费交易发生时,用户会将该交易的(π,S)公开到区块链上,供其他节点验证,其中π是用户生成的零知识证明主要证明以下两点:①、该交易的发起者拥有某枚零币的秘密值r②、该枚零币在有效零币的集合中。其他人从(π,S)中只能验证上述两点,却无法知道该交易花费的是哪个零币,从而无法追踪到交易发起人的地址,保护了用户的隐私。
平衡性则要求,用户在仅有N枚零币的情况下,最多只能够花费N枚零币,如果花费的零币超过了N枚则零币的平衡性被打破。因为S是某个零币的序列号,可以防止双花,用户如果想要打破零币的平衡性,需要创造出新的S’和r’,使得c’=gS’hr’,如果c’的值和零币集合中的某个c值相等,就能够打破平衡性,而计算出这样的c’就表示该用户解决了离散对数问题或者找到了强RSA假设的一个解决方案,而这两个数学问题目前都认为是不可解的,在这两个问题不可解的假设下,零币的平衡性得到了保证。
转载地址:http://dxxzb.baihongyu.com/