同一把钥匙的两副面孔:门罗币地址背后的一次性公钥 图 1
同一把钥匙的两副面孔:门罗币地址背后的一次性公钥 · 图 1

门罗币(Monero)的地址比比特币地址长得多,长得像两串公钥拼在一起。这不是排版失误,而是整套收款隐私机制的第一块拼图。这份设计出自 2013 年 10 月发表的 CryptoNote v2 白皮书,署名 Nicolas van Saberhagen;苏拉埃·诺瑟(Surae Noether)2014 年的评论文章进一步把它讲给了更广的读者。这一篇只讲其中一环:一次性公钥如何让”公开的收款地址”与”链上出现的收款目标”解耦。

两半钥匙的地址

CryptoNote 模型里,一个标准地址装着两个公钥分量:一个对应花用权的支付钥(spend key),一个对应观察权的查看钥(view key)。用户的私密侧同样是一对:(a, b),a 是查看私钥,b 是支付私钥。白皮书特意指出,正因为要装两个公钥,标准地址几乎有比特币地址的两倍长。把查看私钥单独交给审计软件,就能让它扫描全部入账而不动用资产,这是许多其他链后来才补上的能力,在这里是原生设计。

同一把钥匙的两副面孔:门罗币地址背后的一次性公钥 图 2
同一把钥匙的两副面孔:门罗币地址背后的一次性公钥 · 图 2

付款方怎么做

假设 Alice 要给公布了标准地址的 Bob 打款。她把地址拆开拿到 (A, B),然后做三件事:第一,选一个随机数 r,范围在椭圆曲线阶之内;第二,用 r 与 A 做 Diffie-Hellman 交换,把得到的共享秘密哈希后乘到曲线基点 G 上,再加到 B 上,合成一个一次性公钥 P;第三,把这笔交易的一次性公钥 P 写进输出的目标字段,并把 R = rG 作为交易公钥放进交易里。链上旁观者看到的收款目标是一个从未出现过的公钥 P,而不是 B 本身。

关键是旁观者无法从 R 反推 r,也就无法算出那个哈希因子,所以没法判断 P 是不是 Bob 的又一笔收款。白皮书把这称为不可关联(unlinkable):同一收款人的多笔入账,在链上数据里指向互不相关的一次性公钥。

收款方怎么认

Bob 扫描链上交易时,用自己知道的查看私钥 a 对交易公钥 R 做同一个 Diffie-Hellman 运算:aR 与 Alice 算的 rA 相等(两者都等于 raG)。据此他能重算 P’ = Hs(aR)G + B,与链上的 P 比对。对上了,说明这笔钱属于自己,于是恢复一次性私钥 x = Hs(aR) + b——将来花这笔钱时,签名用的就是这个临时 x,而不是 b 本身。整个流程里,Bob 的地址从未被迫出现在链上。

这套机制有一个常被忽略的性质:花用一笔输出要用一次性私钥,而它只能从 Bob 的私钥对推导出来。白皮书同时引入密钥图像(key image)解决重复花费:签名里带一个由一次性私钥唯一决定、又无法反推来源的公开标记,节点只要检查这个标记用过没有,就能挡住双花,而不需要暴露是哪笔输出被花掉了。

与相近概念的分界

一次性公钥常被笼统叫”隐身地址”,但它和比特币语境下的同名提案不是一回事。2014 年 Peter Todd 在比特币开发邮件列表提出的 stealth address 方案是一次公开尝试,后来社区里更成熟的路线是 BIP47 的可复用付款码与 BIP352 静默支付,思路相近、工程约束完全不同。ERC-5564 则把类似想法带到以太坊。名字相同,落地细节、隐私强度和钱包扫描成本差异很大,引用时要分清对象。

另外要划清边界:一次性公钥隐藏的是收款关联,不自动隐藏金额。CryptoNote 的金额隐藏靠环机密交易那套承诺与范围证明,与本节的密钥派生是两个独立模块。把”门罗链上什么都看不到”当成一条笼统事实,是经不起细看的。

普通用户该知道什么

给门罗币地址付款时,你生成的每笔付款目标都不同,所以”同一个地址收到十笔款”在链上表现为十个互不关联的输出,这是正常且符合预期的。审计或记账工具要扫描你的账本时,只需要查看私钥,永远不需要支付私钥——任何要求你把完整私钥或助记词贴进去的”对账工具”都值得警惕。第三方如果拿到你的查看私钥,可以重建你的全部入账,但无法转账;这既是合规对账的便利,也是泄露时的实际损失面。

常见误区

一是以为一次性公钥让交易”完全隐形”。金额、时间、环成员的构成仍会形成可分析的统计形态,隐私强度取决于当时的环大小与具体参数,不宜一概而论。二是以为地址可以被”破解出来”。扫描方不能从输出反推归属,能重建归属的只有持有相应私钥的人;但如果对方持有你的查看私钥,这一切就不成立。三是把 CryptoNote 与其他链的同名机制混用,导致钱包开发或审计脚本直接套错协议。

快速问答

问:为什么收款方扫描链要试算每一笔输出?答:链上的一次性公钥与地址无表面关联,收款方只能用 aR 重算每个候选 P’ 逐一比对,这是隐私用计算换保护。问:给别人我的地址会暴露什么?答:暴露不了你的历史收款关联,但地址本身一旦与你的身份在其他场合绑定,链外信息就会补上最后一块拼图。

风险提示

隐私机制的强度依赖参数选择与使用习惯,不构成对任何资产匿名性或合规性的保证。本文不构成投资建议,也不提供任何规避监管的建议。

风险提示:本文只描述公开技术机制,不构成任何投资建议。数字资产价格可能剧烈波动。