10.BTC-匿名性

不牢固的匿名性

比特币的隐私模型更应该被准确地描述为 “假名性”(Pseudonymity),而非“匿名性”(Anonymity)。因为比特币交易是公开的,但你的真实身份是默认隐藏的。在比特币中,比特币地址就是“假名”。它是一串由字母和数字组成的字符串(例如 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa),用来接收和发送比特币。这个地址本身不包含姓名、身份证号或任何个人信息。

但是,比特币的所有交易都记录在一个公开、永久、不可篡改的公共账本上,这个账本就是区块链。

任何人都可以通过“区块浏览器”(Blockchain Explorer)这样的工具,查看任何一个比特币地址的所有历史交易记录——包括它接收过多少比特币、发送给了哪些地址、以及当前的余额。既然所有交易都公开可查,那么打破“假名”的关键就在于将一个比特币地址与一个现实世界的真实身份关联起来。一旦这个关联被建立,追踪者就可以“顺藤摸瓜”,通过分析交易记录,揭示出所有的金融活动。

实际上,BTC的匿名性被破坏有几个关键的时刻:

1. 与现实世界交互的时刻

这是最常见、最直接的隐私破坏点。当你把数字世界的比特币和现实世界的身份信息连接起来时,匿名性就消失了。

  • 在你注册并使用交易所的那一刻: 这是最重要的一点。当你首次在任何一个需要身份验证(KYC)的平台购买比特币,或者将比特币存入平台准备卖出时,你的姓名、身份证、手机号、银行账户就与你提币或充币的那个比特币地址牢牢绑定了。这个记录会被交易所永久保存。并且,当你在任何一个合规的加密货币交易所(如Coinbase, Binance等)购买或出售比特币时,你必须完成“了解你的客户”(KYC)和“反洗钱”(AML)认证,这需要你提供姓名、身份证、照片等真实信息。当你从交易所提现比特币到你的个人钱包地址时,交易所就明确地知道了“这个地址属于你这个人”。
  • 在你用BTC购买实物商品的那一刻: 假设你在网上用比特币买了一件T恤。为了收货,你必须提供你的姓名、家庭住址和联系电话。商家服务器的订单记录就会将你的个人信息和你支付所用的比特币地址关联起来。
  • 在你公开展示地址的那一刻: 如果你在社交媒体(如微博、Twitter)、论坛或自己的网站上公布一个比特币地址来接受捐赠或付款,你就等于向全世界宣告了你的地址。
  • 在你和朋友进行交易的那一刻: 当你把比特币直接转给你的朋友,或者从他那里接收比特币时,你的朋友就知道了你的某个地址属于你。

2. 链上交易行为暴露的时刻

即使你从未与现实世界交互,你在区块链上的行为模式也可能暴露你自己。

  • 在你合并零钱(UTXO)的那一刻: 假设你有三个地址,分别是接受工资的地址A,接受朋友还款的地址B,以及一个匿名的私房钱地址C。有一天,你想买一辆车,需要动用这三个地址里所有的钱。当你创建一笔交易,同时将地址A、B、C作为输入时,链上分析工具会立即根据“共同输入所有权”原则,高度确信这三个地址都属于同一个人——你。你的私房钱地址C就因此暴露了。
  • 在你重复使用地址的那一刻: 如果你一直使用同一个地址来接收所有款项——工资、朋友转账、匿名收入等。那么任何一个知道这个地址与你有关的人(比如你的老板),就能看到你所有的收入来源和支出去向,你的财务隐私荡然无存。
  • 在你广播交易的那一刻: 当你的比特币钱包向全网广播一笔交易时,网络中的其他节点可以看到这条广播请求来自哪个IP地址。虽然IP地址不直接等同于你的姓名,但它可以被追踪到你的地理位置和你使用的网络服务商,这是执法部门进行调查的重要线索。

3. 第三方信息泄露或被调查的时刻

