什么是隐私币?私密加密货币如何运作

· 7 分钟阅读

本指南介绍什么是隐私币、普通区块链会暴露你支付的哪些信息,以及隐私币用来隐藏付款人、收款人和金额的密码学技术。最后以 Blocknet 为实例,并介绍如何通过挖矿获得你的第一批私密币。

什么是隐私币?

简短回答

隐私币是一种加密货币,它的设计让支付不会公开显示付款人、收款人或金额。它使用环签名、一次性隐身地址和隐藏金额等密码学技术,因此每个节点仍能验证每一笔支付,而查看区块链的人几乎得不到任何信息。

每种加密货币都维护一本共享账本,也就是区块链,由许多独立的计算机复制和检查。正是这种公开性,让互不相识的人无需银行居中就能对谁拥有什么达成一致。隐私币要回答的问题是:这本账本需要显示每笔支付的多少内容。

比特币显示了大部分内容。它的白皮书用一句话描述了其隐私模型:“The public can see that someone is sending an amount to someone else, but without information linking the transaction to anyone.”(公众可以看到有人向另一个人发送了一笔金额,但没有信息把这笔交易与任何人联系起来。)名字不在上面,但地址和金额是公开的。隐私币更进一步,把每笔支付的细节留在公开记录之外,同时仍能证明这笔支付遵守规则。

公开的区块链会暴露你的什么?

在比特币这样的透明链上,任何知道你某个地址的人,都可以在区块链浏览器中查找它,并看到:

那里没有写你的名字,但地址很少能长期不被关联。在商店付款、从交易所提币或公布一个用于捐款的地址,都会把它和你联系起来,从那时起,整段历史都可以被读取。这有点像把你的银行流水贴在公告栏上,只是用账号代替了你的名字。你付款的每个人都能看到你持有多少,付款给你的每个人都能看到你怎么花这笔钱。

隐私币的设计目标,是让公告栏上只显示发生了有效的支付。

隐私币如何隐藏付款人、收款人和金额?

简短回答

许多隐私币结合了三种技术。环签名把真实的币和诱饵混在一起来隐藏付款人,一次性隐身地址为每笔支付生成一个新地址来隐藏收款人,承诺加范围证明在证明金额有效的同时隐藏金额。很多隐私币还保护网络层,让交易的来源保持隐藏。

每种技术负责支付的一个部分。下面用通俗的话说明它们如何运作。

环签名隐藏付款人

环签名让你可以代表一个群体签名,而不透露是哪个成员签的。Ron Rivest、Adi Shamir 和 Yael Tauman 在 2001 年提出了这个想法,2013 年的 CryptoNote 设计把它带进了加密货币。花费时,你的钱包会从链上挑选其他输出作为诱饵,并为整个群体签名。任何人都能检查其中有一个被花费了,而签名不会说明是哪一个。

隐私币使用可链接环签名,它增加了一个密钥镜像:这是真实被花费的币独有的标记,但不会透露它是环中的哪个成员。如果同一个密钥镜像出现两次,网络会拒绝第二次花费,所以私密的币依然不能被花费两次。Monero 和 Blocknet 使用一种更紧凑的版本,叫作 CLSAG。

隐身地址隐藏收款人

在隐身地址方案中,你分享的地址从不出现在链上。你的地址包含两个公钥:查看密钥和花费密钥。每次付款时,付款方的钱包会把这两个公钥和一个新的随机值混合,推导出一个只用一次、不再重复的地址。在你这一边,私有查看密钥让你的钱包扫描区块链并找出发给你的输出,私有花费密钥让你花费它们。

如果十个人向你网站上的地址付款,链上显示的是十个彼此独立的一次性地址,看不出它们之间有任何联系,所以没有人能算出你一共收到了多少。

承诺和范围证明隐藏金额

金额以 Pedersen 承诺的形式存储,它锁定一个数字却不显示它。承诺可以相加,所以每个节点都能确认进入交易的金额与流出的金额(含手续费)相符,而看不到其中任何一个数字。范围证明再表明没有任何隐藏金额是负数,因此没有人能凭空造出币来。Bünz 等人在 2018 年发表的 Bulletproofs 让这类证明小了很多。

网络隐私隐藏支付的起点

即使是完全私密的交易,也可能通过观察哪个节点最先广播它,被追查到发出它的那台计算机。2018 年发表的 Dandelion++ 应对这个问题的方法是:先把新交易沿着一条“茎”从一个节点悄悄传给下一个节点,再从更远处的一个随机点向全网扩散。

