主页 > imtoken安卓官网 > 一文了解比特币混币方案TumbleBit的总体框架、重要协议及不足之处

一文了解比特币混币方案TumbleBit的总体框架、重要协议及不足之处

imtoken安卓官网 2023-02-14 05:55:55

如果不考虑金额的隐私,TumbleBit 是一个非常好的混币解决方案。

原标题《理解比特币混币方案:TumbleBit》

TumbleBit 是 2017 年发表在 NDSS 上的一篇文章,它是一个兼容比特币的中心化混币协议。 它是一种解决比特币交易可链接性问题的协议。 TumbleBit 可以扩大区块链的交易量,也可以扩大区块链。 交易速度。 在这篇文章中,Nervos 研究员马宇峰详细分析了 TumbleBit 的整体框架、解谜协议和解谜协议,并介绍了一些针对 TumbleBit 不可链接性的攻击。 快来学习新技能吧。

整体框架结构

由于 TumbleBit 需要兼容比特币这种只支持非图灵完备语言的区块链,其链上部分需要的加密原语很少且简单。 另外,虽然是中心化协议,但即使是恶意的Tumbler也无法盗币,也无法在不与参与用户串通的情况下找到交易输入输出之间的链接关系。 与coinjoin和coinshuffle相比,TumbleBit的优势在于不需要交易方与其他用户进行交互,交互只发生在交易方与Tumbler之间。

TumbleBit 可以将发送给一方的多笔交易聚合成两笔链上交易,这些交易不需要在区块链上存储或验证,因此可以扩展区块链的交易量,TumlbeBit 的链下交易可以是done in seconds 可以在一个级别的时间内完成,所以区块链的交易速度也可以得到扩展。

TumbeBIt 的主要思想很简单:用链下解谜代替链上支付。 当 Alice 想付给 Bob 一笔钱时,Alice 给了 Bob 一个由 Bob 和 Tumbler 交互产生的谜题的解决方案。 每解决一个谜题,Alice 就将一个比特币转给 Tumbler,Tumbler 将一个比特币转给 Bob。

图 1. TumbleBit 协议概览

图 1. TumbleBit 协议概述

TumbleBit协议的结构如上图所示。 TumbleBit 协议以纪元为周期运行。 需要注意的是,所有参与 TumbleBit 协议的人都知道每个纪元周期中每个阶段的时间。 每个epoch分为三个阶段:

首先是Escrow阶段,也就是链上托管阶段。 在这个阶段,收款人Bob告诉Tumbler在这个epoch最多接收3个比特币,然后Tumbler构造一个托管交易,这是一个2-of-2的多重签名交易,解锁条件是Bob和tumbler签名或者超过 tw2 被 Tumbler 签名取出后,Bob 和 Tumbler 运行链下 Puzzle-Promise 协议,让 Bob 得到一个 promise-puzzle pair,也就是图中交易上 Tumbler 的签名,使用对称加密密钥对签名加密后的密文,我们称之为promise,是一个RSA谜题,是用Tumbler的公钥对对称密钥加密后的密文。 协议完成后,Tumbler 将交易发送到链上,支付方 Alice 在此阶段也发送了一个托管交易,也是一个 2-of-2 多重签名交易。 解锁条件为Alice和Tumbler的签名,或者在时间tw1后由Alice取回;

比特币发展历程介绍表_比特币协议介绍_比特币转错到比特币现金地址了

第二个是Payment阶段,也就是链下支付阶段。 在此阶段,鲍勃将拼图蒙蔽并将其发送给爱丽丝。 致盲拼图的目的是为了防止 Tumbler 将交易双方关联起来。 盲法很简单,就是选择一个盲因子,然后用Tumbler的公钥加密乘法 上传原谜题后,Alice得到盲谜,用Tumbler运行一个RSA-Puzzle-Solver协议得到盲谜的解决方案并将其发送给鲍勃。 由于RSA算法具有乘法同态性,所以盲谜解密后除以得到,再解密得到签名;

最后是Cash-out阶段,也就是链上的退出阶段。 Alice取回剩余的2个比特币并支付给Tumbler 1个比特币,Tumbler取回剩余的2个比特币并支付给Bob 1个比特币。

拼图协议

介绍完了TumbleBit的总体框架结构,下面介绍一下刚才提到的两个重要的协议,一个是Alice和Tumbler之间运行的解谜协议:RSA-puzzle-solving protocol,一个是Bob和Bob之间运行的解谜协议。 Tumbler 获取 Puzzle Protocol:Puzzle-Promise 协议。

本文将重点介绍 RSA-puzzle-solving 协议,它是一种公平交换协议。 当且仅当 Tumbler 为 Alice 提供了 RSA 难题的解决方案时,Alice 才向 Tumbler 支付比特币。 该协议不仅可以集成在TumbleBit协议之上,也可以作为公平交换协议独立运行在其他场景中。

