本文档详细介绍了OpenZeppelin Relayer支持的各种签名器配置,包括本地密钥库文件签名器、HashiCorp Vault秘密引擎签名器、HashiCorp Vault Transit签名器、Turnkey签名器、Google Cloud KMS签名器和Amazon AWS KMS签名器。
签名者负责在交易提交到区块链网络之前对其进行加密签名。OpenZeppelin Relayer 支持多种签名者类型,以适应不同的安全要求和基础设施设置。
每个签名者在 relayer 配置中都由其 id
引用。
签名者配置示例:
"signers": [
{
"id": "my_id",
"type": "local",
"config": {
"path": "config/keys/local-signer.json",
"passphrase": {
"type": "env",
"value": "KEYSTORE_PASSPHRASE"
}
}
}
]
OpenZeppelin Relayer 支持以下签名者类型:
local
: 密钥库文件签名者
vault
: 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_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 | 签名者类型特定的配置对象 |
本地签名者使用存储在文件系统上的加密密钥库文件。
{
"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 | 密码短语源的类型(env 或 plain ) |
passphrase.value | String | 密码短语值或环境变量名称 |
使用 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 | 值源的类型(env 或 plain ) |
role_id.value | String | Vault AppRole 角色标识符值,或存储 AppRole 角色标识符的环境变量名称 |
secret_id.type | String | 值源的类型(env 或 plain ) |
secret_id.value | String | Vault AppRole 角色密钥值,或存储 AppRole 密钥值的环境变量名称 |
key_name | String | 用于签名操作的 Vault 密钥引擎中的加密密钥的名称 |
mount_point | String | Secrets 引擎在 Vault 中的挂载点。如果未明确指定, 则默认为 secret 。可选。 |
使用 HashiCorp Vault 的 Transit 密钥引擎进行加密操作。
{
"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 | 值源的类型(env 或 plain ) |
role_id.value | String | Vault AppRole 角色标识符值,或存储 AppRole 角色标识符的环境变量名称 |
secret_id.type | String | 值源的类型(env 或 plain ) |
secret_id.value | String | Vault AppRole 角色密钥值,或存储 AppRole 密钥值的环境变量名称 |
key_name | String | 用于签名操作的 Vault Transit 引擎中的加密密钥的名称 |
mount_point | String | Transit 密钥引擎在 Vault 中的挂载点。如果未明确指定,则默认为 transit 。可选。 |
namespace | String | 用于 API 调用的 Vault 命名空间。这仅在 Vault Enterprise 环境中使用。可选。 |
pubkey | String | 用于签名操作的 Vault Transit 引擎中的加密密钥的公钥 |
使用 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 | 值源的类型(env 或 plain ) |
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 Key Management Service 进行安全密钥操作。
对于 EVM 交易签名,请确保使用以下项创建 Google Cloud KMS 密钥:<br>- 保护级别:HSM<br>- 目的:非对称签名<br>- 算法:“椭圆曲线 secp256k1 - SHA256 摘要”<br>这提供了以太坊交易所需的 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 的值源的类型(env 或 plain ) |
service_account.private_key_id.value | String | 私钥 ID 值或包含它的环境变量名称 |
service_account.private_key.type | String | 私钥的值源的类型(env 或 plain ) |
service_account.private_key.value | String | Google Cloud 服务帐户私钥(PEM 格式)或包含它的环境变量名称 |
service_account.client_email.type | String | 客户端电子邮件的值源的类型(env 或 plain ) |
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 |
使用 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 凭据和权限
确保密钥/传输引擎已正确挂载和配置
- 原文链接: docs.openzeppelin.com/re...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!