有时候,即使你自己非常小心,你的隐私也可能因为与你交易的对手方而被破坏。

  • 与你交易的对手方被调查的那一刻: 假设你曾匿名地向某个服务商支付了比特币。如果未来该服务商因违法活动被执法部门调查,他们服务器上的所有交易记录(包括你的支付地址和当时你使用的IP地址)都可能被调取。
  • 你使用的服务被黑客攻击的那一刻: 你使用的交易所、在线商家、或者任何记录了你个人信息和比特币地址的平台,如果其数据库被黑客窃取并泄露到网上,你的隐私也会随之暴露。

向谁隐藏身份(Hide your identity from whom?)

比特币的匿名性不是一个单一的开关(“开”或“关”),而是一个浮动的、相对的光谱。它的效果完全取决于你的对手是谁,针对不同级别的对手,比特币的匿名性可以从非常有效的隐私工具,瞬间变为漏洞百出的透明账本。

情景一:向家人、朋友、普通同事隐藏身份 (Hiding from Casual Observers)

  • 对手的能力:非常有限。他们几乎没有技术能力,只能通过社交途径(例如,看到你电脑上的钱包、你亲口告诉他们)来了解你的财务状况。
  • BTC的匿名性效果非常有效
  • 为什么:只要你不主动泄露你的比特币地址,他们就如同大海捞针,完全无法将你和区块链上任何一串地址关联起来。对于他们来说,区块链就像一本看不懂的天书。在这种场景下,比特币的假名性提供了近乎完美的隐私保护。

情景二:向商业对手、私家侦探、充满好奇心的网友隐藏身份 (Hiding from Determined Individuals)

  • 对手的能力:中等。他们可能会使用公开信息搜索引擎(OSINT),在社交媒体、论坛上搜索你可能泄露的地址,或者对你的公开行为进行分析。他们可能会使用一些基础的区块浏览器来追踪一笔已知的交易。
  • BTC的匿名性效果相对有效,但需要用户保持警惕
  • 为什么:如果你遵循良好的隐私习惯,例如“为每笔交易使用新地址”,不重复使用地址,不在公开场合泄露地址,那么对手就很难将你的不同活动拼凑在一起。但只要你犯了一个错误,比如用接受过公司付款的地址去支付一笔私人款项,就可能被对手抓住线索。

情景三:向大型科技公司、数据分析公司、广告商隐藏身份 (Hiding from Corporate Surveillance)

  • 对手的能力:强大。他们拥有海量数据(你的IP地址、浏览习惯、社交图谱),并使用复杂的算法进行“链上分析”。他们是地址聚类(clustering)和行为模式识别的专家。
  • BTC的匿名性效果效果有限,默认状态下很脆弱
  • 为什么:这些公司能够系统性地分析整个区块链。当你合并资金(UTXO)时,他们会立刻知道这些地址属于同一个人。当你与任何一个和他们合作的中心化服务(如交易所、商家)互动时,你的身份信息和地址就会被记录和分析。在不使用高级隐私技术(如混币器CoinJoin)的情况下,你的财务轮廓对他们来说是基本透明的。

情景四:向国家机器、顶级执法机构(如FBI、IRS)隐藏身份 (Hiding from Nation-State Actors)

  • 对手的能力极其强大,近乎全能
  • BTC的匿名性效果非常差,几乎无效
  • 为什么:这类对手拥有上述所有能力,并且还拥有国家强制力:
    1. 法律强制力:他们可以通过传票(subpoena)和搜查令(warrant),强制命令交易所、银行、互联网服务提供商(ISP)、商家等交出你的所有数据(KYC信息、IP地址、交易记录)。
    2. 全球协作:通过国际刑警组织或双边协议,他们可以进行跨国数据调取。
    3. 顶级分析资源:他们是区块链分析公司的最大客户,并拥有自己的尖端分析工具和人才。
    4. 卧底和蜜罐:他们有能力运营虚假的混币服务或暗网市场来“钓鱼执法”。

