主页 > imtoken苹果版下载链接 > 账户Keystore文件导入导出-小专栏

账户Keystore文件导入导出-小专栏

imtoken苹果版下载链接 2023-09-07 05:12:33

以太坊去中心化网络钱包开发系列将从零开始开发一个实用的钱包。 本系列文章是理论与实践的结合。 一共有四篇文章。 这是第二篇,主要介绍钱包账户导出和导入,会介绍Keystore文件的生成原理。

如何导入Geth创建的账号?

在上一篇文章中,我介绍了如何使用私钥和助记词创建账户。 如果使用已有的私钥和助记词,这其实就是账户导入的过程。

有同学会问,我的账户是Geth生成的,怎么导入到钱包里? 使用Geth的同学应该都知道,Geth在创建账户的时候会生成对应的keystore JSON文件。 Keystore文件中存放的是加密后的私钥信息,所以我们需要做的就是导入这个Keystore文件,这个Keystore文件通常用于同步区块数据。 在keystore文件夹(如:~/.ethereum/keystore)目录下。

虽然在ethers.js中,可以通过一个简单的函数来完成keystore文件的导入,但是还是有必要了解一下Keystore文件的作用和原理。 当然以太坊app钱包开发实战 pdf,如果你不感兴趣,可以直接跳到本文最后一节:使用ethers.js实现账户导出导入。

详细解释为什么Keystore文件需要Keystore文件

通过本文,我们了解了HD钱包开发中涉及的BIP32、BIP44、BIP39。 私钥实际上代表一个账户。 最简单的账户保存方式就是直接保存私钥。 如果私钥文件被盗,我们的数字资产将被洗劫一空。

Keystore 文件是以加密方式存储密钥的文件。 在发起这样的交易时,首先用密码从Keystore文件中解密出私钥,然后对交易进行签名。 这样做之后就安全多了,因为只有同时窃取keystore文件和密码的黑客才能窃取我们的数字资产。

Keystore文件是如何生成的

以太坊采用对称加密算法对私钥进行加密生成Keystore文件,因此对称加密密钥的选择(注意实际上是发起交易时需要的解密密钥)非常关键。 此密钥是使用 KDF 算法派生的。 出去。 因此,在全面介绍Keystore文件是如何生成之前以太坊app钱包开发实战 pdf,有必要先介绍一下KDF。

使用 KDF 生成秘钥

密码学KDF(key derivation functions),其作用是通过密码推导出一个或多个秘钥,即从密码中生成用于加密的密钥。

其实在理解HD钱包开发涉及的BIP32、BIP44、BIP39时,引入助记词推导种子的PBKDF2算法是一个KDF函数,其原理是加盐,增加哈希迭代次数。

在Keystore中,使用了Scrypt算法。 如果用公式表示,则导出的Key生成方程为:

DK = Scrypt(salt, dk_len, n, r, p)

salt是随机盐,dk_len是输出哈希值的长度。 n为CPU/Memory overhead值,overhead值越大,计算难度越大。 r 表示块大小,p 表示并行度。

莱特币使用 scrypt 作为其 POW 算法

实际使用中会加密码进行计算,可以用一张图来表示这个过程:

以太坊在线钱包_以太坊app钱包开发实战 pdf_手机上以太坊钱包

对称加密私钥

上面已经用KDF算法生成了秘钥,作为后续对称加密的秘钥。 这里使用的对称加密算法是aes-128-ctr,aes-128-ctr加密算法还需要用到一个参数初始化向量iv。

密钥库文件

好了,现在我们可以结合具体的Keystore文件的内容,轻松理解Keystore文件是如何生成的。

{  
   "address":"856e604698f79cef417aab...",
   "crypto":{  
      "cipher":"aes-128-ctr",
      "ciphertext":"13a3ad2135bef1ff228e399dfc8d7757eb4bb1a81d1b31....",
      "cipherparams":{  
         "iv":"92e7468e8625653f85322fb3c..."
      },
      "kdf":"scrypt",
      "kdfparams":{  
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"3ca198ce53513ce01bd651aee54b16b6a...."
      },
      "mac":"10423d837830594c18a91097d09b7f2316..."
   },
   "id":"5346bac5-0a6f-4ac6-baba-e2f3ad464f3f",
   "version":3
}

让我们阅读每个字段:

我们完整的看一下Keystore文件的生成:

使用scrypt函数(根据密码和对应参数)生成秘钥使用上一步生成的秘钥+账户私钥+参数进行对称加密。 将相关参数和输出密文保存为上述格式的JSON文件。 如何保证密码正确?

我们在使用Keystore文件还原私钥时,仍然是使用kdf生成秘钥,然后使用秘钥解密密文。 过程如下:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf

这时候细心的同学会发现,无论如何使用指令密码执行这个操作,都会生成一个私钥,只是不知道最终计算出的以太坊私钥是否正确。

这就是密钥库文件中的 mac 值的作用。 mac值是kdf输出与密文密文进行SHA3-256运算后的结果。 很明显,不同的密码计算出的mac值是不同的,所以可以用来校验密码的正确性。 检查过程用图表示如下:

以太坊app钱包开发实战 pdf_手机上以太坊钱包_以太坊在线钱包

现在我们从解密的角度完整梳理一下这个过程,可以得到下图:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf

以太坊去中心化网络钱包开发系列将从零开始开发一个实用的钱包。 本系列文章是理论与实践的结合。 一共有四篇文章。 这是第二篇,主要介绍钱包账户导出和导入,会介绍Keystore文件的生成原理。

如何导入Geth创建的账号?

在上一篇文章中,我介绍了如何使用私钥和助记词创建账户。 如果使用已有的私钥和助记词,这其实就是账户导入的过程。

有同学会问,我的账户是Geth生成的,怎么导入到钱包里? 使用Geth的同学应该都知道,Geth在创建账户的时候会生成对应的keystore JSON文件。 Keystore文件中存放的是加密后的私钥信息,所以我们需要做的就是导入这个Keystore文件,这个Keystore文件通常用于同步区块数据。 在keystore文件夹(如:~/.ethereum/keystore)目录下。

虽然在ethers.js中,可以通过一个简单的函数来完成keystore文件的导入,但是还是有必要了解一下Keystore文件的作用和原理。 当然,如果你不感兴趣,可以直接跳到本文最后一节:使用ethers.js实现账户导出导入。

详细解释为什么Keystore文件需要Keystore文件

通过本文,我们了解了HD钱包开发中涉及的BIP32、BIP44、BIP39。 私钥实际上代表一个账户。 最简单的账户保存方式就是直接保存私钥。 如果私钥文件被盗,我们的数字资产将被洗劫一空。

Keystore 文件是以加密方式存储密钥的文件。 在发起这样的交易时,首先用密码从Keystore文件中解密出私钥,然后对交易进行签名。 这样做之后就安全多了,因为只有同时窃取keystore文件和密码的黑客才能窃取我们的数字资产。

Keystore文件是如何生成的

以太坊采用对称加密算法对私钥进行加密生成Keystore文件,因此对称加密密钥的选择(注意实际上是发起交易时需要的解密密钥)非常关键。 此密钥是使用 KDF 算法派生的。 出去。 因此,在全面介绍Keystore文件是如何生成之前,有必要先介绍一下KDF。

使用 KDF 生成秘钥

密码学KDF(key derivation functions),其作用是通过密码推导出一个或多个秘钥,即从密码中生成用于加密的密钥。

其实在理解HD钱包开发涉及的BIP32、BIP44、BIP39时,引入助记词推导种子的PBKDF2算法是一个KDF函数,其原理是加盐,增加哈希迭代次数。

在Keystore中,使用了Scrypt算法。 如果用公式表示,则导出的Key生成方程为:

DK = Scrypt(salt, dk_len, n, r, p)

salt是随机盐,dk_len是输出哈希值的长度。 n为CPU/Memory overhead值,overhead值越大,计算难度越大。 r 表示块大小,p 表示并行度。

莱特币使用 scrypt 作为其 POW 算法

实际使用中会加密码进行计算,可以用一张图来表示这个过程:

以太坊在线钱包_以太坊app钱包开发实战 pdf_手机上以太坊钱包

对称加密私钥

上面已经用KDF算法生成了秘钥,作为后续对称加密的秘钥。 这里使用的对称加密算法是aes-128-ctr,aes-128-ctr加密算法还需要用到一个参数初始化向量iv。

密钥库文件

好了,现在我们可以结合具体的Keystore文件的内容,轻松理解Keystore文件是如何生成的。

{  
   "address":"856e604698f79cef417aab...",
   "crypto":{  
      "cipher":"aes-128-ctr",
      "ciphertext":"13a3ad2135bef1ff228e399dfc8d7757eb4bb1a81d1b31....",
      "cipherparams":{  
         "iv":"92e7468e8625653f85322fb3c..."
      },
      "kdf":"scrypt",
      "kdfparams":{  
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"3ca198ce53513ce01bd651aee54b16b6a...."
      },
      "mac":"10423d837830594c18a91097d09b7f2316..."
   },
   "id":"5346bac5-0a6f-4ac6-baba-e2f3ad464f3f",
   "version":3
}

让我们阅读每个字段:

我们完整的看一下Keystore文件的生成:

使用scrypt函数(根据密码和对应参数)生成秘钥使用上一步生成的秘钥+账户私钥+参数进行对称加密。 将相关参数和输出密文保存为上述格式的JSON文件。 如何保证密码正确?

我们在使用Keystore文件还原私钥时,仍然是使用kdf生成秘钥,然后使用秘钥解密密文。 过程如下:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf

这时候细心的同学会发现,无论如何使用指令密码执行这个操作,都会生成一个私钥,只是不知道最终计算出的以太坊私钥是否正确。

这就是密钥库文件中的 mac 值的作用。 mac值是kdf输出与密文密文进行SHA3-256运算后的结果。 很明显,不同的密码计算出的mac值是不同的,所以可以用来校验密码的正确性。 检查过程用图表示如下:

以太坊app钱包开发实战 pdf_手机上以太坊钱包_以太坊在线钱包

现在我们从解密的角度完整梳理一下这个过程,可以得到下图:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf

以太坊去中心化网络钱包开发系列将从零开始开发一个实用的钱包。 本系列文章是理论与实践的结合。 一共有四篇文章。 这是第二篇,主要介绍钱包账户导出和导入,会介绍Keystore文件的生成原理。

如何导入Geth创建的账号?

在上一篇文章中,我介绍了如何使用私钥和助记词创建账户。 如果使用已有的私钥和助记词,这其实就是账户导入的过程。

有同学会问,我的账户是Geth生成的,怎么导入到钱包里? 使用Geth的同学应该都知道,Geth在创建账户的时候会生成对应的keystore JSON文件。 Keystore文件中存放的是加密后的私钥信息,所以我们需要做的就是导入这个Keystore文件,这个Keystore文件通常用于同步区块数据。 在keystore文件夹(如:~/.ethereum/keystore)目录下。

虽然在ethers.js中,可以通过一个简单的函数来完成keystore文件的导入,但是还是有必要了解一下Keystore文件的作用和原理。 当然,如果你不感兴趣,可以直接跳到本文最后一节:使用ethers.js实现账户导出导入。

详细解释为什么Keystore文件需要Keystore文件

通过本文,我们了解了HD钱包开发中涉及的BIP32、BIP44、BIP39。 私钥实际上代表一个账户。 最简单的账户保存方式就是直接保存私钥。 如果私钥文件被盗,我们的数字资产将被洗劫一空。

Keystore 文件是以加密方式存储密钥的文件。 在发起这样的交易时,首先用密码从Keystore文件中解密出私钥,然后对交易进行签名。 这样做之后就安全多了,因为只有同时窃取keystore文件和密码的黑客才能窃取我们的数字资产。

Keystore文件是如何生成的

以太坊采用对称加密算法对私钥进行加密生成Keystore文件,因此对称加密密钥的选择(注意实际上是发起交易时需要的解密密钥)非常关键。 此密钥是使用 KDF 算法派生的。 出去。 因此,在全面介绍Keystore文件是如何生成之前,有必要先介绍一下KDF。

使用 KDF 生成秘钥

密码学KDF(key derivation functions),其作用是通过密码推导出一个或多个秘钥,即从密码中生成用于加密的密钥。

其实在理解HD钱包开发涉及的BIP32、BIP44、BIP39时,引入助记词推导种子的PBKDF2算法是一个KDF函数,其原理是加盐,增加哈希迭代次数。

在Keystore中,使用了Scrypt算法。 如果用公式表示,则导出的Key生成方程为:

DK = Scrypt(salt, dk_len, n, r, p)

salt是随机盐,dk_len是输出哈希值的长度。 n为CPU/Memory overhead值,overhead值越大,计算难度越大。 r 表示块大小,p 表示并行度。

莱特币使用 scrypt 作为其 POW 算法

实际使用中会加密码进行计算,可以用一张图来表示这个过程:

以太坊在线钱包_以太坊app钱包开发实战 pdf_手机上以太坊钱包

对称加密私钥

上面已经用KDF算法生成了秘钥,作为后续对称加密的秘钥。 这里使用的对称加密算法是aes-128-ctr,aes-128-ctr加密算法还需要用到一个参数初始化向量iv。

密钥库文件

好了,现在我们可以结合具体的Keystore文件的内容,轻松理解Keystore文件是如何生成的。

{  
   "address":"856e604698f79cef417aab...",
   "crypto":{  
      "cipher":"aes-128-ctr",
      "ciphertext":"13a3ad2135bef1ff228e399dfc8d7757eb4bb1a81d1b31....",
      "cipherparams":{  
         "iv":"92e7468e8625653f85322fb3c..."
      },
      "kdf":"scrypt",
      "kdfparams":{  
         "dklen":32,
         "n":262144,
         "p":1,
         "r":8,
         "salt":"3ca198ce53513ce01bd651aee54b16b6a...."
      },
      "mac":"10423d837830594c18a91097d09b7f2316..."
   },
   "id":"5346bac5-0a6f-4ac6-baba-e2f3ad464f3f",
   "version":3
}

让我们阅读每个字段:

我们完整的看一下Keystore文件的生成:

使用scrypt函数(根据密码和对应参数)生成秘钥使用上一步生成的秘钥+账户私钥+参数进行对称加密。 将相关参数和输出密文保存为上述格式的JSON文件。 如何保证密码正确?

我们在使用Keystore文件还原私钥时,仍然是使用kdf生成秘钥,然后使用秘钥解密密文。 过程如下:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf

这时候细心的同学会发现,无论如何使用指令密码执行这个操作,都会生成一个私钥,只是不知道最终计算出的以太坊私钥是否正确。

这就是密钥库文件中的 mac 值的作用。 mac值是kdf输出与密文密文进行SHA3-256运算后的结果。 很明显,不同的密码计算出的mac值是不同的,所以可以用来校验密码的正确性。 检查过程用图表示如下:

以太坊app钱包开发实战 pdf_手机上以太坊钱包_以太坊在线钱包

现在我们从解密的角度完整梳理一下这个过程,可以得到下图:

手机上以太坊钱包_以太坊在线钱包_以太坊app钱包开发实战 pdf