12.BTC-匿名性-北大肖臻老师客堂笔记

北京大学肖臻老师《区块链技术与应用》公开课第 12 讲的主题是**"比特币的匿名性" (Anonymity)**。

这节课不仅澄清了大众对"比特币完全匿名"的误解,还详细介绍了如何通过技术手段"破坏"这种匿名性(去匿名化),以及反过来如何"保护"隐私(混币等技术)。

以下是本课内容的结构化详细总结

一、 核心观点:比特币不是真名,但也不是真的匿名

肖老师开篇强调:比特币的匿名性实际上是化名 (Pseudonymity)

  • 化名性:比特币地址是公钥哈希,确实没有写着你的真实姓名(User Real Name)。
  • 公开性:所有交易记录、转账金额、资金流向在区块链上完全公开,任何人可查。
  • 关联性:一旦某个地址与你的真实身份挂钩(例如你在交易所实名认证后提币),通过区块链上的交易图谱分析,你所有的资金流向可能都会被曝光。

二、 破坏匿名性:如何进行"去匿名化"分析?

如果不使用特殊手段,比特币的隐私保护其实非常脆弱。分析者通常利用以下两种启发式规则 (Heuristics) 来聚类(Clustering)属于同一个人的地址:

1. 多输入合并规则 (Multi-Input Heuristic)
  • 现象:如果你发起一笔交易,使用了多个输入(Input 1, Input 2...)来凑够金额。
  • 推论 :这些输入地址(Address A, Address B)大概率属于同一个人
  • 后果:分析者可以将这些离散的地址关联起来,归为一个实体。
2. 找零地址规则 (Change Address Heuristic)
  • 现象:A 转账给 B。交易输出通常有两个:一个是给 B 的 5 BTC,另一个是找零给自己的 2 BTC。
  • 推论:如果是简单的钱包软件,通常会生成一个新的找零地址。但通过分析金额特征(比如 5 BTC 是整数,2.134 BTC 是找零),可以判断出哪个是找零地址。
  • 后果:分析者可以知道找零地址和发送方属于同一个人,从而追踪后续资金。
3. 实体关联 (Real World Linkage)
  • 交易所/钱包 KYC:这是最直接的去匿名化入口。你在交易所实名注册,交易所知道该地址属于你。
  • OTC 交易:线下买卖币也容易暴露身份。

三、 保护匿名性:如何提高隐私?

针对上述漏洞,课程介绍了几种提高匿名性的手段,从简单到复杂。

1. 应用层:最基本的保护
  • 生成新地址:每次收款都使用一个新的地址(现代钱包自动完成)。这能一定程度上防止别人通过一个地址查遍你所有家底,但无法防住多输入合并分析。
2. 网络层:隐藏 IP
  • 洋葱路由 (Tor):比特币节点在转发消息时并不加密,容易被监听 IP。使用 Tor 可以切断 IP 地址与比特币地址的关联。
3. 核心技术:混币 (Coin Mixing)

这是本节课的重头戏,目的是打断"输入"与"输出"之间的连线。

  • 中心化混币 (Centralized Mixing)

  • 原理:大家把币都转给第三方(Mixer),Mixer 把钱打乱后,再分别转给每个人指定的新地址。

  • 缺点:你需要信任 Mixer。Mixer 可能会卷款跑路(Rogue),或者泄露你的隐私记录。

  • 去中心化混币 (CoinJoin)

  • 原理 :多个用户联合起来发起一笔多输入、多输出的巨大交易。

  • 特点

  • 交易结构上,输入有 A, B, C,输出有 A', B', C'。

  • 从外界看,不知道 A 的钱去了 A' 还是 B'。

  • 关键点:不需要把钱交给第三方托管,只要大家对这笔交易进行签名即可(Signed independently)。

四、 进阶概念:零知识证明与 ZCash

课程最后简要提及了比 Bitcoin 匿名性更强的方案。

  • 零知识证明 (Zero-Knowledge Proof):一方(证明者)向另一方(验证者)证明一个陈述是真实的,而不需要透露除了"该陈述是真实的"之外的任何信息。
  • ZCash (大零币):真正实现了加密货币的匿名性,连转账金额和交易双方都可以隐藏。它利用零知识证明来验证交易合法性,而无需公开交易细节。

💡 逻辑流程总结 (Flowchart)

为了让你理清"去匿名化"与"保护隐私"的对抗逻辑,我为你整理了如下流程图:
隐私保护手段
隐私泄露风险
多输入交易
找零机制
交易所提币
应用层
网络层
协议层
需信任第三方
无需信任
比特币用户
日常操作
地址关联: 输入属于同一人
地址关联: 找零属于发送者
实名关联: 绑定真实身份
需求: 提高匿名性
每次用新地址
使用 Tor 隐藏 IP
混币 Coin Mixing
中心化 Mixer
去中心化 CoinJoin
打断资金追踪链路

🧠 核心名词解释

  • Pseudonymity:化名。就像作家的笔名,虽然不是身份证名字,但笔名下的所有作品都能关联到一起。
  • Unlinkability:不可关联性。这是隐私保护追求的目标,即无法证明两个交易或两个地址属于同一个人。
  • CoinJoin:一种具体的混币协议,允许多个用户合并输入和输出,使得外界无法区分资金的具体流向。

这节课的核心启示是:在区块链这个公开账本上,隐私不是天赋的,而是需要主动通过技术手段(如混币)去争取的。

关于加密货币匿名性技术演进零币 (ZeroCoin)零钞 (ZeroCash)。这部分是肖臻老师讲解"如何通过数学手段彻底解决隐私问题"的精华。

以下是针对这两个知识点的详细补全总结:


一、 背景:从"混币"到"零知识证明"

前面的 CoinJoin(混币)虽然能切断关联,但它有局限性:你需要找到其他人跟你一起混币,而且还得在线配合。

为了实现无需他人配合、随时随地 的匿名,学术界提出了基于零知识证明 (Zero-Knowledge Proof) 的方案。

  • 零知识证明核心:证明者(Prover)能够在不向验证者(Verifier)透露具体数据(如私钥、具体是哪一枚币)的情况下,证明自己拥有该数据或操作是合法的。

二、 零币协议 (ZeroCoin)

ZeroCoin 是早期的一个协议提案(后来也有独立币种),它的核心思想是:通过密码学手段,把"铸币"和"花币"的过程彻底切断关联。

1. 运作机制:基础币与零币的转换

ZeroCoin 系统中存在两种币:基础币 (Base Coin,如 BTC)零币 (ZeroCoin)

  • 铸币 (Mint)

  • 操作:用户销毁(支付)一个单位的基础币,换取一张"零币"的凭证。

  • 数学过程:用户生成一个随机数 (序列号)和 (随机秘密),计算承诺 ,并将 发布到区块链上。

  • 本质 :这就像你往一个巨大的"混币池"里扔了一枚硬币,换回一张匿名兑换券

  • 花币 (Spend)

  • 操作:用户使用那张凭证,兑换回一个新的基础币(通常是转给别人)。

  • 关键点:用户不需要告诉矿工"我兑换的是刚才哪一次 Mint 的币"(否则就暴露了)。

  • 零知识证明的应用:用户只需提交一个数学证明,证明"我知道某个 ,它对应链上已经存在的某个承诺 ,但我不会告诉你是哪一个"。同时公布序列号 防止双重支付。

  • 结果:旧的 Base Coin ZeroCoin 新的 Base Coin。输入和输出的链路在数学上被切断了。

2. ZeroCoin 的缺点
  • 效率低:生成的证明(Proof)非常大,验证速度慢,导致区块膨胀严重,交易处理很慢。
  • 功能受限 :只能隐藏"发送方"和"接收方"的关联,但转账金额是固定的(通常由不同面额的零币组成),无法隐藏金额。

三、 零钞协议 (ZeroCash)

ZeroCash 是 ZeroCoin 的改良版,也就是后来著名的加密货币 Zcash (大零币) 的底层协议。

