区块链钱包-私钥与地址

私钥

私钥(yuè)本质上是一个256位随机数
那么什么是256位随机数呢?首先256位是指由256个0或1组成,如:1001001010001...,其次随机是指某一位上是0或1是随机没有规律的。举个例子,A想获得一个独属于自己的比特币私钥,那么他可以通过掷硬币来生成,正面朝上是1,反面朝上是0,掷了256次之后,他得到了一个数字序列,即为A的私钥。
看到这里,你可能会想,私钥的规则也太随意了吧,我随便写个数,只要不超过最大值,就是一个私钥?或者万一别人随机出了我的私钥,不是可以把我的资产拿走吗?
你想的没错,以上两个问题的答案都是肯定的…
但是,即使私钥只是一个数字,它仍然非常非常非常难以被破解!它的安全性来自于它包含的数字集合非常大,大到难以去穷尽所有数字,并进行一一验证。即使存在客观的重复的概率,但我们仍然可以称私钥在密码学上是安全的。如果你仍然心存疑虑,那么我们可以感性的感受下:
○ 私钥共有2^256个可能,近似于10⁷⁷。
○ 到目前为止,人类可观测的宇宙中的原子数约为10⁸⁰;
○ “双色球”一等奖的中奖概率是8×10ˉ⁸;
ok,我们现在知道了比特币的安全来自于非常严格的随机性,可以说我们选取的随机算法的强度影响了我们资产的安全性。使用一个可能会被预测的随机算法,不如掷硬币…

Tips!

如前文所述,私钥的本体就是一个数字,本身是不容易记忆和抄录的。为了便于使用,大部分钱包会对私钥进行编码,方便用户进行导入导出操作。目前主流的格式有HEX、WIF、WIF-compressed等。

地址

在传统银行用户模型中,用户需要账号+密码来操控自己的资产。而在比特币体系中,资产其实是存在每个私钥下的,用户只需要私钥即可以完全操控自己的资产。私钥的隐私性太强,是不可能让别人得知的,那么如何实现在不暴露自己私钥的前提下,让别人给自己转账呢?地址应运而生。
通过椭圆曲线算法(ECDSA),私钥可以计算出一个唯一且不可逆的公钥, 公钥通过特定的哈希计算得到公钥哈希,在对公钥哈希进行编码,即可得到地址。简单来说,因为公钥本身太长了,不利于交易的进行,所以通过一些变换得到地址。地址就是公钥的一种表现形式。
在比特币体系中,生成一个地址的流程大致为:
可以看出,比特币用于公开交易的地址是由公钥进行一系列数学计算得来的。顺理成章的,如果改变其中的哈希算法或者编码方式,就可以得到一个不同的结果,也就是一个新地址!这个特性使得一个私钥管理多种加密货币变为可能:
○ A私钥->A公钥-比特币地址算法->比特币地址
○ A私钥->A公钥-以太坊地址算法->以太坊地址
○ …

Tips!

为什么比特币地址要采用Base58编码呢?与Base64的是,Base58去掉了几个看起来可能会产生歧义的字母,如0(零)、O(大写字母O)、I(大写的字母i) 和 l(小写的字母L),以及两个影响双击选择的字符,如/和+。在设计层面尽可能降低地址输错带来的资金损失。