因此,将比特币视为适合违法犯罪的、完全匿名的工具,是一个在今天看来已经非常过时且极其危险的误解。对于专业的犯罪分子和执法机构来说,比特币的特性反而使其成为一个拙劣的犯罪工具

保护匿名性

核心理念:信任最小化,并分割身份。

网络层 (Network Layer)

在这一层,核心目标是切断真实身份(特别是IP地址)与在比特币网络上活动(广播交易、查询余额)之间的任何联系。让网络观察者(无论是政府、网络服务商ISP,还是区块链分析公司)无法知道“是谁”发起了这个操作,也无法知道操作发起的“地理位置”。

  • 全面强制使用Tor网络
    • 具体作用:当广播一笔交易时,这个请求会经过Tor网络的多个中继节点层层加密和跳转,最终从一个随机的出口节点进入比特币网络。对于比特币网络中的其他节点而言,这笔交易看起来像是来自那个随机的出口节点,真实IP地址被完美隐藏。
  • 运行并只信任我自己的全节点
    • 解决的问题:如果使用轻钱包(不运行全节点),我的钱包需要向某个第三方服务器(例如某个公司运营的公共节点)查询我地址的余额和交易历史。这意味着,这个第三方服务器不仅知道IP地址,还知道你关心哪些比特币地址。这是极其严重的信息泄露。
    • 做法:在一台独立的、永远在线的设备上(如树莓派)运行自己的比特币全节点(Bitcoin Core)。所有钱包设备(电脑、手机)都连接到自己的这个节点来同步数据和广播交易。这样,就将信任从“全世界的陌生人”收缩到了“我自己”。

网络层的匿名,学术界已经有了比较好的解决方案,通过 Tor + 自建全节点 的组合,能确保自己的物理位置和网络身份与链上活动完全隔离。

应用层 (Application Layer)

在这一层,默认所有交易数据都将永远公开在区块链上。核心目标是破坏这些公开数据的可分析性。让链上分析工具无法通过交易图谱,将不同地址和交易关联起来,从而无法构建出财务画像。

  1. 严格的UTXO管理和“币种控制”(Coin Control)
  • 绝不重复使用地址:这是应用层隐私的绝对基础。(许多钱包已经可以实现这一点)
  • 精细化UTXO标签:给每一笔未花费的交易输出(UTXO)打上来源标签(例如:KYC-Coinbase, Gift-from-Bob, Mixed-Coin-A)。
  • 手动控制输入:使用支持“Coin Control”功能的钱包。在创建每一笔交易时,手动选择使用哪些UTXO作为输入。这可以避免钱包为了凑整,自动地将一笔来自KYC交易所的UTXO和一笔匿名的UTXO合并在一起,从而污染匿名资金。
  1. 主动使用CoinJoin(混币)
  • 具体作用:定期将需要匿名的资金,通过CoinJoin服务进行处理。这是一个协作式的交易,将UTXO和其他几十个用户的UTXO“熔于一炉”,然后重新分配给新的地址。交易完成后,输入和输出之间的确定性联系被打破,就像一团打乱的毛线。
  • 选择:使用信誉良好、非托管的CoinJoin实现,例如通过Sparrow Wallet使用Whirlpool,或者使用Wasabi Wallet。
  1. 利用先进的交易结构
  • PayJoin (P2EP):在可能的情况下(例如商家支持),使用PayJoin。这是一种和收款方共同构建交易的技术,它能有效地打破“共同输入所有权”这一最基础的链上分析假设。对于外界观察者来说,一笔PayJoin交易看起来就像一笔普通的、有多人参与的资金合并交易,从而增加了分析的迷惑性。
  • Taproot的应用:优先使用支持Taproot升级的钱包。Taproot可以让复杂的、多签名的交易(例如一些CoinJoin交易或闪电网络通道的开启/关闭)在链上看起来与最简单的单签名交易一模一样,极大地提升了“人群匿名性”。所有人的交易看起来都差不多,你就更难被单独识别出来。

