Logo
新用户订阅 RPC,首月享 6.5 折优惠查看优惠
OnFinality Learn
基础设施与运维阅读约 12 分钟

加密密钥存储:保护私钥与助记词的实用指南

了解如何安全存储加密货币私钥和助记词,涵盖威胁建模、热存储与冷存储、金属备份、多重签名以及自动化完整性检查。

TL;DR

加密密钥存储是指在整个生命周期内保持私钥和助记词的机密性、可用性和防篡改性的实践。正确的方法取决于密钥控制的对象、签名频率以及您要防御的威胁。本指南涵盖威胁模型、从热存储到冷存储的谱系、助记词与金属备份工作流、多重签名与密钥分片,以及一套可适应您自身环境的可运行验证流程。它将有据可查的标准、运维建议和您必须自行运行的测量区分开来。

加密密钥存储实际保护的是什么

加密密钥存储涵盖两种相关但不同的秘密。私钥是一种密码学值,用于为特定地址或验证者授权签名。助记词(mnemonic)是一种人类可读的根秘密,通常为 12 或 24 个单词,通过 BIP32/BIP39/BIP44 等确定性钱包标准从中派生许多私钥。丢失私钥会丢失一个地址;丢失助记词则可能丢失由其派生的所有地址。

因此,存储有三个目标而非一个:机密性(其他人无法读取或复制秘密)、可用性(需要时仍能签名或恢复)和完整性(能够检测篡改或意外损坏)。一种最大化机密性但破坏可用性的方法(例如记忆脑钱包)并不是好的存储系统。一种方便但将秘密泄露给恶意软件的方法则更糟。

本文面向为自己或基础设施持有密钥的人群:质押者、验证者运营者、资金管理者以及在部署流水线中处理签名密钥的开发者。本文假设您已理解:谁持有密钥,谁就控制资金或签名权限。

  • 私钥:为一个地址或验证者身份授权。
  • 助记词:派生多个密钥的根秘密;像保护其所控制的资金一样谨慎备份。
  • 口令(BIP39 可选词):改变派生钱包的额外秘密;与助记词分开存储。
  • Keystore 文件:加密的私钥,适用于自动化,但其安全性仅取决于密码和主机。

选择存储方法前的威胁模型

不存在普遍最佳的加密密钥存储方法。首先列出适用于您的威胁以及每种失败的代价。常见威胁包括远程恶意软件和剪贴板扫描器、钓鱼和虚假钱包软件、物理盗窃或房屋火灾、胁迫、共享服务器上的内部人员访问、意外删除以及设备或软件包的供应链入侵。

对于每个密钥,写下:它控制什么、必须多久签名一次、还有谁能访问主机,以及丢失与泄露分别会发生什么。每小时签名的热钱包密钥与绝不应接触联网机器的冷助记词具有不同的风险特征。这份清单是后续所有建议的基础。

  • 泄露风险:恶意软件、云同步、截图、shell 历史、日志、CI 变量。
  • 丢失风险:单一副本、忘记口令、硬件损坏、纸张不可读。
  • 物理风险:火灾、水灾、盗窃、被他人发现。
  • 运维风险:共享服务器、权限过大的 CI、未轮换的密钥。

从热存储到冷存储的谱系

存储方法处于从始终在线到完全离线的谱系上。热存储包括浏览器钱包、移动钱包、交易所账户以及服务器环境变量中的密钥。它方便且对于频繁签名是必要的,但秘密存在于联网机器上,容易受到恶意软件和错误配置的影响。温存储包括加固主机上的加密 keystore 或硬件支持的云密钥管理。冷存储将秘密保持在离线状态:硬件钱包、气隙机器以及助记词的金属备份。

