前言
- 本文在谈论私钥,公钥,助记词时,主要以比特币中的私钥,公钥和助记词为主。但其他公链的钱包也大都是差不多的,只是一些实现的细节不同罢了。
- 而对于 keystore 则是一种以太坊钱包存储私钥的方式。
- 本文所谈论的公,私钥(密钥对),在更大的层次上则是属于非对称加密算法,这里不对非对称加密算法进行细节上的解释。在比特币中,我们所使用的,具体的非对称加密算法叫做椭圆曲线加密算法(ECC)
- 钱包:数字货币中我们所谈论的钱包并不是日常中的钱包,日常中我们的钱包是用来装钱的,而数字货币中,钱包是用来装可以支配你钱的私钥,也就是说数字货币钱包装的是私钥。
私钥
私钥就是一串随机生成的数字,且这串数字是 256 位的 0,1组成的,所以理论上,你可以通过抛硬币的方式来计算出你的私钥。
将硬币的正面看做 1,反面看做 0,抛出 256 次后,就可以获得你的私钥。
当然实际的情况中我们不太可能使用这种方式生成私钥,在比特币中,它使用操作系统底层提供的随机数生成器来产生 256 位的私钥,一般来说 256 位的私钥也就是 64 位的 16 进制数,又因为 256 位的数字非常难以记忆,所以比特币中的私钥也通过 base58 编码方式进行编码,使其变得稍微人类可读,其实可读性也非常差。
// 256 位私钥
114604904405053798927683516487502222919494336928199559807704145590363653599709
// 转换成 16 进制
fd6013c32e8390f9dd2ca5f4eafb8ebb60716cb7a559d456b4a07d5a18aaf1dd
// 非压缩的 base58 编码,下面的这一串数字字符组合并不是来源于上面,且非压缩的方式已经被遗弃了
5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ
// 压缩的 base58 编码
KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617
特别的,经过 base58 编码后的格式也叫做钱包导入格式,你导入钱包用的私钥格式就是这个。
这里有一篇《私钥》的文章,其中介绍了关于比特币私钥进行 base58 编码的过程。
这里有一个通过鼠标移动生成私钥的在线 demo,你可以尝试一下。
私钥的意义是非常重要的,每个账户只有一个私钥,你尽可以把私钥当做是你的银行账户+密码。任何人拥有了你的私钥,就拥有了你比特币账户的使用权,所以一定要对你的私钥完全保密。
通常私钥可以用各种钱包来进行保存。比如纸钱包,其实就是记在纸上,脑钱包则是记在你的大脑里,往往我们使用的是各种钱包应用的 app,你可以通过这些 app 来创建你各种公链的钱包。
公钥
前面我们讲过,一个密钥对包含一个私钥和一个公钥,私钥是随机选择出来的,而公钥则是将私钥进行椭圆曲线算法得出来的,其中椭圆曲线算法就是一种单向函数,而接着我们又将公钥进行单向哈希运算,就得到了比特币的地址,其他公链的地址也大致如此。
助记词
助记词就是私钥的另一种形式,因为私钥是一串数字,非常容易摘抄出错,更不要说记忆了,比如像这个样子 0xA4356E49C88C8B7AB370AF7D5C0C54F0261AAA006F6BDE09CD4745CF54E0115A 于是将私钥通过一个算法生成一串英文单词,这就是助记词。
这里有一篇关于 钱包助记词从原理到实践 的文章,描述的足够清晰了。
keystore
keystore 是支持以太坊的钱包对私钥进行加密后保存为 json 文件的方式,简言之,就是对私钥保存的一种方式。相比于比特币这种未提供加密保存私钥的方式(当然你可以自己对其进行加密),keystore 更加的安全。
这里有一篇《什么是以太坊私钥存储文件》的文章,详细的介绍了 keystore 的原理。
参考
精通比特币_第四章 密钥和地址 钱包助记词从原理到实践 什么是以太坊私钥存储文件
|