手机版
扫描查看手机站
首页 > 文章 > 加密世界 > 正文

区块链科普:什么是以太坊私钥储存(Keystore)文件?

时间:2025-03-14 15:50:51来源:525游

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

例如,用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--<created_date_time>--  008aeeda4d805471df9b2a5b0f38a0c3bcba786b

我只需要输入3个单词就能创建一个新账户。然后输入两遍密码,就这么简单!我的以太坊keystore文件就创建了。

你需要把那些非常珍贵的keystore文件备份、存储在一个或多个隐秘的位置,这样就只有你能获取这些文件并取到资金。

从经验来看,当我没有完全理解一个新概念的微妙之处,并且过分依赖抽象层和现有工具来让我的生活更轻松时,我很有可能忘记一些事情,采取不必要的捷径并且搞砸它。搞砸的时候,可能就是会以我辛苦挣来的以太币被永久锁定而告终(幸好它还没有发生!)。

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

  1. 你丢失了你的keystore文件
  2. 你忘记了和文件关联的密码
  3. 或者以上两者你都搞砸了。

在本文中,我们将为你介绍以太坊私钥是如何从 keystore 文件中算出来的。我们将讨论加密函数(对称加密,密钥生成函数,SHA3 哈希算法),但我们会尽可能的保证简明直接地来解释上述问题。

什么是keystore文件?

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

当然,你可以直接把你的以太坊私钥存储在一个加密文件里,但是这样你的私钥容易受到攻击,攻击者简单的读取你的文件、用你的私钥签署交易,把钱转到他们的账户中。你的币会在你意识到发生什么了之前的短时间内丢失。

这就是以太坊 keystore 文件被创建的原因:它允许你以加密的方式存储密钥。这是安全性(一个攻击者需要 keystore 文件和你的密码才能盗取你的资金)和可用性(你只需要keystore文件和密码就能用你的钱了)两者之间完美的权衡。

为了让你发送一些以太币,大多数的以太坊客户端会让你输入密码(与创建账户时密码相同)以解密你的以太坊私钥。一旦解密,客户端程序就得到私钥签署交易,允许你移动资金。

Keystore文件是什么样子的?

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

ount’s file, it would look like this (taken from here):

$ cat ~/.ethereum/keystore/UTC--<created_date_time>--  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 文件,似乎与复杂的加密操作相关。这绝不吸引人。

让我们深入理解一下

如果你看这个 keystore 文件的结构,你会看到大部分内容都是在“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"
   },

这包括:

cipher:对称 AES 算法的名称;

cipherparams:上述 cipher 算法需要的参数;

ciphertext:你的以太坊私钥使用上述 cipher 算法进行加密;

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

kdfparams:上述 kdf 算法需要的参数;

Mac:用于验证密码的代码。

让我们看看他们是如何协同工作的,如何在你的密码下保护 keystore 文件。

1. 加密你的私钥

就像之前提到的,一个以太坊账户就是用于加密签署交易的一个私钥 —公钥对。为了确保你的私钥没有在文件中明文存储(即任何人只要能得到这个文件就能读),使用强对称算法(cipher)对其加密至关重要。

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

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

  • Cipher 是用于加密以太坊私钥的对称加密算法。此处cipher用的是 aes-128-ctr 加密模式。
  • Cipherparams 是 aes-128-ctr 加密算法需要的参数。在这里,用到的唯一的参数 iv,是aes-128-ctr加密算法需要的初始化向量。
  • Ciphertext 密文是 aes-128-ctr 函数的加密输入。

所以,在这里,你已经有了进行解密以太坊私钥计算所需要的一切...等等。你需要首先取回你的解密密钥。

区块链科普:什么是以太坊私钥储存(Keystore)文件?

-ciphertex 密文的对称解密-

2. 用你的密码来保护它

要确保解锁你的账户很容易,你不需要记住你的每一个又长又非用户友好型的用于解密 ciphertext 密文解密密钥。相反,以太坊开发者选择了基于密码的保护,也就是说你只需要输入密码就能拿回解密密钥。

为了能做到这一点,以太坊用了一个密钥生成函数,输入密码和一系列参数就能计算解密密钥。

这就是 kdf 和 kdfparams 的用途:

  • kdf 是一个密钥生成函数,根据你的密码计算(或者取回)解密密钥。在这里,kdf 用的是scrypt算法。
  • kdfparams 是scrypt函数需要的参数。在这里,简单来说,dklen、n、r、p 和 salt 是 kdf 函数的参数。更多关于 scrypt 函数的信息可以在这里找到。

在这里,用 kdfparams 参数对 scrypt 函数进行调整,反馈到我们的密码中,你就会得到解密密钥也就是密钥生成函数的输出。

区块链科普:什么是以太坊私钥储存(Keystore)文件?

-用密码生成密钥-

