A Traceability Analysis of Monero’s Blockchain

2024-03-10 12:08

本文主要是介绍A Traceability Analysis of Monero’s Blockchain,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Abstract

Monero 以相比于Bitcoin而言具有更好的匿名性,在本论文中作者使用了3中启发式的方法对Monero 区块链中的交易进行分析.虽然Monero中使用了mix-in方式增加防止被追踪,但是启发式攻击方法的结果表明,其中87%的交易地址是可以被追踪的;后来Monero中采用了RingCTs,但是鉴于用户的使用消费习惯使然,这些启发式方法仍然有效。通过对这些可追踪的交易进行分析,作者发现其中98%的交易中使用的mix-in地址都是最近新产生的output地址,利用这一消费习惯,作者对Monero的RingCTs的交易进行分析,分析结果表明Monero中以"triangle distribution"选择mix-in的方法对没有有效的提升交易的追踪难度。
在对Monero进行分析之前,首先对Monero区块链整体进行了一些统计分析,发现如下3个重要信息:

  • 超过65%的交易输出,没有采用mix-in,也就是说这些交易中的输入已经无法作为mix-in,因为这些输入已经被花费,是可追踪的。如果Monero中将这些可追踪的交易用作mix-in,但是除去真正的input之外,其他的mix-in已经被花费,那么就可以找到真正被花费的交易,作者以此65%为基础,顺藤摸瓜追踪到了另外22%的交易地址。

  • 启发式方法二:一些minx-in中使用了某笔交易中的多个输出,这多个输出很有可能来自于同一人。以non-RingCTs的Monero区块链中87%的交易地址验证该启发式方法,真阳率为95%,鉴于此,推断出该方法仍然适用于RingCTs中的地址。

  • 启发式方法三:Monero区块链中的UTXO,存在的时间越久,被花费的概率越大。仍然以non-RingCTs的Monero区块链中87%的交易地址验证该启发式方法,真阳率为98.5%,推断出该方法仍然适用于RingCTs区块链中。

Monero基础知识

Monero(XMR) 于2014年4月18日上线,出块时间为120秒,使用CryptoNote算法进行挖矿,每个区块出块奖励不定,目前Monero价格为67美元。
Monero提升用户匿名性上,使用了autonomous和spontaneous的协议,在Monero中用户在交易过程中可以自发的进行混币,混币本身并不增加额外的时间延迟。Monero主要解决了两个问题:

  • Unlinkability(不可关联性),对于任意两笔交易,无法证明这两笔交易是转发给同一个人。
  • Untraceability(不可追踪性),对于一笔交易中的输入,真正的input隐匿在一个input的集合中。

对于Unlinkability,Monero中使用了one-time random address。每次进行交易时,发送方为接收方产生一个一次性的随机接收地址,而只有接收方才能花费接收地址中数字货币。这样的前提是每次产生接收地址时都有一个好的随机源,同时每个接收地址只使用一次。这就是Monero中的 Ring Signature。发送者(也是签名者)代表一组其他用户匿名签署交易(消息)。被赎回的实际输出在属于其他用户的选定输出集合中保持匿名。
2015年~2016年期间,Monero币价涨了将近27倍,到了2017年,Monero又采用了Ring Confidential Transaction(RingCTs)以提升其隐私性(隐藏交易真正的输出地址)。在RingCTs中隐藏了交易额。

Monero System Parameter

Monero中采用了Ed25519 椭圆加密算法,在该加密算法中。Monero中的每个用户都有一个长期的公钥对和私钥对,记为 ( p k L T u s e r , s k L T u s e r ) (pk_{LT}^{user}, sk_{LT}^{user}) (pkLTuser,skLTuser),其中公钥对是可以公开的,公钥对用于接收转账,私钥对用于发送转账,它们关系如下:

  • s k L T u s e r = ( a , b ) sk_{LT}^{user} = (a, b) skLTuser=(a,b), 范围是[1, L-1], L是椭圆曲线上某个点G的素数阶。
  • p k L T u s e r = ( A , B ) pk_{LT}^{user} = (A, B) pkLTuser=(A,B), 其中A = aG, B= bG,其中G是标准的Ed25519基点

Ensuring Unlinkability

Monero中发送方用接收方的公钥对随机产生一个一次性地址,然后将XMR发送至这个一次性地址,而只有接收方能够花费一次性地址中的XMR。假定发送方是Alice,接收方是Bob,Alice产生一次性地址的过程如下:

  • 获取Bob的 p k L T B o b = ( A , B ) pk_{LT}^{Bob} = (A, B) pkLTBob=AB
  • 随机产生一个r,r∈[1, L-1]
  • 令R = rG, P = hash(rA)G+B
  • Bob的接收地址是P
    由于P = hash(rA)G+B, 根据B的公钥对和私钥对的关系(A = aG, B = bG),同时R =rG,替换P的表达式,得到:
  • P= hash(raG)G+bG = G(hash(aR)+b) = sG

