0
点赞
收藏
分享

微信扫一扫

学习笔记:Ring CT 2016

快乐小码农 2022-04-29 阅读 85
区块链

整理《RING CONFIDENTIAL TRANSACTIONS》by Shen Noether- Monero Research Labs
https://ledger.pitt.edu/ojs/ledger/article/view/34

Ring CT 2016

Introduction

加密货币中的环签名

CryptoNote:Traceable ring signature-防止双花费
Ring coin :Linkable ring signature

优点:

  • CoinJoin 或使用混币服务相比,环签名提供了不需要中心管理器的“自组织”(Spontaneous)混合。
  • Dashcoin使用更大数量的可信混频器,但中心节点的个数仍然远小于用户数。

问题:

  • 通过区块链分析具有特殊金额的交易,可以缩小范围。使用一次性密钥可以解决。但会产生大量灰尘交易,对于金额较小的交易消耗空间巨大。
  • 接收方想要花费收到的硬币时可能被敌手跟踪相关的交易公钥。
  • 原始CryptoNote 需要给出 ( p u b k e y P , a m o u n t A ) (pubkey P, amount A ) (pubkeyP,amountA), 如果 A A A比较特殊,则可能缩小实际的匿名集([AMT15].)

Monero中的Ring CT
扩展了CryptoNote协议,隐藏:金额、来源、目的地(与Zerocash的区别,Ring CT使用PoW生成硬币,而Zerocash必须有可信组生成)
多层可链接自发匿名群签名(MLSAG):机密交易+环签名 → \rightarrow 匿名+防止双花

Multilayered Linkable Spontaneous Anonymous Group signatures (MLSAG)

Ring coin(2015)的环签名

  • K e y G e n : ( x , P j = x G ) , I = x H p ( P j ) {\rm KeyGen}: (x,P_j=xG),I=xH_p(P_j) KeyGen:(x,Pj=xG),I=xHp(Pj);
  • S i g n ( α , s i ) {\rm Sign}(\alpha,s_i) Sign(α,si),其中 s i s_i si是一组随机数 ( i ≠ j , i ∈ { 1 , . . . , n } ) (i\neq j,i\in\{1,...,n\}) (i=j,i{1,...,n})
    在这里插入图片描述
    计算 L , R L,R L,R,从 j + 1 → n , 1 → j − 1 j+1\rightarrow n,1\rightarrow j-1 j+1n,1j1 c c c j + 2 → n , 1 → j j+2\rightarrow n,1\rightarrow j j+2n,1j
    在这里插入图片描述
    在这里插入图片描述
    环的接口:
    在这里插入图片描述
    输出签名: σ = ( I , c 1 , s 1 , . . . , s n ) \sigma = (I, c_1, s_1,...,s_n) σ=(I,c1,s1,...,sn)
  • V e r i f y {\rm Verify} Verify:计算所有的 L , R , c L,R,c L,R,c,并检查所有的 c c c, c n + 1 = c 1 c_{n+1}=c_1 cn+1=c1
  • L i n k {\rm Link} Link:不出现重复的 I I I.

MLSAG

key-vector: y ˉ = ( y 1 , . . . , y r ) , x ˉ = ( x 1 , . . . , x r ) \bar{y}= (y_1,...,y_r),\bar{x}=(x_1,...,x_r) yˉ=(y1,...,yr),xˉ=(x1,...,xr)

设环中的n个成员每个都有m个公钥,MLSAG 环签名的目标:

  • 为了证明n个签名者中的一个知道他们整个key向量的密钥
  • 如果签名者在另一个MLSAG签名中使用他们的m签名密钥中的任何一个,那么这两个环被链接,第二个这样的签名(由Monero区块链排序)被丢弃。
  • K e y G e n : ( x , P j = x G ) {\rm KeyGen}: (x,P_j=xG) KeyGen:(x,Pj=xG) π \pi π是签名者的秘密index;对于 j = 1 , . . . , m , I j = x H p ( P π j ) j={1,...,m},I_j=xH_p(P_\pi^j) j=1,...,m,Ij=xHp(Pπj)
  • S i g n ( α , s i ) {\rm Sign}(\alpha,s_i) Sign(α,si),对于 j = 1 , . . . , m , i = 1 , . . . , n ( i ≠ π ) j={1,...,m},i=1,...,n(i\neq\pi) j=1,...,m,i=1,...,n(i=π),其中 s i j s_i^j sij是一组随机标量
    在这里插入图片描述
    对于随机标量 α j , j = 1 , . . . , m \alpha_j,j={1,...,m} αj,j=1,...,m:
    在这里插入图片描述
    类似地,依次计算 π + 2 , . . . . , π − 1 \pi+2,....,\pi-1 π+2,....,π1 L , R , c L,R,c L,R,c直到 c π c_\pi cπ:
    在这里插入图片描述
    最后计算每个 s π j s_\pi^j sπj:
    在这里插入图片描述
    输出签名: O ( m ( n + 1 ) ) O(m(n+1)) O(m(n+1))
    在这里插入图片描述
  • V e r i f y {\rm Verify} Verify: 重构所有 L i j , R i j L_i^j,R_i^j Lij,Rij,查验 c n + 1 = c 1 c_{n+1}=c_1 cn+1=c1.
  • L i n k {\rm Link} Link: I j I_j Ij