3. 确保你的密码是对的

我们描述了用密码和 keystore 文件生成以太坊私钥所需要的所有东西。然而,如果解锁账户的密码错误会发生什么?

根据迄今为止我们所看到的,所有操作(密码派生和解密)都会成功,但是最终计算的以太坊私钥不是正确的,这首先违背了密钥文件的使用初衷!

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

这就是 keystore 文件中 mac 值起作用的地方。在密钥生成函数执行之后,它的输出(解密密钥)和 ciphertext 密文就被处理【注1】,并且和 mac(就像一种认可的印章)作比较。如果结果和 mac 相同,那么密码就是正确的,并且解密就可以开始了。

【注1】这里有点简略了。在和 mac 进行比较之前,解密密钥(左起第二字节开始的16字节)要和 ciphertext 密文连接在一起,并进行哈希散列(用SHA3-256的方法)。

区块链科普:什么是以太坊私钥储存(Keystore)文件?

把所有的都放到一起考虑

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

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

首先,你输入了密码,这个密码作为 kdf 密钥生成函数的输入,来计算解密密钥。然后,刚刚计算出的解密密钥和 ciphertext 密文连接并进行处理,和 mac 比较来确保密码是正确的。最后,通过 cipher 对称函数用解密密钥对 ciphertext 密文解密。

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

区块链科普:什么是以太坊私钥储存(Keystore)文件?

就像你从图中可以看到的,整个过程可以看做一个黑盒(不过,图中是个灰盒),你的密码是惟一的输入,你的以太坊私钥是惟一的输出。所需的其他信息都可以在你的以太坊账户创建时生成的keystore文件中获得。

由于这个原因,请确保你的密码足够强(并且无论如何你要记住它!)才能保证即使攻击者偷到了你的keystore文件也不能轻易得到你的私钥。

以上就是区块链科普:什么是以太坊私钥储存(Keystore)文件?的详细内容,更多关于以太坊私钥储存(Keystore)文件的资料请关其它相关文章!


DNF上级元素结晶怎么得到(dnf2021上级元素结晶地位) 阴阳师两面佛怎么获得(阴阳师ssr两面佛的获取方式) steam页面加载不出来,无法访问怎么办?一键加速解决 GLM是什么币种?GLM币未来前景和价值分析 魔兽世界米米尔隆的头部怎么获得(米米尔隆在哪) 近期新开的回合制网游有哪些(2020年新出的回合制网游) 金铲铲之战暗星变异阵容怎么玩 暗星变异阵容攻略 原神杏仁豆腐怎么获得(原神杏仁豆腐去哪里找) 创造与魔法水池龟吃什么(创造与魔法水池龟吃什么?) 元气骑士爆裂飞盾怎么获得(元气骑士爆裂飞盾获得视频) 创造与魔法怎么打晕宠物(创造与魔法怎么快速打晕动物) 欧易新手使用教程 欧易入门级使用教程完整版 UKEX Global怎么充币?UKEX交易所充币、提币教程介绍 imtoken冷钱包怎么用?imtoken冷钱包安全吗? 2023热门bt不氪金手游有哪些(2020不氪金手游排行榜) 蜀门手游百花技能加点(蜀门手游百花怎么加血多) MiniSwap是什么交易所?MiniSwap交易所怎么样? 奇迹暖暖最美套装服饰介绍 奇迹暖暖最美服装属性详解 Uniswap v3如何革新UMA以及DeFi Imtoken钱包怎么提现人民币?怎样做才更加安全呢? 哪些是好玩不花钱的手游(好玩儿不花钱的手游) 好玩热血的传奇手游哪里玩(热血传奇手游值得玩吗) 黑色沙漠手游职业怎么换(黑色沙漠怎么转换职业) 如何简单的获取比特币地址? 新手必备:路由器WiFi详细设置对照表(路由器wifi参数设置) 锁仓挖矿为什么有收益?锁仓挖矿的收益是怎么来的? WEB3是什么意思?举例说明WEB2.0与WEB3.0区别 王者荣耀怎么不花钱获得赵云(王者荣耀怎么样才能免费获得赵云) 苹果手机丢了怎么定位找回?对方关机也能让你轻松锁定位置的方法 什么软件上的游戏全是内置菜单(打开内置游戏) PancakeSwap交易所下载与官方介绍,PancakeSwap交易所官网地址入口 u币交易所平台合法吗?u币交易所平台 数字货币APP排名网 binance交易所官方网站,正规binance交易所官网入口 Meme币前景怎么样?2025年暴涨的Meme币预测 太吾绘卷怎么邀请成为同道(太吾绘卷邀为同道后怎么请教功法) 欧易OKEX永续合约交易有时间限制吗? 诛仙手游灵阵攻略(诛仙手游阵灵阵法搭配) dnf属性攻击可以双属性吗(dnf属性攻击能多种生效吗) Tidex交易所怎么注册?Tidex交易所使用教程 中本聪为什么要发明比特币?比特币如何运作的? DNF圣域之痕一天能获得多少(圣域多久刷一次) 问道手游多少级可以秒5个目标(问道手游人物多少级秒5) 比特币指数是什么意思?比特币指数交易投资靠谱吗? 暗黑破坏神不朽死灵法师能召唤几个(暗黑破坏神不朽死灵法师召唤几个人) 新人如何选择比特币钱包?常见比特币钱包评测 Megabit交易所安全吗正规吗?Megabit交易所官方介绍百科资料 1个特朗普币多少钱怎么买?特朗普币今日最新价格历史走势 英雄联盟s1赛季2000分是什么段位(英雄联盟s21800分相当于什么段位) 云顶之弈s7龙神有哪些(云顶之弈龙战神) 有什么好玩的西游回合制手游(西游回合制手游有哪些) 区块链比特币之币天销毁 思维导图软件哪个好?三款款思维导图软件对比评测 消逝的光芒哈兰监狱boss打不死怎么办(消逝的光芒哈兰监狱最后一个boss打不死) ACX是什么币种?ACX币前景怎么样详细介绍 蜀门手游职业贫民推荐(蜀门手游职业选择攻略 哪个职业好) 终于有人将MySQL的安装讲明白了(mysql安装及使用教程) 猫币价格今日行情最新消息,猫币CAT今日实时价格历史走势 Poolin是什么矿池?Poolin矿池怎么样详细介绍 星露谷物语艾利欧特在哪里(星露谷物艾利欧特攻略) 比特币对冲交易能赚钱吗?比特币期货交易对冲方法盈利思路 欧易okx官网网址注册登录 欧易交易所平台币是什么? 英雄联盟手游怎么登陆别人的微信号(英雄联盟手游怎么登录别人微信) atoken钱包安卓怎么下载?AToken钱包余额怎么提现? 比特币最新价格 比特币BTC今日价格 比特币价值靠什么支撑?比特币究竟是什么? 江南百景图风筝怎么获得(江南百景图探险玩具风车) 问道手游玩家为什么都带金头陀(问道手游金头坨) BIKI是什么币?BIKI币官网、总量和交易所介绍 GHST是什么币种?GHST币前景怎么样? 苹果手机小圆点怎么弄出来?苹果手机小圆点打不开怎么办 怎么买狗狗币最安全呢?中国境内怎么买狗狗币步骤详解 推荐一些可兼职的数据标注众包平台(数据标注众包平台哪个最挣钱) 和平精英举报已被记录什么意思(和平精英举报系统通知被记) 币安合约支持哪个钱包进行交易?币安交易所优势有哪些? 火币、币安、gate.io、okex交易所手续费、价格、优缺点汇总 王者荣耀支付怎么改成支付宝(王者荣耀支付怎么改成支付宝支付的) 江南百景图金玉花首簪怎么打造(江南百景图玉如意) 有哪些开局送vip的手游(开局送vip的游戏软件) HTMOON是什么币?HTMOON币前景怎么样 帝国战纪手游英雄排行榜(帝国战纪游戏攻略) XCH币如何提到钱包?奇亚币提币到钱包教程详解 有哪些3d大型网游值得推荐(3d大型网游排行榜前十名) 创造与魔法怎么摘树叶(创造与魔法树叶怎么得树叶哪里多) 梦幻西游炼兽笼怎么使用(梦幻西游炼兽笼怎么使用的) 梦幻西游笑里藏刀有什么效果(梦幻西游笑里藏刀特技) 摩尔庄园手游感恩保温杯怎么获得(摩尔庄园菜品保温) ICP是什么币种?ICP币前景究竟如何? 柴犬币是哪个国家发行的?shib币是什么币? 和平精英cdk怎么获得(和平精英cdk怎么获得最快) 艾尔登法环武士装备哪里买(艾尔登法环战斗系统) 蜀门手游锻造加8技巧(蜀门手游锻造辅助 v1.0这个有人买了吗?) 消逝的光芒2烈酒保险箱密码是什么(消逝的光芒2隐藏结局) Cobo钱包EOS高级账户竞拍操作指南 小编喜欢的十二款策略类游戏推荐,经典单机策略游戏排行榜前十名) 诛仙手游阵灵怎么获得(诛仙手游阵灵怎么获得图纸) 什么回合制网游好玩不花钱(值得玩的回合制网游) 币蛋官网无法登录打不开了?Coinegg币蛋官网登录入口 解析波卡平行链与以太坊2.0架构设计有什么区别? 天猫魔盒如何刷机?小白都能懂天猫魔盒刷机教程步骤详解 ProBit是什么交易所?ProBit Global全面介绍

热门文章

推荐专题

更多>>

游戏推荐

更多>>