而Alice转账给Bob的地址,Bob通过自己私钥中的(a, b)和R计算,因此只有Bob知道Alice环形签名中众多地址中真正转账给Bob的地址。在这笔转账中,除了Alice和Bob之外,没有人能知道真正转账给Bob的地址,这保证了Monero中交易的Unlinkability。

如果需要多个output,可以随机出多个接收转账的地址,每个交易的输出只能被相应的一次性随即地址识别出来。在Monero中,每次转账的输出地址是一次性的公钥,记为 p k O T pk_{OT} pkOT。对应的私钥记为 s k O T {sk_OT} skOT,它们的关系记为P = sG。

Ensuring Untraceability

Monero中的不可追踪性是通过ring signatures(环形签名)实现的。环形签名使得用户可以在若干名用户形成的环上对消息进行签名。签名的用户只需要知道自己的私钥,签名后用户将其他用户的公钥放到环上。对于矿工或者接收方来说,他们只知道真正的签名者是环中的一员,但是无法确认是哪一个,发送方通过环签名的方法实现匿名。仍然以Alice 发送给Bob10 XMR为例说明环形签名的过程。

  • Bob的 p k L T B o b = ( A , B ) pk_{LT}^{Bob} = (A, B) pkLTBob=AB,然后随机产生发送地址P_Bob
  • Alice选取Monero链上其他一些价值为10 XMR的output ( P 1 , P 2 , … ) (P_1,P_2,…) (P1P2,)
  • S = { P 1 , P 2 , … P m } S={\{P_1,P_2,…P_m\} } S={P1P2Pm},其中包括Alice自己的input P t = s t G P_t = s_t G Pt=stG

Alice的input混合在其他价值为10的output中达到匿名的目的,而S称之为匿名集。Alcie使用自己的私钥s_t对消息进行签名。对于矿工和Bob来说,他们无法判断Alice这笔转账的支出来源地址,这就使得这笔转账的input具有了匿名性。S中其他用户的公钥称之为mix-ins,mix-ins越大,匿名性越好。

Resist Double Spending

上述Alice给Bob的转账中,既然无法确定Alice具体转账的input地址,对于矿工来说,无法知道Alice是否会进行double spending。为了解决该问题,Monero中引入了key image(ζ)机制,即Alice的交易中需要提供一个key image,即:

  • ζ = s t H a s h p ( P t ) ζ = s_tHash_p (P_t) ζ=stHashp(Pt)

上述哈希函数中会得到椭圆曲线中一个点,这有区别于Hash函数。key image 是对转账的input的一个可识别的标记,矿工会对每个区块中每笔交易的key image进行记录,Alice进行双花时,矿工检测到生成的key image已经存在就能发现双花攻击。
注意:Monero中具体进行交易检验的细节内容,暂时没有深入的了解,待后续调研。

下图介绍了一个具体的Monero的交易信息,其中有多个输入,每个输入都会添加mix-ins,总共2个input和 3个output,每个input都有1个key image。第一个input使用了2个mix-in,第二个input使用了1个mix-ins。与Bitcoin一样,所有的input交易额之和应该等于所有的output交易额之和。
在这里插入图片描述

RingCTs

2017年1月10日,Monero中上线了一种新的交易类型,称之为ring confidential transaction(RingCTs). 在一个RingCTs中,不仅隐藏了交易的真正input,同时也隐藏了交易额,在RingCTs中,每个output的交易额都标记为0,验证inputs和outputs的交易额相等的方法称之为commitment scheme,这里不再具体涉及。使用RingCTs的好处就是,转账进行mix-ins时,不用找相同价值的output,而是其他任意output都可以作为mix-ins。

Monero Network Statics

Monero区块链提供了Remote Procedure Calls(RPC)的方法,该论文通过RPC获取Monero区块链数据,RPC接口提供两个方法:getheight和getransactions,返回的JSON形式的文本。
该论文分析的Monero区块链,截止时间为2017年1月10日,高度1240503,其中总共961463笔非coinbase交易,总共1339733个output,最大一笔输出为500000 XMR,其中85%的output的金额小于0.01 XMR。Monero区块链中output中XMR的分布图如下。

