-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 的字节数组)。关于所有正式定义,请查阅黄皮书。- 私钥、公钥和地址 由于私钥必须保密,我们还需要一种机制来标记发帐的目的地。因此,所有区块链都引入了地址(根据私钥计算出的一串独一无二的数字)这一概念。地址就是密码学资产的存储位置,(如有需要)可以分享给任何人,这样他们就能知道你的密码学资产余额。 区块链地址是通过公钥创建的,以确保你是这个地址的所有者。再往回推,公钥是通过私钥生成的。这个过程是单向的,也就是说你可以通过私钥计算出账户地址,但是不能通过账户地址倒推计算出私钥(哪怕是您自己,也做不到)。 私钥可以推出公钥,公钥可以推出区块链地址。但是,区块链地址无法用来推出公钥,公钥也无法用来推出私钥。 这一单向过程是通过密码学陷门函数(cryptographic trapdoor function)实现的。陷门函数是一种单向函数,一个输入值只能导致唯一的输出值,但是不能根据输出值倒推原始的输入值。不同的区块链生态系统采用不同的单向函数。例如,最流行的区块链系统使用基于椭圆曲线的代数结构来生成公钥。无论这些代数结构具备哪些特征,其结果始终是确定的:公钥是与私钥一一对应的,同一个私钥永远只能生成同样的公钥。 -虽然比特币或以太坊等流行的区块链使用 ECDSA 算法,用椭圆曲线 secp256k1上的固定点乘以私钥,即得出公钥。其它区块链项目也采用类似的方法。例如,门罗使用的是 EdDSA 算法和 Curve25519 曲线,Polkadot 和 Substrate 使用的是 sr25519 算法和 Ed25519曲线。所有这些区块链都基于 1 到2256- 1 范围内的私钥生成公钥。- (责任编辑:admin) |