Ethereum 钱包加密

为演示 AES 密码的实际应用,我们来看一个真实场景示例Ethereum 区块链的标准加密钱包文件格式。我们将了解如何把 AES-128-CTR 密码与 ScryptMAC 结合,使用文本密码安全地实现认证对称密钥加密。

Ethereum UTC / JSON 钱包

在公共区块链网络(如 Bitcoin 和 Ethereum)中,区块链资产持有者的私钥存储在称为加密货币钱包的专用密钥库中。通常,这些加密货币钱包是本地硬盘上由密码加密的文件。

Ethereum 区块链中,加密货币钱包以一种特殊的加密格式存储,称为“UTC / JSON 钱包(密钥库文件)”或“Web3 秘密存储定义”。这是 gethParity(Ethereum 的主流协议实现)、MyEtherWallet(流行的在线客户端 Ethereum 钱包)、MetaMask(广泛使用的浏览器内 Ethereum 钱包)、ethers.jsNethereum 库,以及许多其他 Ethereum 相关技术和工具所使用的钱包文件格式

Ethereum UTC / JSON 密钥库JSON 文本文档形式保存加密私钥(或钱包助记词),其中指定了加密数据、加密算法及其参数。

UTC / JSON 密钥库——示例

来看一个示例 UTC / JSON 密钥库文件,其中保存了受密码保护的 256 位私钥。

{
  "version": 3,
  "id": "07a9f767-93c5-4842-9afd-b3b083659f04",
  "address": "aef8cad64d29fcc4ed07629b9e896ebc3160a8d0",
  "Crypto": {
    "ciphertext": "99d0e66c67941a08690e48222a58843ef2481e110969325db7ff5284cd3d3093",
    "cipherparams": { "iv": "7d7fabf8dee2e77f0d7e3ff3b965fc23" },
    "cipher": "aes-128-ctr",
    "kdf": "scrypt",
    "kdfparams": {
      "dklen": 32,
      "salt": "85ad073989d461c72358ccaea3551f7ecb8e672503cb05c2ee80cfb6b922f4d4",
      "n": 8192,
      "r": 8,
      "p": 1
      },
    "mac": "06dcf1cc4bffe1616fafe94a2a7087fd79df444756bb17c93af588c3ab02a913"
  }
}

上述 JSON 文档是认证对称加密的经典示例。

UTC / JSON 文件中有什么?

UTC / JSON 密钥库通常包含以下数据:

  • 密钥派生函数(KDF),用于把文本形式的钱包加密密码转换为 AES 对称密钥,以加密钱包内容。KDF 函数通常为“scrypt”。
    • KDF 参数——KDF 函数从密码派生密钥时使用的参数(如迭代次数、盐等)
  • 密文——加密后的钱包内容(通常包含一个加密的 256 位私钥)。
  • 对称密码算法及其参数,例如 AES-128-CTR + 初始化向量(IV)。
  • MAC——消息认证码,用于在消息解密后检查其完整性(从而判断钱包解密密码是否正确)。
    • Ethereum 的 MAC 计算方式是:将派生密钥从左侧数第二组 16 字节与完整密文拼接,再计算其 keccak-256 哈希。
  • 其他元数据:钱包格式版本、钱包唯一 id(uuid),以及该钱包控制的区块链地址

默认的密钥派生函数为 scrypt,并使用较弱的 scrypt 参数(n=8192 成本因子、r=8 分组大小、p=1 并行度),因此建议使用长而复杂的密码,避免钱包遭受暴力解密攻击。

MyEtherWallet:试用 UTC / JSON 密钥库文件

要更好地了解 Ethereum UTC / JSON 密钥库文件背后的文件格式,可以试用 MyEtherWallet

按照以下步骤创建一个新的随机 Ethereum 加密货币钱包,并查看其加密 JSON 内容:

  • 打开 MyEtherWallet 网站:https://myetherwallet.com
  • 选择一个密码并创建新钱包
  • 下载密钥库文件(UTC / JSON)。
  • 查看下载文件的内部内容
  • 尝试进行一些修改,例如使用错误密码解密或做其他更改。
  • 享受动手学习的过程。

results matching ""

    No results matching ""