在这里插入图片描述
在Monero中,规定output金额应该是A×10B的形式,其中1<=A<=9, B>=-12。实际分析发现其中99.98%的output的金额并不符合Monero中output格式,同时其中92.8%的output金额在Monero中是唯一的,这些output总和是12231.27 XMR。Output金额不符合要求,是因为Monero中交易费用会根据交易大小而变化,交易的大小受mix-ins数量的影响,最终导致output值的不符合其规定。

Number of MIx-ins

Min-ins的使用,各个input有所不同,最小的mix-ins是0,最大的mix-ins为851。但是其中[0,4]范围的mix-ins占比96%。不同mix-ins的使用的累积分布图如下:
在这里插入图片描述
这里面作者猜想大部分交易都是用数量较低的mix-ins的原因有两个,一方面有可能找不到足够多的等价值的output作为mix-ins,另外一方面,mix-ins的数量越多,意味着交易越大,交易越大则交易费越高。为了进一步对这两个原因进行分析,作者统计了mix-ins在0~11范围内所有对应交易中可以使用更高数量mix-ins的比例,其结果如Table 2所示,其中最后一列表示相应数量的mix-ins中,可以使用更高mix-ins的交易所占的比例,例如在mix-ins为2的交易总共2908304笔,但是其中2902246笔可以使用大于2的mix-ins,这说明Monero中大量交易使用较低的mix-ins不是因为没有足够的mix-ins,而是为了避免高额的手续费
在这里插入图片描述

Number of Inputs and Outputs

在Monero区块链中input和output数量的变化情况如图4的统计所示。在Monero上线初期转账的时候,为了将output凑成A×10B的形式,因此会有很多输入和输出。Monero上线第一周,input和output的平均值分别为19和17,到第4周时input达到104,最后1周时下降到3,这是因为RingCTs技术的采用。
在这里插入图片描述
在采用RingCTs后,Monero中的output数量大幅下降,其平均值为2~4,然而input数量的变化却没有固定规律,主要是因为有很多input凑在一起支付的原因。在使用RingCTs后intput和output的情况如图5所示。
在这里插入图片描述

Summary

对Monero区块链的统计分析情况,使用表3进行一个比较全面的总结。
在这里插入图片描述

Traceability Attacking

Heuristic I

前文经过分析,作者发现了在Monero中,有65%的交易没有采用mix-ins技术,这就意味着这些交易中的所有input,都非常明确他们作为output是何时被花费出去的。因此,如果其他交易中使用了这些交易中的input作为mix-ins,那么就可以确定其他交易中真正被花销出去的output是哪一个,在文中作者称之为Cascade Effect,其效果如图6所示。
在这里插入图片描述
作者使用这种分析方法,逐渐减小一些交易中的匿名集合,直到匿名集合数量为1,于是就能确定真正被花销出去的output,最后根据这种方法追踪到了额外22%的交易。作者的追踪算法详细内容如下:
在这里插入图片描述
图7展示了交易追踪算法分别迭代1、3、5次之后追踪到的结果。在Figure 7a中,分别表示在mix-ins为0~10中,迭代1次、3次、5次能够追踪到的交易的比例。Figure 7b表示不同数量的mix-ins,迭代次数分别为1、3、5次时追踪到的交易的比例变化情况;Figure 7c表示随着时间(Week为单位)增长,不同迭代次数追踪到的交易比例,随着Monero中采用了RingCTs技术之后,Heuristic I已经无法追踪其中的inputs。

在这里插入图片描述
即使使用了Heuristic I,仍然有一些交易的input是无法追踪的,论文统计了mix-ins在-~1-范围内的情况,随着mix-ins数量增多,能准确追踪的input数量越来越少,针对mix-ins为10的input,其中24%的交易,其匿名集可以减少为2个input。统计情况如图8所示。

在这里插入图片描述

Heuristic II

Heuristic I的方法针对于没有使用RingCTs技术的Monero区块链分析有用,但是后续使用RingCTs的Monero区块链无能为力,于是作者使用了启发式方法II,该方法假设如果在交易Tx-a中,有2个input,其中一个input作为mix-ins,同时有2个输出O1和O2;如果在另外一笔交易Tx-b中,如果同时使用O1和O2作为input,那么则认为O1和O2隶属于同一个人;启发式方法2认为一笔交易中的inputs全部来自之前一笔交易的output的概率很低,如果出现这种情况,则认为这些input都会在这笔交易中被花出去。为了方便叙述,将Tx-a称之为source transaction,将Tx-b称之为 dest transaction,dest transaction的input中至少使用了source transaction中不少于2个的output。作者的假设可以参见图9。