零知识证明(Zero-Knowledge Proof, ZKP)

零知识证明允许一方(证明者)向另一方(验证者)证明自己知道某个秘密,但在这个过程中,除了“我知道这个秘密”这个事实之外,不透露关于秘密本身的任何一点额外信息。

为了直观地理解它,让我们来看一个最著名的比喻——“阿里巴巴的洞穴”。

想象有一个环形的洞穴,它有一个入口,但在深处被一扇需要密码才能打开的魔法门隔断了。

现在,你想向我证明你知道打开这扇门的密码,但你又不想把密码直接告诉我。我们该怎么做呢?

我们可以进行以下游戏:

  1. 你(证明者)独自进入洞穴,随机从A或B两条路中的一条走到魔法门前。我在洞穴外等待,我看不到你选了哪条路。
  2. 过了一会儿,我(验证者)走到洞口,然后随机大喊一声,让你从某条路出来(比如“从B号路出来!”)。
  3. 开始验证
    • 如果你当初恰好走的就是B号路,那你直接走出来就行。
    • 如果你当初走的是A号路,你就必须使用密码打开魔法门,穿过去,然后从B号路走出来。
  4. 结果:无论我喊A还是B,只要你知道密码,你总能从我指定的路出来。

这个过程说明了什么?

  • 如果只进行一次,你可能有50%的几率蒙对(你恰好选了我想让你出来的那条路)。
  • 但如果我们把这个游戏重复进行20次,你每次都能从我随机指定的路出来,那么你碰巧蒙对所有次的概率将变得微乎其微(0.520,大约是百万分之一)。
  • 此时,我就可以高度确信你的确知道密码

最关键的是,在整个过程中,我从未亲眼看到你使用密码开门,也完全没有学到关于密码本身的任何信息。你成功地向我证明了你知道秘密,而秘密本身“零泄露”。这就是零知识证明的核心思想。

任何一个有效的零知识证明协议都必须满足以下三个特性:

  1. 完整性 (Completeness):如果证明者的论断是真实的(他真的知道秘密),那么他总能成功地通过验证,让诚实的验证者相信他。 (在洞穴游戏中,只要你知道密码,你就总能完成挑战。)
  2. 可靠性 (Soundness):如果证明者的论断是虚假的(他不知道秘密),那么他几乎不可能欺骗诚实的验证者。他或许能蒙对一次,但无法通过反复的验证。 (在洞穴游戏中,如果你不知道密码,你总有50%的概率会“穿帮”。)
  3. 零知识性 (Zero-Knowledge):如果证明者的论断是真实的,验证者在整个证明过程中,除了“这个论断是真的”这一事实外,学不到任何关于秘密本身的额外信息。这是最核心的特性。 (在洞穴游戏中,我除了相信你知道密码外,对密码具体是什么一无所知。)

同态隐藏(Homomorphic Hiding)

单来说,同态隐藏是一种特殊的数学函数,它能同时做到两件事:

  1. 隐藏 (Hiding):当你把一个数字(比如 x)放进这个函数,它会输出一个“隐藏后”的值。从这个隐藏后的值,你几乎不可能反推出原始的数字 x
  2. 同态 (Homomorphic):这个函数具有“同态”特性,意味着你可以直接对这些“隐藏后”的值进行数学运算(如加法或乘法),其结果等同于先对原始数字进行运算,再把结果隐藏起来。

一个函数 H(x) 如果是同态隐藏的,必须具备:

  1. 隐藏性 (Hiding Property)
    • 难以反转:给定 H(x),极难计算出 x
    • 唯一性:如果 x 不等于 y,那么 H(x) 也一定不等于 H(y)。不同的输入会产生不同的输出。
  2. 同态性 (Homomorphic Property)
    • 你可以在不知道 xy 的情况下,仅通过 H(x)H(y) 计算出 H(x+y)
    • (或者,根据不同的方案,计算出 H(x*y) 等)。