实用规则是将方法与签名频率和价值相匹配。频繁签名的密钥应放在具有最小权限和监控的加固主机上;很少签名的密钥应离线保存。许多运营者采用混合方式:用于日常操作的有限资金热密钥,以及用于资金库的冷密钥或多重签名。有据可查的钱包标准定义了密钥如何派生,但并未规定如何存储;这是运维决策。

  • 热存储:快速,暴露于远程攻击者;仅用于有限余额或严格限定范围的签名角色。
  • 温存储:加密 keystore 或云 KMS;在访问受审计时适合自动化。
  • 冷存储:硬件钱包或气隙设备;最适合长期持有和根秘密。
  • 多重签名:没有单一设备持有完整密钥;适用于资金库和共享控制。

助记词与金属备份工作流

纸质备份无法抵御火灾、水灾和时间。金属备份(例如冲压钢板或基于垫圈的方案)能抵御许多物理威胁,但也带来自身风险:备份可能被发现,冲压过程可能将助记词泄露给摄像头或旁观者。可辩护的工作流将生成、记录、验证和分发分开。

在可信的离线设备上生成助记词,将其记录在金属上,通过在第二台离线设备上恢复来验证,并将副本存储在分开的安全位置。切勿将助记词输入联网计算机来“检查”。如果使用 BIP39 口令,请将其与助记词分开存储,以便找到其中一个不会同时获得两者。只记录所需内容:许多金属方案存储每个单词的前四个字母,这对于 BIP39 词表足够,但应在恢复期间进行测试。

  • 离线生成;切勿拍照或截图助记词。
  • 在私密空间冲压金属;清理碎屑和工具。
  • 在转移资金前,通过在第二台离线设备上恢复来验证。
  • 在分开的、访问受控的位置存储至少两份副本。
  • 将口令与助记词分开保存。

可运行检查:在不暴露密钥的情况下验证 keystore

对于温存储,加密 keystore 很常见。以下 Python 片段在本地解密 keystore,仅打印派生地址,绝不打印私钥。请在离线或可信机器上运行,切勿将真实 keystore 或密码粘贴到在线服务中。将占位符替换为您自己的文件路径和密码。

预期的验证结果是打印出的地址与该密钥的预期地址匹配。如果解密失败,则密码或文件有误;如果地址不同,则可能查看的是不同的 keystore 或派生路径。在地址与您的记录匹配之前,请勿继续签署交易。

from eth_account import Account
import json, os

KEYSTORE_PATH = "keystore.json"
PASSWORD = os.environ["KEYSTORE_PASSWORD"]  # never hardcode

with open(KEYSTORE_PATH) as f:
    ks = json.load(f)

key = Account.decrypt(ks, PASSWORD)
acct = Account.from_key(key)
print("address:", acct.address)
# Do not print key.hex()

可运行检查:确认 RPC 端点能看到您的地址

在恢复密钥或转移资金后,通过您信任的 RPC 端点确认该地址在链上可见。下面的 curl 调用查询 EVM 网络上某个地址的余额。使用来自您提供商的占位符 RPC_URL;不要在生产环境中硬编码公共端点。此检查验证连接性和地址格式,而非密钥安全性。

预期结果:包含十六进制余额的 JSON-RPC 响应。零余额可能是合法的;错误通常意味着地址格式错误、链错误或端点不可达。有关提供商选择和端点建议,请参阅 RPC Assistant 关于最佳以太坊 RPC API和RPC 端点指南的指导。

curl -s -X POST "$RPC_URL" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"eth_getBalance","params":["0xYourAddressHere","latest"]}'

高价值密钥的多重签名与密钥分片

对于资金库和共享基础设施,单一密钥是单一故障点。多重签名钱包需要 M-of-N 签名,因此没有单一设备或个人持有完整密钥。Shamir 秘密共享等密钥分片方案将秘密拆分为必须重新组合的份额;它们适用于备份分发,但需要谨慎的运维纪律,因为份额可能丢失或混淆。

多重签名通常比临时分片更容易审计和恢复,因为策略在链上或由知名钱包强制执行。分片更适合根秘密的离线备份。在两种情况下,都要记录策略,先用小额资金测试恢复,并将份额或签名设备存储在分开的位置。避免一个人可以独自重建秘密的方案,除非这是明确且已接受的风险。

  • 多重签名:策略由合约或钱包强制执行;适用于共享控制。
  • Shamir:将助记词拆分为份额;适用于分布式备份,对日常签名较弱。
  • 在投入大量资金前测试恢复。
  • 记录签名者身份、位置和恢复步骤。