在这里插入图片描述
由于启发式方法2是基于假设,因此基于假设的结果未必会有结论,同时还会又一些错误,论文作者也承认这一点,但是还是基于此不太靠谱的假设强行展开了分析并设计了算法,求解Monero使用RingCTs后的交易中是否存在一些dest transaction 使用了至少2个其他交易中的output,算法如下:

在这里插入图片描述
Algorithm 2 的运行情况有4种:

在这里插入图片描述
注意:我对这里面S2和S3的分类没有很明白有什么区别?找到several dest trx不是表明有给定的source,其output出现在多个dest 的input中吗?这和S3不就是一个意思吗?

其中S1说明方法没有奏效,S2说明方法在transaction level中存在false positive;S3情况说明方法在input level 存在false positive;S4才是真正说明source 的outputs在dest中确实被花费了。
为了评价方法的效果,分别统计4种情况出现的比例,同时以Heuristic I中获得的87%的数据作为真实数据,应用Heuristic II方法。首先经过统计总共找到410237种source trx,这些占比所有trx的43%, 其中包括636 笔包含RingCTs的trx,这只占RingCTs交易数的1%。将Heuristic II方法应用到不包含RingCTs的409601笔 trx中,其中60%的source trx 有1个对应的dest trx,其中1笔source trx能找到的dest trx的最大数目为146,对一个给定的dest trx,寻找对应的dest trx,dest trx数量增多,对应的source trx的比例逐步下降,如图Figure 10a所示。
在这里插入图片描述

Figure 10b中是将Heuristic II 的方法应用到 636笔RingCTs trx中,发现其中95.1%的source trx 仅仅对应1个dest trx。Figure 10c表示对应于non-RingCTs的交易,Heuristic II方法验证中,TP占有87.3%,而对于用户来说,Monero区块链采用RingCTs前后消费习惯没有多大变化,因此Heuristic II在RingCTs中的分析TP应该也占大部分的比例。

在这里插入图片描述

为了进一步说明在non-RingCTs中的结果比较可信,作者按照mix-ins的数量变化对Heuristic II方法的结果进行了统计,结果如图11所示,因为mix-ins数量增加,Heuristic I中可以追踪的交易数量大幅下降,因此针对Heuristic II中的结果,有一大部分是无法检测结果的正确性,但是即使如此,其中明确的False Positive几乎为0。

Heuristic III

启发式方法3的中,作者认为一个UTXO,随着时间的增长,其被花费的概率会越来越大,因此作者认为,在一个环形签名的公钥中,真正的转账地址应该是所在区块高度最高的那个地址(听起来有几分道理,如果有几个地址高度相同呢?),作者抱着试一试的想法,将这个启发式方法应用到non-RingCTs中的交易中,发现作者的方法,精确率能达到98.1%(看起来虽然是个扯淡的猜想,但是居然make sense!)为了规避这个问题,Monero developer在2015年4月5号将原本的mix-ins采样算法从正态分布换成了triangle distribution,这种采样中,对一个input,会挑选最近的output作为其mix-ins以解决这个问题。为了验证这种Monero developer采用的新的采样方式的效果,作者对2015年4月5号以后的交易进行了Heuristic III的分析,与之前的正态分布的采样下的结果比对,结果如表5所示,表5的情况说明采用新的采样方法之后,对于Heuristic III方法的影响不大。

在这里插入图片描述

为了对Heuristic III的方法的假设进行进一步的验证,对Heuristic I中确定的87%的交易进行了统计,分别统计这些UTXO在输出之后分别在什么时候被花销出去,作者对用户消费习惯进行如下分类,其中占比分别为:

  • 在[0,9]个区块内被花费的UTXO占比0.17%
  • 在[10,100]范围内被花费的UTXO占比9.16%
  • 在[101, 1000]范围内被花费的UTXo占比28.4%
  • [1000, +∞]范围内被花费的UTXO占比62.27%

据此,分别计算得到一个概率密度图,如图12所示,作者建议依据此概率选择mix-ins更加合理。

在这里插入图片描述

Releated Work && Conclusion

本文的工作基于Menero Lab的两篇公开的文献MRL-001和MRL-002MRL-004。其中Heuristic I来自于MRL-001。本文的Heuristic II和Heuristic III分别来自于Monero-004。
本文最重要的贡献在于利用Heuristic I方法能够追踪到Monero 区块链中87%的交易,同时对于Monero Lab中对Monero做的一些改进进行了验证,Heuristic II和Heuristic III分别指出了改进方法的不足,同时给出建议,Monero Developer在进行mix-ins采样时可以考虑用户花费UTXO的习惯以提升匿名性。