该协议的核心思想是,Tumbler解出爱丽丝的谜题后,用对称密钥对解进行加密得到密文,然后用比特币支持的哈希算法计算出哈希值,发送给爱丽丝,并Alice收到发送交易后,解锁条件就是提供的原像。 Tumbler 可以通过构建包含的交易来获得比特币。 公开后爱丽丝可以得到,解密后得到谜题解。

该协议的挑战是找到一种方法让爱丽丝在不使用零知识证明的情况下验证密文是正确值的加密。 剪切和选择可以解决这个问题。 cut-and-choice的思路类似于抽查,即Alice选择一些假拼图让Tumbler解密。 如果 Tumbler 解密正确,则 Alice 认为 Tumbler 是诚实的。

图 2. RSA-puzzle-solving 协议

图 2. RSA 解谜协议

协议的具体细节如上图所示。 公共输入是Tumbler的RSA公钥,Alice的输入是puzzle,Tumbler有一个secret输入,是Tumbler的RSA私钥;

首先,爱丽丝准备了一组真实的谜题,包括一个真实的谜题。 由于RSA具有乘法同态性,Alice只需要随机选择一个盲因子用Tumbler公钥加密并分别乘以谜题即可得到真正的谜题。 这个盲谜的解是 unblinded 则对应同一个解;

比特币协议介绍_比特币发展历程介绍表_比特币转错到比特币现金地址了

第二步,Alice 准备一个假的消息集合,其中包含一个假的拼图,它是通过选择一个随机数并用 Tumbler 公钥加密得到的;

接下来,Alice 将真假混合拼图的集合随机排序得到一个新集合,并记下真拼图和假拼图对应的下标,然后将这个新集合发送给 Tumbler;

Tumbler对新集合的每一个元素进行解密,然后用不同的对称密钥对得到的明文进行加密,得到新的密文,然后将所有的新密文和新密文对应的密钥的哈希值发送给Alice;

Alice将fake puzzle的下标和fake puzzle中随机数的原文发送给Tumbler,Tumbler验证集合F中的puzzle确实是fake message(如果是真实消息,不可能Alice不需要密钥就知道对应的明文),如果验证通过,将假拼图对应的私钥发送给Alice;

Alice 解密假拼图,判断 Tumbler 是否欺骗了 Alice。 若验证通过,Alice构造并公布交易,解锁条件为Alice签名超过tw1,或Tumbler提供所有真实谜题对应的密钥;

然后Alice将真实谜题和所有致盲因子发送给Tumbler,Tumbler验证所有真实谜题是否对应同一个谜题,如果验证通过则发布交易获得比特币,其中包含所有真实谜题密钥;

最后,爱丽丝用真正的谜题钥匙解开了谜题。

可以看出,在这个约定中,只有当 Tumbler 打开的假拼图全部正确,而所有没有打开的真拼图全部错误时,Alice 才能得到正确的答案。 这个概率是论文中的实现m为15,n为285,Tumbler作弊的概率约为 。

如果直接在TumbleBit上使用上述协议,会存在三个问题:第一,上述协议只支持Alice获取一个谜题的解,需要扩展获取任意数量Q谜题的解; 第二个是这个协议应该完全在链下发生,目前的协议需要两个链上交易; 第三是交易比典型交易更长,因为它包含哈希的原像,这导致更多的交易费用。

解决办法是:

首先,在托管阶段,Alice发送抵押Q个比特币,解锁条件为Alice和Tumbler签名或Alice签名在时间tw1到期后解锁;

比特币协议介绍_比特币发展历程介绍表_比特币转错到比特币现金地址了

然后在支付阶段,Alice 最多可以购买 Q 个谜题解,Tumbler 维护一个计数器来统计已经提供给 Alice 多少解。 现在假设爱丽丝要求解决第一个难题。 原协议在第8步后修改如下,完全脱链运行:

比特币转错到比特币现金地址了_比特币发展历程介绍表_比特币协议介绍

如果 Alice 作弊,在收到正确的密钥后没有发送正确的密钥,那么 Tumbler 可以通过公开金额获得应有的比特币比特币协议介绍,代价是金额比正常交易大,需要支付更多的手续费。 经过这些修改后,RSA 解谜协议就可以在比特币上使用了。

拼图协议

接下来,让我们谈谈puzzle-promise协议。 该协议是在托管阶段在收款人 Bob 和 Tumbler 之间运行的链下协议。 目标是让 Bob 获得一对 promise-puzzle。

该协议的挑战在于,如果 Tumbler 只是向 Bob 发送一个,那么 Bob 不知道它是否是正确签名的加密,也不知道他是否隐藏了正确的密钥。

我们仍然可以通过剪切和选择来应对这一挑战。 但与 RSA-puzzle-solving protocol 不同,Bob 会得到很多 puzzle-promsie 对,cut-and-choose 保证至少有一对是正确的(确保全部正确的概率低于至少一对是正确的),鲍勃一次只能问爱丽丝一个谜题。 TumbleBit 使用 RSA 业务链技术来解决这个问题。 通过使用RSA商链技术,可以保证Bob在得到一个谜题的解后,可以得到所有谜题的解。 .