1. 核心改进:zk-SNARKs

ZeroCash 使用了一种更高级的零知识证明技术,称为 zk-SNARKs (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,零知识简洁非交互式知识论证)。

  • Succinct (简洁):这是最大的突破。生成的证明非常小(只有几百字节),验证速度极快(毫秒级)。
  • 彻底的匿名 :不仅隐藏了发送方和接收方,还隐藏了转账金额
2. 运作机制

在 ZeroCash 中,交易不再像比特币那样明文显示"A 转给 B 多少钱",而是全都加密了。

  • 矿工验证时,不需要解密交易内容,而是验证 zk-SNARKs 证明。
  • 证明内容大致为:"我消耗了某些旧的币(不透露是哪些),生成了新的币(不透露金额),且输入金额等于输出金额。"
3. 争议点:可信设置 (Trusted Setup)

ZeroCash 有一个著名的安全隐患。

  • 初始化问题:zk-SNARKs 需要一个初始的公共参数(Public Parameters)。这个参数生成时会产生一些"有毒废料"(Toxic Waste,即私密的随机数)。
  • 风险 :如果生成参数的人没有销毁这些"有毒废料",拥有这些数据的人就可以凭空伪造 Zcash(无限印钞),而且没人能发现(因为金额是隐藏的)。
  • 对策:Zcash 在启动时举行了极其复杂的"多方计算仪式",确保只要有一个参与者销毁了私钥,系统就是安全的。

四、 总结对比表:比特币 vs 零币 vs 零钞

为了让你一目了然,我整理了这个对比表:

特性 Bitcoin (比特币) ZeroCoin (零币) ZeroCash (零钞/Zcash)
匿名性级别 伪匿名 (Pseudonymity) 强匿名 (链路切断) 完全匿名 (链路+金额隐藏)
核心技术 无 (公开账本) 基础零知识证明 zk-SNARKs
证明大小 N/A 大 (效率低) 极小 (效率高)
金额是否可见 可见 可见 (固定面额) 隐藏
交易验证速度
初始化风险 有 (Trusted Setup)

🧠 逻辑流程图:零币的洗白过程

为了直观理解 ZeroCoin 如何通过"铸币"和"花币"来切断追踪,请看下图:
阶段二: 沉淀
阶段一: 铸币 Mint

  1. 支付 1 BTC 2. 提交承诺 Comm(S, r) 阶段三: 花币 Spend
  2. 提交序列号 S (防双花) 4. 提交零知识证明 Proof 证明通过: 不知道是谁存的, 但确实有人存过
    发放新 BTC
    用户 A (换了新身份)
    验证节点
    接收者 D
    用户 A
    混币池/累加器
    区块链记录承诺
    用户 B
    用户 C
    混币池中混合了成千上万个承诺

核心逻辑:当你把水(1 BTC)倒入大海(混币池),再从大海里舀出一杯水(1 BTC),没人知道这杯水是不是你当初倒进去的那杯,物理联系被数学概率切断了。

相关推荐
voidmort2 小时前
web3中的共识:以太坊共识
web3·区块链
傻小胖2 小时前
16.ETH-状态树-北大肖臻老师客堂笔记
笔记·算法·区块链·哈希算法
傻小胖2 小时前
14.ETH-以太坊概述-北大肖臻老师客堂笔记
笔记·区块链
henujolly13 小时前
Why do multiple blockchains exist?
区块链
voidmort20 小时前
Web3 中的 DEX 流程详解:从原理到实现
web3·区块链
lsrsyx21 小时前
SUNX交易所好用吗?第一视角清晰完整版介绍
区块链
devmoon21 小时前
如何使用 Web3.py 与 Polkadot Hub 进行交互
web3·区块链·智能合约·交互·web3.py·solidity·polkadot
傻小胖21 小时前
10.BTC-分叉-北大肖臻老师客堂笔记
区块链
China_Yanhy1 天前
我的区块链运维日记 · 第 7 日:影子区块的诱惑 —— 多节点下的“重复充值”危机
运维·区块链