【HD-新钱包】-keystore参数详解

冷钱包一般常用的地址导入及备份方式有keystoreprivate keymnemonicv三种,不同的钱包偏重不同。

Keystore是一个分组密码,它使用加密散列函数来加密或解密您以太坊帐户的私钥。这是在您生成私钥来加密私钥后完成的(也就是说,您必须提供密码和此文件,而不仅仅是私钥)

所以说,光备份了Keystore但忘记了钱包密码也是无用的。

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

在imtoken创建的钱包生成的keystore文件示例:

{
"version":3,
"id":"d57df606-1b86-447a-a60e-18a539f9d92e",
"address":"dd750189c1d4b984dd09c6cb1872577876cda740"
"crypto":{
//私钥加密
      "cipher":”aes-128-ctr”,
      "cipherparams":{"iv":"262497534d19d7ea4a3998db620871d1”},
//密文
      "ciphertext":"18393e50d7ee3e95ab9c2e96dc1af14a42c4aad07c722292811c650229cb0c06”,
//通过密码解密密钥
      "kdf":"scrypt”,
      "kdfparams"    {
               "dklen":32,
               "r":8,
               "salt":"816c5b4b063aead329b043be0c2e2996e08a48af8bd392c32bc9d68786e6ced4",
               "p":1,
               "n":262144
         },
        "mac":"84ab5797ba8a87e8e6edd98360368077387ee1e01671bdaef517caf14b059837”,
     },
}

参数详解:

version- 版本号
address - 是加密后的公钥,明文显示
id- 随机

crypto 包含参数:

  • cipher - 对称 AES 算法的名称;(默认为aes-128-ctr),128代表位。又名“128位密钥”或“256位密钥”。数字越高,越安全。
  • iv - aes-128-ctr加密算法需要的初始化向量,大小必须符合密码的要求。如果没有提供,则通过crypto.getRandomBytes生成随机数。
初始化矢量(**IV**)是AES-128-CBC密码中使用的每个备份的16字节唯一字符串。它来源于加密密钥和实际的元数据明文。
-  EK是加密后的私钥
-  加密密钥(**EK**)是AES-128-CBC算法和PKCS7填充的16字节加密密钥。它被定义如下:
           EK = HMAC-SHA256(key: BackupKey, data: "Encryption Key")[0, 16]
-  iv是加密后的EK
  • ciphertext - 你的以太坊私钥使用上述 cipher 算法进行加密,密文是 aes-128-ctr 函数的加密输入
  • cipherparams - 上述 cipher 算法需要的参数

以太坊用了一个密钥生成函数,输入密码和一系列参数就能计算解密密钥。这就是 kdfkdfparams 的用途

  • kdf - 密钥派生函数。可能是scrypt或pbkdf2。这是你做了多少次努力才能使其更难以暴力。这种增加的计算工作使密码破解变得更加困难,并被称为密钥扩展。(这里默认为scrypt
而不是仅仅去:
                  `password -> hashed password`
它走了:
                 `password -> (MATH * 262144) -> hashed password.`
  • kdfparams - 上述 kdf 算法需要的参数;(scrypt算法需要的参数)
  • mac - 用于验证密码的代码,将导出密钥的最后16个字节与完整密文连接起来的SHA3(keccak-256)

验证密码流程:

1. 用户输入密码`password`+`salt`+`n`+`R`+`p`+`dklen`进行`scrypt`加密,得出`derivedkey`
2. `derivedkey`+`iv`+`私钥`进行`aes128`加密得出`ciphertext`,长度为 64 位
3. `derivedkey` +`ciphertext`(加密的私钥)进行`sha3-256`加密得出`Mac`,长度为 64 位
// 通过1+3来判断用户的密码是否输入正确。

简单来说,dklennrpsaltkdf函数的参数。

dklen:32,- 派生密钥长度(以字节为单位)。对于某些密码设置,这必须匹配那些块大小。
n:262144,- 迭代计数。geth的默认值为262144。因为浏览器不喜欢做262,144次事情,所以MEW降低。基本上,这是(MATH * 262144)从上面的数字。
r:8,- 底层散列的块大小。默认为8。
p:1 - 并行化因素。默认为1.基本上,你必须去0 ... 1 ... 2 ... 262143 ... 262144或262144 ... 262143 ... 2 ... 1 ... 0,你不能并行运行它们。如果您将其更改为2AES,我不知道它是否会改变任何内容。我不认为它的确如第2轮的散列那样是第#轮第1轮的散列,这是第0轮的散列。
salt - kdf的随机盐。大小必须符合KDF(密钥派生函数)的要求。如果没有提供,则通过crypto.getRandomBytes生成随机数。

/*
如果我只能CPU破解,我可以减少/覆盖我的scrypt设置为1024 * 8 * 1,所以我可以GPU破解它?
不可以。更改  N  将改变迭代计数,这将改变散列。如果您减少数字以使您认为自己是#winning,Hashcat将会大大加速,但即使您的字典中包含明文,它也不会破解散列。
*/
//步骤1:(128 * 8)* 262144 = 1024 * 262144 = 268,435,456字节= 256MB
//步骤2:64(AMD卡)* 64([RX Vega 64具有64个CU]
//         (https://www.techpowerup.com/gpudb/2871/radeon-rx-vega-64))= 4,096个并行计算
//步骤3:256MB * 4,096 = 1,048,576 MB RAM = **Vega 64需要1,024 GB RAM**
  • 所以,如果我忘记了内置£30,000的我的Eth钱包的密码,那么可能需要几年时间才能破解?!?!
  • 对。
    //n的值越大,加密级别越高,当然消耗的内存越大。

keystore流程图如下:

keystore file-生成流程图

Merkle Root是从密文构建的Merkle树的32字节根。为了简单起见,我们使用与比特币块中使用的相同的merkle树。由于这个merkle树容易受到突变(如果最后一个节点是奇数,它可以在不改变根哈希的情况下被复制),客户端将需要重新计算和验证IV值,因为它们也充当明文MAC。该密文被解释为正在使用散列1024字节块列表Hash256Ciphertext的最终块长度根据比特币Merkle树规范,如果元素(块或哈希)的任何中间列表是奇数,则最后一个元素将被复制。如果整个密文长度是1024个字节或更少,那么它的Hash256是一个merkle根。

参考链接:

https://stealthsploit.com/2018/01/04/ethereum-wallet-cracking-pt-2-gpu-vs-cpu/
https://ethereum.stackexchange.com/questions/37150/ethereum-wallet-v3-format?rq=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 11,305评论 5 29
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,575评论 0 1
  • 前言 《图解密码技术》一书介绍了很多关于密码的知识,通读一遍需要不少时间。为了方便学习,我对书中关键的部分进行了总...
    咖枯阅读 7,015评论 1 25
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,235评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139