CoinJoin混合真的需要平等的交易量才能获得隐私吗?第二部分:背包

尽管中本聪(中本聪)的白皮书表明,隐私是比特币协议的设计目标,但区块链分析通常会破坏用户的隐私。这是个问题。举例来说,比特币用户可能不一定希望世界知道他们的钱花在哪里,他们的收入或拥有的数量,而企业可能不想将交易详细信息泄露给竞争对手。

但是有一些恢复隐私的解决方案,例如CoinJoin。当今可用的一些最受欢迎的混合解决方案都使用此技巧,包括Wasabi钱包(利用ZeroLink)和Samourai钱包(利用Whirlpool)。在这两种情况下,用户都将其硬币切成相等的数量以相互混合。使用相等的量被认为是有效混合的关键步骤。

这个迷你系列的第一部分介绍了比特币现金正在开发的一种名为CashFusion的新混合协议,该协议挑战了成功混合必须等量交易的假设。

但是即使在2017年,在深入分析非等额CoinJoins的隐私的论文中,亚琛工业大学和卡尔斯鲁厄理工学院的研究人员提出了一种解决方案,可通过CoinJoin获得隐私,而无需使用等量的东西:背包混合。

作者的注释:如果您不知道什么是CoinJoin交易,或者为什么要假设需要混合相等的金额,则应首先阅读本微型丛书的第1部分-或至少阅读该文章的前两部分。

混合付款

如本微型系列文章的第一部分所述,等量比特币混合可能在当今的比特币区块链上提供最佳可实现的隐私。但这确实使用户拥有不平等变化的输出。它们提供的隐私级别不同,甚至可能会带来隐私风险。 CashFusion可以帮助处理这些不平等的产出。

但是还有另一个问题。使用相等金额的要求会阻止用户通过CoinJoin交易进行实际付款:商家不太可能会在CoinJoin中收取所需的确切金额。因此,等额的CoinJoins实际上仅用于混合:参与者投入资金并获得等额的资金。不幸的是,这意味着混合需要额外的区块链交易,这会花费交易费和时间。

亚琛工业大学的研究员Felix Konstantin Maurer,Till Neudecker和Martin Florian(卡尔斯鲁厄理工学院)都在2017年题为“具有任意值的匿名CoinJoin交易”的论文中着手解决这一问题。他们提出了一种CoinJoin解决方案可能对实际付款有用-也就是说,它使用不平等的金额-同时仍提供隐私权。

以背包问题命名,他们的解决方案称为背包混合。

背包混合

像CashFusion一样,背包混合背后的核心思想是生成一个CoinJoin交易,该交易可以被拼凑成潜在的原始交易的几种不同配置。不同的配置会将不同的输入链接到不同的输出,从而打破了区块链上硬币的踪迹。

背包混合通过将原始交易的原始输出切成CoinJoin交易的较小输出来实现此目的。此外,它使用相对简单的技巧来确保较小的输出导致几种可能的配置成为可能。

Maurer,Neudecker和Florian的论文包括背包混合的三种变体。第一个变体是白皮书本身中最充实的变体。第二个和第三个版本非常相似,其中第三个版本实际上是第二个版本的高级版本。 (该论文的作者只是在撰写本文的后期才提出了第三版;否则,它在研究中可能会占据更重要的位置。)

让我们看一下不同的变体。

变体一

为了解释背包混合的第一个变种,让我们以这个迷你系列的第一篇文章中的CoinJoin为例。爱丽丝想向卡罗尔支付3.2个硬币,并有两个输入,分别价值2.3和1.4个硬币。同时,鲍勃想要支付戴夫4个硬币,并有两个输入,分别价值3和2个硬币。

简化后,这些事务如下所示:

2.3 + 1.4 = 3.2 + 0.5

3 + 2 = 4 +1

(0.5 BTC和1 BTC输出已更改。)

合并在一起后,CoinJoin交易将如下所示:

3 + 2.3 + 2 + 1.4 = 4 + 3.2 + 1 + 0.5

如前一篇文章所指出,交易已合并,但是假设您知道有两个付款人,则只能在一种配置中将金额混淆在一起:原始交易。因此,重新发现哪些输入支付了哪些输出是微不足道的,这使得创建CoinJoin的意义大打折扣。

背包混合改变了这一点。简而言之,它使用两个原始交易之间的价值差将原始输出从最大交易中拆分为较小的部分。这至少确保了两种配置,其中大多数输出​​可以链接到任何输入。

让我们逐步看一下。首先,将每笔交易的产出总额相加。对于Alice和Carol的交易,这是2.3 + 1.4 = 3.7。对于Bob和Dave的交易,这是3 + 2 =5。Bob和Dave的交易是最大的交易。

接下来,计算两者之差:5-3.7 = 1.3。然后,从最大交易中减去此差额。 Bob和Dave的交易是最大的交易,我们将4个输出进行拆分,因此:4-1.3 = 2.7。

因此,最大交易的四个输出在CoinJoin中分为1.3和2.7。

这次,CoinJoin看起来像这样:

