白话 Mimblewimble:新型的隐私保护协议
wxf2017
发表于 2022-12-13 05:38:31
92
0
0
-《哈利波特》—— 华纳兄弟出品—— 施展 Mimblewimble 咒语片段-( |" H, @( V% V! V' U) G
. b' Y; h& ^. A5 v* d1 |( y
(编者注:我感觉者这口型不像是在使用 Mimblewimble,倒是有可能是守护神咒(Expecto Patronum),你觉得呢?)& Z& S9 f, J4 g+ s6 J
9 b; D( h* [$ T1 A
中本聪的比特币论文中有一个名为“隐私”的章节,其中中本聪非常清楚地阐释了比特币的隐私局限性。随着攻击者能够更好地使用比特币的数据定位或实名化比特币用户,这些不足会不断“恶化”。这使得某些认为比特币不与姓名关联因此能够保护隐私的人非常惊讶。让我们一起来看看比特币能够分析出什么数据,以及为什么 ——0 X( U" X$ Q" E2 L
####比特币通过泄露 3 个秘密来满足货币系统的两种需要
* a7 ]; i7 ^5 F# S
每一笔比特币交易都泄露了 3 个秘密:6 \% V# U7 l: N7 [! M" g
3 I. C! u- s" E& n
发送方地址5 Z0 A0 ^' s% a: z
发送比特币的数量
接收方地址
比特币并不是因为憎恨隐私性才显示这些信息。它显示这些秘密,是因为任何货币系统(黄金、现金、易货贸易)都必须满足两个条件:" f, u6 P; j, U+ x9 R
1 N2 R" w- M9 w8 O
1.它必须能够验证接收的币的数量与发送的数量相等。如果我能够在一笔交易中从一个地址发送 1 个币,却在另一个地址收到 2 个币,那么这个加密货币系统必将崩溃。在正常的系统中,如果我将 5 欧元放到你手里,那么我少了 5 欧元,你多了 5 欧元。在这个交易过程中没有凭空产生的钱,也没有凭空消失的钱。
0 i2 e% \, v. o) Q4 S. L( h3 ~: |
2.我只能从我自己的银行账户中进行电子转账,而不能从你的银行账户中转账。我们必须能够验证交易是从借记卡以及个人密码/网上银行密码、或加密货币中的私钥持有者发出的。5 x7 {, i P" n# S9 F1 i% x! x
比特币通过泄露以上 3 个秘密,从而满足了这两个条件。
比特币交易以明文形式包含转账金额以及接收者地址。从而很容易满足货币系统的第一个条件;我们看到 5 个比特币进入交易,5 个比特币出来。, ~0 n* u& z5 o/ | r& x* K8 _, a
为了验证比特币系统满足第二个条件,比特币使用具有对应私钥的公开地址。公开地址持有比特币。(交易)发送者通过使用对应私钥产生一个签名,给他的交易(即我刚才说明文包含交易金额以及接收者地址的交易)签名。每个人都可以验证这个签名是由持有比特币的地址对应的私钥产生的;这样我们就验证了交易来自有权发起交易的人。
Mimblewimble 可以在不泄露以上 3 个秘密的情况下,满足货币系统的这两个条件。
& @* r3 }+ |& R! _
证明过程需要用到一些简单的数学,只要 10 岁就可以理解。在证明过程中我还会使用一些复杂的数学,大概 12 岁就可以理解。
####乘法很简单,但因式分解很难/ g/ i5 w' b# x* w' N$ P
- P& [: Y& M6 \# s( {
许多人很害怕数学,每当在文章中遇到的时候都会跳过。不过,如果只是下图那么简单,你就不会害怕了吧?
如果我给你纸笔,那么你两分钟内就能解决这些问题,对吧?对于人们来说乘法非常简单。对于计算机来说,即便是一个小袖珍电脑,也能很快计算出两个百万量级的数字相乘的结果。" ^: z$ o0 U3 H- o
但是,让我们做一点改变。让我们把问号移到另一边:: j. m* U( @- d
# o: B+ @' [! x7 k# n" `: t
现在如果我给你纸笔,那么两分钟内你还能解决这些问题么?也许就不能了。我们仅仅只是改变了操作的方向,事情就变得更加困难了。
(插播:在本文中,我将讨论像 83 和 23 这样的数字相乘,因为我喜欢这些数字,很熟悉也非常好理解。但计算机不会使用这些数,它们使用非常大的数。实际上,一台计算机能够求解出我是用了哪两个数字相乘得出 4221,但是,即便一台性能非常高的现代计算机,也很难求解出你使用哪些数字相乘得到一个极大的数字。); i; v4 A2 g8 g: V7 ?: V$ ?. U
3 \8 H7 U f. G4 W% ?% g3 f
为了简单起见,我不想讨论椭圆曲线。在实际中,加密系统不使用任何数字,而是使用一个被称为椭圆曲线点的特殊集合。但简单的数学性质在这两种情况下是一样的:乘法很简单,但乘法的逆操作——因式分解就很困难。) u% y# _% ~2 g) i8 A( @
####利用乘法的属性来隐藏信息,并验证所有权+ R+ X. N9 Z4 s+ W% x
如果我问你以下缺失的数字是什么……
1 J" i, J+ r* L$ F0 J7 X6 }
……你并不能很快地告诉我,因为问号在左边,很难去找出缺失的因子。
" j' F1 N; `, F4 S& }
好吧,我来告诉你。缺失的数字是 23 和 83。现在你想验证我说的是不是真的,即缺失的是否真的是 23 和 83 ,这已经变成了一个简单的乘法问题。/ i9 X H6 Y4 }. w/ Y+ n
1 q$ {8 @0 G) m, W$ Q. x `
你能够很快地求解出答案,23 和 83 确实是能让乘积等于 20,348,031 的因子。4 m. E* X7 N0 n ?- ~/ ^1 N
如果我撒谎了,你也很容易就能发现,因为我给出的因子将不能使乘积等于右边的大数。我不能编造错误的因子,也不能猜出或计算出它们。我必须提前知道这两个因子。0 C2 q( v# L" a
(插播:注意右边的大数可以整除左边的所有用于构造它的数字;它能够被 83 整除、被 11 整除、被左边所有数字整除。我们将在之后利用这一点。)
这仅仅是乘法。大概 10 岁的娃娃都能明白。但是,我们为加密货币完成了两件非常重要的事情——* E0 T8 G/ {% L+ i5 W y, h8 A
& L! j, h! c* C1 H7 o( ?1 c; o
我们想要隐藏信息。现在我们知道该怎么做了:我们能够通过乘以未知数的形式隐藏信息。这就使得破解原始信息变得非常困难。 K1 n/ F4 N, k9 c
. g& K) b9 x% |: }4 p5 E$ p
我们也想证明我们持有私钥。现在我们也知道怎么做了:给出大数的因子即可。2 {) X0 ]: h' q- s* i0 ?
我们只需使用乘法的基本性质就能做到这两点。
###隐藏交易金额2 j. f( L. P9 W# |; n D) G% |/ {, K
让我们使用大且秘密的数字乘以交易金额的方式来隐藏交易金额。比特币泄露的三种信息之一就是发送比特币的数量。当我通过比特币区块链发送 5 个比特币的时候,交易金额是明文显示的(即,数字 “5”)。我们用乘式把它隐藏起来。在下面这个等式中,你就不容易告诉我交易金额是多少了:& v- l$ B h! [$ [ F
上面这个等式有点像交易金额在 Mimblewimble 中的表示形式,但不完全一样。在 Mimblewimble 中,发送方与接收方都给出了这样一个数字:- `# S, ], c: ?5 \0 ^1 Q# h3 q2 l
这个数字叫做 Pedersen 承诺;我也不知道为啥叫这名儿。需要注意的重要一点是,Pedersen 承诺中包含了交易金额的部分(但是通过乘以一个大数隐藏了交易金额)以及私钥的部分。5 i* V- q4 ?* k/ A
请注意,发送方与接收方都参与到了创建交易的过程中。这跟比特币是完全不同的。这种方式避免了泄露接收方地址,但使得发送方必须以某种方式与接收方取得联系。Beam 包含一个安全的 BBS 系统(与 Beam 区块链分开),使得发送方与接收方能够安全地交换他们的 Pedersen 承诺。
(为了简单起见,我省略了交易费。在实际实现中,当我向一个朋友或商贩打钱时,我通常也会给矿工一些交易费。原理是一样的。我还遗漏了一些关于 rangeproofs 的内容,它证明隐藏的交易金额不是一个负数,因为发送 -5,就像把 5 个免费的币塞进我的钱包。也许哈利波特有别的咒语可以实现这个
成为第一个吐槽的人