同态隐藏是构建zk-SNARKs等零知识证明系统的基石。它的作用在于,允许验证者在不知道具体数值的情况下,去检查一个等式是否成立。

举个例子:

假设Alice想向Bob证明,她知道两个数字 xy,它们的和是10 (x + y = 10),但她不想告诉Bob xy 分别是什么。

使用同态隐藏函数 H,他们可以这样做:

  1. Alice 计算 H(x)H(y),然后把这两个“隐藏后”的值发送给Bob。Bob无法从这两个值反推出 xy
  2. Bob 因为知道 H 具有同态性,所以他可以自己利用 H(x)H(y) 计算出 H(x+y)
  3. 同时,Bob 也可以自己计算 H(10)
  4. 最后,Bob 只需要比较他自己计算出的 H(x+y) 是否等于他计算出的 H(10)

如果两者相等,Bob就可以确信 x + y 的确等于 10。在整个过程中,Bob对 xy 的具体数值一无所知,Alice成功地完成了零知识证明。

盲签名(Blind Signature)

盲签名是一种特殊的数字签名方案,它允许签名者在一个他完全看不到内容的消息上进行有效签名。稍后,持有这个已签名消息的人可以向任何人证明,这个消息确实是那位签名者签署的,但签名者本人却无法将这个签名与当初他“盲签”时的那次行为关联起来。

这个过程有两个关键特性:

  1. 盲性 (Blindness):签名者对所签名的消息内容一无所知。
  2. 不可追踪性 (Untraceability):当已签名的消息被公开时,签名者无法追溯到是哪一次签名操作对应着这个消息。

为了直观地理解盲签名,最经典的例子就是“匿名投票”。

想象一下,你想参与一次选举投票,并且希望投票过程满足两个条件:

  • 有效性:投票站必须确认你是一个合法的选民,并且你的选票是经过他们认证的有效票。
  • 匿名性:投票站不能知道你具体投给了谁。

使用盲签名方法,可以这样设计流程:

  1. 准备与盲化
    • 你(投票人)在一张选票上写下你支持的候选人。
    • 你将这张选票放进一个内部带有复写纸的特殊信封里,然后封好。
    • 你将自己的身份证明(比如一张小纸条)贴在这个特殊信封的外面。
  2. 签名
    • 你将这个准备好的信封交给投票站官员(签名者)。
    • 官员检查信封外的身份证明,确认你是合法选民。
    • 确认无误后,官员直接在信封的外部签名。由于复写纸的存在,他的签名透过信封,复印到了里面你那张真正的选票上。
    • 官员将这个签过名的特殊信封还给你。自始至终,官员都没有打开信封,完全不知道你投给了谁
  3. 去盲与验证
    • 你拿回信封,撕掉外层,取出里面那张已经被签名、但内容对他方仍然保密的选票。
    • 你将这张已签名的选票,匿名地投入一个公共的投票箱里。

最终,计票时,所有人都可以公开验证每一张选票上都有官员的有效签名,因此选票是合法的。但由于你在投入票箱前去掉了带有身份信息的外层信封,所以官员和任何人都无法知道哪张选票是当初你让他签名的那一张,从而保护了你的投票隐私。

盲签名的技术流程

在数字世界里,“信封和复写纸”由数学算法来代替。一个典型的基于RSA算法的盲签名流程如下:

  1. 盲化 (Blinding)
    • 你(消息持有者)有一条原始消息 m
    • 你生成一个随机的“致盲因子” r
    • 你使用签名者的公钥对 r 进行加密,然后将 m 和加密后的r 通过数学运算“混合”,得到一个“盲化后的消息” m'
    • 你将 m' 发送给签名者。
  2. 签名 (Signing)
    • 签名者收到了 m',他无法从中反推出原始消息 m
    • 他使用自己的私钥m' 进行标准的数字签名,得到一个“盲签名” s'
    • 他将 s' 发回给你。
  3. 去盲 (Unblinding)
    • 你收到了 s'
    • 你使用自己之前生成的那个“致盲因子” r,通过数学运算从 s' 中“去除”r 的影响,从而得到原始消息 m 的有效数字签名 s

