可审计的
核心思想可以在[ST99]中找到。[ST99]文章名字叫“Auditable, anonymous electronic cash”。可以看出这篇文章除了意在设计一个匿名电子货币,重点还在于要保证这个匿名货币是可审计的(Auditable)。
那么具体可审计性这个性质是如何保证的呢?主要就是通过Merkle tree(见图1)来记录上述事件
为了保证用户在使用所取得电子货币的隐私性,用户在支付这个操作上需要使用零知识证明来对应地证明用户知道Merkle tree对应的某个叶节点的秘密,从而证明他对货币的所有权和货币的合法性。
由这张从Zcash文章[SCGGMTV14]摘录的图3中可见,93%以上的计算都是Merk tree及其和可审计性相关的运算导致的。
通过Merkle tree证明vin的合法性与支配权
用户使用自己的货币时只需证明他知道其货币对应的随机数,以及该货币承诺是属于聚合器所包含元素中的一员即可。
针对货币本身的合法性证明,就得通过证明承诺本身在Merkle tree上的membership proof 来证明
这个方案非常复杂,因为首先需要用零知识证明的方案来证明哈希计算的正确性,这个本身涉及的电路就已经够复杂了,另外随系统中发行的货币量增加,对应的Merkle tree变大,需要验证的电路数目量随之增加。
区间证明
区间证明能做到证明某个金额属于一个合理的范围,但又不透露这个金额具体是什么,区间证明也是一种特殊的零知识证明。
其所定义的运算是模q运算,这里q是个非常大的素数,那么如果交易输出结果是个很小的负数,在这个有限域里是和一个非常大的正数等价的,攻击者就有可能利用这点凭空打印Monero。区间证明后来成为所有隐私币方案的标配也是这个原因。