主页 > 苹果手机imtoken怎么下载 > 科普|以太坊私钥存储文件
科普|以太坊私钥存储文件
众所周知,在区块链的世界里,私钥是你使用某个地址的唯一标识。 丢失私钥就相当于失去了这个地址的所有权。
以太坊私钥存储
以太坊的私钥文件存放在data目录下(datadir指向的还是默认目录),对应目录为keystore。 所有的私钥文件都被加密存储在这个目录中。
以太坊的客户端或图形界面帮助我们在底层实现复杂的密码。 我们唯一需要做的就是将加密后的私钥文件和加密后的密码保存(额外备份)在keystore下。 否则,存在丢失辛苦赚来的以太币或用钱购买的以太币的风险。
请记住,永远不要犯的错误:丢失密钥库文件或忘记密码!
在以太坊中创建一个帐户
在以太坊中创建账户的操作非常简单,但是有不同的呈现形式。 以geth客户端为例。
命令命令模式
bogon:geth zzs$ ./geth account new
Your new account is locked with a password. Please give a password. Do not forget this password.
Passphrase:
Repeat passphrase:
Address: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6}
bogon:geth zzs$ ./geth account list
Account #0: {0f7b73f3034d0d17a165e4cf50bd77051235b4e6} keystore:///Users/zzs/Library/Ethereum/keystore/UTC--2018-02-21T02-56-46.285140000Z--0f7b73f3034d0d17a165e4cf50bd77051235b4e6
bogon:geth zzs$
以上操作是直接执行geth客户端创建账户的命令(command),并显示账户私钥文件信息。 创建过程中需要输入两次加密私钥的密码。 这种方式的好处是不需要单独启动geth节点就可以创建账户。
控制台命令模式
这样需要先启动geth节点,进入console命令行交互界面。 然后执行以下命令:
> personal.newAccount("123456")
"0x00fe1b8a035b5c5e42249627ea62f75e5a071cb3"
// 或
> personal.newAccount()
Passphrase:
Repeat passphrase:
"0x6a787f16c2037826fbc112c337d7b571bb19c022"
使用个人角色管理和创建新帐户,以及设置密码。
密钥库文件
密钥库文件是您用于签署交易的以太坊私钥的唯一加密文件。 一旦文件或加密密码丢失,意味着您将失去在该地址发起交易和签署交易的权限,账户资金将被永久锁定。
keystore文件的价值在于以加密的方式存储密钥。 同时,您在使用时只需提供keystore文件和对应的密码即可发起交易。 安全性和可用性是完美的平衡。
但需要注意的是,一旦加密文件被密码解锁后,您就可以在有效期内通过客户端发起交易,其他人如果可以访问您的客户端,也可以发起交易。 在网络安全不够的情况下,这就是被盗币的场景之一。
密钥文件内容
密钥文件是一个文本文件,可以用任何文本编辑器或浏览器打开。
bogon:keystore zzs$ cat UTC--2018-02-21T03-01-27.385349000Z--6a787f16c2037826fbc112c337d7b571bb19c022
{
"address": "6a787f16c2037826fbc112c337d7b571bb19c022",
"crypto": {
"cipher": "aes-128-ctr",
"ciphertext": "8ed39b22ab67a787baa4ebb545382255f747328e2a3e2e74970a0f66b422d169",
"cipherparams": {
"iv": "8e0e0905919d6d1669957fdf65f114ce"
},
"kdf": "scrypt",
"kdfparams": {
"dklen": 32,
"n": 262144,
"p": 1,
"r": 8,
"salt": "a2a84d4843dbcb7c0aefa933f37ead073aefe8503ac8497b77828e85467c6822"
},
"mac": "1fc4a5d260fdd70e772fdc9a28614e82d5ff0adc6c98332f8455c5aa0a3352ad"
},
"id": "7bce1a69-79a2-429a-836c-cc2bf72c80de",
"version": 3
}
通过文件中的内容,我们可以看到是一个json字符串,里面包含了这个秘钥对应的地址,以及一些加密相关的信息。
原理分析加密密钥
以太坊账户由一对公私密钥组成以太坊私钥怎么用,并使用强对称算法(密码)进行加密。
我们来看看《ciphertex密文的对称解密》的具体流程图:
客户端读取密钥文件和加密后的密码,解密私钥,然后用私钥对发送的交易进行签名。
密码保护
以太坊使用基于密码的保护机制来解密密钥。 这样用户就不需要记住一串非用户友好的密码。 为了达到这个效果,以太坊使用了一个密钥生成函数,可以根据输入的密码和一系列参数计算出解密密钥。
这里涉及到kdf和kdfparams的使用:
用kdfparams参数调整scrypt函数以太坊私钥怎么用,从反馈的密码中得到解密密钥,这是密钥生成函数的输出。
密码错误
当密码输入错误时,密码推导、解密等操作会成功,但最终计算出的以太坊私钥不正确,因此无法进行解锁账户的操作。
mac 值在密钥库文件中发挥作用的地方。 密钥生成函数执行后,对其输出(解密密钥)和密文进行处理,并与mac进行比较(类似于数据签名)。 如果结果与mac相同,则密码正确,即可开始解密操作。
在与mac比较之前,需要将解密密钥(从左数第二个字节起16字节)与ciphertext*密文拼接并进行哈希处理(使用SHA3-256方法)。
流程审查
输入密码,作为kdf密钥生成函数的输入,计算解密密钥。 使用解密密钥和密文密文进行连接处理,与mac进行比对,确保密码正确。 最后通过密文对称函数用解密密钥对密文密文进行解密。