结果:现在,你拥有了原始消息 m 和其对应的有效签名 s。任何人都可以使用签名者的公钥来验证 (m, s) 的有效性。但签名者本人只见过 m's',他无法将 (m, s) 这对组合与他当初的签名行为联系起来。

eCash

盲签名技术是为了构建一种保有现金匿名性的中心化数字货币(eCash)。这个技术力图解决的问题是:既需要一个中心化机构(如银行)来发行货币并维护总账以防止伪造和双重支付,又希望这个机构无法追踪每一笔钱的流通,从而保护用户的隐私。

系统的设定

  • 角色:
    1. 你 (用户):希望取款和消费,并保护自己的隐私。
    2. 中心银行:负责发行和回收数字货币,维护总账,防止欺诈。
    3. 商家:接收你的付款。
  • 银行的工具: 银行拥有一对密钥:一个私钥(用来签名)和一个公钥(向所有人公开,用来验证签名)。

工作流程:一笔“盲签数字钞票”的生命周期

这个流程可以分为三个主要阶段:取款(盲化与签名)消费(验证)存款(结算与防伪)

阶段一:取款 (The Withdrawal)

  1. 创建“数字钞票”:
    • 在你的电脑或手机上,你生成一个独一无二的、非常大的随机数。这个随机数就相当于这张数字钞票的**“序列号” (Serial Number)**。比如,设定这张钞票的面额是100元。
  2. “盲化”这张钞票:
    • 你不会直接把这个序列号发给银行,否则银行就知道这个序列号属于你了。
    • 生成另一个随机数,称为“致盲因子” (Blinding Factor)。
    • 使用一个数学函数,将“序列号”和“致盲因子”混合在一起,得到一个“盲化后的序列号”。
  3. 向银行请求签名:
    • 你向银行发起一个请求:“我想从我的账户里取100元。” 同时,你把这个盲化后的序列号发送给银行。
    • 银行收到请求后,从你的账户余额中扣除100元。
    • 银行使用它的私钥,对这个它看不懂内容的“盲化后的序列号”进行数字签名。银行完全不知道原始序列号是什么。
    • 银行将这个“已签名的、盲化的序列号”返回给你。
  4. 你“去盲”得到有效钞票:
    • 你收到银行返回的结果后,使用你之前保存的那个“致盲因子”,通过一个逆向的数学运算,将致盲因子的影响从签名中“剥离”出去。
    • 最终,你得到的是:原始序列号 + 银行对这个原始序列号的有效签名

此时,你拥有了一张有效的数字钞票,而银行只知道它为你的某次取款签了名,但它无法将这张最终的钞票(及其序列号)与你这个人关联起来。

阶段二:消费 (The Spending)

  1. 支付给商家: 你去商家那里消费100元,并将你的这张数字钞票(原始序列号 + 银行签名)发送给商家。
  2. 商家验证: 商家收到后,使用银行公开的公钥,可以立刻验证这个签名对于这个序列号是有效的。商家确认这是银行发行的真钱,于是给你提供了商品或服务。

阶段三:存款 (The Deposit)

  1. 商家存入银行: 商家将收到的这张数字钞票(原始序列号 + 银行签名)发送给中心银行,请求存入自己的账户。
  2. 银行验证与防止双重支付 (Double-Spending):
    • 银行收到后,也用自己的公钥验证签名的有效性。
    • 最关键的一步来了:银行现在看到了这张钞票未被盲化的原始序列号。银行会查询一个“已花费序列号”的数据库。
      • 如果这个序列号从未出现过,说明是合法的支付。银行接受这张钞票,为商家的账户增加100元,并将这个序列号登记到“已花费”列表中。
      • 如果这个序列号已经存在于列表中,说明你试图将同一张钞票花两次(双重支付)。银行会拒绝这笔存款,并可能触发欺诈警报。