3 + 2.3 + 2 + 1.4 = 3.2 + 2.7 + 1.3 +1 + 0.5

现在我们回到令人费解的……

当然,原始配置仍然可行。只是Dave现在收到两个输出而不是一个。

看起来像这样:

2.3 + 1.4 = 3.2 + 0.5

3 + 2 = 2.7 + 1.3 +1

但最重要的是,现在可以进行全新配置:

2.3 + 1.4 = 2.7 + 1

3 + 2 = 3.2 + 1.3 + 0.5

结果,区块链分析师无法再确定地将输出3.2、2.7、1或0.5链接到任何输入即使CoinJoin交易未使用相等的金额,也可以保护隐私。

为了将新交易添加到组合中,所有先前交易(换句话说:现有CoinJoin)的值将被累加起来,就好像它是一笔交易一样。然后,就像第一次一样,这些先前交易和新交易之间的价值差将用于拆分输出。对于下一个事务以及此后的其他任何事务,依此类推。

变体2和3

尽管背包混合的变体之一可以很好地使大多数输出​​与任何输入断开链接,但是输入本身仍可以链接到其他输入。这些设置对于两种配置都是相同的。这对于隐私也不是理想的。

背包混合版本2和3是专门设计用于取消输入链接的。但是,第二种方式确实要求CoinJoin中的所有参与者都学习彼此的输入和输出,这意味着它实际上并没有提供太多的隐私:第三种方式可以解决此问题。然而,出于本文的目的(专注于区块链隐私),差异很小,足以一次覆盖两个变体。

我们采用与上述相同的示例。爱丽丝想付卡罗尔3.2硬币,鲍勃想付戴夫4硬币。

所以:

2.3 + 1.4 = 3.2 + 0.5

3 + 2 = 4 +1

对于变体2和3,将生成“虚拟交易”。这种虚拟交易原本就不存在,但区块链分析师将被欺骗以为可能。

为了创建该虚拟交易,从每个原始交易中获取一个输入。然后,将这些输入的值相加。

例如,如下所示:

1.4 + 2 = 3.4

我们选择的输入的值为3.4。因此,虚拟交易的输出值也必须为3.4。

这很容易实现。我们再次从最大的原始交易中获得一个输出,在我们的示例中,该交易再次为4。我们还查看了该原始交易中最初与之匹配的输出:1.然后我们拆分了大的输出(4),因此可以将两半之一与其原始匹配项(1)组合以生成虚拟值(3.4)。在这种情况下,这意味着将4分为2.4和1.6。 (毕竟2.4 + 1 = 3.4。)

现在,CoinJoin看起来像这样:

3 + 2.3 + 2 + 1.4 = 3.2 + 2.4 + 1.6 +1 + 0.5

同样,基于此CoinJoin,当然仍然可以进行原始配置。只是Dave再次收到两个输出,而不是一个。

看起来像这样:

2.3 + 1.4 = 3.2 + 0.5

3 + 2 = 2.4 + 1.6 + 1

但除此之外,还可以使用新的“虚拟配置”:

3 + 2.3 = 3.2 + 1.6 + 0.5

2 + 1.4 = 2.4 + 1

不同的配置不仅将不同的输入匹配到不同的输出,而且不同的配置还将匹配不同的输入

背包缺陷

基于一个简单的技巧,背包混合可以显着改善隐私,特别是与进行常规交易相比。

尽管如此,背包混音并不像等量混音那样私密。等量混合实质上允许最大数量的配置。甚至比最好的背包组合还要多。也许更值得注意的是,背包混合仍然允许某些输入和输出之间的某种联系,或者至少是更可能的联系。

实际上,在以上示例中,某些输入和输出在两种可能的配置中均匹配。在变体一中,将1.3输出与3和2输入进行匹配。因此,尽管区块链分析无法显示原始交易是什么,但仍可以显示3和2输入与1.3输出之间的联系。变体2和3在彼此断开输入的同时,允许输入和输出之间的更多匹配。

还需要指出的是,用于背包的CoinJoin付款需要额外的输出,因此,与常规交易甚至常规CoinJoin交易相比,其费用仍然更高。它还可能要求商家在付款时提供两个地址,而不仅仅是一个。

换句话说,虽然在区块空间效率和费用方面等量混合方面有所改进,并且与常规交易乃至常规CoinJoin交易相比在隐私方面有了很大的改进,但背包混合仍然会带来一些额外的麻烦和成本。

作者注意:背包混合提案还有更多内容,例如CoinJoin交易的构造方式。当涉及到隐私时,还有其他一些微妙的风险和折衷办法,例如用户在混合前后如何处理自己的硬币。为了简单和易读,本文仅关注背包混合背后的核心且可能是最有趣的想法:不等量混合。

资讯来源:由0x资讯编译自BITCOINMAGAZINE。版权归作者所有,未经许可,不得转载
提示:投资有风险,入市需谨慎,本资讯不作为投资理财建议。请理性投资,切实提高风险防范意识;如有发现的违法犯罪线索,可积极向有关部门举报反映。
你可能还喜欢