ETH 钱包的 keystore 生成时 kdfparams 中的参数 n 的影响

首先,面向的问题是: Keystore 的生成很慢。

生成 Keystore 多慢呢,在 PC 端的浏览器上,从点击生成按钮开始大约要等 4 秒钟看到结果,这个还可以接受吧。
之后在一台 CPU 主频更低的笔记本上,需要约十几秒,还可以忍耐一下。
但在手机端 APP 上,手机配置低还可能导致 APP 闪退,直接就不能用了,所以就需要研究一下 Keystore 是怎么生成的,以及 Keystore 的参数分析。

关于 Keystore 是什么,可以搜索到的文章较多,但是解析 Keystore 的参数文章就很少,搜索到了简书上一篇文章 【HD-新钱包】-keystore参数详解,通过这篇文章有了一些了解,然后阅读了链接中的英文材料。

先说结论,主要是是 Keystore 中 crypto.kdfparams.n 这个字段影响生成 Keystore 的速度。现在默认的 n 值是 262144。

一个例子:

{
    "crypto" : {
        "cipher" : "aes-128-ctr",
        "cipherparams" : {
            "iv" : "83dbcc02d8ccb40e466191a123791e0e"
        },
        "ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c",
        "kdf" : "scrypt",
        "kdfparams" : {
            "dklen" : 32,
            "n" : 262144, // 在这里
            "r" : 8,
            "p" : 1,
            "salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
        },
        "mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097"
    },
    "id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
    "version" : 3
}

直接看 kdfparams 那部分,首先 kdf(key derivation function)使用 scrypt,kdfparams 顾名思义就是参数。

那么 n 有什么影响呢。

在使用 scrypt 这个算法计算 Derived key 的时候:

  • 参数 r 决定了连续读大小(sequential read size),通常不应该修改。
  • 参数 n 和 r 决定了占用的内存区域大小和哈希迭代次数(占用的内存大小为 128⋅n⋅r bytes,迭代次数为 2⋅n⋅r),所以可以修改的参数是 n。

当 n = 262144,r = 8,占用内存 268435456 bytes,就是 256MB,迭代次数就是 4194304 次。

那么 n 值为什么会是 262144,因为这个 scrypt 算法是用来加密你的私钥的,所以理论上越安全越好,所以这个 n 值其实是用来应对想要暴力破解你的 Keystore 的人的。

那么使用更大的 n 值生成 Keystore,在破解的时候需要的内存更大,计算的时间更长。这样破解者就需要购买更好的硬件,花费更长的时间来破解,破解的难度越大越好,时间和金钱成本过高,破解的收益 cover 不住破解的成本。

所以随着硬件的性能提高和价格的降低,n 值也会设定的越来越大。

当然,n 值也不能过大,因为 Keystore 需要能够在 PC 浏览器上或者在用户的手机上生成和使用,那么 n 值就得匹配用户手上主流的硬件设备,同时也得兼顾用户体验。

所以最后在想要兼容的性能稍差的测试机上试一试,我使用的测试机型号是 华为TRT-AL00(CPU频率 1.4GHz,内存 3GB)。

简单说一下最后的结果,当 n = 262144 时,会导致应用卡死闪退。最后减小 n 值,经过几轮测试,把 n 值定在了 65536,这样来兼容大部分低端配置的手机。

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

推荐阅读更多精彩内容

  • 冷钱包一般常用的地址导入及备份方式有keystore、private key、mnemonicv三种,不同的钱包偏...
    捕梦少女的梦想阅读 3,200评论 7 5
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,691评论 2 59
  • 一、实验目的 学习使用 weka 中的常用分类器,完成数据分类任务。 二、实验内容 了解 weka 中 explo...
    yigoh阅读 8,453评论 5 4
  • 多少个午夜梦回,爷爷奶奶会出现在我的梦里。 爷爷奶奶去世二十多年了,爷爷先于奶奶离开,比奶奶早离开十年。 爷爷去世...
    阿宁sunny阅读 684评论 0 3
  • 甲者, 铠甲也! 貌若十字矣! 申为动物之壳, 龟甲可为其例也! 亦可做趾上之角质硬壳矣, 可见于指甲之例也! 又...
    灰常出色阅读 357评论 0 0