比特币密钥是随机生成的,两个人生成的钱包会不会相同?

[content:title]

币安Binance

全球最大加密货币交易所,注册就送超额大礼,币圈小白基础学习资料添加客服v免费领取

电脑版 APP下载 官网注册
华为苹果&疑难

曾经,我有一个美荒)妙(谬)想法

图片
如果不断地生成比特币地址,会不会碰撞到别人的比特币地址?
也许你也有过这样的想法,或者有过这样担心:别人生成的比特币地址,会不会和我的一样?如果相同,会怎么样?

先说会怎么样
如果两个比特币地址生成相同,它就是一个地址。也就是如果生成的和别人一样比特币地址,那么你可以花费别人的比特币了,因为两人共同持有的是同一个钱包。
图片

再说会不会相同
比特币是基于密码学做安全保障的,而比特币的地址和私钥,分别对应着密码学的公钥和私钥。
在中心系统中,比如银行卡账号,它是由银行提供的,它的唯一性由银行做了保障。而比特币的地址和私钥(在密码学中,本质是一对密钥对,没有一个中心担保唯一性,它却是随机生成的。
那么有没有可能,生成两个相同的钱包地址

生日悖论
在谈论这个之前,我们先看另一个问题——“生日悖论”的问题:
“一个班级中,需要多少人,当中两人同一天生日的概率才会过半?答案是23人。而对于60人以上的班级,存在两人同生日概率大于99%。”
似乎有点出乎意料,如果不了解这个问题或许会说“不会吧,那么少?!”
这可以通过数学计算推导。
不考虑闰年的情况,我们看看人数为n的人群中,没有人生日相同的概率P(n)情况。
2个人的情况,由于一人的生日是定在1天,另一个人不能和他相同,所以可选的日期只有365-1=364了,也就是364/365,即:P(2) = 364/365;




同理推得,3人时候,第3个人可选日期只可以为:365-2=363,  所以有:P(3) = (364/365) * (363/365);
同理推得,4人时候,P(4) = (364/365) * (363/365) * (362/365);


所以,n < 365,P(n) =

图片
写成阶乘的形式:
图片
上面是“不存在有生日相同的概率,用1减去之,也就是:可能存在有生日相同的概率
图片
用python 代码演示下:












def P(n):    if n >= 366:        return 0        result = 1for i in range(1, n):        result *= (365 - i) / 365
   return result
for n in [10, 20, 30, 50, 100, 200]:    p = P(n)        print(n, "个人,存在相同生日的概率为:",1-p)
我们看看,n为不同数字时候,存在生日相同的概率大情况:
图片

注:当n = 200,存在相同生日概率:

    99.9999999999999999999999999998%

    超过精度了,所以显示有效小数仅为为1了。
想不到吧,随着n增加,存在相同生日的概率迅速接近1。

再看比特币地址的随机情况
太爽了,是不是我们不断地生成比特币地址,也可以碰到之前有人生成过的比特币地址?这样,就可以花费别人的比特币了。
果可行,这是一个何等刺激的事情,比挖矿还好玩了。

图片

前面说过,比特币是基于密码学做安全保障的,比特币地址的唯一性,本质是个数学问题的讨论。
比特币的公钥也就是地址,私钥才可以花费该地址的币,密码学中它们是成对生成的,在比特币系统使用的椭圆算法特点,私钥可以推导公钥,但反过来不行。这里就仅拿公钥也就是地址做随机问题的讨论了。
别看比特币地址长得这个靓(搓)样:
1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
其实它原始数据是一个256位的二进制数字,为了显示的便利性,上面是经过某种编码后的样式。
地址空间是256个bit的数字,如果我们把所有的比特币地址排在一起,他们是这样的:
图片
一共有多少个地址?——2^256个,约等于 1.158 * 10^77,如果没有概念,宇宙的原子数被估计含有10^80个,银河系中的原子数量为1.201×10^68。它比银河中原子数还大9个数量级。
生成一对比特币地址和私钥的机性,就等价于一个256个长度的“0、1”串的随机性了。
如何生成这样的随机数字是这样的......(省略了1万字),通俗的比喻,就是抛256次硬币,用“1、0”表示正反面,结果记录下来,这串数字就是你的比特币钱包了
两个地址生成一样的概率(两人抛256次硬币抛出结果一样)为1/ 1.158 * 10^77,这等价于,两人在银河中随机抽取原子,却抽到相同一个原子的事件了。
这几乎是不可能的事件了。

多人/多次碰撞概率情况
说了两人碰撞情况,接着看如果很多人同时碰撞情况会是如何?
按照前面的推导,n 个人,生成比特币地址存在相同的概率p(n):
图片
如果全人类70亿人每人生成一个比特币地址~算了,每人10000个比特币地址吧,随机生成70万亿个比特币地址,存在相同的概率有多大?
为了简化计算,我们做下不等式对比


p(n) = 1 - [(2 ^ 256 - 1) * (2 ^ 256 - 3) * …… (2 ^ 256 - n)] / [(2 ^ 256) ** n]          < 1 - [(2 ^ 256 - n) ** n] / [(2 ^ 256) ** n]
省去复杂的推算过程,直接给结果吧:p(70万亿) << 1 / (10^47)
也就是全球70亿人每人生成10000个比特币地址,存在两个相同地址的概率,小于一千万亿亿亿亿亿分之一数的很累,不知道有没有数错几个亿,反正知道是很多亿就是)
顺便说一下,买彩票中一等奖概率竟有1772万分之一,也就是中一等奖概率是前面的那个数字的不知道几个亿亿亿倍。
这样看来还是不去碰撞别人的钱包地址,买彩票更合算。
图片

为什么前面的生日问题,概率那么大,而钱包碰撞概率那么小?
因为生日问题,日期空间只有365(或者366)个,而密钥地址空间2^256,这个数字大到地球人口和算力在它面前都显得微不足道。

综上,靠碰撞到别人的比特币钱包,是不切实的。历史上有出现比特币被盗事件,但都是钱包泄漏导致的。


本文由币币网原创,如需转载请标明出处。本文内容不构成投资建议不承担相关法律责任。 币币网提醒:请广大读者树立正确的货币观念和投资理念,理性看待区块链,切实提高风险意识。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系站长举报,一经查实,本站将立刻删除。

正规借贷

广告
meme百倍币2024推荐
上一篇
比特币牛市如何赚更多钱?
下一篇

相关推荐