区块链芝士丨私钥是什么?(1)
从实际角度来看,私钥就是一个数字(这个数字的大小在一定范围内),可以用来花费资金(这就是我们为什么要好好保管私钥的原因)。从数学角度来看,私钥就是一个随机生成的正整数。以下是从技术角度给出的更准确的描述:
私钥是一个在特定的正数范围内通过随机数生成器得到的数字,具有密码学意义上的强随机性特点。
在大多数情况下,计算机使用伪随机数生成器(PRNG)生成这些随机正整数(真正的随机数生成器很难找到。这些生成器通常需要专门的硬件,并使用物理源,如电路中的热噪声或盖革计数器的精确计时)。PRNG 是一种密码学加强型函数,需要输入一个熵足够大的值作为随机种子。
熵是一个复杂的概念,但是它的目的很简单:为函数带来不可预测性。通过使用安全的熵源,PRNG 可以创建出伪随机数,其非随机性概率是可以忽略不计的(在可接受的特定范围内)。
Linux 系统中的 “/dev/urandom” 和 Microsoft Windows 系统中的 “rand_s” 常作为 PRNG 的熵源,用来生成安全的随机数。在上图中,“range”既是数学概念里的范围,又指计算机用来生成随机数的字节大小。(由图可看出,RPNG 的作用就是在一个很大的范围内取出一个值;而熵保证了这个过程是足够随机的)
在创建以太坊或比特币私钥时,PRNG 的取值范围是从1 到 2256 - 1(想象一个由数字 0 到 9 组成、长达 78 位的密码锁)。由于这个范围很大,生成两个相同私钥的概率低到可以忽略不计,这就是为什么其他用户不太可能创建出跟你一模一样的私钥。你的私钥是从一个巨大的整数集合中选出来的 —— 几乎与整个宇宙中可见原子的总数差不多。
比特币和以太坊都采用了 1 到 2256 - 1 的范围,在这两条链的公钥生成算法下是可行的。例如,以太坊采用椭圆曲线(尤其是SECP-256k1)来生成公钥。在最初的黄皮书中,Gavin Wood 博士将私钥定义成是在 [1, secp256k1n − 1] 范围内随机选出的正整数(大端格式下长度为 32 的字节数组)。关于所有正式定义,请查阅黄皮书。