以太坊的keystore文件是用来储存账户的私钥的,一个地址对应着一个keystore文件.
当你调用以太坊函数进行
签名交易
的时候需要用到
密码
,这时候以太坊会读取keystore文件下的数据,并且使用你的密码进行一系列操作,最后还原出
私钥
,并且用这个私钥对你的交易进行
签名
.
在keystore中你的私钥并不是以明文形式存放的,而是经过加密,这就是为什么你在签名交易的时候需要输入密码的原因.
{
"address": "26ce833a705af6846da8c1a43d1e418b93458137", //账户地址
"crypto": {
//使用的加密算法,这里使用AES-CTR模式加密私钥,分组模式是128比特
"cipher": "aes-128-ctr",
//这是对原始私钥加密后的私钥的密文
"ciphertext": "e2edc5df564536dcf7fb8bcfde99404215d8dd8327684e9d27327a267181a791",
"cipherparams": {
//这是向量
"iv": "9847020ef0bb269b0c463d2ed4bb2ac4"
},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32, //解密秘钥的长度
//进行加密解密运算的次数,在越大的情况下,可以增加暴力破解的成本,也会使签名速度变慢
"n": 262144,
//设置为1为只能串行运算.0为并行运算.串行运算可以增加安全性.也会影响签名速度
"p": 1,
//加密的分组长度
"r": 8,
//可以理解为随机生成的向量
"salt": "56fc7ac270cd1a357a2bc1959119f10df4b69fabb4d0c198d6527f3c0fe2df6b"
},
//这是解密私钥密文的秘钥的hash值,防止用户输入错误的密码而计算出错误的私钥.用与比对私钥是否正确.
"mac": "7fde1727799710cf122d441c57c50cbc8182f666cca5a7717a8cb3bb8d21639d"
},
"id": "1d6b8676-de36-441d-a736-2a8ee94019ea",
"version": 3
}
以下是详细流程
1.我现在使用以太坊进行签名交易并输入密码.
2.然后以太坊代码拿着我们的密码去找keystore文件.
3.读取文件中的kdfparams下的参数再加上你的密码,使用以太坊内置的秘钥派生函数进行一系列的运算,算出你的私钥密文的秘钥.
4.然后拿着私钥密文的秘钥加载crypto下的参数进行按照参数里规定的算法来解密,获取到最终的私钥.
5.拿到最终私钥后在对私钥进行hash与文件中mac字段下的hash值进行对比,如果为真则私钥正确.在对交易进行签名
版权声明:本文为atco原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。