解密以太坊的keystore文件

以太坊的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值进行对比,如果为真则私钥正确.在对交易进行签名

上一篇:使用java将一个文件的输出存储在另一个文件中


下一篇:使用androidStudio 查看安卓apk签名信息