隐身地址(Stealth Addresses)是加密货币隐私技术中的一个核心组件,旨在实现接收地址的不可关联性;隐身地址是⼀种通过公钥⽣成的加密地址,允许他⼈向您发送交易⽽不暴露您的真实身份;对发送方是透明的,对接收方是隐藏的。
基于双密钥对的方案,是最经典、最广为人知的方案,主要由 Peter Todd 提出,并在 门罗币(Monro) 和 比特币的 BIP 提案 中得到了应用。
该方案要求接收者生成两个密钥对:
- 查看密钥对 (View Key Pair):
(view_sk, view_pk),用于扫描交易。 - 消费密钥对 (Spend Key Pair):
(spend_sk, spend_pk),用于花费资金。
| 方案 | 核心技术支持 | 隐私范围 | 交互性 | 主要应用 | 优点 | 缺点 |
|---|---|---|---|---|---|---|
| 双密钥对 | 椭圆曲线密码学 | 发送方/接收方 | 非交互式 | 门罗币, BIP | 简单高效,无需注册 | 通常不隐藏交易金额 |
| 可重复支付码 | 椭圆曲线密码学 | 发送方/接收方 | 一次性交互 | 比特币 (BIP47) | 建立了可重复的隐私支付通道 | 需要初始通知交易,轻度交互 |
| Zcash 屏蔽地址 | 零知识证明 | 发送方/接收方/金额 | 非交互式 | Zcash, Horizen | 全隐私(交易图+金额) | 计算开销大,曾有可信设置 |
| ERC-5564 | 椭圆曲线密码学 | 发送方/接收方 | 非交互式 | 以太坊/EVM 链 | 标准化,为以太坊设计 | 依赖外部基础设施(中继器) |
隐身地址
发送方和接收方都使用了隐身地址,接收方在处理事件时,会先解析隐身地址,每个接收方只能解出接收者是自己的。
type Stealth struct {
// EphemeralPubKey one-time pub key
EphemeralPubKey string `json:"ephemeralPubKey"`
// StealthAddress one-time address
StealthAddress string `json:"stealthAddress"`
// ViewTag one-time view
ViewTag string `json:"viewTag"`
// CipherData encrypted data including all participant's did
CipherData string `json:"cipherData"`
}
使用 EphemeralPubKey、StealthAddress、ViewTag 可以 check 是否为自己的。不需要使用到私钥
实现
国密 vs 主流算法:
| 场景 | 国密算法 | 国际主流算法 | 核心差异 |
|---|---|---|---|
| 非对称加密 | SM2(256 位) | RSA(2048 位)、ECDSA | 国密更高效,国内合规要求 |
| 哈希函数 | SM3(256 位) | SHA-256 | 设计逻辑不同,国密适配国内场景 |
| 对称加密 | SM4(128 位) | AES-128 | 加密轮数和轮函数不同,安全性相当 |
| 曲线 | 特点 | 典型应用 |
|---|---|---|
| secp256k1 | 科布利茨曲线,参数简单,计算高效 | 比特币、以太坊等区块链 |
| secp256r1 | 随机曲线,NIST 标准,应用更广泛 | TLS/SSL 证书、移动设备 |
| SM2(国密) | 中国自主曲线,参数更复杂,国内合规要求 | 电子签章、政务系统 |
生成隐身地址
![[Pasted image 20250904171746.png]]
校验:
![[Pasted image 20250904171943.png]]
计算隐身地址私钥:
![[Pasted image 20250904172010.png]]
https://jason.mirror.xyz/fq9ZC-RcxKH7-j5BeBypT40soCAXmqhtZ5F5BV4LTrk