签名者配置 - OpenZeppelin 文档

本文档介绍了OpenZeppelin Relayer中用于交易签名的signers配置,包括支持的signer类型(local, vault, vault_cloud, vault_transit, turnkey, google_cloud_kms, aws_kms),配置结构,以及它们在不同网络(EVM, Solana, Stellar)的兼容性,并提供了各种signer类型的详细配置示例和安全最佳实践。

签名者配置

概述

签名者负责在交易提交到区块链网络之前对其进行加密签名。OpenZeppelin Relayer 支持多种签名者类型,以适应不同的安全需求和基础设施设置。

signers 配置中的数组必须包含至少一个有效的签名者配置。每个签名者都通过其 id 在 relayer(中继器)配置中被引用。

配置结构

签名者配置示例:

"signers": [\
  {\
    "id": "my_id",\
    "type": "local",\
    "config": {\
      "path": "config/keys/local-signer.json",\
      "passphrase": {\
        "type": "env",\
        "value": "KEYSTORE_PASSPHRASE"\
      }\
    }\
  }\
]

支持的签名者类型

OpenZeppelin Relayer 支持以下签名者类型:

  • local: Keystore(密钥库)文件签名者

  • vault: HashiCorp Vault secret(密钥)签名者

  • vault_cloud: Hosted HashiCorp Vault secret(托管的 HashiCorp Vault 密钥)签名者

  • vault_transit: HashiCorp Vault Transit 签名者

  • turnkey: Turnkey 签名者

  • google_cloud_kms: Google Cloud KMS 签名者

  • aws_kms: Amazon AWS KMS 签名者

网络兼容性矩阵

下表显示了哪些签名者类型与每种网络类型兼容:

签名者类型 EVM 网络 Solana 网络 Stellar 网络
local ✅ 支持 ✅ 支持 ✅ 支持
vault ✅ 支持 ✅ 支持 ❌ 不支持
vault_cloud ✅ 支持 ✅ 支持 ❌ 不支持
vault_transit ❌ 不支持 ✅ 支持 ❌ 不支持
turnkey ✅ 支持 ✅ 支持 ❌ 不支持
google_cloud_kms ✅ 支持 ✅ 支持 ❌ 不支持
aws_kms ✅ 支持 ❌ 不支持 ❌ 不支持
网络特定注意事项:<br>- EVM 网络:使用 secp256k1 密码学。大多数签名者都支持通过正确的密钥生成来支持 EVM 网络。<br> <br>- Solana 网络:使用 ed25519 密码学。确保你的签名者支持 ed25519 密钥生成和签名。<br> <br>- Stellar 网络:使用具有特定 Stellar 要求的 ed25519 密码学。由于网络特定的实现要求,签名者支持有限。<br> <br>- AWS KMS:当前针对具有 secp256k1 支持的 EVM 网络进行了优化。<br> <br>- Google Cloud KMS:同时支持 secp256k1 (EVM) 和 ed25519 (Solana) 密钥类型。<br> <br>- Turnkey:通过适当的密钥管理支持 EVM 和 Solana 网络。

常用配置字段

所有签名者类型都共享这些常用配置字段:

字段 类型 描述
id String(字符串) 签名者的唯一标识符(用于在 relayer(中继器)配置中引用此签名者)
type String(字符串) 签名者的类型(请参见上面支持的签名者类型)
config Map(映射) 签名者类型特定的配置对象

Local(本地)签名者配置

本地签名者使用存储在文件系统上的加密密钥库文件。

{
  "id": "local-signer",
  "type": "local",
  "config": {
    "path": "config/keys/local-signer.json",
    "passphrase": {
      "type": "env",
      "value": "KEYSTORE_PASSPHRASE"
    }
  }
}

配置字段:

字段 类型 描述
path String(字符串) 签名者 JSON 文件的路径。应位于 ./config 目录下
passphrase.type String(字符串) 密码来源的类型(envplain
passphrase.value String(字符串) 密码值或环境变量名称

HashiCorp Vault 签名者配置

Vault Secret(密钥)签名者

使用 HashiCorp Vault 的密钥引擎来存储私钥。

{
  "id": "vault-signer",
  "type": "vault",
  "config": {
    "address": "https://vault.example.com",
    "role_id": {
      "type": "env",
      "value": "VAULT_ROLE_ID"
    },
    "secret_id": {
      "type": "env",
      "value": "VAULT_SECRET_ID"
    },
    "key_name": "relayer-key",
    "mount_point": "secret"
  }
}

配置字段:

字段 类型 描述
address String(字符串) 指定 Vault API 端点
role_id.type String(字符串) 值来源的类型(envplain
role_id.value String(字符串) Vault AppRole 角色标识符值,或者存储 AppRole 角色标识符的环境变量名称
secret_id.type String(字符串) 值来源的类型(envplain
secret_id.value String(字符串) Vault AppRole 角色密钥值,或者存储 AppRole 密钥值的环境变量名称
key_name String(字符串) Vault 密钥引擎中用于签名操作的加密密钥的名称
mount_point String(字符串) Vault 中 Secrets 引擎的挂载点。如果未明确指定,则默认为 secret。 可选。

Vault Cloud 签名者

使用 HashiCorp Vault Cloud (HCP Vault) 进行密钥管理。

{
  "id": "vault-cloud-signer",
  "type": "vault_cloud",
  "config": {
    "client_id": "your-client-id",
    "client_secret": {
      "type": "env",
      "value": "VAULT_CLOUD_CLIENT_SECRET"
    },
    "org_id": "your-org-id",
    "project_id": "your-project-id",
    "app_name": "relayer-app",
    "key_name": "signing-key"
  }
}

配置字段:

字段 类型 描述
client_id String(字符串) 用于向 Vault Cloud 进行身份验证的客户端标识符
client_secret.type String(字符串) 值来源的类型(envplain
client_secret.value String(字符串) Vault 密钥值,或者存储密钥值的环境变量名称
org_id String(字符串) 你的 Vault Cloud 帐户的组织 ID
project_id String(字符串) 唯一标识你的 Vault Cloud 项目的项目 ID
app_name String(字符串) 与 Vault Cloud 集成的应用程序的名称
key_name String(字符串) 用于在 Vault Cloud 中进行签名或加密操作的加密密钥的名称

Vault Transit 签名者

使用 HashiCorp Vault 的 Transit secrets 引擎进行加密操作。

{
  "id": "vault-transit-signer",
  "type": "vault_transit",
  "config": {
    "address": "https://vault.example.com",
    "role_id": {
      "type": "env",
      "value": "VAULT_ROLE_ID"
    },
    "secret_id": {
      "type": "env",
      "value": "VAULT_SECRET_ID"
    },
    "key_name": "relayer-transit-key",
    "mount_point": "transit",
    "namespace": "production",
    "pubkey": "your-public-key-here"
  }
}

配置字段:

字段 类型 描述
address String(字符串) 指定 Vault API 端点
role_id.type String(字符串) 值来源的类型(envplain
role_id.value String(字符串) Vault AppRole 角色标识符值,或者存储 AppRole 角色标识符的环境变量名称
secret_id.type String(字符串) 值来源的类型(envplain
secret_id.value String(字符串) Vault AppRole 角色密钥值,或者存储 AppRole 密钥值的环境变量名称
key_name String(字符串) Vault Transit 引擎中用于签名操作的加密密钥的名称
mount_point String(字符串) Vault 中 Transit secrets 引擎的挂载点。如果未明确指定,则默认为 transit。 可选。
namespace String(字符串) 用于 API 调用的 Vault 命名空间。 这仅在 Vault Enterprise 环境中使用。 可选。
pubkey String(字符串) Vault's Transit 引擎中用于签名操作的加密密钥的公钥

Turnkey 签名者配置

使用 Turnkey 的安全密钥管理基础设施。

{
  "id": "turnkey-signer",
  "type": "turnkey",
  "config": {
    "api_public_key": "your-api-public-key",
    "api_private_key": {
      "type": "env",
      "value": "TURNKEY_API_PRIVATE_KEY"
    },
    "organization_id": "your-org-id",
    "private_key_id": "your-private-key-id",
    "public_key": "your-public-key"
  }
}

配置字段:

字段 类型 描述
api_public_key String(字符串) 与你的 Turnkey API 访问凭据关联的公钥。 用于向 Turnkey 签名服务进行身份验证
api_private_key.type String(字符串) 值来源的类型(envplain
api_private_key.value String(字符串) Turnkey API 私钥或包含它的环境变量名称。 与公钥一起使用以验证 API 请求
organization_id String(字符串) 你的唯一 Turnkey 组织标识符。 需要访问你的特定组织内的资源
private_key_id String(字符串) Turnkey 帐户中私钥的唯一标识符,该私钥将用于签名操作
public_key String(字符串) 与 private_key_id 标识的私钥相对应的公钥。 用于地址派生和签名验证

Google Cloud KMS 签名者配置

使用 Google Cloud Key Management Service 进行安全密钥操作。

对于 EVM 交易签名,请确保使用以下内容创建 Google Cloud KMS 密钥:<br>- 保护级别:HSM<br>- 目的:非对称签名<br>- 算法:“椭圆曲线 secp256k1 - SHA256 摘要”<br>这提供了 Ethereum 交易所需的 secp256k1 兼容性。
{
  "id": "gcp-kms-signer",
  "type": "google_cloud_kms",
  "config": {
    "service_account": {
      "project_id": "your-gcp-project",
      "private_key_id": {
        "type": "env",
        "value": "GCP_PRIVATE_KEY_ID"
      },
      "private_key": {
        "type": "env",
        "value": "GCP_PRIVATE_KEY"
      },
      "client_email": {
        "type": "env",
        "value": "GCP_CLIENT_EMAIL"
      },
      "client_id": "your-client-id"
    },
    "key": {
      "location": "us-west2",
      "key_ring_id": "relayer-keyring",
      "key_id": "relayer-key",
      "key_version": 1
    }
  }
}

配置字段:

字段 类型 描述
service_account.project_id String(字符串) 你的 KMS 资源所在的 Google Cloud 项目 ID
service_account.private_key_id.type String(字符串) 私钥 ID 的值来源类型(envplain
service_account.private_key_id.value String(字符串) 私钥 ID 值或包含它的环境变量名称
service_account.private_key.type String(字符串) 私钥的值来源类型(envplain
service_account.private_key.value String(字符串) Google Cloud 服务帐户私钥 (PEM 格式) 或包含它的环境变量名称
service_account.client_email.type String(字符串) 客户端电子邮件的值来源类型(envplain
service_account.client_email.value String(字符串) Google Cloud 服务帐户客户端电子邮件或包含它的环境变量名称
service_account.client_id String(字符串) Google Cloud 服务帐户客户端 ID
key.location String(字符串) 你的 KMS 密钥环所在的 Google Cloud 位置(区域)(例如,“us-west2”,“global”)
key.key_ring_id String(字符串) 包含你的加密密钥的 KMS 密钥环 ID
key.key_id String(字符串) 用于签名操作的 KMS 密钥 ID
key.key_version Integer(整数) 用于签名操作的 KMS 密钥的版本。 默认为 1

AWS KMS 签名者配置

使用 Amazon Web Services Key Management Service 进行加密操作。

{
  "id": "aws-kms-signer",
  "type": "aws_kms",
  "config": {
    "region": "us-west-2",
    "key_id": "arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012"
  }
}

配置字段:

字段 类型 描述
region String(字符串) AWS 区域。 如果密钥未跨区域复制,则此项必须与密钥的原始区域匹配。 可选。 如果未指定,则使用共享凭证中的默认区域
key_id String(字符串) AWS KMS 中密钥的 ID(可以是密钥 ID、密钥 ARN、别名或别名 ARN)

安全最佳实践

文件权限

  • 设置对密钥库文件的限制性权限:chmod 0500 config/keys/*

  • 确保配置目录已正确保护

  • 对密码和 API 密钥等敏感数据使用环境变量

密钥管理

  • 在可用时,对生产环境使用 HSM 支持的密钥

  • 实施适当的密钥轮换策略

  • 切勿将私钥或敏感配置提交到版本控制

  • 使用具有最少所需权限的专用服务帐户

环境分离

  • 对不同的环境(开发、暂存、生产)使用不同的签名者

  • 在生产环境中实施适当的密钥管理

  • 考虑使用云原生密钥管理服务来增强安全性

故障排除

常见问题

无效的密钥库密码

  • 验证密码环境变量是否已正确设置

  • 检查密钥库文件是否已损坏

  • 确保密钥库格式兼容

Cloud KMS 身份验证失败

  • 验证服务帐户凭据是否有效且格式正确

  • 检查服务帐户是否具有 KMS 操作所需的必要权限

  • 确保 KMS 密钥存在并且位于正确的区域/项目中

Vault 连接问题

  • 验证 Vault 服务器地址和网络连接

  • 检查 AppRole 凭据和权限

  • 确保 secret/transit 引擎已正确挂载和配置

有关其他故障排除帮助,请检查应用程序日志并参阅特定的云提供商或服务文档。

← 配置

网络配置 →

  • 原文链接: docs.openzeppelin.com/re...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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