Blocknet 如何保护支付隐私

· 6 分钟阅读

本文比 Blocknet 是什么?中的隐私概述更深入,逐层介绍 Blocknet 交易中的每一项隐私保护:它隐藏了什么、如何工作,以及下次你发送或接收 BNT 时这意味着什么。

Blocknet 如何保护支付隐私?

简短回答

Blocknet 用覆盖 16 个输出的 CLSAG 环签名隐藏发送方,用一次性隐身地址隐藏接收方,用 Pedersen 承诺和 Bulletproofs 范围证明隐藏金额。Dandelion++ 中继隐藏交易最初进入网络的位置,每个输出都附带 128 字节的加密备注。这一切都是强制的,没有透明模式。

Blocknet 使用与 Monero 同一类久经验证的密码学:环签名、隐身地址和 Bulletproofs 范围证明,构建在 Curve25519 之上的 Ristretto 群上。在此基础上,它还加入了按名称付款和加密备注。每一层保护支付的不同部分,合在一起,让查看区块链的人几乎找不到可用的线索。

环签名隐藏付款人

当你花费币时,你的钱包会为一组 16 个输出签名:其中一个是你拥有的输出,另外 15 个是从链上选取的诱饵。这个签名是 CLSAG 环签名。任何人都可以验证环中有一个成员签了名,但签名不会透露是哪一个。

环大小由共识强制执行。每个输入都必须恰好包含 16 个环成员,且每个成员都必须是链上已有的真实输出,网络会拒绝任何不符合的交易。由于网络上每个输入的环大小都相同,环大小无法用来区分某笔交易或构建它的钱包。守护进程的代码固定环大小,“以防止可变环大小造成的信息泄露”。

为了防止同一笔币被花费两次,每个输入还带有一个密钥镜像。它对应被花费的真实输出且唯一,但不会透露是环中的哪个成员。如果同一个密钥镜像再次出现,网络会把该交易作为双花拒绝。

隐身地址隐藏收款人

一个 Blocknet 地址包含两个公钥:花费密钥和查看密钥。当有人向你付款时,对方的钱包会把你的公钥和一个新的随机数结合,生成一个只用于该输出的一次性地址。你公开的地址从不出现在链上。

你的钱包用你的私有查看密钥扫描新交易,找出属于你的输出,之后再用花费密钥花费它们。付给同一个地址的十笔款项会落到十个互不相关的一次性地址上,因此旁观者既无法统计一个地址收到了多少,也无法判断两笔支付是否付给了同一个人。

Blocknet ID 名称同样如此。像 @name 这样的短名称本来就是公开的,因为付款人要在 blocknet.id 上查询它才能向你付款。付给它的款项仍然会落到全新的一次性地址上,所以这个名称不会透露你收到了什么。

Blocknet 如何隐藏交易金额?

金额以 Pedersen 承诺的形式存储。承诺可以锁定一个数字而不显示它,而且承诺之间可以相加。这样每个节点都能验证一笔交易的输入等于输出加手续费,却不知道其中任何一个金额。

单靠承诺可能隐藏一个负数金额,从而凭空造出币来。因此每个输出都附带一个 Bulletproofs 范围证明,证明其金额位于从零开始的 64 位范围内。这个证明让每个节点确信金额有效,除此之外不透露任何信息。

接收方仍然能看到真实金额。对方的钱包用找到该输出时所用的同一个共享密钥恢复金额,因此金额只有参与这笔支付的两个人能看到。

Dandelion++ 隐藏交易的来源

如果一个节点把自己的交易同时广播给所有对等节点,监视大量节点的人就可能根据谁最先收到来推测交易来自哪里。Blocknet 使用 Dandelion++ 中继交易来防止这一点。

新交易先沿着一条“茎”传播,每次只从一个节点传给下一个节点。每一跳都有 90% 的概率继续沿茎传播;否则它会“扩散”(fluff),从那个节点开始传遍整个网络。等到大多数节点看到这笔交易时,它看起来来自一个可能离你很多跳之外的节点。茎路由每 10 分钟重新调整一次。

谁能读取 Blocknet 备注?

每个输出都带有一条 128 字节的加密备注,最多可写 124 字节文字。它用发送方和接收方为该输出共享的同一个密钥加密,所以只有你们两人能读取。你可以用它写发票号、订单编号,或给收款人的简短留言。加密备注指南介绍了如何添加备注,以及在哪里查看你收到的备注。

无论你写满一条备注还是什么都不写,备注的大小始终相同。备注较短或为空时,钱包会在加密前用随机数据填满剩余部分,因此带备注的输出和不带备注的输出看起来完全一样。备注从不显眼,其他人甚至无法分辨哪些支付带有留言。

Blocknet 的隐私是可选的吗?

简短回答

不是。Blocknet 的隐私是强制的。交易格式没有透明模式,共识要求每个输入都带有恰好 16 个成员的环,因此每一笔支付都会使用环签名、隐身地址、隐藏金额和加密备注。由于没有人能选择退出,私密支付和链上其他每一笔支付看起来都一样。

当隐私只是一个选项时,开启它的人会形成一个更容易被识别出来的小群体。在 Blocknet 上,每笔交易都以同样的方式构建,因此每一笔都混在其他所有交易之中,你也永远不必记得要去保护某一笔支付。

付款时这意味着什么

当你向一个地址或 @name 发送 BNT 时,钱包会替你完成每一步,无需开启任何设置:

  1. 从链上选取 15 个诱饵,用 16 个成员的环为你的输入签名。
  2. 为接收方生成一个全新的一次性地址。
  3. 对金额做出承诺并附上范围证明。
  4. 加密你的备注;如果你不写备注,就加密随机填充数据。
  5. 把交易交给 Dandelion++ 中继。

查看区块链的人看到的是:每个输入都指向 16 个可能的输出,输出发往从未出现过的一次性地址,金额的位置是承诺,备注字段则是看似随机的字节。你付款的对象则会在自己的钱包里看到这笔款项、金额和你的留言。

如果你想赚到第一笔 BNT,可以用自己的电脑挖矿。按照挖矿指南操作,几分钟就能让 seine 在 bntpool.com 上运行起来,并且可以直接挖到你的地址或 @name。

Faraday 升级之后的变化

根据 blocknetcrypto.com,Blocknet 计划进行名为 Faraday 的网络升级,预计在 2027-02-16 前后激活。网站列出了两项将进一步加强隐私的变化:

网站还表示,Faraday 不会带来新币,也不会重新启动,你的历史记录会保留。设计、测试和对抗性审查正在进行中,日期是计划日期而非最终日期,请关注 blocknetcrypto.com 获取最新消息。

常见问题

Blocknet 默认就是私密的吗?

是的。每一笔 Blocknet 交易都使用覆盖 16 个输出的环签名,为每个收款方生成一次性隐身地址,用 Bulletproofs 范围证明隐藏金额,并在每个输出上附带 128 字节的加密备注。交易格式没有透明模式,所以既没有需要打开的设置,也没有任何支付能绕过这些保护。

Blocknet 的环大小是多少?

Blocknet 交易中的每个输入都使用恰好 16 个输出的 CLSAG 环签名:真实输出加上从链上选取的 15 个诱饵。共识会拒绝其他任何大小,而且每个环成员都必须是链上已有的真实输出。由于每个输入的环大小都相同,环大小永远无法用来区分出某个钱包。

谁能读取 Blocknet 备注?

只有发送方和接收方。每条备注都用双方钱包为该输出共享的密钥加密,在链上始终恰好占用 128 字节,最多可写 124 字节文字。较短或空白的备注会用随机数据填充,因此其他人无法分辨哪些支付带有备注。

别人能看到我的 Blocknet 地址收到了多少钱吗?

不能。每一笔付给你地址的款项都会落到一个全新的一次性隐身地址上,因此这些支付无法归到你公开的地址名下。金额以 Pedersen 承诺加范围证明的形式存储,链上从不显示每个输出的金额。只有你的钱包能用你的私有查看密钥找到并汇总你收到的款项。

Blocknet 使用的密码学和 Monero 一样吗?

Blocknet 使用与 Monero 同一类久经验证的密码学:环大小为 16 的 CLSAG 环签名、一次性隐身地址、带 Bulletproofs 范围证明的 Pedersen 承诺,以及 Dandelion++ 交易中继。在此基础上,它还通过 Blocknet ID 短名称支持按名称付款,并在每个输出上附带 128 字节的加密备注。