零币和零钞(Zerocoin & Zerocash)

“零币”(Zerocoin)和“零钞”(Zerocash)是两个在加密货币隐私技术发展史上具有里程碑意义的、一脉相承的协议。它们都不是指某种实体货币,而是旨在提供强大匿名性的技术方案。简单来说,零钞(Zerocash)是零币(Zerocoin)的进化版和改良版,它解决了零币协议中存在的诸多问题,并提供了更强大、更全面的隐私保护。

1. 零币协议 (Zerocoin Protocol)

  • 提出时间:2013年
  • 核心思想:作为比特币等现有加密货币的一个扩展协议,旨在切断交易之间的可追溯链接,实现匿名性。
  • 工作机制(铸币-销毁模型)
    1. 铸币 (Mint):用户可以将自己持有的标准币(比如比特币)“销毁”,同时生成一个具有相同面值的、全新的“零币”。这个过程就像把一张有序列号的旧钞票扔进熔炉,换取了一张没有任何历史记录的新钞票。这个行为会被记录在区块链上。
    2. 花费 (Spend):在未来的任何时候,用户可以使用一个零知识证明来证明自己拥有一个之前被“铸造”的有效零币,从而“赎回”一个全新的、没有任何交易历史的标准币到新的地址。
  • 隐私保护:通过“铸币”和“花费”这两个步骤,原始资金地址和新资金地址之间的直接联系被切断,从而实现了匿名。
  • 技术与局限
    • 固定面额:为了混淆视听,零币协议要求铸造的币必须是标准化的固定面额(例如1、10、100),这在实际使用中非常不灵活。
    • 交易大小与速度:其使用的零知识证明技术(基于RSA累加器)效率较低,导致交易数据体积庞大,验证速度慢。
    • 隐私不完全:它只隐藏了交易的来源,但交易的金额(由于是固定面额)和时间等元数据仍然是部分可见的。
  • 主要实现:最著名的实现是 Zcoin(为了与Zcash区分,后更名为 Firo)。
  • 重大缺陷:2019年,研究人员在零币协议的密码学设计中发现了一个严重漏洞,允许攻击者在不销毁任何币的情况下凭空创造新的零币,导致了恶性通货膨胀。这个缺陷最终使得所有采用该协议的项目都放弃了它。

2. 零钞协议 (Zerocash Protocol)

  • 提出时间:2014年(由部分零币协议的原作者改进提出)
  • 核心思想:对零币协议的彻底革新,旨在构建一个完全匿名的、独立的加密货币,而不仅仅是一个扩展。
  • 工作机制(直接匿名支付):零钞协议不再使用笨拙的“铸币-销毁”模型。它通过一种更先进的零知识证明技术——zk-SNARKs——来构建一个完全加密的交易系统。
    • 在一个完全“受保护的”交易中,发送方地址、接收方地址和交易金额全部被加密隐藏在区块链上。
    • 交易附带一个zk-SNARK证明,这个证明可以向全网证实:
      1. 发送方确实拥有他声称要花费的资金。
      • 总输入金额等于总输出金额(没有凭空造钱)。
  • 隐私保护:零钞提供了全面的隐私。外界观察者只能看到“有一笔交易发生了”,但关于这笔交易的所有细节(谁发给谁,发了多少)都是完全保密的
  • 技术优势
    • 任意金额:用户可以发送任意金额的交易,无需像零币那样凑固定面额。
    • 高效验证:zk-SNARKs证明的尺寸非常小,验证速度极快,这使得它在性能上远超零币协议。
    • 更强隐私:隐藏了交易的所有关键元数据,提供了比零币更强大的匿名保证。
  • 主要实现:最著名的实现就是 Zcash (ZEC)