Thinking

  • 相比于ZCash这篇论文,这篇文章中的作者为什么不在Monero中自己注册多个账号,然后多次进行转账,如果RingCTs中某个用户也恰恰使用1个mix-ins并且选中了作者的账号,那么就可以同样适用Heuristic I的方法,我就后续进行一些调研以验证我的想法,如果可以的话,就可以根据这篇文章的不足继续推进一些分析工作,例如可以分析Monero在采用了RingCTs技术之后匿名性/可追踪行到底如何?
  • 本文的工作就量和质上与ZCash的那篇文章确有不及,这方面也令我看出发表一篇顶会,不仅需要原创、有效并且非常合理的想法,而且也需要有相当数量的分析工作,两者兼具,才能发到A类会议中。
  • 对于RingCTs的使用方法、以及Monero中是如何防止双花的细节,我比较好奇,后续会进行一些调研。

这篇关于A Traceability Analysis of Monero’s Blockchain的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/794198

相关文章

Versioned Staged Flow-Sensitive Pointer Analysis

VSFS 1.Introduction2.Approach2.1.相关概念2.2.VSFS 3.Evaluation参考文献 1.Introduction 上一篇blog我介绍了目前flow-sensitive pointer analysis常用的SFS算法。相比IFDS-based方法,SFS显著通过稀疏分析提升了效率,但是其内部依旧有许多冗余计算,留下了很大优化空间。 以

OpenCV_连通区域分析(Connected Component Analysis-Labeling)

申明:本文非笔者原创,原文转载自:http://blog.csdn.net/icvpr/article/details/10259577 OpenCV_连通区域分析(Connected Component Analysis/Labeling) 【摘要】 本文主要介绍在CVPR和图像处理领域中较为常用的一种图像区域(Blob)提取的方法——连通性分析法(连通区域标

MATH36022 Numerical Analysis 2 Approximation of Functions – Week 3 Exercises

Show that the Chebyshev polynomials are orthogonal on ( − 1 , 1 ) (−1, 1) (−1,1) with respect to the weight function ( 1 − x 2 ) − 1 / 2 (1 − x^2)^{−1/2} (1−x2)−1/2. Ans: T n ( x ) = cos ⁡ ( n arcc

《Data Structure Algorithm Analysis in C》Chap.10笔记

5大算法:贪婪 Greedy,分治 Divide and conquer,动态规划 Dynamic Programming,随机 Randomized,回溯 Backtracking。 每一个小节都是一个具体的问题,应当仔细看,待看的:10.2.2-4,10.3,10.4.3,10.5.2。

05.德国博士练习_06_mapping_analysis

文章目录 1. exercise01: mapping multi-fields2. exercise02: nested and join mapping3. exercise03: custom analyzer 1. exercise01: mapping multi-fields # ** EXAM OBJECTIVE: MAPPINGS AND TEXT ANALYS

MATH36022 Numerical Analysis 2 Approximation of Functions – Week 2 Exercises

Attempt these exercises in advance of the tutorial in Week 3 Find the best L ∞ L_\infin L∞​ approximation to f ( x ) = x n + 1 + ∑ k = 0 n a k x k f (x) = x^{n+1} + \sum_{k=0}^na_kx^k f(x)=xn+1+∑k=

ROS naviagtion analysis: costmap_2d--ObstacleLayer

构造函数 ObstacleLayer(){costmap_ = NULL; // this is the unsigned char* member of parent class Costmap2D.这里指明了costmap_指针保存了Obstacle这一层的地图数据} 对于ObstacleLater,首先分析其需要实现的Layer层的方法: virtual void o

ROS naviagtion analysis: costmap_2d--StaticLayer

从UML中能够看到,StaticLayer主要是在实现Layer层要求实现的接口。 virtual void onInitialize();virtual void activate();virtual void deactivate();virtual void reset();virtual void updateBounds(double robot_x, double rob

ROS naviagtion analysis: costmap_2d--CostmapLayer

这个类是为ObstacleLayer StaticLayer voxelLayer 这种维护了自己所在层的地图数据的类,提供了一些公共的操作方法。 从UML中可以看到,这个类提供了以下方法,这些方法的参数列表均为(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) updateWit

ROS naviagtion analysis: costmap_2d--Layer

这个类中有一个LayeredCostmap* layered_costmap_数据成员,这个数据成员很重要,因为这个类就是通过这个指针获取到的对master map的操作。没有这个指针,所有基于Layer继承下去的地图的类,都无法操作master map。 这个类基本上没有什么实质性的操作,主要是提供了统一的接口,要求子类必须实现这些方法。这样plugin使用的时候,就可以不用管具体是什么类