Confidential Transactions

Greg Maxwell提出的Confidential Transactions

https://elementsproject.org/features/confidential-transactions/investigation
原理:使用加性同态承诺(Pedersen commitment),承诺的内容包含两部分:盲因子+明文值。通过谨慎选择盲因子,可验证交易的承诺之合为0。

问题:如果输入不在范围内(比如负数),也可能通过验证
解决:证明一个已提交的数量在范围内,但不透露它的其他信息。

  • 签名+Pedersen:从一个基本的EC签名开始。如果构造一个签名,使“消息”是pubkey的hash,则签名证明签名者知道私钥,对于一个 P = x G + a H P=xG+aH P=xG+aH这样的"pubkey"(x是盲因子,a是被承诺明文)
    1. 一个pedersen承诺可以被证明是一个零承诺,对承诺的hash值签名(即将承诺视为pubkey);在签名中使用公钥是为了防止将签名设为任意值并求解承诺,用于签名的私钥只是盲因子。
    2. 举个栗子,想要证明 C C C是1的承诺,但不能泄露盲因子,则计算: C ′ = C − 1 H C'=C-1H C=C1H,并要求证明者提供用 C ′ C' C作为公钥的签名。如果能够提供有效签名,则说明 C C C一定是1的承诺(否则攻破ECDLP)
  • 环签名+Pedersen: OR proof C C C是0或1的承诺。
    再举个栗子,计算 C ′ = C − 1 H C'=C-1H C=C1H,然后提供 对 { C , C ′ } \{C,C'\} {C,C}的环签名(签名者要知道私钥才能签名,回忆一下pedersen承诺 P = x G + a H P=xG+aH P=xG+aH,签名者要知道 x + a ⋅ ? x+a\cdot? x+a?才行)
    1. 如果 C C C是1的承诺,签名者不知道它的离散对数;则 C ′ C' C等于0的承诺,签名者知道它的离散对数(即盲因子)作为私钥。
    2. 如果 C C C是0的承诺,则已知它的离散对数(还是盲因子),但不知道 C ′ C' C的离散对数。
    3. 如果是其他任何数的承诺,则没有结果会是0,签名者无法给出有效签名。
  • 环签名+Pedersen:范围证明 C ∈ [ 0 , 32 ) C\in[0,32) C[0,32)
    1. 签名方发送了一组承诺对应的OR proofs:
      C1 is 0 or 1 C2 is 0 or 2 C3 is 0 or 4 C4 is 0 or 8 C5 is 0 or 16.
    2. 如果正确选择了 C 1 , . . . , C 5 C1,...,C5 C1,...,C5的盲因子,则有 C 1 + C 2 + C 3 + C 4 + C 5 = = C C1+C2+C3+C4+C5==C C1+C2+C3+C4+C5==C,证明 C ∈ [ 0 , 32 ) C\in[0,32) C[0,32)

改进

Max15的方案验证交易的原理是:
在这里插入图片描述
Monero中,发送方被环签名混淆到一组可能的地址 P i , i = 1 , . . . , n P_i,i=1,...,n Pi,i=1,...,n,其中只有一个是真正的交易输入,如果这个等式能被验证,则一定会知道哪个 P i P_i Pi,破坏环签名的匿名性。
解决

  1. 创建输入输出的承诺:
    在这里插入图片描述
    其中 y i y_i yi是掩码, z > 0 , a = b 1 + b 2 z>0, a=b_1+b_2 z>0,a=b1+b2
    在这里插入图片描述
    这里的 x c x_c xc是一个特殊的私钥“amount key”,它只对发送者和发给他们的货币的人已知,并且必须与他们通常的私钥不同
  2. 变成了对总和为0的承诺,私钥 z z z,公钥 z G zG zG,而不是实际和为0.
    在这里插入图片描述
    除非知道 y 1 , y 2 y_1,y_2 y1,y2,否则 z z z是不可计算的
  3. 为了混淆发送方的输入,环签名包括所有的输入承诺 C i , i = 1 , . . . , s , . . . , n C_i,i=1,...,s,...,n Ci,i=1,...,s,...,n的,加相应的公钥 P i , i = 1 , . . . , s , . . . , n P_i,i=1,...,s,...,n Pi,i=1,...,s,...,n,并减去 ∑ C o u t \sum C_{out} Cout:
    在这里插入图片描述
    如果知道其中一个私钥( z + x ′ , x ′ G = P s z+x',x'G=P_s z+x,xG=Ps),就可以签名.
    (对于输出的范围证明和可链接性,参考Max15和MLSAG)

Monero Ring CT协议的正式定义

Tag-Linkable Ring-CT with Multiple Inputs and Onetime Keys

  • { ( P π 1 , C π 1 ) , . . . , ( P π m , C π m ) } \{(P_\pi^1,C_\pi^1),...,(P_\pi^m,C_\pi^m)\} {(Pπ1,Cπ1),...,(Pπm,Cπm)}是对应密钥 x j , j = 1 , . . . , m x_j,j=1,...,m xj,j=1,...,m的地址/承诺的集合
  • 寻找 q + 1 q+1 q+1个集合 { ( P i 1 , C i 1 ) , . . . , ( P i m , C i m ) } , i = 1 , . . . , q + 1 \{(P_i^1,C_i^1),...,(P_i^m,C_i^m)\},i=1,...,q+1 {(Pi1,Ci1),...,(Pim,Cim)},i=1,...,q+1
  • 确定一组输出地址 ( Q i , C i , o u t ) (Q_i,C_{i,out}) (Qi,Ci,out),其中 ∑ j = 1 m C π j − ∑ i C i , o u t \sum_{j=1}^{m}C_\pi^j-\sum_iC_{i,out} j=1mCπjiCi,out是0的承诺
  • 定义:
    在这里插入图片描述
    是我们要签署的广义环,注意最后一列是上面提到的Ring-CT环
  • 在R环上计算MLSAG签名。

交易费

门罗交易费必须是无掩码的即: b H bH bH而不是 x G + b H xG+bH xG+bH,所以矿工可以用标准量 b b b验证 b ⋅ H = b H b\cdot H=bH bH=bH

range proof

假设给定交易的输入、输出承诺:
在这里插入图片描述
在这里插入图片描述
需要证明输出的范围在 [ 0 , 2 n ] [0,2^n] [0,2n],解构二进制:
在这里插入图片描述
C o u t , i j C_{out,i}^j Cout,ij b j ⋅ 2 j b_j\cdot 2^j bj2j的承诺:
在这里插入图片描述
使用密钥 b j b_j bj可计算 ( C o u t , i j , C o u t , i j − 2 j H ) (C_{out,i}^j,C_{out,i}^j-2^jH) (Cout,ij,Cout,ij2jH)(对所有的 j j j)的环签名,并将 C o u t , i j C_{out,i}^j Cout,ij提供给验证方(矿工)。
为了节省空间,可以用Borromean ring signature来组合这些简单环签名,也可以定义一种聚合环签名ASNL

聚合Schnorr非链接环签名-ASNL