服务器上密钥的运维卫生

服务器端密钥是可避免损失的最常见来源。切勿将密钥提交到 git,切勿将其粘贴到聊天或工单中,切勿将其留在 shell 历史中。使用秘密管理器或加密 keystore,限制文件权限,并以所需的最小权限运行签名进程。在员工离职或主机重建时轮换密钥。

对于验证者和节点运营者,在协议允许的情况下,将签名密钥与面向互联网的主机分开。监控意外的签名请求,并保留验证者密钥及其密码的离线备份。如果您运行专用基础设施,请查看专用节点选项,并将密钥材料排除在通用应用服务器之外。有关特定网络的设置,请参阅网络目录。

  • 使用环境变量或秘密管理器,而非源文件。
  • 设置严格的文件权限,避免共享账户。
  • 在员工变动和主机重建时轮换密钥。
  • 记录签名事件而不记录秘密。

验证与监控流程

在验证之前,存储并未完成。构建可重复的检查:在离线设备上从备份恢复,确认派生地址,并通过可信 RPC 端点确认链上可见性。在私人日志中记录日期、方法和结果。定期重复,并在托管发生任何变化后重复。

一个简单的结果表有助于跟踪检查而不存储秘密。用您自己的观察填写;不要复制他人的数字。下表是模板,而非测量数据。

  • | 检查 | 方法 | 预期结果 | 日期 |
  • | 助记词恢复 | 离线设备 | 地址与记录匹配 | (您的日期) |
  • | 金属备份可读性 | 目视检查 | 所有单词可读 | (您的日期) |
  • | Keystore 解密 | 离线脚本 | 打印预期地址 | (您的日期) |
  • | 链上可见性 | RPC 余额查询 | 地址返回响应 | (您的日期) |

常见存储故障排查

大多数密钥存储事件属于几种模式。恢复后得到不同地址的助记词通常意味着口令错误、派生路径不同或单词误读。无法解密的 keystore 通常意味着密码错误或文件损坏;如果 keystore 是唯一副本,请保留助记词的未加密离线备份。不可读的金属备份通常意味着冲压不良或腐蚀;在需要之前检查并重做。

如果您怀疑泄露,请立即将该密钥视为已泄露:将资金转移到新密钥,在协议支持的情况下轮换验证者密钥,并撤销授权。即使资金尚未被取走,也不要重复使用已泄露的助记词。如果在验证期间遇到端点或连接问题,请查阅相关的 RPC Assistant 指南,而不是假设密钥有误。

  • 恢复后地址错误:检查口令、派生路径和单词顺序。
  • Keystore 失败:验证密码、文件完整性和客户端版本。
  • 备份不可读:重做金属备份并再次验证。
  • 疑似泄露:转移资金、轮换密钥、撤销授权。

局限性、权衡与后续步骤

每种存储方法都在便利性与风险之间权衡。冷存储减少远程攻击面,但增加了因忘记口令或备份损坏而丢失的可能性。多重签名减少单点故障,但增加了协调和恢复复杂性。云密钥管理提高可审计性,但依赖于提供商的安全性和您的访问控制。不存在零风险选项;目标是使故障模式可见且可恢复。

作为后续步骤,清点您的密钥,为每个密钥分配存储层级,并在小额测试资金上运行上述验证流程。如果您运营节点或验证者,请查看API 服务和RPC 定价,将端点可靠性与密钥托管分开,并将签名密钥保留在您控制的基础设施上。对于特定提供商的端点选择,请使用 RPC Assistant,而不是在密钥管理计划中嵌入单一提供商。

  • 清点密钥并分配热、温或冷层级。
  • 在转移重大价值前测试恢复。
  • 记录策略并在员工或基础设施变更后审查。
  • 将端点选择与密钥托管决策分开。

永远不用担心基础设施

OnFinality 消除了 DevOps 的繁重工作,让您能够更聪明、更快地构建。

开始