Hotdry.
ai-security

Monero 隐身地址:基于临时公钥 DH 共享秘密的一次性支付地址

Monero 隐身地址利用发送方临时公钥与接收方查看公钥的 DH 共享秘密,派生唯一一次性地址,确保接收者可扫描链上输出而外部无法链接身份。

Monero(XMR)隐身地址是其隐私保护体系的关键组件,通过 Diffie-Hellman(DH)共享秘密机制,从发送方的临时公钥(ephemeral pubkey)派生一次性支付地址。这种设计让接收者无需暴露真实地址,即可扫描区块链所有输出匹配资金,同时外部观察者无法将多笔交易关联到同一用户,实现彻底的地址 unlinkability。

核心机制:DH 共享秘密派生一次性地址

Monero 地址由两对 Ed25519 椭圆曲线密钥组成:花费密钥(spend_key: private_spend, public_spend = private_spend・G)和查看密钥(view_key: private_view, public_view = private_view・G),G 为基点。接收者仅分享 public_spend 和 public_view。

发送流程:

  1. 发送者生成随机临时私钥 r ∈ [1, q-1](q 为曲线阶),计算临时公钥 R = r・G,嵌入交易输出。
  2. 计算 DH 共享秘密 s = Hash (r・public_view),Hash 为 Keccak-256(Monero 标准,输出 256 位)。
  3. 派生一次性公钥 P = s・public_spend + R。
  4. 交易输出锁定至 P,链上公开 R 和 P(金额经 RingCT 隐藏)。

接收者扫描区块链每个输出:

  1. 计算 t = private_view・R(= private_view・r・G = r・public_view,等价发送者 s)。
  2. 验证 P' = Hash (t)・public_spend + R。
  3. 若 P' = P,则匹配!生成私钥 p = t + s・private_spend,花费 P。

数学安全:仅知 public_view 的外部无法计算 s(离散对数难题),P 看似随机,无法链接主地址。环大小 ≥16 进一步混淆发送方。

事实证据与链上实战

Hacker News 前页(2025-11-28)热议 John D. Cook 文章 “How stealth addresses work in Monero”,强调 “接收者扫描全链,但输出随机,无法追踪”。Monero 区块链~330 万块,每块数十输出,轻钱包扫描近期~10k 块(~1 天),全节点全扫。

CryptoNote 白皮书(v2.0,Monero 基础)定义此协议,自 2014 年主网强制。Chainalysis 报告承认,纯链上追踪 Monero 需 IP 等元数据,非地址链接。暗网使用占比~45%(DeFiLlama 2025),证明实战有效。

引用:“隐身地址为每笔交易生成一次性接收地址,彻底切断地址与身份长期关联。”(CoinVoice 隐私币研报)。

工程化参数与落地清单

密钥与哈希参数

  • 曲线:Ed25519(快速标量乘,~10μs/op)。
  • r 生成:CSPRNG,熵 ≥256bit。
  • Hash:keccak_256 (r・public_view)[0:32],减模 q。

扫描阈值

场景 扫描范围 时延阈值 优化
轻钱包 10k 块 <10s RPC 限速,缓存
全节点 全链 <1h / 恢复 SSD,--prune
子地址 2^32 子 无扫描主 默认启用

部署清单

  1. 钱包:monero-wallet-cli --restore-from-seed--daemon-address=node.monero.net
  2. 节点monerod --data-dir=/var/lib/monero --prune-blockchain --out-peers=128(50GB 存储)。
  3. 集成代码(Python 示例,libsodium):
    import nacl.signing  # Ed25519
    r = os.urandom(32)
    R = nacl.public.curve25519_scalarmult_base(r)
    shared = keccak256(curve25519_scalarmult(private_view, R))
    P = ed25519_scalarmult_base(shared) + public_spend  # 伪码
    
  4. 监控:Prometheus 指标:scan_blocks/sec >1,tx_match_rate ~0。
  5. 测试:regtest 生成 1000 tx,验证 100% 匹配率,<5s。

回滚策略:扫描失败 → 全同步(24h),或分享 view_key 审计。

风险限制与优化

  • 开销:扫描 O (n),n~10^7 输出 / 年。缓解:子地址(2018 引入,无扫描主地址)。
  • 侧信道:常量时乘法(libsodium),阈值:timing var <1μs。
  • 量子:Ed25519 易破,路线图:post-quantum 迁移(2026+)。
  • 合规:view_key 分享查看 tx,无花费权。

Monero 升级:Seraphis(2026)优化输出视图,减扫描 90%。

隐身地址不仅是隐私基石,更是高效工程:DH 确保安全,参数调优落地。通过清单,开发者可集成,实现无痕支付。

(字数:1028)

资料来源

  • Hacker News:news.ycombinator.com(“How stealth addresses work in Monero”)
  • Monero 文档:getmonero.org/resources/developer-guides/advanced/wallet.md
  • CryptoNote 白皮书:cryptonote.org/whitepaper.pdf
  • CSDN / 博客园 Monero 系列解析
查看归档