Sign
( x i j , P 1 j , P 2 j ) (x_i^j,P_1^j,P_2^j) (xij,P1j,P2j)是一组keys, j = 1 , . . . , k j=1,...,k j=1,...,k,其中 x i j x_i^j xij是其中一个 P i j P_i^j Pij的secret key
对每个 j j j,令 i ′ : = i + 1   m o d   2 i':=i+1~mod ~2 i:=i+1 mod 2,设一个随机标量 α j \alpha_j αj,计算:

  • L i j = α j G L_i^j=\alpha_jG Lij=αjG
  • c i ′ j = H s ( L i j ) , L i ′ j = s i ′ j G + c i ′ j P i ′ j c_{i'}^j=H_s(L_i^j), L_{i'}^j=s_{i'}^jG+c_{i'}^jP_{i'}^j cij=Hs(Lij),Lij=sijG+cijPij(random s i ′ j s_{i'}^j sij
  • c i = H s ( L i ′ j ) , s i j = α j − c i j x i j   m o d   l c_i=H_s(L_{i'}^j),s_i^j=\alpha_j-c_i^jx_i^j~mod~l ci=Hs(Lij),sij=αjcijxij mod l
  • return ( L 1 j , s 2 j ) (L_1^j,s_2^j) (L1j,s2j) for all j j j, s = ∑ j s 1 j s=\sum_j s_1^j s=js1j

V e r i f y ( P 1 j , P 2 j , L 1 j , s 2 j , s ) Verify(P_1^j,P_2^j,L_1^j,s_2^j,s) Verify(P1j,P2j,L1j,s2j,s)
for all j j j,计算:

  • c 2 j = H s ( L 1 j ) , L 2 j = s 2 j + c 2 j P 2 j , c 1 j = H s ( L 2 j ) c_2^j=H_s(L_1^j),L_2^j=s_2^j+c_2^jP_2^j,c_1^j=H_s(L_2^j) c2j=Hs(L1j),L2j=s2j+c2jP2j,c1j=Hs(L2j)
  • 如果 ∑ j = 1 k L 1 j = s G + ∑ j ( c 1 j P 1 j ) \sum_{j=1}^kL_1^j=sG+\sum_j(c_1^j P_1^j) j=1kL1j=sG+j(c1jP1j),验证通过。

Correctness

  1. i = 1 , i ′ = 2 \bm{i=1,i'=2} i=1,i=2
  • L 1 j = α j G L_1^j=\alpha_jG L1j=αjG
  • c 2 j = H s ( L 1 j ) , L 2 j = s 2 j G + c 2 j P 2 j c_{2}^j=H_s(L_1^j), L_{2}^j=s_{2}^jG+c_{2}^jP_{2}^j c2j=Hs(L1j),L2j=s2jG+c2jP2j(random s 2 j s_{2}^j s2j
  • c 1 = H s ( L 2 j ) , s 1 j = α j − c 1 j x 1 j   m o d   l c_1=H_s(L_{2}^j),s_1^j=\alpha_j-c_1^jx_1^j~mod~l c1=Hs(L2j),s1j=αjc1jx1j mod l
  • return ( L 1 j , s 2 j ) (L_1^j,s_2^j) (L1j,s2j) for all j j j, s = ∑ j s 1 j s=\sum_j s_1^j s=js1j
    Verify:
  • c 2 j = H s ( L 1 j ) , L 2 j = s 2 j + c 2 j P 2 j , c 1 j = H s ( L 2 j ) c_2^j=H_s(L_1^j),L_2^j=s_2^j+c_2^jP_2^j,c_1^j=H_s(L_2^j) c2j=Hs(L1j),L2j=s2j+c2jP2j,c1j=Hs(L2j)
  • L H S = ∑ j = 1 k L 1 j = ( ∑ j α j ) G = ∑ j ( s 1 j + c 1 j x 1 j ) G = s G + ∑ j c 1 j P 1 j = R H S LHS=\sum_{j=1}^kL_1^j=(\sum_j\alpha_j)G=\sum_j (s_1^j+c_1^jx_1^j)G=sG+\sum_j c_1^jP_1^j=RHS LHS=j=1kL1j=(jαj)G=j(s1j+c1jx1j)G=sG+jc1jP1j=RHS
  1. i = 2 , i ′ = 1 \bm{i=2,i'=1} i=2,i=1
  • L 2 j = α j G L_2^j=\alpha_jG L2j=αjG
  • c 1 j = H s ( L 2 j ) , L 1 j = s 1 j G + c 1 j P 1 j c_{1}^j=H_s(L_2^j), L_{1}^j=s_{1}^jG+c_{1}^jP_{1}^j c1j=Hs(L2j),L1j=s1jG+c1jP1j(random s 1 j s_{1}^j s1j
  • c 2 = H s ( L 1 j ) , s 2 j = α j − c 2 j x 2 j   m o d   l c_2=H_s(L_{1}^j),s_2^j=\alpha_j-c_2^jx_2^j~mod~l c2=Hs(L1j),s2j=αjc2jx2j mod l
  • return ( L 1 j , s 2 j ) (L_1^j,s_2^j) (L1j,s2j) for all j j j, s = ∑ j s 1 j s=\sum_j s_1^j s=js1j
    Verify:
  • c 2 j = H s ( L 1 j ) , L 2 j = s 2 j + c 2 j P 2 j , c 1 j = H s ( L 2 j ) c_2^j=H_s(L_1^j),L_2^j=s_2^j+c_2^jP_2^j,c_1^j=H_s(L_2^j) c2j=Hs(L1j),L2j=s2j+c2jP2j,c1j=Hs(L2j)
  • L H S = ∑ j = 1 k L 1 j = ∑ j ( s 1 j G + c 1 j P 1 j ) = s G + ∑ j c 1 j P 1 j = R H S LHS=\sum_{j=1}^kL_1^j=\sum_j(s_{1}^jG+c_{1}^jP_{1}^j)=sG+\sum_j c_1^jP_1^j=RHS LHS=j=1kL1j=j(s1jG+c1jP1j)=sG+jc1jP1j=RHS
    ①使用的是加密hash函数
    ②可证明签名方已知的私钥是对应于( x i j x_i^j xij P 1 j , P 2 j P_1^j,P_2^j P1jP2j二者之一的。用二进制把金额分成k个数,则对应k个环签名。
    ③用ASNL可将k个环签名聚合为k组 ( L 1 j , s 2 j ) (L_1^j,s_2^j) (L1j,s2j)和一个 s s s,规模( 2 k + 1 2k+1 2k+1
举报

相关推荐

0 条评论