问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

门罗币隐私保护之机密交易

创作时间:
作者:
@小白创作中心

门罗币隐私保护之机密交易

引用
1
来源
1.
https://www.cnblogs.com/informatics/p/18508796

门罗币(Monero)是一种注重隐私保护的加密货币,其隐私保护技术主要包括隐形地址、环签名和机密交易。本文将详细介绍门罗币的机密交易技术,重点阐述Pedersen承诺和Bulletproof范围证明在交易金额隐私保护中的应用。

基础知识

Pedersen承诺

在前文《密码学承诺原理与应用 - 概览》中,我们介绍了密码学承诺的基本概念和应用。并对Pedersen承诺的基本原理和构造进行了概述。

Pedersen承诺构造和流程如下:

  • 承诺阶段:发送方选择一个明文(m)和一个随机数(r),计算承诺值(C = g^m \cdot h^r),并发送(C)给接收方。
  • 打开阶段:发送方揭示明文(m)和随机数(r)。
  • 验证阶段:接收方重新计算承诺值(C^{'} = g^m \cdot h^r),并验证(C^{'})和(C)是否相等。

对应的基于ECC的Pedersen承诺构造如下:

  • 承诺阶段:发送方选择一个明文(m)和一个随机数(r),计算承诺值(C = mG + rH),并发送(C)给接收方。
  • 打开阶段:发送方揭示明文(m)和随机数(r)。
  • 验证阶段:接收方重新计算承诺值(C^{'} = mG + rH),并验证(C^{'})和(C)是否相等。

Pedersen承诺有几个重要的性质:

  • 隐藏性:通过引入随机数(r),承诺值(C)隐藏了明文(m)的信息,同一个消息的多个承诺值(C)是不同的,且无法推导出明文(m)。
  • 绑定性:发送方不能在承诺(C)后,重新选择不同的明文(m^{'})和随机数(r^{'}),使得(C = m^{'}G + r^{'}H)。
  • 加法同态性:两个Pedersen承诺的和等于明文的和的Pedersen承诺。

Pedersen承诺的同态性在零知识证明、范围证明等隐私保护技术中有重要应用。同态性质如下:
假设有两个Pedersen承诺(C_1 = m_1G + r_1H)和(C_2 = m_2G + r_2H),则
[C_1 + C_2 = (m_1 + m_2)G + (r_1 + r_2)H ]
[C_1 - C_2 = (m_1 - m_2)G + (r_1 - r_2)H ]
当(m_1 = m_2)且(r_1 = r_2)时,(C_1 - C_2 = 0),即可以计算出两个承诺的差值。

范围证明

范围证明(Range Proof)是一种零知识证明机制,在不泄露明文的情况下,证明明文在一个合理的范围内。例如证明转账金额在([0, 2^{64} - 1])之间。最常见的范围证明技术是Bulletproof。在门罗币和Grin等隐私币中,就是使用Bulletproof技术来证明交易金额在一个合理的范围内。

Bulletproof范围证明基本原理如下:

  1. 设(u \in \mathbb{Z}_p)并且设(V \in G)是对(v)的一个 Pedersen 承诺。范围证明系统将使验证者相信(u \in [0, 2^n - 1])。换句话说,证明系统证明了以下关系:
    [{ (g, h \in G, V, \gamma; u, \gamma \in Z_p : V = g^v \cdot h^\gamma \land u \in [0, 2^n - 1]) } ]
    其中,(g)和(h)是(G)生成元,(V)是Pedersen承诺,(\gamma)是随机数,(u)是挑战数。

  2. 将(u)的范围限制转换为等式形式
    [u = <\mathbf{a}, 2^n> = \sum_{i=0}^{n} a_i \cdot 2^i , \quad \mathbf{b} = \mathbf{a} - \mathbf{1^n}, \quad \mathbf{a} \cdot \mathbf{b} = \mathbf{0^n} ]
    其中,(\mathbf{a} = (a_0, a_1, a_2, ..., a_n)),(\mathbf{k^n} = (k^0, k^1, k^2, ..., k^n)),(\mathbf{0^n})是长度为(n)的全0向量。从上述公式可以看出,

  • (u)的二进制表达等价于(<\mathbf{a}, 2^n> = a_0 + 2a_1 + 4a_2 + ... + 2^n a_n)
  • (\mathbf{b} = \mathbf{a} - \mathbf{1^n})和(\mathbf{a} \cdot \mathbf{b} = \mathbf{0^n})等价于(a_i)的值为0或1, 即(u \in [0, 2^n - 1])。
  1. 将上述等式转换为多项式形式,并使用Bulletproof技术转换为多项式承诺的形式进行证明。

注:Bulletproof的原理和实现比较复杂,涉及Pedersen向量承诺、内积承诺、折半算法等技术,本文暂不展开介绍。

门罗币机密交易

门罗币机密交易(Confidential Transactions)的基本思想是通过Pedersen承诺Bulletproof范围证明技术,将交易金额隐藏在承诺值中,并通过范围证明证明交易金额在一个合理的范围内。

门罗币机密交易的交易模型如下:

  • 输入:交易输入(Tx input)包括交易金额,其中交易金额通过Pedersen承诺隐藏在承诺值中, 即(C_{in, i}), 表示input交易的第(i)个输入金额的Pedersen承诺。
  • 输出:交易输出(Tx output)包括输出金额,其中输出金额通过Pedersen承诺隐藏在承诺值中,即(C_{out, i}), 表示output交易的第(i)个输出金额的Pedersen承诺。并且每个输出金额携带一个Bulletproof范围证明,如图中(RangeProof_{i})。

交易金额隐私性