图 3. Puzzle-promise 协议

图 3. Puzzle-promise 协议

篇幅有限,简单介绍一下cut-and-chosse:

Bob通过对交易的不同填充方式得到一组格式不同但意义相同的交易,然后准备一组假交易,将两组合并打乱后发送给Tumbler,Tumbler对集合中的每一个元素进行比较都是用不同的密钥签名和加密的,所有的拼图承诺对都被发送给鲍勃比特币协议介绍,之后鲍勃将一个假消息集发送给 Tumbler。

比特币发展历程介绍表_比特币转错到比特币现金地址了_比特币协议介绍

Tumbler 验证假消息集的真实性。 如果验证通过,将fake set pair中的对称密钥发送给Bob,Bob使用该密钥解密签名。 签名验证无误后,Tumbler开始准备RSA业务链。 所谓业务链,就是Tumbler将前一个对称密钥除以后一个对称密钥得到一个商(上图中的第9步),然后将这些商发送给Bob。

Bob 使用 RSA 算法的同态性来验证这些商的正确性。 如果验证通过,他就把第一个谜题发给爱丽丝,得到解后,乘以得到。 以此类推,Bob 可以获得所有的对称密钥,用这些密钥解密对应的交易签名。 这些交易虽然不同,只是padding不同,所以Bob只能用一次交易取现。

非关联的

完整的TumbleBit协议介绍完了,我们再来看看TumbleBit的非关联性。 我们先来看下图Tumbler的视角。 Tumbler 看不到交易之间的相关性,但它可以看到付款人何时与自己进行交互。 因此,结合一些附加信息,可以分析交易之间的相关性。 分析。 下面我们介绍一些针对Unlinkable的攻击,这些攻击有的是可以避免的,有的是没有好的办法避免的。

图 4. Tumbler 视角

图 4. 不倒翁透视图

天花板攻击

Alice 和 Tumbler 之间的勾结可以创建天花板攻击,称为天花板攻击。 它假设在某个时刻,例如,Alice 支付给 Bob 一个比特币,但 Bob 已达到接收限额,因此拒绝了 Alice 的支付请求。 Alice 将消息告诉 Tumbler,Tumbler 可以排除时间后的交易发送给 Bob 的可能性。 如果 Alice 不与 Tumbler 串通,Tumbler 将不知道 Bob 何时达到接受上限。

针对这种攻击有几种解决方案,例如: Bob 将他的接收限额设置得比他在托管阶段可以接收到的钱要高很多; 或者他可以错开 TumbleBit epoch 的时间,同时运行几个 TumbleBit epoch,Bob 如果一个 epoch 的配额用完了,就会使用下一个 epoch 的配额。

鲍勃和不倒翁密谋

Bob 和 Tumbler 合谋:Bob 让 Tumbler 给 Alice 发一个盲谜,这样 Tumbler 就可以知道 Alice 的身份(特别是在 Alice 和 Bob 不知道对方身份的场景下,比如使用 tor 协议)。 解决方法很简单。 Alice 将 Bob 发给她的盲谜解盲两次,然后用 Tumbler 运行 RSA-Puzzle-solving 协议,然后将非盲解发送给 Bob。

比特币发展历程介绍表_比特币转错到比特币现金地址了_比特币协议介绍

马铃薯攻击

土豆攻击是指考虑外部信息,假设Bob卖土豆,一个土豆要7个比特币,而Tumbler知道没有其他人卖7个比特币,那么Tumbler可以排除一些交易(比如Calor一共只有6笔交易,那么她被排除在外,Alice 短期内刚好有 7 笔交易,则可以推定 Alice 在买土豆)。 解决方案是添加冗余事务。 爱丽丝创建一个收款地址,在买土豆的同时转一笔钱到她的地址,或者在买土豆的同时买其他东西。

路口攻击

交集攻击:不可链接性只定义在一个循环内,不能排除循环之间的一些关联。 下面介绍的中止攻击就属于这种攻击。

中止攻击

中止攻击:Tumbler 可以通过中止交易来获取一些信息。 例如,Tumbler 注意到在几个周期中:Alice 一直在做单笔交易,Bob 一直在达到限额,然后在下一个周期,Tumbler 暂停了 Alice 的支付,发现 Bob 不再达到限额,那么 Tumbler 可以猜测 Alice 是在与鲍勃的贸易中。

概括

虽然有各种限制,但是如果交易量足够多,还是可以保证交易的不可链接性的。

笔者认为,TumbleBit 主要有两个缺点。 首先是系统中的所有用户都使用相同的“面额”货币,因此很难定义面额。 如果面额定义的很小,一笔大额的支付需要大量的线下交互,但是可以通过在系统中多运行几个Tumbler来解决,每个Tumbler提供不同的面额; 二是不倒翁需要提前抵押钱。 这可以通过收取手续费来解决,接收方根据Tumbler需要抵押的金额支付手续费。

如果不考虑金额的隐私,TumbleBit 是一个非常好的混币解决方案。

注:本文图片均来自TumbleBit原论文: