主页 > imtoken安卓怎么下载 > MIMBLEWIMBLE:一种提高比特币交易隐私性的方法

MIMBLEWIMBLE:一种提高比特币交易隐私性的方法

imtoken安卓怎么下载 2023-06-16 06:40:07

(译者注:这个名字也是哈利波特中伏地魔的法文名字,所以假定为化名)

2016 年 7 月 19 日

译者:黄世良

2016 年 8 月 19 日

20150605111442842

简介

比特币是第一个广泛使用的金融系统,任何人都可以获取和验证有关系统状态的所有必要数据。它通过将所有交易数据保存在称为“区块链”的公共数据库中来实现这一壮举,但真正想要检查系统状态的人必须下载所有数据并跟踪每笔交易。同时,这些交易中的大部分不会影响其最终的实际状态(每次创建输出时,它们都会破坏之前的交易)。

在撰写本文时,区块链中有近 1.5 亿笔交易,其中仅 400 万笔未使用的输出被重复记录。

如果审核员只需要检查输出数据本身会更好,但这是不可能的,因为当且仅当输出是一系列“先前输出”中的最后一个时,输出才有效,每个输出都是在前一个输出之后连接。也就是说,整个区块链必须经过一次全遍历才能确认最终状态。

808比特币创始人颜万卫 炮制比特币风险大_比特币销毁留多少_比特币价值比特币最新

此外,这些交易是“加密原子的”,每个交易的输出是什么以及正在发生什么将一目了然。 “交易图”泄露了很多信息,专门分析交易的公司很多。这些公司的商业模式是监督和控制市场的交易层。这使得交易变得非常客观,甚至对用户来说很危险。

现在已经提出了一些解决方案。 Greg Maxwell 发现加密交易金额可以匿名交易,但仍然允许其他人确认金额正确 [1]。 Maxwell 博士还创建了 CoinJoin,这是一个比特币用户可以混合多个交易、混淆交易关系的系统。 Nicolas van Saberhagen 开发了一个系统,可以屏蔽交易输入,进一步混淆交易关系(无需混合硬币)[3]。之后,Noether 将这两种方法结合起来,得到了“Maxwell 的‘机密交易’和 van Saberhagen 的黑匣子操作”[4]。

这些解决方案很棒,它们使比特币的使用非常安全。但问题是大量数据因此变得更糟。机密交易的每个输出都需要多字节证明,而 van Saberhagen 签名需要保存每个输出,因此无法确定交易何时完成。

博士。 Maxwell 的 CoinJoin 存在需要交互的问题。 Yuan Horas Mouton 博士通过制作可自由合并的交易 [5] 解决了这个问题,但他需要使用基于配对的密码,这可能会延迟交易,这更令人难以置信。他称之为“单向聚合签名”(OWAS)。

单向聚合签名是在区块中混合交易的好方法。想象一下,我们可以跨区块混合交易(可能还有粘合数据),所以当一个输出被生成和销毁时,它就像它从未出现一样。然后,为了验证整条链,用户只需要知道资金何时进入系统(每个区块的区块奖励产生的新币,或门罗币,或侧链楔形钉的比特币[6])以及何时进入系统。最终成为未使用的输出,剩余的可能会被转移和遗忘。然后我们可以通过机密交易隐藏金额和单向聚合签名来混淆交易图,并允许用户使用更少的空间来完全验证区块链(与今天的比特币区块链相比)。再想象一下,我们不需要基于配对密码或新猜想进行签名,只需使用比特币等普通哈希数即可。这是我的建议。

我将我的发明称为 Mimblewimble[7],因为它用于防止区块链泄露所有用户信息。

机密交易和单向聚合签名 (OWAS)

我们要做的第一件事是删除比特币脚本。这听起来很可悲,但它是如此强大,以至于使用通用脚本混合事务是不可能的。我们将证明 Maxwell 博士的机密交易(经过一些小的修改)足以构建成本,甚至可以在没有交互的情况下混合交易。单向聚合签名 (OWAS) 也是如此,它允许中继节点收取一些交易费用或让接收者更改交易费用。我们可以免费实现比特币无法实现的这些额外功能。

比特币价值比特币最新_比特币销毁留多少_808比特币创始人颜万卫 炮制比特币风险大

我们首先向读者解释机密交易的工作原理。首先,通过以下等式对金额进行编码:

C = r*G + v*H

其中C是Pedersen承诺C是ECDSA算法加密的交易金额),G和H是与椭圆曲线加密函数(ECDSA)无关的固定值,v是金额,r是秘密随机致盲密钥(随机致盲密钥)。 (译者注:这个公式是对交易金额进行加密,比如真实交易金额为1BTC,则v=1BTC。C为ECDSA算法加密后隐藏真实金额后得到的金额。G和H是两个参数它们也是ECDSA算法生成的两个值,r类似于密码,只有当G、H和r聚集在一起时才有可能从C推导出v。)

与输出相关的是一个rangeproof(译者注:我暂时不知道如何翻译这个词。非翻译不建议使用“范围值”),v的取值范围为[0, 2^64],因此用户无法使用暴力计算破解。

为了验证交易,验证器将添加所有输出,加上 f*H(f 是明确给出的交易费用),减去所有输入费用。结果必须为 0,表示未创建或销毁整个事务。

我们注意到,要创建此交易,用户必须知道所有“承诺条目”。始终保持原始。) r 值的总和。因此,r 值(及其总和)可以用作键。如果我们可以让 r 输出值只有收款人知道,我们就有了一个认证系统!不幸的是,如果我们遵循规则,不可能所有“提交”加起来为 0,因为付款人知道其 r 值的总和,因此也知道收据付款人的 r 值加起来为负数。因此,我们允许交易总和为一个非零值K * G,并要求一个空字符串签名,即key,证明金额部分为零。

我们让交易有任意多的K*G值,每个都有一个签名,在验证过程中加起来。

在创建交易时,交易的发送方和收款方应遵循以下规则: 发送方和收款方就交易金额达成一致。这称为 b。付款人创建一个包含所有输入的交易,并更改输出,并将“总致盲因子”(r 值的变化减去 r 的输入值)与一起发送给接收者的交易相加。所以,“承诺”的总值是 r*G - b*H。收款人随机选择 r 的值作为其输出,所有这些加起来 b 减去交易费用,然后将其全部添加到交易中(包括取值范围)。现在输入的总和是 k*G - fee*H,只有收款人知道 k。收款人将与 k 签署交易,并给出明确的费用。这样就完成了整个交易。现在,以这种方式创建的交易已经支持单向聚合签名(OWAS)。为了演示,假设我们有两个交易,k1*G 和 k2*G,这些都是签名的。然后,可以混合两个交易的输入和输出,将 k1*G 和 k2*G 相互混合,再次成为有效交易。这个混合交易中的输入输出值是不可能在原始交易中找到对应的输入输出的

比特币销毁留多少_比特币价值比特币最新_808比特币创始人颜万卫 炮制比特币风险大

因此,我们将比特币区块格式更改为以下信息:数量明确的新货币(区块奖励或侧链挂钩的比特币)和其他所需数据。如果是侧链挂钩,是否涉及提交特定 k*G 值的交易? (译者注:原文确实是疑问句,作者可能对此也有疑问。) 所有交易的输入。所有交易的输出。所有交易中的 k*G 值。因为不管它原来的事务边界是什么,这些都是混在一起的。另外,清单2、3、4中的值应该按字母顺序排列,这样可以快速检查并防止块的创建者泄露任何原始交易信息。

请注意,我们可以通过它们的哈希值来识别输出值,而不是它们在交易中的位置,所以这很容易改变。因此,为避免混淆,应禁止相同的两个未使用的输出同时发生。

跨区块的混合交易

现在我们使用 Dr. Maxwell 的机密交易创建了一个非交互式版本。理解应该参考 Dr. Maxwell 的 CoinJoin 不需要多人合作混币),但我们还没有看到最后的奇迹。他说比特币销毁留多少,我们需要其他想法,即交易直通[8]。同样,我们创建了一个非交互式版本并展示了它如何与多个块一起工作。

我们现在可以将每个区块视为一个大交易。为了验证这一点,我们将所有输出承诺视为一个整体,然后减去所有输入承诺、K*G 值和所有显式输入数量乘以 H。我们发现可以将两个块混合成一个新交易,并且当我们在一个区块中混合交易,结果又是一个有效的交易。除此之外,当将第一个块的输出放入第二个块时,一些输出承诺完全等于它们的输入承诺。当我们删除这两个承诺时,我们仍然得到一个有效的交易。其实删除输出的rangeproof是没有必要检查的。

将这个想法扩展到从创世块扩展到最新块,我们可以看到每个非主导输入连同其相关输出一起被删除。剩下的将只有未使用的输出、明确的输入总计和每个 K*G 值。将所有这些数据视为单个交易:取所有未使用的输出承诺,减去 K*G 值,验证显式输入总金额(如果这里有什么要验证的话),然后减去它们的时间 H。如果sum为0,则可以判断整个区块链是正确的。

这是什么意思?当用户启动并下载整个区块链时,每个区块需要依赖以下数据:明确数量的新币(区块奖励或侧链锚币)和其他所需数据。所有交易的未使用输出,以及每个输出的默克尔证明,都将出现在原始区块中。所有交易的 k*G 值。比特币现在大约有 423,000 个区块,占用 80GB 的硬盘空间,这些数据可以用来验证所有的交易。这些数字是 1.5 亿笔交易和 500 万笔未使用的未分类输出。如果 Mimblewinmble 链上的交易量相同,估计它会占用多少空间。每个未使用的输出需要 3Kb 的空间来存储 rangeproof 和 Merkle proof,每个交易也需要 100 个字节来存储:一个 K*G 值和一个签名。块头和显式性的总量可以忽略不计。所有这些加起来高达 30GB - 包括所有机密交易和桂花蛋糕的交易图!

问题和直觉

比特币价值比特币最新_808比特币创始人颜万卫 炮制比特币风险大_比特币销毁留多少

在过去的几周里,我一直在做梦,一身冷汗醒来。

其实挺好的

问题:如果删除交易的输出,用户无法验证范围证明,可能会产生负数。

回答:没有问题。验证所有交易后,可以确认所有负金额都将被抵消。正是因为过去没有非法通胀,用户才可以放心使用SPV,知道现在也不会出现通胀。

问题:如果删除输入,就会发生双花。

Answer:实际上,这意味着:可能有些人声称之前已经为未使用的输出支付过报酬。但这是不可能的,否则混合交易的总金额不可能为零。

有一个例外比特币销毁留多少,当总输出量为零时,有可能两个输出正好相反,这对数据可以再次使用。因此,为了防止一致性问题,应该禁止总输出为 0 的事务。只需将 H 添加到每个输出,以便所有数量至少为 1。

未来研究

比特币销毁留多少_比特币价值比特币最新_808比特币创始人颜万卫 炮制比特币风险大

以下是我在撰写本文时无法回答的一些问题。哪个脚本支持这个应用程序?我们需要将脚本操作转换为某种形式的离散值信息。我们需要用户检查所有的 k*G 值,实际上他们需要的所有数据都来自 k*G。在不使用签名的情况下,是否还有其他可以混合的离散价值证明?当用户下载区块链时,有一个拒绝服务选项,攻击者将提供数据字节并提供错误的未使用输出。用户会看到最后相加的结果不等于0,但是找不到问题。现在用户可以只从种子或其他用户共享的数据中下载区块链,在这种情况下,正确的数据应该是可用的。

(译者注:docx和pdf的翻译版本可以从百度网盘下载:密码:7jes)

1.~greg/confidential_values.txt

2.

3.

4.

5.

6.

7.ège_de_Langue_de_Plomb

8.