明文私钥:
明文私钥是由64位十六进制的字符组成,长得像这样,比如:27308ed8fb682dffc4b612312353506e9850266537a829221a3343b05821b181。
明文私钥的生成方式是完全随机的,随机生成这样的字符串就会有16的64次方种可能,即:2的256次方。
明文私钥的本质就是个随机数。只不过这个数字是固定长度的,且是16进制的表现形式。
地址:
大家都知道,公钥跟私钥是成对的,公钥由私钥计算而来,地址则通过公钥进一步计算而来。要注意:地址不是公钥,不要混淆概念。总之,有了私钥,就可以推导出它的公钥以及地址,地址一般长这样:0x71436f27C1DFf0e6464967F9a07625583996694d,以0X开头的42位的哈希值(16进制)字符串,由私钥可以根据算法推导出地址,但有地址不能逆推出私钥。
所以,地址可以随便公开,而私钥则万万不能公开。
助记词:
由于私钥64位,长得太难看,没有可读性,而私钥的备份在电脑上复制起来容易,手抄下来就比较麻烦,但私钥保存在联网的电脑上毕竟不安全,有被其他人看到的风险,于是有了助记词工具,利用某种算法可以将64位私钥转换成12(或者 15/18/21)英文单词,这些单词都来源于一个固定词库,根据一定算法得来。私钥与助记词之间的转换是互通的,助记词只是你的私钥的另一种外貌体现。
助记词一般会在你创建新钱包的时候出现一次,后面就再也不会出现了,所以一定要保存好。
简而言之:助记词就等于私钥,私钥就是钱,都千万不能见光。
钱包:
钱包是密钥(公钥和私钥)的管理工具,它只包含密钥而不是确切的某一个代币。钱包中包含成对的私钥和公钥。用户
用私钥来签名交易,从而证明该用户拥有交易的输出权。而输出的交易信息则存储在区块链中。
Keystore:
Keystore不是私钥,一般你创建以太坊钱包后,会让你备份Keystore, 它是一串代码,你可以自己保存为文本或者json格式,日后都可以用任何以太坊钱包打开它。Keystore的本质是加密后的私钥,Keystore必须配合你的钱包密码来使用,所以说,光备份了Keystore但忘记了钱包密码也是然并软了。
直接使用以太坊钱包,很少会直接看到自己的私钥,而是让你备份Keystore, 配合钱包密码来使用。即使黑客获取了你的Keystore, 还要破解钱包密码也还是有一定难度的,当然钱包密码也别设太简单。
{
"crypto" :{
"cipher" : "aes-128-ctr", //对称AES算法名称
"cipherparams" :{
"iv" : "83dbcc02d8ccb40e466191a123791e0e"
}, //cipher算法所需的参数
"ciphertext" : "d172bf743a674da9cdad04534d56926ef8358534d458fffccd4e6ad2fbde479c", //以太坊私钥经过cipher算法加密
"kdf" : "scrypt",// 密钥生成函数,用于让你用密码加密 keystore 文件;
"kdfparams" : {
"dklen" : 32,
"n" : 262144,
"r" : 1, "p" : 8,
"salt" : "ab0c7876052600dd703518d6fc3fe8984592145b591fc8fb5c6d43190334ba19"
},//上述kdf密钥生成函数所需参数
"mac" : "2103ac29920d71da29f15d75b4a16dbe95cfd7ff8faea1056c33131d846e3097" }, //用户验证密码的代码
"id" : "3198bc9c-6672-5ab3-d995-4942343ae5b6",
"version" : 3
}
keystore解密过程:
首先,你输入了创建账户时所设置的密码,这个密码作为 kdf 密钥生成函数的输入,来计算解密密钥。然后,刚刚计算出的解密密钥和 ciphertext 密文连接并进行哈希散列(用SHA3-256的方法) ,和 mac 比较来确保密码是正确的。最后,通过 cipher 对称函数用解密密钥对 ciphertext 密文解密。