你的地址泄露了什么:在一本永久公开的账本上谈隐私

·阅读 6 分钟·作者:SSP Editorial Team
SSP Academy 封面:链上隐私与一个加密地址所泄露的东西

你的地址泄露了什么:在一本永久公开的账本上谈隐私

大多数人学加密世界的隐私规则时,顺序是反的。他们默认那个化名——一串字母数字,而不是「张三」——就意味着匿名,直到某个东西把这串字符和本人连上,才发现并非如此。

准确的心智模型正好相反。区块链是一份关于「有史以来每一笔付款」的永久、公开、在全球被复制的记录。 化名只是覆在它上面的一层薄膜,而且是单向的:难以建立,轻易失去,无法恢复。

化名不等于匿名

地址上没有你的名字。但其余的一切都在上面:你收到的每一笔金额、你发出的每一笔金额、精确的时间戳,以及每笔交易另一端的地址。世界上任何人都能读到它,永远都能,而且不必征得许可。

这个地址只需要和你关联上一次。此后,附着在它身上的全部历史——过去的和将来的——也就和你关联上了。追溯性地。没有办法解除关联,因为账本无法编辑。

正是这种「单点故障」的性质,让链上隐私显得与众不同。在大多数系统里,一次泄露暴露的是泄露出去的那部分。而在这里,一次泄露暴露的是这个地址曾经做过的一切,以及它之后将要做的一切。

地址是怎么和人对上的

你自己告诉了别人。 交易所会收集身份证件,并且清楚地知道它们把你的提现打到了哪些地址。你付过款的任何商家、你注册过的任何服务、你转过账的任何朋友,同样知道。

你把它公开了。 论坛签名里的捐赠地址、个人资料上的打赏罐、粘贴进工单里的一个地址。一旦被索引,就是永久的。

共同输入启发式。 这是 UTXO 链上最大的那一条,而且完全不需要你配合。当一笔交易一次性花费了多个输入,几乎可以确定的推论就是:这些输入全都由同一个钱包掌控——因为把它们全部签名,需要它们全部的密钥。链上分析公司正是基于这一点来给地址聚簇,而且效果很好。一笔把一个已知地址和三个未知地址混在一起的交易,刚刚把那三个也加进了你的簇。

找零地址推断。 从一个 1 BTC 的输入中发出 0.3 BTC,就会有 0.7 作为找零回到你手上。有一些启发式方法可以猜测哪个输出是找零——整数金额、地址类型是否匹配、输出的排列顺序——虽然没有一条是确定的,但它们猜对的频率足以把一个簇沿着许多跳延展下去。

地址复用。 反复用同一个地址收款,会把你的整部财务史汇集到一个易于监视的地方。这是清单里最常见、也最容易避免的错误。

时间与金额。 一笔在特定时刻、金额不寻常的付款,完全不需要任何密码学,就能和链下信息对上号。

这在实践中意味着什么

现实的威胁并不是国家级对手。它很平常,而且离你近得多:

  • 任何你付款给他的人都能看到你的余额,因而知道你负担得起什么。
  • 任何给你付款的人,都能看着你之后拿这笔钱做了什么。
  • 一个在链上发薪水的雇主,会看到收款人的整个财务生活。
  • 一个公开的捐赠地址,会把你的金库变成一份公共记录。
  • 当一个可见的余额与真实身份绑定时,人身风险就变得真切了——这正是操作安全比人们预期的更重要的原因。

这一切都不需要传票。只需要一个区块浏览器。

什么才真正管用

为不同用途使用不同的地址。 这是价值最高的一个习惯。你给交易所的地址、你用于公开捐赠链接的地址、以及存放长期储蓄的地址,不应该是同一个;理想情况下,它们永远不该被一笔同时花费两者的交易联结起来。

把它想成几个分开的盒子,而不是一个钱包。 在公开账本上,隐私来自把互不相干的活动放在互不相干的地方。一旦两个地址作为同一笔交易的输入出现,它们就被永久关联了,此后再谨慎也无法撤销。

归集时要刻意为之。 把许多小额输入扫进一笔交易,对手续费有好处,对隐私有坏处——它公开了「这些输入全都属于同一个钱包」这个事实。两方面的顾虑都成立;关键在于知情地做选择,而不是让钱包替你决定。

永远不要花掉你没预期到的粉尘。 一笔不请自来的微小付款可能是一个刻意的标记,而花掉它,就会把发送方的地址并进你的簇。这是地址投毒的隐私那一半——同一批用来铺设「相似地址」骗局的粉尘,也在给你的币打标签。

假设每一笔交易所提现都被打了标签。 事实就是如此。请按照「你提现到的那个地址将永久与你的实名身份关联」来做规划,并想清楚你希望什么东西与它相连。

SSP 是怎么处理的

SSP 沿着一条 BIP-48 路径,从你的两个扩展公钥派生出地址,路径的最后两级分别是类型索引和地址索引。每一个不同的索引都会产出一个完全不同的地址:同样的密钥、不同的派生,彼此之间在链上看不出任何关系。

实际效果是,你可以在同一条链上创建多个命名钱包,每个位于自己的派生索引,各有各的地址、余额和交易历史。它们从同一个种子派生而来,所以从一份备份中会一起恢复;但只要没有一笔交易同时从其中一个以上花费,链上就没有任何东西把它们连起来。

作为一种分隔关注点的原语,这确实很有用:一个用来对接交易所的钱包、一个储蓄钱包、一个用于公开地址的钱包,全都在同一个应用里,彼此之间看不出关联。

现在说诚实的局限。SSP 不会为每一笔付款自动给你一个新的收款地址。 每个钱包展示一个地址,你要获得新的地址,就在切换器里创建新的钱包。许多单签名钱包会自动轮换收款地址;SSP 目前把这件事做成了一个刻意的动作,而不是默认行为。这种分隔是可用的,但它不是自动的;如果你想做到「一笔付款一个地址」的卫生习惯,就得有意去做。

还有一个结构性的点值得挑明,因为它是双刃的。SSP 是一个二取二多签钱包,所以它的比特币地址是 P2WSH 脚本,而不是单密钥地址。这对安全性极好,在链上则略微显眼:脚本地址在整体使用中所占的比例小于单密钥地址,这就使匿名集变小了。这是任何多签方案都要面对的标准取舍,值得点明,而不是一笔带过。

诚实的总结

靠普通的钱包卫生习惯,达不到完美的链上隐私;谁若声称能,那是在夸大其词。但好习惯为你换来的东西是实在的:它把关联你活动的成本,从「打开一个区块浏览器」抬高到「进行持续的分析」,并且让你在意的那些隔间真正保持分离。

最重要的两条规则很简单。不要在互不相干的用途之间复用地址。不要在同一笔交易里把互不相干的地址合并到一起。

其余的一切都是精修。而这两条,就是「一本读起来像日记的账本」和「一本读起来像一堆互不相干碎片的账本」之间的分别。

分享本文

相关文章