实现以上功能的方法如下: 1. 通过proof-of-work挖矿机制实现去中心化。 2. 通过一次性密钥实现匿名。 3. 通过多层可链接自发匿名群签名(MLSAGS)并结合PedersenCommitment实现隐藏交易金额。此外,还应抵抗“二次花费”攻击,并进行范围证明。
1.1 一次性密钥: P=H(rB),其中P是交易的一次性密钥,H是哈希函数,B是转账接收方的公开密钥,r是发送方选取的随机数。发送方将rG发送给接收方,接受方通过计算brG=rB来获取P。接收方可以通过P验证交易的有效性。
1.2 隐藏交易金额: 将ConfidentialTransactions加入MLSAGS。
1.3 防止两次花费: 通过链接机制实现,通过I(key-image)来链接。在签名的链接阶段,相同的I进行链接,避免使用同一个密钥对进行两次环签名,确保每个密钥对只能签名一次,从而避免重复花费。
1.4 范围证明: 范围证明用于防止货币金额溢出,产生额外的货币。范围证明可以证明每个输出都在某一正整数范围内。通过设置有限域的阶和范围证明的正整数大小,可以检测和阻止存在较大输出和大量较小输出两种溢出情况。
2. MLSAG 2.1 LSAG(Bellare-Neven-Shoup)是MLSAG的基础。 2.2 MLSAG是对LSAG的推广。 2.3 RingCTForMoneroProtocol与MLSAG验证步骤相同。
3. 范围证明 假设范围证明中的正整数是2的n次方,即证明每个输出都在0到2的n次方之间。可以使用BorromeanRingSignatures来实现。
3.1 BorromeanRingSignatures 3.2 BorromeanRingSignatures应用于范围证明。
目前,雷达(RADR)已经实现了RingTransaction,能够消除交易双方的关联性,并即将在主网上线。具体方法是,发送方发起一笔RingDeposite交易向环存入相应金额,当环累计一定数量的交易(相同金额)后即可发起RingWithdraw,环上没有任何证据可以证明某两笔RingDeposite和RingWithdraw之间存在关联性,从而保护该环内交易多方的关联性隐私。详细阐述请见WhitePaper。相关代码请见https://github.com/radrbiz/radard/blob/master/src/ripple/app/tx/impl/RingDeposit.cpp和https://github.com/radrbiz/radard/blob/master/src/ripple/app/tx/impl/RingWithdraw.cpp。环签名采用的曲线是AltBn128,代码请见https://github.com/radrbiz/radard/blob/master/src/ripple/crypto/impl/AltBn128.cpp。该曲线在安全性和性能之间取得了良好的平衡,类似的曲线也被内置在以太坊中。