学习视频来源:https://www.bilibili.com/video/BV1Vt411X7JF/?p=12
本博客除了包含自己的在学习过程中记录的笔记外,还包含少部分自己扩展的内容,如有错误,敬请指正。
文章目录
- [1. 比特币是匿名的吗?](#1. 比特币是匿名的吗?)
- [2. 破坏比特币匿名性的两个方面](#2. 破坏比特币匿名性的两个方面)
- [3. 怎么尽量提高比特币的匿名性?](#3. 怎么尽量提高比特币的匿名性?)
-
- [3.1 网络层:隐藏 IP 地址](#3.1 网络层:隐藏 IP 地址)
- [3.2 应用层:切断地址之间的关联------混币](#3.2 应用层:切断地址之间的关联——混币)
- [4. 零知识证明(Zero-Knowledge Proof, ZKP)](#4. 零知识证明(Zero-Knowledge Proof, ZKP))
-
- [4.1 同态隐藏(Homomorphic Hiding)](#4.1 同态隐藏(Homomorphic Hiding))
- [4.2 盲签(Blind Signature)](#4.2 盲签(Blind Signature))
- [5. 零币(Zerocoin)与零钞(Zerocash)](#5. 零币(Zerocoin)与零钞(Zerocash))
-
- [5.1 零币(Zerocoin)](#5.1 零币(Zerocoin))
- [5.2 零钞(Zerocash)](#5.2 零钞(Zerocash))
- [6. 总结](#6. 总结)
1. 比特币是匿名的吗?
一般来说,匿名是和隐私保护联系在一起的,就是指我做了什么操作,不希望别人知道。比特币不需要真名,用的是公钥产生的地址,属于化名(pseudonymity),而非完全匿名。
与法币相比:
- 现金是完全匿名的,因为纸币上没有任何个人信息,交易双方无需任何身份验证。
- 银行系统则要求实名制,所有交易都绑定真实身份。
如果银行也使用化名账户(即不关联真实身份),其匿名性反而可能优于比特币 ,因为银行账本是受控的------只有银行和授权司法机构可以查看,而普通人无法访问。
但比特币的账本(区块链)是公开透明 的,任何人都可以查看每一笔交易的输入、输出、时间戳和金额。因此,比特币的匿名性不如现金,甚至在某些方面不如受控的银行系统。
2. 破坏比特币匿名性的两个方面
2.1 方面一:多个账户地址可以被关联起来
从输入推断
比特币交易中常包含多个输入和多个输出。如果多个输入地址出现在同一笔交易中,通常可推断它们属于同一个控制者或者多方联合支付。
从输出推断
例如:
- 输入1:4 BTC
- 输入2:5 BTC
- 输出1:6 BTC
- 输出2:3 BTC
总输入为9 BTC,总输出也为9 BTC。其中6 BTC可能是支付给对方,3 BTC则是找零。由于找零地址通常由发送方钱包自动生成,分析者可通过启发式规则(如"找零地址通常未被使用过"、"金额较小"等)推测出哪个输出是找零,从而将该找零地址与发送方关联。
这种链上行为分析(chain analysis)使得多个地址可能被聚类到同一个实体,破坏了用户的伪匿名性。
2.2 方面二:比特币地址与现实身份发生关联
一旦比特币地址与现实世界的身份信息产生联系,匿名性就可能彻底失效。常见场景包括:
- 通过交易所充值或提现:绝大多数合规交易所要求 KYC用户需提供身份证、银行卡等信息。一旦你从交易所提币到某个地址,该地址就与你的身份挂钩。
- 线下消费:比如在餐馆用比特币支付。虽然技术上可行,但比特币交易确认慢、手续费高,实际很少用于日常小额支付。即便如此,若商家记录了你的交易 ID 和消费时间,并结合其他信息(如监控、订单姓名),仍可能反推出你的身份。
- 公开捐款或打赏:如果你在社交媒体上公布"请打赏到这个地址",那么该地址就直接与你的网络身份绑定。
典型案例 :中本聪之所以至今身份未暴露,一个重要原因是他从未将早期挖出的大量比特币花出去。一旦他尝试将这些币兑换成法币,就必须通过交易所,从而暴露身份。
但中本聪只是个例,因为他没花过这些钱。所以并不是说比特币合适非法活动,恰恰相反,因其公开账本特性,执法机构往往能通过链上追踪锁定嫌疑人。
3. 怎么尽量提高比特币的匿名性?
比特币协议运行在应用层,底层是 P2P 网络。提升匿名性需从网络层 和应用层两方面入手。
3.1 网络层:隐藏 IP 地址
比特币节点广播交易时会附带 IP 信息。如果攻击者监控网络流量,可能将某笔交易与特定 IP 关联。
- 风险示例:你在网吧用比特币钱包发送交易,网吧需实名登记,执法部门可通过 IP 追查到你。
- 解决方案 :使用洋葱路由(Tor) 或 VPN,让交易经过多跳转发,隐藏真实 IP。理想情况下,交易应通过 Tor 网络广播,避免直接暴露地理位置。
3.2 应用层:切断地址之间的关联------混币
核心问题是:同一个人的不同地址容易被聚类。解决思路是"混币"(CoinJoin)或"洗币"。
方法一:使用混币服务
用户将比特币发送到一个混币平台,平台将多个用户的币混合后,再分别发送到各自的新地址。这样,链上就难以追踪原始资金流向。
- 缺点 :这类服务通常是中心化的,存在跑路风险(卷款消失)。且若平台被监管或日志被获取,反而会成为身份泄露的源头。
- 改进方案 :使用去中心化混币协议,如 Wasabi Wallet 或 Samourai Wallet 中的 CoinJoin 功能,多方协作完成混合,无需信任第三方。
方法二:利用在线钱包或交易所"间接混币"
虽然不是设计目的,但某些操作天然具有混币效果:
- 你将法币存入交易所 → 买入比特币 → 提现到新地址;
- 或者:比特币 → 交易所 → 兑换成以太坊 → 提现 → 再换回比特币。
最终拿到的比特币,在链上已与原始地址无直接路径关联(前提是交易所不保留或泄露用户交易映射关系)。
注意:此方法依赖交易所的隐私政策,且仍需 KYC,仅能增加追踪难度,不能保证完全匿名。
4. 零知识证明(Zero-Knowledge Proof, ZKP)
零知识证明是指:证明者(Prover)向验证者(Verifier)证明某个陈述为真,而无需透露除"该陈述为真"之外的任何信息。
经典例子:私钥所有权证明
你想向别人证明你拥有某个比特币地址的私钥,但又不想泄露私钥本身。
- 你可以对该地址的公钥进行签名(例如对一段随机消息签名)。
- 对方用公钥验证签名有效性。
- 若验证通过,则说明你确实掌握私钥。
这算不算零知识证明?有争议 。
虽然你没有泄露私钥,但你泄露了一个由私钥生成的签名 。严格意义上的零知识证明要求完全不泄露任何额外信息。
4.1 同态隐藏(Homomorphic Hiding)
同态隐藏是一种满足以下性质的加密函数 E ( x ) E(x) E(x):
- 唯一性 :若 x ≠ y x \ne y x=y,则 E ( x ) ≠ E ( y ) E(x) \ne E(y) E(x)=E(y)(无碰撞);反之,若 E ( x ) = E ( y ) E(x) = E(y) E(x)=E(y),则 x = y x = y x=y。
- 不可逆性 :给定 E ( x ) E(x) E(x),无法反推出 x x x(类似哈希的 hiding 性质)。
- 同态性:可在密文上进行代数运算,结果等于明文运算后再加密。
常见类型:
- 同态加法 :可从 E ( x ) E(x) E(x) 和 E ( y ) E(y) E(y) 计算出 E ( x + y ) E(x + y) E(x+y)
- 同态乘法 :可从 E ( x ) E(x) E(x) 和 E ( y ) E(y) E(y) 计算出 E ( x y ) E(xy) E(xy)
- 可扩展至多项式计算
应用示例:
Alice 想向 Bob 证明她知道两个数 x x x 和 y y y,使得 x + y = 7 x + y = 7 x+y=7,但不想透露 x x x 和 y y y 的具体值。
- Alice 发送 E ( x ) E(x) E(x) 和 E ( y ) E(y) E(y) 给 Bob。
- Bob 利用同态加法计算 E ( x + y ) E(x + y) E(x+y)。
- Bob 比较 E ( x + y ) E(x + y) E(x+y) 是否等于 E ( 7 ) E(7) E(7)。
- 若相等,则验证通过;
- 由于 E E E 是隐藏的,Bob 无法得知 x x x 或 y y y; 不可逆性
- 由于无碰撞,若等式成立,则必然有 x + y = 7 x + y = 7 x+y=7。 唯一性 + 同态加法
补充 :为防止 Bob 通过穷举猜测 x x x,Alice 通常会对 x x x 和 y y y 加入随机盲因子(blinding factor),在保持 x + y = 7 x + y = 7 x+y=7 不变的前提下扰乱具体数值。
4.2 盲签(Blind Signature)
在中心化电子现金系统中,为防止双花(double-spending),银行需跟踪每张"电子钞票"的编号,记录编号的钱属于谁,但这样就失去了匿名性。
盲签机制解决了这一矛盾:
- 用户 A 自己生成一个唯一编号(代表一张电子货币),但不告诉银行内容。
- A 对该编号进行"盲化"处理(加入随机数),然后发送给银行。
- 银行对盲化后的数据签名(相当于"盖章"),并扣减 A 的存款。
- A 去盲化,得到银行对原始编号的有效签名(即 token)。
- A 将编号 + token 发送给 B 完成支付。
- B 将编号和 token 提交给银行,银行验证签名有效后,增加 B 的存款,并记录该编号已使用(防双花)。
关键优势 :银行无法将 A 和 B 关联起来,因为签名时看不到原始编号。
局限:仍是中心化模型,依赖可信银行。A转给B后,银行知道了这个钱属于B,如果B再转给C或者兑现,就又失去了匿名性。
5. 零币(Zerocoin)与零钞(Zerocash)
为在协议层实现强匿名性,密码学家提出了基于零知识证明的加密货币方案。
5.1 零币(Zerocoin)
- 在比特币基础上增加一种新币种:"零币"。
- 用户可将一定数量的比特币(基础币)销毁,同时生成等值的零币。
- 零币花费时,通过零知识证明证明"我拥有一个未被花费的零币",但不透露是哪一个。
- 花费后,新生成的基础币与旧地址无任何链上关联。
本质是内置的、无需信任的混币机制。
5.2 零钞(Zerocash)
- 更进一步:完全隐藏交易双方地址和交易金额。
- 使用 zk-SNARKs(零知识简洁非交互式知识证明)技术。
- 区块链只记录:
- 交易存在
- 输入未被双花
- 金额守恒
- 不记录发送方、接收方、金额
- 所有验证通过零知识证明完成,矿工只需验证证明有效性。
6. 总结
-
比特币是伪匿名的,不是完全匿名。
-
匿名性弱于现金,因所有交易公开可查。
-
匿名性可能被破坏的两大途径:
- 地址聚类分析(链上行为)
- 与现实身份关联(交易所、消费等)
-
提升匿名性需结合:
- 网络层(洋葱路由)
- 应用层(混币)
-
中本聪的匿名得以维持,正因为他从未动用那些币------一旦进入现实金融系统,匿名屏障极易崩塌。