有些隐私币走的是另一条路。2016 年上线的 Zcash 使用名为 zk-SNARKs 的零知识证明:它的屏蔽地址隐藏付款人、收款人和金额,证明本身则表明交易有效,而不透露其中任何一项。

为什么默认隐私很重要?

如果隐私是一项需要打开的功能,使用它的交易就会形成一个较小的群体,而较小的群体更容易被研究。如果每笔交易都以同样的方式构建,私密支付看起来就和链上其他所有支付一样,也没有人需要记得去保护它。

默认隐私还能让每一枚币都可以互换,这种特性叫作可替代性。在透明链上,一枚币带着它的全部历史,两枚面值相同的币可能因为来历不同而被区别对待。当没有任何币带有可见的过去时,一枚币就和其他任何一枚一样好,这正是人们对货币的期望。

日常的理由很简单。企业不希望竞争对手看到它向供应商的付款。员工不希望自己的工资被每个卖咖啡给他的人看到。向某项事业捐款的人可能更愿意不公开。现金和普通银行账户已经给了人们这种隐私,隐私币则把它带到数字支付中。

以 Blocknet 为例看隐私币

Blocknet 是一种隐私币,它对每一笔支付都应用环签名、隐身地址、隐藏金额和网络隐私。它的交易格式没有透明模式:

Blocknet 还支持按名称付款。像 @alice 这样的 Blocknet ID 短名称可以代替 90 多个字符的地址,而付给这个名称的款项仍然落到全新的隐身地址上,所以公开的名称不会透露其主人的收入。想深入了解每一层,请阅读 Blocknet 如何保护支付隐私;想了解全貌,请阅读 Blocknet 是什么?

Blocknet 计划中的 Faraday 升级将扩大每次花费所隐藏其中的群体。用 blocknetcrypto.com 的话说:“Today a spend hides among 16 outputs. After Faraday, it hides among every output on the chain.”(如今一次花费隐藏在 16 个输出之中。Faraday 之后,它将隐藏在链上的每一个输出之中。)

如何获得隐私币?

你可以通过挖矿获得。Blocknet 的工作量证明 Argon2id 每次哈希大约需要 2 GB 内存,因此由台式机、笔记本和服务器中普通的 CPU 和内存来挖矿。矿池付款会像其他任何 Blocknet 支付一样到达你手中,落在一次性隐身地址上,金额也是隐藏的。

  1. 获取钱包。 挖矿用 Blocknet 钱包指南介绍了如何创建钱包、备份助记词并复制你的地址。
  2. 下载 seine。 它是免费、开源的 Blocknet 矿工软件,支持 Windows、macOS 和 Linux,可在下载区获取。它用你的 CPU 挖矿,在 Windows 和 Linux 上还会同时使用任何 NVIDIA 显卡,并在运行时自动调优。
  3. 在 bntpool.com 开始挖矿。 粘贴你的地址或 @name,接受默认矿池,付款就会私密地到达你的钱包。如何挖 Blocknet 会逐步带你完成。

常见问题

隐私币和比特币有什么区别?

比特币以明文记录每个地址和金额,所以任何人都能追随币从一个地址流向下一个地址,并查看每个地址的余额。隐私币使用环签名、一次性地址和隐藏金额等密码学技术,区块链仍能证明每笔支付有效,但外人几乎看不出谁付给了谁、付了多少。

所有隐私币都强制隐私吗?

不是,各种设计不同。有些币,例如 Monero 和 Blocknet,对每一笔交易都应用隐私保护,根本没有公开模式。Zcash 同时提供屏蔽地址和透明地址:屏蔽地址用零知识证明隐藏付款人、收款人和金额,透明地址的用法与比特币地址很相似。用户可以在两者之间转移资金。

网络如何检查它看不到的支付?

密码学让节点无需读取支付细节就能验证它。环签名证明几个输出中有一个被花费,密钥镜像阻止同一笔币被再次花费,金额承诺可以相加,因此节点能确认输入等于输出加手续费。范围证明则表明没有任何隐藏金额是负数。

可以用普通电脑挖隐私币吗?

可以,只要这种币使用内存密集型工作量证明。Blocknet 使用 Argon2id,每次哈希大约需要 2 GB 内存,因此由普通台式机、笔记本和服务器来挖矿。下载 seine,填入你的 Blocknet 地址或 @name,它就会用你的 CPU 和任何 NVIDIA 显卡在 bntpool.com 矿池挖矿。