本文介绍了一种基于ElGamal和AES加密的双重密钥加密方案,用于保护钱包中的机密转账和余额信息。详细阐述了密钥衍生过程、签名生成、与安全性相关的考虑,并描述了加密方案在交易中的实际应用,如机密转账和余额解密等。
保密转账系统使用基于 ElGamal 和 AES 加密的双钥加密方案。密钥是通过使用特定种子消息的钱包签名派生出来的。
ElGamal 密钥派生
"ElGamalSecretKey"
AES 密钥派生
"AeKey"
密钥派生过程遵循以下步骤:
// 签名生成示例
const messageToSign = Buffer.concat([
seedMessage, // 可以是 "ElGamalSecretKey" 或 "AeKey"
emptyPublicSeed // 用于 CLI 兼容性的空字节数组
]);
sequenceDiagram
participant Wallet
participant SolanaSDK
participant ZkSDK as Zk SDK
Note over Wallet: 初始化保密账户
Note over Wallet: ElGamal 密钥设置
Wallet->>Wallet: 创建 "ElGamalSecretKey" 缓存
Wallet->>Wallet: 创建种子缓存
Wallet->>Wallet: 连接缓存
Wallet->>SolanaSDK: signMessage(concatenatedBuffer)
SolanaSDK-->>Wallet: 返回签名
Wallet->>ZkSDK: deriveElGamalKey(signature)
ZkSDK-->>Wallet: 返回 ElGamal 加密密钥
Note over Wallet: AES 密钥设置
Wallet->>Wallet: 创建 "AeKey" 缓存
Wallet->>Wallet: 创建种子缓存
Wallet->>Wallet: 连接缓存
Wallet->>SolanaSDK: signMessage(concatenatedBuffer)
SolanaSDK-->>Wallet: 返回签名
Wallet->>ZkSDK: deriveAESKey(signature)
ZkSDK-->>Wallet: 返回 AES 加密密钥
Note over Wallet: 账户就绪
Note over Wallet: 密钥可用于保密操作
硬编码的种子
兼容性要求
ElGamalSecretKey
和 AeKey
作为种子的硬编码约定。这确保与 Token-2022 程序和 SPL Token CLI 兼容。未来版本可能会引入对可定制密钥派生方案的支持。实施注意事项
加密方案在各种操作中使用:
保密转账
余额解密
账户初始化
- 原文链接: github.com/solana-develo...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!