假名性指用可长期关联的化名活动(地址即假名),匿名性指行为无法关联到任何稳定身份,隐私性指交易内容(金额、对手方、资产)不被无关方读取。区块链原生提供的是假名性而非匿名性,隐私性默认为零。本节建立三维坐标与匿名集概念,用重识别实验演示"假名如何被钉死到真人"。
别把假名当成匿名的马甲——这是检验科的第一课,也是链上分析产业的立业之本。网名是假名:不写真名,但你在同一网名下聊了多年,画像比档案还厚。匿名是"查无此人":每次行为都无法与任何稳定身份挂钩,像混进人海的墨镜客。隐私则管另一件事:不问你是谁,只问账本读不读得出你的交易内容。三轴指标两两正交组合:传统银行强隐私(余额对陌生人保密)弱匿名(实名开户);透明区块链零隐私(全网可读)弱匿名(假名可追踪);理想的隐私币追求强匿名加强隐私。混淆这三轴,讨论就会原地打转——"区块链匿名所以罪犯爱用"与"区块链透明所以没有隐私"这对流行矛盾句,其实各自拿了半张真图。

用一段模拟演示"假名网络被单点锚定击穿"的全过程——这正是链上分析公司的标准作业流程:
from collections import defaultdict class PseudonymousLedger: """假名账本:地址间转账全网可读""" def __init__(self): self.edges = [] # (付款地址, 收款地址, 金额) self.known = {} # 分析公司掌握的实名锚点 def tx(self, a, b, amt): self.edges.append((a, b, amt)) def anchor(self, addr, real_name, source): self.known[addr] = (real_name, source) def taint(self, max_hops=4): """污染传播:从实名锚点出发,沿交易边扩散归属猜测""" identity = {a: name for a, (name, _) in self.known.items()} for _ in range(max_hops): updated = False for a, b, amt in self.edges: if a in identity and b not in identity: identity[b] = f"关联[{identity[a]}]" # 收款方高度可疑 updated = True if not updated: break return identity led = PseudonymousLedger() # 用户在交易所实名入金一次,提币到自管地址 led.anchor("addr-exit-0", "张三", "交易所实名入金") led.tx("addr-exit-0", "addr-hw-1", 5.0) # 转入硬件钱包 led.tx("addr-hw-1", "addr-shop-9", 0.02) # 网购付款(留了收货地址) led.tx("addr-shop-9", "addr-merge-x", 0.019) # 商户归集 led.tx("addr-hw-1", "addr-donation-77", 0.5) # 给公益组织捐款 result = led.taint() for addr, guess in result.items(): print(f"{addr:<15} -> {guess}") print("\n捐款那条边,也把'某个张三关联地址'钉在了捐款人画像上")
一次实名入金,加上一张收货地址,污染顺边扩散——张三以为自己穿着马甲,实际马甲上缝着名牌。这笔账的可怕之处在于单向性:历史不可篡改意味着失守是永久的,今天的泄露等于给过去与未来的全部交易盖章。
再引入本章的核心度量——匿名集:一项行为混在多少个"从观察者视角无法区分"的同类行为里。匿名性不是布尔值,是这个集合的尺寸与质量:
def anonymity_set(candidates, observer_knowledge): """观察者用已知信息剔除不可能项后,剩下的不可区分者""" remaining = [c for c in candidates if not any(rule(c) for rule in observer_knowledge)] return remaining, len(remaining) candidates = [f"环成员{i}" for i in range(16)] # 某隐私方案的候选签名者 rules = [ lambda c: "成员3" in c and True, # 已知成员3当时离线(不可能签名) lambda c: "成员7" in c and True, # 已知成员7从未与该收款方交互 ] remaining, size = anonymity_set(candidates, rules) print(f"名义候选 16 人,背景知识剔除后匿名集仅剩 {size} 人:{remaining}") print("结论:匿名集不是宣传页数字,是攻击者知识下的残余集合")
名义候选十六人,两条背景知识就砍到十四——而真实的攻击者掌握的远不止两条。匿名集会随观察者的知识缩水,这正是 5.6 节讨论隐私币默认参数的伏笔。
工程讨论里还有几把常用的尺子,一并校准。可链接性:外部观察者能否判断两笔交易出自同一人(假名天生可链接,一次性地址反其道行之)。可追踪性:能否沿交易链回溯资金来源(混币与环签名主要打这条)。不可区分性:单笔交易与同池其他交易统计上是否无差(默认隐私的价值所在)。三把尺子对应三种攻击者问句:"这是同一个人吗?""钱从哪来?""这笔交易有特殊吗?"——检验科的仪器(5.3 节起)全部围绕三问设计。
⚠️ 概念混淆的现实代价:产品把"地址不写名字"当合规背书,上线后被监管以可追踪性证据处罚;用户把假名当匿名,在链上留下毕生可查的资产清单;隐私项目把匿名集宣传值当真实值,被时间差攻击打脸。三轴三尺先画准,再谈技术选型。
💡 一句判词:假名是延迟暴露的实名——它把身份确认推迟到你犯第一个错误的时刻,而链上的错误永不蒸发。
本章所有指标都是"相对特定观察者"的:同样的账本,对路人(零背景知识)、对交易所(知道你的入金地址)、对专业分析公司(多源数据融合)、对国家级观察者(流量分析与准入数据),成色逐级跳水。评估任何隐私方案,先问"防谁的什么问题"(威胁模型),再谈技术;离开威胁模型的"最强隐私"是营销修辞。下一节就把最凶的一类观察者请上台——链上分析公司的地址关联启发式,看玻璃账本是如何被系统性扒皮的。