主页 > imtoken钱包苹果 > 科普 | 什么是以太坊私钥存储(Keystore)文件?

科普 | 什么是以太坊私钥存储(Keystore)文件?

imtoken钱包苹果 2023-07-06 05:25:19

访问密钥库以管理以太坊私钥的门槛很高,主要是因为以太坊客户端将大部分加密复杂性隐藏在简单的命令行或图形界面下。

例如,对于 geth:

$ geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase: 
Address: {008aeeda4d805471df9b2a5b0f38a0c3bcba786b}
$ geth account list
Account #0: {8a1c4d573cc29a96547816522cfe0b266e88abac} keystore:~/.ethereum/keystore/UTC----  008aeeda4d805471df9b2a5b0f38a0c3bcba786b

我只需要输入 3 个词来创建一个新帐户。 然后输入两次密码,就这么简单! 我的以太坊密钥库文件已创建。

您需要将那些非常珍贵的密钥库文件备份并存储在一个或多个隐藏位置,以便只有您可以访问它们并访问资金。

从经验来看,当我不完全理解一个新概念的精妙之处,并过度依赖抽象层和现有工具来让我的生活更轻松时,我很可能会忘记事情,采取不必要的捷径并将其搞砸向上。 如果搞砸了,它最终可能会永远锁定我辛苦赚来的以太币(谢天谢地,这还没有发生!)。

幸运的是,作为一个以太坊用户,你可以搞砸的方法不多:

你丢失了你的密钥库文件

您忘记了与该文件关联的密码

或者你搞砸了以上两个。

在本文中,我们将向您介绍如何从密钥库文件中计算出以太坊私钥。 我们将讨论密码函数(对称加密、密钥生成函数、SHA3 哈希算法),但我们会尽量使解释尽可能简洁直接。

以太坊根据地址计算私钥_以太坊官网以太坊_以太坊算力计算

什么是密钥库文件?

以太坊密钥库文件(在 Linux 系统上存储在 ~/.ethereum/keystore 或在 Windows 系统上存储在 C:\Users\Appdata/Roaming/Ethereum/keystore 中)是您用于签署交易的唯一以太坊私钥。 加密文件。 如果你丢失了这个文件,你就丢失了你的私钥,这意味着你失去了签署交易的能力,这意味着你的资金被永久锁定在你的账户中。

当然,你可以直接将你的以太坊私钥存储在一个加密文件中,但是你的私钥很容易受到攻击,攻击者只需读取你的文件,使用你的私钥签署交易,然后将资金转入他们的账户。 在您意识到发生了什么之前,您的硬币会在短时间内丢失。

这就是创建以太坊密钥库文件的原因:它允许您存储加密的密钥。 这是安全性(攻击者需要密钥库文件和您的密码来窃取您的资金)和可用性(您只需要密钥库文件和密码来花钱)之间的完美平衡。

为了让你发送一些以太币,大多数以太坊客户端会要求你输入密码(与你创建帐户时使用的密码相同)来解密你的以太坊私钥。 解密后,客户端程序将获得私钥来签署交易,从而允许您转移资金。

密钥库文件是什么样的?

如果您打开其中一个帐户文件,它看起来像这样(取自此处):

ount 的文件,它看起来像这样(取自此处):

$ cat ~/.ethereum/keystore/UTC----  008aeeda4d805471df9b2a5b0f38a0c3bcba786b
{
    "crypto" : {
        "cipher" : "aes-128-ctr",
        "cipherparams" : {
            "iv" : "83dbcc02d8ccb40e466191a123791e0e"
        },
        "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c",

以太坊根据地址计算私钥_以太坊官网以太坊_以太坊算力计算

       "kdf" : "scrypt",        "kdfparams" : {            "dklen" : 32,            "n" : 262144,            "r" : 1,            "p" : 8,            "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"        },        "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097"    },    "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",    "version" : 3 }

一个笨重的 JSON 文件,其中包含许多似乎与复杂的加密操作相关的神奇参数。 这绝不是吸引人的。

让我们深入挖掘

如果您查看此密钥库文件的结构,您会发现大部分内容都在“crypto”中:

以太坊根据地址计算私钥_以太坊官网以太坊_以太坊算力计算

