什么是以太坊私钥储存(Keystore)文件

当前位置:首页 > 币圈百科 > 什么是以太坊私钥储存(Keystore)文件

什么是以太坊私钥储存(Keystore)文件

2022-11-21币圈百科212

进入keystore管理以太坊的私钥有很大的障碍,主要是以太坊客户端将大部分密码复杂度隐藏在直接命令行或图形界面下。

例如,使用geth:

$ geth account new您的新帐户被密码锁定。请输入密码。不要忘记这个密码。密码短语:重复密码短语:地址:{ 008 aeeda 4d 805471 df 9 B2 a5 b 0 f 38 a 0 C3 bcba 786 b } $ geth帐户列表account # 0:{ 8 a1 C4 d 573 cc 29 a 96547816522 cfe 0 b 266 e 88 ABAC }密钥库:~/。以太坊/密钥库/UTC--008 AEEDA 4d 805471 df9 b 2 a 50 f 38 a 0 C3 BCBA 786 b

我只需要输入3个字就可以创建一个新的账户。然后输入两次密码,就这么简单!我的以太坊密钥库文件已创建。你需要将那些珍贵的keystore文件备份并存储在一个或多个秘密位置,这样只有你才能得到这些文件并获得资金。从经验来看,当我没有完全理解一个新概念的微妙之处,并过度依赖抽象层和现有工具来使我的生活变得更容易时,我很可能会忘记一些东西,走不必要的捷径,并把它搞砸。当我搞砸了,可能只是以我辛辛苦苦挣来的以太坊被永久锁死而告终(还好还没发生!)。幸运的是,作为一个以太坊用户,你可以搞砸的方式并不多:1。您丢失了密钥库文件2。您忘记了与文件3相关的密码。或者你把以上两个都搞砸了。在本文中,我们将向您展示如何从keystore文件计算以太坊的私钥。我们将讨论加密函数(对称加密、密钥生成函数、SHA3哈希算法),但我们将尽力简明、直接地解释上述问题。

什么是密钥库文件?

以太坊的密钥库文件(蓑衣网小编2022 存储在~/中)。以太坊/keystore对于Linux系统或者在C:\ users \ appdata/roaming/以太坊/keystore对于Windows系统)是你唯一的加密文件,用于签署以太坊的私钥。如果你丢失了这个文件,你就失去了你的私钥,也就意味着你失去了签署交易的能力,也就意味着你的资金被永久锁在了你的账户里。当然,你可以直接将你的以太坊私钥存储在一个加密文件中,但这样你的私钥就容易被攻击。攻击者只需读取您的文件,用您的私钥签署交易,然后将钱转到他们的帐户。在你意识到发生了什么之前,你的钱会在短时间内丢失。这就是创建以太坊密钥库文件的原因:它允许您以加密的方式存储密钥。这是安全性(攻击者需要密钥库文件和您的密码来窃取您的资金)和可用性(您只需要密钥库文件和密码来使用您的资金)之间的完美平衡。为了让您发送一些以太坊,大多数以太坊客户端会让您输入密码(与创建帐户时的密码相同)来解密您的以太坊私钥。解密后,客户端程序获得私钥来签署交易,允许您转移资金。

密钥库文件看起来像什么?

如果你打开你的一个账号文件,看起来是这样的(取自这里):

out的文件,看起来是这样的(取自这里):

$ cat ~/。ether eum/keystore/UTC--008 aeeda 4d 805471 df9 B2 a5 b 0f 38 a 0 C3 bcba 786 b { ' crypto ':{ ' cipher ':' AES-128-CTR ',' cipher params ':{ ' iv ':' 83 DBC 02 D8 cc b40 e 466191 a 123791 e0e ' },'密文':' d 172 BF 743 a674 da 9 cdad 04534d 56926 ef 835855

让我们深入了解一下

如果你看一下这个keystore文件的结构,你会看到大部分内容都在“crypto”中:

“crypto”:{ ' cipher ':' AES-128-CTR ',' cipher params ':{ ' iv ':' 83 DBC 02 D8 cc b40 e 466191 a 123791 e0e ' },'密文':' d 172 BF 743 a 674 da 9 cdad 04534d 566

密文

:您的以太坊私钥使用上述密码算法加密;

KDF

:密钥生成函数,用来让你用密码加密keystore文件;

。kdf params

:上述kdf算法所需的参数;

MAC

:用于验证密码的代码。让我们看看它们是如何协同工作的,以及如何在您的密码下保护keystore文件。

1。加密您的私钥

如前所述,以太坊帐户是一个用于加密和签名交易的私钥-公钥对。为了保证你的私钥不是以明文形式存储在文件中(也就是说,任何人只要能拿到就能读取文件),使用强对称算法(cipher)进行加密是非常重要的。这些对称算法使用密钥来加密数据。加密后的数据可以用相同的方法和相同的密钥解密,因此该算法被命名为对称算法。在本文中,我们称这个对称密钥为解密密钥,因为它将用于解密我们的以太坊私钥。以下是cipher、cipherparams和密文的对应概念:

cipher

是一种对称加密算法,用于加密以太坊的私钥。这里的密码使用aes-128-ctr加密模式。

cipher params

是aes-128-ctr加密算法所需的参数。这里,唯一使用的参数iv是aes-128-ctr加密算法所需的初始化向量。

密文

密文是aes-128-ctr函数的加密输入。因此,在这里,你有你需要的一切来计算解密以太坊的私钥.诸如此类。您需要首先检索您的解密密钥。

-密文对称解密-

2。用您的密码

保护它为了确保您的帐户很容易解锁,您不需要记住用于解密密文的每个长且不便于用户使用的解密密钥。相反,以太坊开发者选择了基于密码的保护,也就是说你只需要输入密码就可以拿回解密密钥。为了做到这一点,以太坊使用了密钥生成功能,输入密码和一系列参数就可以计算出解密密钥。这就是kdf和kdfparams的用途:

。KDF

是一个密钥生成函数,它根据您的密码计算(或检索)解密密钥。这里,kdf使用scrypt算法。

KDF 蓑衣网小编2022par

am

s

是scrypt函数的必需参数。这里简单的说,dklen,n,r,p,salt就是kdf函数的参数。关于scrypt函数的更多信息可以在这里找到。这里用kdfparams参数调整scrypt函数,反馈给我们的密码,就会得到解密密钥,也就是密钥生成函数的输出。

-生成带有密码的密钥-

3。确保你的密码是正确的

我们描述了用密码和keystore文件生成以太坊私钥需要的所有东西。但是,如果解锁账号的密码错了会怎么样?根据我们目前看到的情况,所有操作(密码推导和解密)都会成功,但是最终计算出来的以太坊私钥不正确,这首先违背了使用密钥文件的初衷!我们必须确保解锁帐户的密码是正确的,就像最初创建密钥库文件时一样(回想一下在geth下创建新帐户时输入的两次密码)。这就是密钥库文件中的mac值发挥作用的地方。 在执行密钥生成函数后,其输出(解密密钥)和密文被处理[注1]并与mac(类似于批准的印章)进行比较。如果结果与mac相同,则密码正确,可以开始解密。【注1】此处略。在与mac比较之前,解密密钥(左起第二个字节的16个字节)应与密文连接并进行哈希处理(使用SHA3-256方法)。

把一切放在一起考虑

Phew!如果你已经这样做了,那么恭喜你!让我们回顾一下我们描述的3个功能。首先,您输入密码,该密码被用作kdf密钥生成函数的输入来计算解密密钥。然后,将新计算的解密密钥与密文连接并处理,与mac进行比较,以确保密码正确。最后,用解密密钥通过密码对称函数解密密文。看啊!解密结果就是你的以太坊私钥。在这里可以看到整个过程:

转自:https://www.bitshuo.com/topic/5ac868c93163e b52a 348 b 66

什么是以太坊私钥储存(Keystore)文件 | 分享给朋友: