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

区块链科普:什么是以太坊私钥储存(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)文件的资料请关其它相关文章!


阴阳师神秘妖怪稻草人咒锥哪里多(阴阳师稻草人咒锥是什么式神) 和平精英怎么发表情包(和平精英怎么发表情包动态) 我的世界六角恐龙鱼怎么驯服(我的世界六角蝾螈) 比特币概念股有哪些?_比特币概念股a股代码 lbank交易所是哪国的?lbank交易所官网介绍 如何计算比特币的交易费用,比特币交易手续费怎么计算? 王者荣耀生日福利皮肤怎么用不了(王者荣耀生日怎么设置) 欧交易所是OK网易欧交易所吗?欧交易所app官网登录地址入口 一文读懂区块链转账手续费是如何收取的呢? BitMax交易所怎么样正规吗?BitMax交易所最新官方网站入口 tradingview打不开加载不出来?tradingview国内使用的方法 艾尔登法环冰枪用什么武器(法师冰枪不破冰环) 给大家推荐几款2022最值得期待的手游(2022年值得期待的手游) AXS是什么币种?一文读懂AXS币价值前景和交易所盘点 消逝的光芒2键位怎么改(消逝的光芒2控制台) cf语音包什么角色都可以用吗(cf语音包只能职业选手用吗) 摩尔庄园手游昆虫怎么捕捉(摩尔庄园捕虫网) 诛仙手游怎么狩猎(诛仙手游怎么狩猎的) 值得玩的无限元宝版手游有哪些(无限元宝手机网游游戏) 梦幻西游劫狱成功给什么奖励(梦幻西游劫狱难杀吗) 我的世界图书管理员怎么生成(我的世界图书管理员生成条件) 梦幻西游神秘委托信怎么获得(梦幻西游神秘委托能得到多少钱) 比特币是什么东西,怎么产生的? 火焰纹章封印之剑哪些人值得培养?全人物初始属性分析 海妖交易所大陆用户能注册吗?中国用户可以用的币交易所排行 比特派钱包教程:BITHD硬件钱包导入助记词教程 派币今天最新官方消息真实_派币今天最新官方消息真实派最新消息 steam社区打不开用什么加速器?三款优质加速器推荐 一个比特币要挖多久?电费成本多少?普通人挖比特币赚钱的方式步骤 CZ在币圈是什么意思?CZ在币圈代表的哪个人,CZ详细资料 DNF110版本105传说装备怎么获得(dnf100级版本传说装备) 比特币是什么?合法吗?_比特币是什么?合法吗?是不是骗局? Coinsuper是什么交易所?币成交易所充值提现操作教程 BDI是什么币种?BDI币怎么样详细介绍 区块和节点是什么意思?区块和节点的关系是什么? 幻塔2.0旧维拉币怎么用(幻塔怎样) 新买的iPhone13,安卓手机数据迁移到苹果手机的操作教程 狗狗币创始人早卖光?比特币大佬看衰狗狗币 2020年以太坊出块速度是多少?以太坊的出块时间是如何计算的? SHIB2025年最高能涨到多少?SHIB币有没有可能涨到1美元详解 Deribit是什么交易所?Deribit交易所团队成员介绍 魔兽世界奇异之尘在哪买(怀旧服奇异之尘) 宝可梦阿尔宙斯大量出现怎么刷(阿尔宙斯怎么得) 和平精英云游戏是什么(和平精英云游戏和正常有啥区别) Jaxx(钱包)Wallet新手注册及使用教程 2个微信号怎么切换和平精英(2个微信号怎么切换和平精英账号) 放开那三国3哪一些武将好(放开那三国3什么英雄搭配最厉害啊?) 问道武器10改11要多少钱(问道武器改3到改4多钱) 有什么手游不花钱好玩的手游(不花钱的手游排行榜2021) 艾达币/ADA币2021年趋势怎么样?ADA币购买交易操作教程 个人发布租房平台推荐(个人发布租房平台怎么写) 蜀门手游逍遥怎么玩(蜀门委托任务逍遥散) 永劫无间升龙怎么放(永劫无间升龙释放技巧) USDC怎么买?火币网购买交易USDC币操作教程 问道手游幻鹿和葫芦哪个好(问道手游幻鹿御灵怎么加点) 稳定币是什么 稳定币有什么作用? 虚拟币交易哪个平台好?数字货币交易所排行榜前十名 和平精英怎么加巅峰赛战队(和平精英巅峰赛怎样加战队) USDT提币TRC20和ERC20有什么区别? 原神草种子有什么效果(原神草c) DORA是什么币种?DORA/铜锣烧币全面介绍 比特币指数是什么意思?比特币指数交易投资靠谱吗? 什么是代币合约?ERC20代币合约是什么? 魔兽世界荣耀印记有什么用(魔兽世界9.0荣耀印记怎么快速获得) 王者荣耀多少抽必得荣耀水晶 荣耀水晶多少抽必得(王者荣耀抽荣耀水晶多少钱必出) 一千元开店不需要店面的可以开哪些?四种操作简单小本经营项目推荐 创造与魔法黄金刷新地点(创造与魔法黄金分布图最新) 暗黑破坏神不朽自动拾取怎么开启(暗黑破坏神:不朽跳票) 冰原守卫者简易的木梭怎么搞(冰原守卫者手游攻略) 英雄联盟手游ad卡牌怎么出装(lol手游ad卡牌出装) 和平精英精彩时刻怎么保存到相册(和平精英精彩时刻怎么自动保存) 以太坊有什么优缺点? 问道手游云兽怎么加点和抗性(问道手游云兽技能选择) 16g运行内存设置多少虚拟内存?电脑虚拟内存设置方法 CXO是什么币种?CXO币前景和未来价值如何 区块链RFOX币是什么币种?RFOX币全面介绍 Libra和DECP究竟是什么?Libra和DECP有何关系? 王者荣耀扁鹊S26怎么出装(王者扁鹊最强出装) 王者荣耀星传说限定一般上线多久(王者星传说限时) 我的世界仙人掌有什么用(我的世界手游仙人掌有什么用) FIL挖矿:chia奇亚大火,FIL矿工该如何抉择? 有什么竖屏攻城手机游戏好玩(竖屏好玩的手机游戏) 奇亚币最新价格今日行情,奇亚币2025年最新官方消息 BitForex提现不了?币夫交易所提现人民币教程 在OKEx交易所用人民币购买泰达币USDT操作步骤教程 宝可梦传说阿尔宙斯冰六尾怎么进化(宝可梦冰六尾怎么得) 达世币怎么下跌这么严重?达世币值得长期持有吗价格预测 USDT如何转到别人账户?泰达币/USDT转出教程 幻塔友好的潜沙兔在哪(幻塔解密) 第五人格裘医是什么(第五人格裘医图片接吻) 非小号官网打不开了怎么办?非小号交易平台官网登录入口 SHIB币2025年销毁计划,屎币SHIB柴犬币2025官方最新消息 区块大小是什么意思?通俗解释区块大小/容量 易欧oex是什么交易平台?oex交易平台官网登录入口 有啥可以解压的休闲手游(有什么休闲解压的小游戏) 疫情过后赚钱的行业有哪些(疫情过后十大赚钱行业) dnf100级史诗怎么升级希洛克(dnf100级装备怎么升级希洛克) 网页如何清除缓存?怎样清理浏览器的缓存和垃圾 宝可梦朱紫精灵怎么抓(口袋妖怪紫精灵) 诛仙手游宠物技能怎么学(诛仙手游宠物技能怎么学的)

热门文章

推荐专题

更多>>

游戏推荐

更多>>