"crypto" : {
    "cipher" : "aes-128-ctr",
    "cipherparams" : {
     "iv" : "83dbcc02d8ccb40e466191a123791e0e"
    },
    "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c",
    "kdf" : "scrypt",
    "kdfparams" : {
     "dklen" : 32,
     "n" : 262144,
     "r" : 1,
     "p" : 8,
     "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
    },
    "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097"
   },

以太坊根据地址计算私钥_以太坊官网以太坊_以太坊算力计算

这包括:

让我们看看它们如何协同工作以使用您的密码保护密钥库文件。

1.加密你的私钥

如前所述,以太坊账户是用于对交易进行加密签名的私钥-公钥对。 为了保证你的私钥不明文存储在文件中(即任何能拿到文件的人都能读取),用强对称算法(cipher)加密是必不可少的。

这些对称算法使用密钥来加密数据。 加密数据可以用相同的方法和相同的密钥解密,因此该算法被命名为对称算法。 在本文中,我们将此对称密钥称为解密密钥,因为它将用于解密我们的以太坊私钥。

以下是cipher、cipherparams、ciphertext对应的概念:

因此,在这里,您拥有了进行计算以解密以太坊私钥等所需的一切。 您需要先检索您的解密密钥。

以太坊根据地址计算私钥_以太坊算力计算_以太坊官网以太坊

-ciphertex密文的对称解密-

2. 用密码保护它

为确保轻松解锁您的帐户,您无需记住用于解密密文的每一个又长又不友好的解密密钥。 相反,以太坊开发人员选择了基于密码的保护以太坊根据地址计算私钥,这意味着您只需输入密码即可取回解密密钥。

为了做到这一点,以太坊使用了密钥生成函数,可以通过输入密码和一系列参数来计算解密密钥。

这就是 kdf 和 kdfparams 的用途:

这里用kdfparams参数调整scrypt函数,反馈给我们的密码,就可以得到解密密钥,也就是密钥生成函数的输出。

以太坊算力计算_以太坊官网以太坊_以太坊根据地址计算私钥

-使用密码生成密钥-

以太坊算力计算_以太坊官网以太坊_以太坊根据地址计算私钥

3.确保您的密码正确

我们描述了从密码短语和密钥库文件生成以太坊私钥所需的一切。 但是,如果解锁账户的密码错误怎么办?

就我们目前所看到的,所有操作(密码推导和解密)都会成功,但是最终计算出的以太坊私钥是不正确的,这违背了使用密钥文件的初衷!

我们需要确保解锁账户时输入的密码是正确的,与最初创建keystore文件时的密码一致(回想一下在geth下新建账户时输入的两次密码)。

这是密钥库文件中的 mac 值发挥作用的地方。 执行密钥生成函数后,对其输出(解密密钥)和密文进行处理()并与 mac 进行比较(就像一种认可印章)。 如果结果与mac*相同,则密码正确,可以开始解密。

():这里稍微说一下。 在与 mac 比较之前以太坊根据地址计算私钥,将解密密钥(从左起第二个字节开始的 16 个字节)与 ciphertext* 密文连接并进行哈希处理(使用 SHA3-256 方法)。 欲了解更多信息,请访问此处。

以太坊官网以太坊_以太坊根据地址计算私钥_以太坊算力计算

把它们放在一起

哟! 如果你已经做到了这一步,那么恭喜你!

让我们回顾一下我们描述的 3 个函数。

首先,您输入密码,该密码用作 kdf 密钥生成函数的输入以计算解密密钥。 然后将刚刚计算出的解密密钥与密文密文拼接处理,与mac进行比较,确保密文正确。 最后通过密文对称函数用解密密钥对密文密文进行解密。

看! 解密的结果就是你的以太坊私钥。 你可以在这里看到整个过程:

以太坊官网以太坊_以太坊算力计算_以太坊根据地址计算私钥

从图中可以看出,整个过程可以看成一个黑框(不过图中是灰色框),你的密码是唯一的输入,你的以太坊私钥是唯一的输出。 所需的所有其他信息都可以在创建以太坊帐户时生成的密钥库文件中找到。

因此,请确保您的密码足够强(并且您无论如何都要记住它!),这样即使攻击者窃取了您的密钥库文件,也无法轻易获得您的私钥。

伙计们,这就是本文的全部内容!

如果您喜欢这篇文章,或者有任何疑问,请随时添加评论!

原文链接:@julien.m./what-is-an-ethereum-keystore-file-86c8c5917b97