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

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

时间:2024-03-19 阅读:
特战英豪官网版

特战英豪官网版

  • 类型:射击空战
  • 大小:61.82MB
  • 语言:中文版
  • 版本:v1.0.0

进入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)文件的资料请关其它相关文章!


梦幻新诛仙怎么转职(诛仙手游玩什么职业好) 泰拉瑞亚十字章护身符怎么制作(泰拉瑞亚十字章护身符有什么用) Localbitcoins手续费多少?Localbitcoins交易所靠谱吗? 和平精英送皮肤必须满72小时吗(和平精英送皮肤必须三天以上好友吗) 第五人格记录员带什么天赋(《第五人格》记忆之旅) mysql安装图解设置详细教程(mysql安装教程详解) 创造与魔法狗子资质怎么算(创造与魔法狗怎么当宠物?) 专业的pdf编辑器哪个好用?盘点5个永久免费的PDF编辑器! 第五人格前锋天赋图怎样加点图(第五人格前锋最新加点) 有什么新开传奇三端互通版本(2021热门传奇三端互通) 和平精英车间怎么造车(和平精英工厂怎么制造汽车) 阴阳师神秘妖怪稻草人咒锥哪里多(阴阳师稻草人咒锥是什么式神) 我的世界怎么免费获得钻石买模组(我的世界手游怎么免费获取买模组的钻石) gbp是什么货币?GBP是什么意思? Solana公链代币有哪些?盘点十种Solana公链代币 cf音效卡有什么用(cf音效卡在哪买便宜) 魔兽世界精金粉怎么获得(魔兽世界精金棒怎么做) GDR概念是什么意思?GDR概念股票有哪些? 第五人格怎么抽刀(第五人格抽刀技巧) LUNA币是什么币?LUNA币的前景和价值怎么样? 一文读懂NFT非同质化代币发展史 BitBay是什么交易所?BitBay交易所全面介绍 元交易合约如何实现?智能合约开发实战:元交易(Metatransaction)系列二 以太坊ETH挖矿教程 NFT头像是什么意思?一文读懂NFT头像 有什么好玩的角色扮演手游吗(好玩的角色扮演游戏手游) 7号交易所怎么样?7号交易所真的安全靠谱吗? 区块链百科:密码朋克是什么意思? 宝可梦传说阿尔宙斯伊布亲密度怎么提升(阿尔宙斯新精灵) imToken冷钱包怎么创建?imToken冷钱包设置图解教程 比特币交易有休息日吗?像股票一样有交易时间的吗? 如何配置Trezor钱包?Trezor硬件钱包使用指南 有没有多人联机bt版游戏(多人联机中文版) 梦幻西游手游69八红和神兽哪个好(梦幻手游69带神兽还是多技能全红好) 哪些游戏不用登录账号也能玩(哪些游戏不用登录账号也能玩跑酷) 蜀门手游银子怎么交易(蜀门手游银子交易审核原则) 一个全部提现官方红包版有哪些(一块提现手赚软件) SHIB(柴犬币、狗屎币)是空气币吗? 柴犬币是不是主流币? 我的世界图书管理员怎么生成(我的世界图书管理员生成条件) 永续合约每天扣多少钱?永续合约手续费怎么算的? 助记词和私钥的区别是什么?助记词和私钥哪个重要? 有什么放置策略类游戏好玩(放置型游戏推荐) 第五人格人物技能有哪些(第五人格角色技能详解) 诛仙3百灵飞什么阵营(诛仙3灵阵灵组合攻略) csgo怎么开箱子(csgo怎么开箱子教程) 江南百景图中庭步月图怎么获得(江南百景图 山水庭帐) 诛仙手游焚天炎武器怎么获得(诛仙武器外观焚天炎怎么获得) BSCS是什么币种?BSCS币官网/总量和发行价介绍 摩尔庄园手游八音树怎么获得(摩尔庄园8) 创造与魔法普通的云鹰的坐标(创造与魔法云鹰怎么得) 有什么好玩的内置菜单游戏(2021内置菜单版的游戏) 蜀门手游仙禽武器用弓还是弩(蜀门仙禽弩技能) 火币永续合约规则有哪些? 和平精英手册兑换商店怎么兑换(和平精英手册兑换商店兑换什么好) 创造与魔法农耕管理台有什么用(创造与魔法农业) 区块链DeFi中TVL是什么意思?DeFi项目怎么参与? 公认的五大0氪金游戏(有没有0氪金的手游) 魔兽世界毒蛇神殿怎么进(魔兽世界毒蛇神殿副本视频) 在AToken钱包创建Ontology钱包图文操作教程 Solana钱包教程:Solana钱包操作及新项目参与步骤教程 区块链DApp是什么意思及DApp的应用有哪些 火币网如何快速充值买币?火币一键买币功能详细图文介绍 十大招聘网站(十大招聘网站排行榜) 口袋妖怪如何作弊(口袋妖怪黑白二金手指代码大全) STX币是什么币?STX币怎么样? 门罗币怎么买?门罗币/XMR币买入和交易教程 冰原守卫者锡矿速刷怎么完成(冰原守卫者佣兵技能) 动漫acg类养成手游有哪些(好玩的acg手游) 冰原守卫者佣兵实力怎么升(冰原守卫者攻略) 炉石传说费林大使怎么获得(费伍德森林炉石) UNFI币怎么买?UNFI币交易和买卖教程介绍 cf可以设置cf点消费密码吗(cf游戏里能设置消费密码么) gotv怎么看csgo比赛(csgogotv在哪看) BTC100是什么意思?BTC100交易平台介绍 轻闪pdf怎么样?这也能卷 全免费的pdf编辑神器 失落城堡手游魂晶如何获得 失落城堡手游平民魂晶使用攻略 欧易okx官网网址注册登录 欧易交易所平台币是什么? 王者荣耀怎么绑定关系(王者荣耀怎么绑定关系账号) 创造与魔法怎么打晕宠物(创造与魔法怎么快速打晕动物) 蜀门手游逍遥怎么玩(蜀门委托任务逍遥散) OpenSea是什么?opensea交易所开户、买卖NFT教学 不用肝的放置类手游有哪些(不用肝不用氪) okex挖矿花钱吗?okex挖矿提现额度 比特币价格最高的时候是多少钱一枚?比特币历史价格一览 ACX币总发行量和总市值是多少?ACX币项目介绍 DOT币怎么买?波卡DOT币买入交易操作步骤教程 比特币冷钱包哪个好?十大比特币钱包排行榜2022最新推荐 创造与魔法云斑鹦鸟位置必刷点(创造与魔法云斑鹦鸟位置必刷点2023) BSCPAD币发行量多少?BSCPAD币发行总量及前景如何介绍 黑色沙漠手游料理师的风采知识怎么获得(黑色沙漠料理从零到道人) 在区块链DeFi中什么是预言机?预言机的作用是什么? 王者荣耀武则天2022怎么出装(王者武则天出装2021) 币安合约手续费怎么算?币安合约手续费是多少? 星露谷物语莱纳斯的篮子在哪(星露谷物语莱纳斯剧情怎么触发) imtoken钱包的币如何提现到火币交易所? coinbase是正规平台吗?coinbase官网地址入口 琥珀币怎么样?AMB币前景和价值分析 和平精英改ID繁忙要等多久(和平精英改了id之后多久能再改) 欧易中国大陆用户能交易吗?欧易交易所安全吗? 问道手游辅助职业哪个好(问道手游各职业辅助技能)

热门文章

推荐专题

更多>>

游戏推荐

更多>>