目录
2.3 Ring CT For Monero Protocol
3.2 Borromean Ring Signatures应用于范围证明
1. Introduction
门罗币给自己的定义就是一个匿名的数字加密货币,其采用CryptoNote协议。环机密交易需要实现:(1)去中心化;(2)匿名;(3)隐藏交易金额。 其中(1)是通过proof-of-work“挖矿”机制来实现的。(2)是通过一次性密钥实现的。(3)是通过多层可链接自发匿名群签名(MLSAGS)并结合Pedersen Commitment实现的。另外还应抵抗“二次花费”攻击,并进行性范围证明。
1.1 一次性密钥:
P=H(rB),其中P是交易的一次性密钥,H是哈希函数,B是转账接收方的公开密钥,r是发送方选取的随机数。发送方阿把rG发送给接收方,接受方由rG的到brG=rB,进而计算出P。即可通过P来检验交易的有效性。
1.2 隐藏交易金额:
将Confifidential Transactions加入MLSAGS。
1.3 防止两次花费:
通过链接机制实现,链接机制通过I:“key-image”实现:
在签名的链接阶段,将相同的I进行链接,第二次签名作废,避免用同一个密钥对进行两次环签名,即:每个密钥对只允许签名一次,从而避免了重复花费。
1.4 范围证明:
由于货币金额是定义在有限域上的,所以攻击者可以在满足输入等于输出的情况下,通过输出溢出(输出大于有限域的阶)来产生巨额自由货币(有限域阶的整数倍)。比如有限域的阶是10,输入是1,输出是5和6,虽然满足(5+6)mod 10=1,但发生溢出,即5+6大于10,故凭空多了10个货币。所以检测并阻止溢出而产生自由货币是十分必要的。
范围证明就是证明每一个输出都在某一正整数范围内。溢出可分为两种情况:(1)存在一些较大的输出(等价于绝对值较小的负输出)(2)大量较小的输出。可以通过设置有限域的阶+范围证明来共同检测和阻止这两种情况。通过把有限域的阶设置得足够大(比如2得256次方),把范围证明中的正整数设置得足够小(比如2的64次方,大于系统内货币总额即可),使得(1)时范围证明不通过,(2)时因输出个数巨大而不可行(比如上个例子在通过范围证明的情况下产生溢出最少需要2的196次方个输出)。
2. MLSAG
2.1 LSAG(Back)
2.2 MLSAG(对LSAG的推广)
2.3 Ring CT For Monero Protocol
(2)ransaction Verifification
与MLSAG验证步骤相同。
3. rang proofs
假设取范围证明中的正整数是2的n次方,即证明每个输出都在0到2的n次方之间。
可以使用Borromean Ring Signatures来实现。
3.1 Borromean Ring Signatures
3.2 Borromean Ring Signatures应用于范围证明