5.2 交易透明性与地址关联分析:玻璃账本的代价


5.2 交易透明性与地址关联分析:玻璃账本的代价

地址关联分析通过启发式规则把链上地址聚类成"可能同属一人"的簇:共同输入归并(多输入交易的控制权合一)、找零识别(UTXO 模型的找零地址暴露归集习惯)、金额与行为指纹(重复数额、时间节律)。配合链外锚点数据(交易所实名、收货地址、公开捐赠),分析公司能把假名网络系统性映射到现实身份。本节实现两条核心启发式,评估反制手段,并讨论透明性的正当收益。

分析公司的新人培训手册只有一页

分析公司的新人培训手册据说只有一页:拿到地址,先找它跟谁在同一笔交易里共同出资。多输入归并是全行业最锋利的启发式,依据是朴素的控制权事实——UTXO 模型下,一笔交易要同时花费多个地址的未花费输出,就必须同时持有它们的私钥;因此共同出资的地址,大概率同属同一钱包主人。第二把刻度尺是找零识别:付款时输入面额对不上,钱包会生成全新的找零地址收回余款;找出哪个输出是"找零",等于标记了主人的下处活动地址——簇就沿着此边继续生长。

透明账本的"扒皮流水线"由此成形:链上数据全量抓取入库,启发式切成地址簇,链外锚点(交易所入金地址带实名、商户公开收款地址、勒索案公布的赎金地址)给簇钉上真名,最后融合暗网爬取、社交媒体、泄露数据库补全画像。每一步都不需要破解任何密码学——玻璃账本把原材料免费摊开,分析只是体力活。

图 5-2 地址聚类启发式:两条规则撑起一个产业

图 5-2 地址聚类启发式:两条规则撑起一个产业

实现两条启发式:聚类算法上机

把共同输入归并与找零识别写成可运行的聚类器,喂一段模拟账本:

from collections import defaultdict class ClusterEngine: """并查集实现的多输入归并 + 简易找零启发式""" def __init__(self): self.parent = {} def find(self, a): while self.parent.get(a, a) != a: a = self.parent[a] return a def union(self, a, b): ra, rb = self.find(a), self.find(b) if ra != rb: self.parent[rb] = ra def multi_input(self, txs): for inputs, outputs, _ in txs: if len(inputs) > 1: # 共同输入 -> 同簇 for other in inputs[1:]: self.union(inputs[0], other) return self def change_address(self, txs, round_digits=(3,)): """新地址 + 输出额呈现钱包默认精度 -> 猜为找零""" seen_before = {a for ins, _, _ in txs for a in ins} guesses = [] for inputs, outputs, idx in txs: fresh = [o for o in outputs if o not in seen_before] if len(fresh) == 1 and inputs: amt = fresh[0][1] if any(round(amt, d) == amt for d in round_digits): self.union(inputs[0], fresh[0][0]) guesses.append((idx, fresh[0][0])) seen_before |= {o for o, _ in outputs} return guesses engine = ClusterEngine() ledger = [ (["A1", "A2"], [("商户M", 0.8), ("C1", 0.399)]), # 找零走新地址 C1 (["C1", "A3"], [("商户N", 1.2), ("C2", 0.079)]), # 再次归并 (["B1"], [("商户M", 0.5)]), # 无关用户,不归并 ] engine.multi_input(ledger) changes = engine.change_address(ledger) print("找零识别:", changes) clusters = defaultdict(list) for addr in ["A1", "A2", "A3", "B1", "C1", "C2", "商户M", "商户N"]: clusters[engine.find(addr)].append(addr) for root, members in clusters.items(): print(f"簇 {root[:6]}..: {members}")

输出会显示 A 系地址与找零地址被缝进同一簇,而 B1 独自成簇——两条启发式已经足以重建钱包轮廓。真实分析公司再叠加金额指纹(跨链数额复现)、时间节律(作息时区推断)、行为指纹(手续费习惯、找零精度),簇的纯度与覆盖率继续攀升。

簇生成之后,下一步是"画像推销"——把簇的规模、活跃度、与已知实体的接触算成风险分。这段流程同样可以模拟,顺便看清风控行业打分的原料:

def cluster_profile(cluster_addrs, txs, anchors): """给地址簇算一张风险画像卡""" out_flow = 0.0 in_flow = 0.0 touch = set() for ins, outs, _ in txs: if any(a in cluster_addrs for a in ins): out_flow += sum(a for _, a in outs) if any(rec in cluster_addrs for rec, _ in outs): in_flow += sum(a for _, a in outs) touch |= {a for a in ins if a in anchors} touch |= {rec for rec, _ in outs if rec in anchors} risk = 0 if touch & {"暗网市场", "混币服务"}: risk += 60 if out_flow > 10 * in_flow and out_flow > 5: # 长期净流出 risk += 20 return {"簇规模": len(cluster_addrs), "流入": in_flow, "流出": out_flow, "锚点接触": sorted(touch), "风险分": min(risk, 100)} txs = [ (["A1", "A2"], [("商户M", 0.8), ("C1", 0.399)]), (["C1", "A3"], [("混币服务", 1.2), ("C2", 0.079)]), (["B1"], [("商户M", 0.5)]), ] print(cluster_profile({"A1", "A2", "A3", "C1", "C2"}, txs, anchors={"混币服务", "商户M"}))

画像卡上的"锚点接触"直接抬高风险分——这正是交易所风控拒付、提币加审的数据来源。用户侧的反制由此有了明确目标:切断锚点接触、打散簇结构,让画像卡"无料可打"。

密码学细节:为什么反制如此别扭

反制的困难来自结构本身。共同输入归并利用的是控制权必须集中的机制必然——要花多个输出就得同时持有私钥,这条边除非改变交易模型否则抹不掉;可行的缓解只有"花之前先打散"(通过混币或隐私池把控制权历史切断),代价是引入新的信任或延迟。找零识别利用的是钱包软件的统计指纹——默认精度、地址复用习惯、费用策略;缓解靠规整化输出与随机化数额,但规整本身又成为新的指纹(人人都精确到三位小数时,两位小数的找零反而醒目)。这形成隐私工程的普遍困境:任何系统性反制都会引入新的统计特征,军备竞赛没有终局,只有成本对峙。

⚠️ 给开发者的三条现场提示:其一,别用地址复用当"账号"——每次收款新开地址是假名系统里少数免费的反制,复用等于自愿缝合;其二,自建归集策略时避开统一时间与统一精度,机械规律是分析的最爱;其三,评估第三方"隐私方案"时先问它自己的匿名集有多大、谁在运营、日志策略如何——工具自身可能就是新的观察者。

工程现实:透明性的正当收益与边界

公平起见,玻璃账本的收益同样真实:公开可审计让储备证明、资金流向追踪、漏洞赏金的链上验证成为可能;司法追溯勒索赎金、打击盗币洗钱,靠的正是透明性。争议的焦点因此不是"透明好不好",而是默认值应该由谁定:透明链把"全网可读"设为默认、把隐私设为 opt-in,隐私币反之。默认值决定生态走向——5.6 节将看到两种默认策略的真实后果。折中路线也在生长:可审计隐私(监管者持特殊密钥可穿透、普通人不可读)、视图密钥(用户自主向指定方披露)、选择性披露证明(证明合规属性而不泄露内容)。

💡 判词收束:透明账本不是隐私技术做错了,而是压根没做;分析产业的强大,只是把这份"没做"变现。

攻防边界:启发式的误报与对抗

启发式是概率武器,会误伤:共同输入也可能是联合支付(多人凑单)或混币服务的正常输出;找零识别在多输出、金额规整化的场景误报率上升。对抗因此是双向的——隐私方抬高误判率,分析方引入更多数据源降误判,法庭采信时置信度标注成为必需(把启发式聚类当地铁事实的判例,已经翻过车)。对个人用户,实用结论朴素:假名链上,把每一次实名接触都当作给全图打锚;对企业,把用户地址当个人数据处理,因为它事实上就是。

概念与威胁都清楚了,检验科的仪器柜下一节打开:混币、环签名、机密交易、同态加密、零知识证明——总览谱系,再逐一拆解。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U