在许多密码学应用中,用户安全最终取决于密码,并且由于密码通常不能直接用作密码密钥,因此需要进行一些处理,KeyStore正是在这种背景下孕育而生。KeyStore是基于用户的密码的和待加密的信息生成的一段JSON。KeyStore存储是目前区块链行业的共识和规范,被众多主流链如BTC,ETH规范认可。大部分区块链钱包采用的存储办法是KeyStore存储形式,如Binance DEX和TrustWallet等等钱包。
KeyStore存储具有以下特点
- 可校验;只有唯一的密码可以解密获得加密的信息
- 不可串改;KeyStore的加密部分,只要被修改了值将无法获得原始的加密信息,甚至不能通过密码校验
- 破解难度大;加解密需要通过层层哈希算法和千万次推导和加解密算法,每一次加解密都要耗时2-5秒左右,让暴力破解成为不可能的事情
KeyStore是怎么生成?又是怎么解密的呢?首先先看KeyStore的基本构成:
{
"crypto" : {
"cipher" : "aes-128-ctr",
"cipherparams" : {
"iv" : "6087dab2f9fdbbfaddc31a909735c1e6"
},
"ciphertext" : "5318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46",
"kdf" : "pbkdf2",
"kdfparams" : {
"c" : 262144,
"dklen" : 32,
"prf" : "hmac-sha256",
"salt" : "ae3cd4e7013836a3df6bd7241b12db061dbe2c6785853cce422d148a624ce0bd"
},
"mac" : "517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2"
},
"id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
"version" : 3
}
它包含了三部分信息
crypto
KeyStore加密信息的核心,接下来主要说明这一块的内容。
id
这个KeyStore的唯一ID。对于加解密并无关联
version
版本号。对于加解密并无关联
KeyStore的核心crypto
cipher
使用的加密算法;aes-128-ctr是一种加密算法,它的参数是:用户密码、待加密信息、iv、中间秘钥
cipherparams
加密的参数;iv是一般是一个随机的32位的十六进制字符串
ciphertext
加密的结果;待加密信息和用户密码通过一系列加密算法,最终生成的就是这样的一个十六进制字符串。我们的解密最终
kdf
基于用户密码的算法,通过密码和参数kdfparams,产生中间秘钥,这个中间秘钥将用于生成mac和ciphertext。一般用到的算法是:pbkdf2或scrypt
kdfparams
kdf算法的参数
c: 算法加密次数,越高越安全,但同时也更耗时间和性能。
dklen: 生成中间秘钥的字节数
prf: 哈希算法
salt: 一般是一个随机的32位的十六进制字符串
mac
用于验证密码的正确及验证ciphertext是否原装未经过修改;它通过产生的中间秘钥和ciphertext,经过SHA3哈希算法最终得到。
下面是它们的推导过程和联系
上述KeyStore的密码和待加密的信息如下:
- 密码:testpassword
- 待加密的信息(这里是一个私钥):7a28b5ba57c53603b0b07b56bba752f7784bf506fa95edc395f5cf6c7514fe9d
那么它的推导信息如下:
- Derived key(中间秘钥): f06d69cdc7da0faffb1008270bca38f5e31891a3a773950e6d0fea48a7188551
- MAC Body: e31891a3a773950e6d0fea48a71885515318b4d5bcd28de64ee5559e671353e16f075ecae9f99c7a79a38af5f869aa46
- MAC: 517ead924a9d0dc3124507e3393d175ce3ff7c1e96529c6c555ce9e51205e9b2
- Cipher key: f06d69cdc7da0faffb1008270bca38f5
相关文档:
Web3 Secret Storage Definition: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition
原文来自本人GitHub博客:https://www.yanglidong.com/what-is-keystore/
伟大的***