Solana 保密余额扩展 - 钱包集成指南

本文介绍了一种基于ElGamal和AES加密的双重密钥加密方案,用于保护钱包中的机密转账和余额信息。详细阐述了密钥衍生过程、签名生成、与安全性相关的考虑,并描述了加密方案在交易中的实际应用,如机密转账和余额解密等。

钱包集成指南

转账

检查余额

加密方案

保密转账系统使用基于 ElGamal 和 AES 加密的双钥加密方案。密钥是通过使用特定种子消息的钱包签名派生出来的。

密钥派生过程

  1. ElGamal 密钥派生

    • 种子消息: "ElGamalSecretKey"
    • 目的: 用于 ElGamal 加密保密余额
    • 来源: Agave zk-sdk
  2. AES 密钥派生

    • 种子消息: "AeKey"
    • 目的: 用于 AES 加密保密数据
    • 来源: Agave zk-sdk

签名生成

密钥派生过程遵循以下步骤:

  1. 钱包签署特定的种子消息,后跟一个空的公共种子
  2. 签名用于派生加密密钥
  3. 空公共种子确保与 SPL Token CLI 实现的兼容性
// 签名生成示例
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: 密钥可用于保密操作

安全注意事项

  1. 硬编码的种子

    • 种子消息是硬编码的,以确保所有实现中一致的密钥派生
    • 这与 Solana Token-2022 程序中的实现相匹配
    • 参考: Token-2022 CLI 实现
  2. 兼容性要求

    • 尽管自定义密钥派生(使用替代种子或自定义种子缓存)在技术上是可行的,当前实现严格遵循 ElGamalSecretKeyAeKey 作为种子的硬编码约定。这确保与 Token-2022 程序和 SPL Token CLI 兼容。未来版本可能会引入对可定制密钥派生方案的支持。
    • 这确保前端派生的密钥与后端操作中使用的密钥匹配
  3. 实施注意事项

    • 钱包必须支持消息签名
    • 签名过程是确定性的,以确保一致的密钥派生
    • 派生的密钥必须始终安全存储或按需派生,绝不能传输。它们仅用于加密/解密操作

在交易中的使用

加密方案在各种操作中使用:

  1. 保密转账

    • 使用 ElGamal 加密余额
    • 使用 AES 加密提供额外数据保护
  2. 余额解密

    • 使用 AES 密钥解密保密余额
    • 需要钱包签名以派生密钥
  3. 账户初始化

    • 在账户设置期间,派生 ElGamal 和 AES 密钥
      • 对于安全缓存的加密密钥,这应该是唯一生成加密密钥的事件/实例。
    • 确保适当加密初始保密数据
  • 原文链接: github.com/solana-develo...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
solana-developers
solana-developers
江湖只有他的大名,没有他的介绍。