在公共区块链上使用 Stealth Addresses 提升隐私
Source: Dev.to
区块链是分布式账本,记录网络中发生的每笔交易,包括发送者地址、接收者地址以及转账金额。这些记录是公开可访问的,任何人随时都可以查看。虽然区块链地址本身并不直接存储个人信息,但它们是伪匿名的,而非私密的。一旦通过交易所、支付或社交互动等方式揭示了钱包地址背后的真实身份,就很容易追踪与该地址关联的所有过去和未来的交易。此外,钱包的完整财务历史可以不受限制地被查看,因为区块链数据的设计初衷就是公开的。
什么是隐匿地址?
隐匿地址(stealth addresses)的概念是为提升区块链交易的隐私而提出的。隐匿地址是一种为每笔交易生成的唯一一次性钱包地址。与重复使用单一公共地址不同,隐匿地址使用户每次都能通过不同且不可关联的地址接收资金。
对于外部观察者而言,使用隐匿地址发送的资金看起来是转入了全新且彼此无关的钱包地址。此设计使得即使所有交易在区块链上公开可见,也很难将多笔付款关联到同一收款人。
示例
假设 Alice 想向她的朋友 Bob 转账。Bob 希望以私密方式接收资金,而 Alice 也想确保这笔付款不容易被追溯到她的钱包地址或之前的交易。这时,隐匿地址就发挥了作用。
双密钥模型
在典型的区块链钱包中,用户只控制一个私钥,用于派生公钥(或钱包地址)。而隐匿地址则采用一种称为 Dual‑Key Stealth Address protocol 的 双密钥模型。
在该模型中,接收方(Bob)会生成两组独立的私钥:
| 密钥 | 用途 |
|---|---|
| Viewing Key | 允许 Bob 扫描区块链并识别属于他的付款。 |
| Spending Key | 用于在收到资金后控制并支出这些资金。 |

Bob 生成完这两把私钥后,会派生出对应的公钥。这两个公钥——viewing public key 与 spending public key——随后会组合成一个称为 stealth meta‑address 的单一密钥。

stealth meta‑address 并不是 直接持有资金的钱包地址。它仅作为一个公开标识符,Bob 可以安全地将其分享给他人。随后,Bob 将该 stealth meta‑address 发送给 Alice(付款方)。
发送者流程:生成隐蔽地址
拥有 Bob 的隐蔽元地址后,Alice 按如下步骤操作:
-
生成一次性密钥对
Alice 创建一个临时(一次性使用)的密钥对,仅用于本次交易。 -
创建共享密钥
她将 viewing public key(从隐蔽元地址中提取)与自己的 ephemeral private key 混合,以生成共享密钥。
稍后 Bob 可以使用他的 viewing private key 和 Alice 的 ephemeral public key 重新计算出相同的密钥。
该共享密钥通过 Elliptic Curve Diffie‑Hellman (ECDH) 协议派生。注意
ECDH 是一种密码学密钥交换协议,能够让双方在不安全的通道上安全地建立共享密钥。 -
派生隐蔽地址
Alice 使用共享密钥计算出一个唯一的一次性地址——隐蔽地址,并将资金发送至该地址。

接收方如何检测并认领资金
问题: 在 Alice 将资金转入随机隐蔽地址后,Bob 如何知道这笔交易是发给他的,以及他如何获取这些资金?
-
公告
转账完成后,Alice 在区块链上发布一条 Announcement,其中包含她的 ephemeral public key(临时公钥)。 -
扫描
Bob 持续扫描区块链,寻找同时包含隐蔽地址 以及 相应公告的交易。 -
重新生成共享密钥
使用他的 viewing private key(查看私钥)和 Alice 在公告中提供的 ephemeral public key,Bob 重新计算共享密钥。 -
推导隐蔽地址的私钥
通过共享密钥,Bob 推导出对应一次性隐蔽地址的 private key(私钥),该地址正是收到资金的地址。 -
支出
有了此私钥,Bob 就可以像普通交易一样支出这笔资金。

总结
- Stealth addresses(隐蔽地址)在每笔交易中提供不可关联性,同时保持区块链的公开性。
- dual‑key model(双密钥模型)将查看(检测)功能与支出(控制)功能分离。
- ECDH 使发送方和接收方能够生成共享密钥,从而创建唯一的一次性地址。
- announcement(公告)机制让接收方在不泄露与主地址关联的情况下发现并认领资金。
这些密码学技术的组合,使用户能够在本质透明的公共账本上获得更高的隐私水平。
Alice 生成了 view tag,它由先前生成的共享密钥 sge 的前几个字节以及 Alice 实际发送资金的隐蔽地址组成。
Bob 的扫描过程
现在进入流程的最后一步。作为接收方,Bob 需要监控区块链并检查已发布的公告。由于可能会有来自许多不同人的公告,Bob 如何找到 Alice 为此交易发布的特定公告?
Bob 会检查每条公告。对每条公告,他:
- 获取 ephemeral public key(临时公钥)。
- 将其与自己的 Viewing Private Key(查看私钥)结合,生成共享密钥。
如果该公告是针对他的(即有一笔交易是发给他的),Bob 生成的共享密钥的前几个字节将 匹配公告中包含的 view‑tag 值。
注意 – 初始的 view‑tag 比较通过避免对每条公告都重建隐蔽地址来加快扫描速度。
一旦 Bob 找到正确的公告,他就会进入下一步以获取自己的资金。
重建隐蔽地址
Bob 将自己拥有的 spending public key(支出公钥)与共享密钥结合,生成 Alice 转账时使用的隐蔽地址。如果生成的隐蔽地址与公告中的地址相匹配,Bob 即可确认该交易是发给他的。
生成隐蔽私钥
最后一步是为隐蔽地址生成私钥,以便 Bob 可以将资金转入他选择的任何钱包。
- 将 支出私钥 与生成的共享密钥结合。
- 结果就是一次性隐蔽地址的 隐蔽私钥。
有了这个私钥,Bob 可以:
- 将资金从临时隐蔽钱包转移到他拥有的任何其他钱包。
- 直接将资金发送到交易所。
从外部观察者的角度来看,似乎是 Alice 将资金发送到一个随机地址,而不是直接发送到 Bob 所拥有的钱包。同样,观察 Bob 主地址的人也看不到与 Alice 地址的直接关联,因为资金是发送到一次性隐蔽地址的。
重要注意事项
- 金额不隐藏——任何人都可以看到发送到隐蔽地址的金额。
- 可关联性——如果分析师仔细跟踪资金流动,可能会推断出 Alice 与 Bob 钱包之间的关联,但这种关联是间接的,且比普通地址要困难得多。
接下来怎么办?
在本节中,我们介绍了隐蔽地址背后的总体概念和密码学过程。下一部分我们将探讨 具体的链下实现,演示这些概念如何转化为实际代码,以及发送方和接收方如何在实践中独立生成相同的隐蔽地址。

