比特币私钥为什么不能重现

重点分析下比特币私钥生成的原理,看能否重现私钥的,只要有私钥这个随机数就相当于拥有了整个账户,然而看到了这一句:

根据CPU当前性能来生成:

void RandAddSeed()
{
// Seed with CPU performance counter
int64_t nCounter = GetPerformanceCounter();
RAND_add(&nCounter, sizeof(nCounter), 1.5);
memory_cleanse((void*)&nCounter, sizeof(nCounter));
}
 
 
 
看到这个就不用去想自己能重现私钥了,如果只是时间随机数种子还是有希望的,遍历每毫秒。
 
实际上生成随机私钥用到了3种随机数:
// First source: OpenSSL's RNG
RandAddSeedPerfmon();
GetRandBytes(buf, 32);
hasher.Write(buf, 32);

// Second source: OS RNG
GetOSRand(buf);
hasher.Write(buf, 32);

// Third source: HW RNG, if available.
if (GetHWRand(buf)) {
hasher.Write(buf, 32);
}
基本上来说是真随机了,而不是我们平时生成的伪随机数。至少这个随机数没有办法重现,够狠,这也是比特币赖以生存的原因。
 
私钥是完全随机的,那么账号就是安全的,可以放心通过私钥生成公钥,地址等,比特币伟大之处在于够随机,随机的范围够广(0到2的256次方),以至于获得这个随机数(私钥)本身需要消耗巨大的成本,当成本无法覆盖收益时,逐利的人就不会选择来破解它。

posted on 2020-09-23 15:41  ccbupt  阅读(542)  评论(0编辑  收藏  举报

导航