门罗币机密交易的交易金额隐藏在Pedersen承诺中,Pedersen承诺的构造如下:
[C = aG + bH ]
其中,(a)是交易金额,(b)是随机数,(G)和(H)是椭圆曲线上的生成元。交易金额(a)通过Pedersen承诺隐藏在承诺值(C)中,只有发送方知道明文(a)和随机数(b)。由于接收方需要验证收到的金额,因此发送方需要共享明文(a)和随机数(b)。一种共享方式基于Diffie-Hellman密钥交换算法, 保证发送方和接收方能够分别计算出明文(a)和随机数(b)。
[a_i= a \oplus H_n("amount", H_n(rP_i, i)) ]
[b_i = H_n("commitment_mask", H_n(rP_i, i)) ]
其中:

  • (H_n)是哈希函数, 可以将任意长度的输入映射为固定长度的输出
  • commitment_mask和amount是字符串常量
  • (P_i)是发送方的公钥,(i)是UTXO的索引
  • (r)是随机数,来自(R = rG)中的(r),由发送方生成
  • (\oplus)是异或运算

需要注意的是,在计算(rP_i)时,由于发送方知道(r)和(P_i),因此可以直接计算出(rP_i)。接收方知道(x_i),虽然不知道(r)但(R)公开,因此可以通过(x_iR = rx_iG=rP_i)得到(rP_i)。综上,发送方和接收方都可以计算出(a_i)和(b_i),即接收方可以验证交易金额。由于第三方无法知道(r)或者(x_i),因此无法计算出(a_i)和(b_i),保证了交易金额的隐私性

注:在接收方作为发送方花费收到UTXO时,可以通过相同的方式生成新的承诺,其中(P_i)是接收方的公钥(隐形地址)

在交易中,需要保证输入金额等于输出金额,即:
[\sum_{i=1}^{n} Amout_{in, i} - \sum_{j=1}^{m} Amout_{out, j} = 0 ]
根据Pedersen承诺的加法同态性质,上述等式可以转换密文形式,如下:
[\sum_{i=1}^{n} C_{in, i} - \sum_{j=1}^{m} C_{out, j} = 0 ]
[\sum_{i=1}^{n} (m_{in, i}G + r_{in, i}H) - \sum_{j=1}^{m} (m_{out, j}G + r_{out, j}H) = (\sum_{i=1}^{n} r_{in, i} - \sum_{j=1}^{m} r_{out, j})H = 0 ]
其中,(\sum_{j=1}^{m} r_{out, j} = \sum_{j=1}^{m} b_i),因此只需要生成(n)个随机数(r_{in, i}),并保证(\sum_{i=1}^{n} r_{in, i} = \sum_{j=1}^{m} b_i),即可保证输入金额等于输出金额。

生成随机数(r_{in, i})的方法如下:
[r_{in, i} = RNG(2^{\lambda}), \quad i = 1, 2, ..., n-1 ]
其中,(RNG(\lambda))是为随机数函数,(\lambda)表示安全参数。上面公式表示生成(n-1)个随机数(r_{in, i}),最后一个随机数(r_{in, n})可以通过下面公式计算:
[r_{in, n} = \sum_{j=1}^{m} b_i - \sum_{i=1}^{n-1} r_{in, i} ]

证明:(\sum_{i=1}^{n} r_{in, i} = \sum_{j=1}^{m} b_i)
[\sum_{i=1}^{n} r_{in, i} = \sum_{i=1}^{n-1} r_{in, i} + r_{in, n} = \sum_{i=1}^{n-1} r_{in, i} + \sum_{j=1}^{m} b_i - \sum_{i=1}^{n-1} r_{in, i} = \sum_{j=1}^{m} b_i ]

交易金额范围证明

门罗币机密交易中,每个输出金额都携带一个Bulletproof范围证明,证明交易金额在一个合理的范围内。范围证明主要功能是保证每个输出金额在([0, 2^{64} - 1])之间。否则会出现负数金额,出现超额支付等问题。在门罗币中,每个输出金额的范围证明如下:
[{ (g, h \in G, V, \gamma; a, \gamma \in Z_p : V = g^a \cdot h^\gamma \land a \in [0, 2^{64} - 1]) } ]
其中,(g)和(h)是(G)生成元,(V)是输出金额(a)的Pedersen承诺,(\gamma)是随机数,(a)是交易金额。

Bulletproof范围证明原理暂时不做介绍,感兴趣的读者可以参考《Bulletproofs: Short Proofs for Confidential Transactions and More》。

结语

本文介绍了门罗币的另一项隐私保护核心技术:机密交易。机密交易通过Pedersen承诺和Bulletproof范围证明技术,将交易金额隐藏在承诺值中,并通过范围证明证明交易金额在一个合理的范围内。通过本文的学习,希望读者对于门罗币的隐私保护技术,以及Pedersen承诺和Bulletproof范围证明的应用有所了解。本文未对Bulletproof范围证明技术进行详细介绍,感兴趣的读者可以参考相关文献进行深入学习。

至此,我们已经对门罗币的三项核心隐私保护技术:隐形地址环签名机密交易进行了详细的介绍。门罗币的隐私保护技术应用基本可以分为两个阶段:

  • CryptoNote2.0阶段:隐形地址、环签名等技术(2014年)
  • RingCT阶段:在CryptoNote2.0基础上,优化了环签名技术,并在2017年引入机密交易技术,进一步提高交易金额的隐私性。

参考文献

  • 【1】CryptoNote wiki
  • 【2】Monero wiki
  • 【3】Home | Monero - secure, private, untraceable
  • 【4】Elliptic-curve cryptography
  • 【5】CryptoNote whitepaper v2.0
  • 【6】《密码学承诺原理与应用 - 概览》
  • 【7】Zero-to-Monero
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号