W3Schools



比特币用户经常为他们所做的每笔交易生成新地址,这大大增加了用于接收资金的比特币地址数量。

是否有可能(并且有利可图)某人在比特币地址空间中发现碰撞以便偷钱?

荣一娱乐官网_荣一娱乐注册_荣一娱乐交易所
securityaddressweaknesseskey-collision
11个回答
55

它可能在“理论上”是可能的,但实际上它不可能实现 - 因为计算办公楼中的原子数量不太可能。

比特币地址实际上是256位SHA hash of an ECDSA public key, so any vulnerabilities in those algorithms would constitute a vulnerability in bitcoin itself. Realistically, however, breaking this level of encryption requires a huge amount of processing power. Coincidentally it requires precisely the same kind of processing power that bitcoin mining requires and in almost every scenario it would be massively more profitable to mine than to hack.

编辑:它实际上是RIPEMD-160(SHA-256(公钥)),而不是我最初提到的SHA-256(公钥),因此它是公钥的256位哈希的160位哈希。由于最后一步,目标键空间(160位)较小,但它也是潜在黑客必须进行的额外计算。虽然额外的计算复杂性甚至没有接近取消96位密钥空间的删除,但应该注意的是,在160位密钥空间中发现冲突仍然是非常困难和耗时的。更重要的是,它比实际采用相同数量的硬币更加困难和耗时,因此任何人甚至不太可能尝试这样的攻击 - 即使设备在一个有意义的小范围内进行这种攻击也是合理的时间存在。


2

理论上它是可能的(但不盈利)。但实际上,你需要花费的金额远远超过你想要的金额。


1

可能:是的。

可能:不。

即使它们不可能,许多事件也是可能的。强制使用比特币私钥的可能性是不可能的,使用当前的计算标准,无论如何都是不可能的。

随着密码学的发展和强化变得更加强大,基础比特币基础设施将得到改进,以跟上改进技术的步伐。这可能需要在将来使用改进的客户端访问您的比特币钱包,以保持高标准的安全性。

此外,比特币地址与私钥不同。生成比特币地址将允许攻击者向您发送硬币,但不允许他们使用您的私钥签署交易(即从您的钱包中移除硬币)。


12

不,这是不可能的,原因有两个。

首先,您必须生成并散列难以想象的大量ECDSA密钥对,以便有合理的机会发现冲突。凭借当前的计算能力,这将需要比宇宙时代更长的时间。

其次,正如其他答案所指出的,如果你有很多计算能力,那么生成比特币会更有利可图。


91

有可能强行使用一些比特币地址,因为有些人以不安全的方式生成私钥。任何(非零)32字节都可以是私钥。因此,在密码短语上运行sha256可以提供一个明显随机但非常强大的私钥。

以sha256(“香肠”)为例:

$ echo -n 'sausage' | sha256sum
30caae2fcb7c34ecadfddc45e0a27e9103bd7cfc87730d7818cc096b1266a683  -

加载BITADDRESS and paste that private key into the 'wallet details' tab to get the corresponding Bitcoin address, then look it up on 块探险:

$ GET http://blockexplorer.com/q/getreceivedbyaddress/1TnnhMEgic5g4ttrCQyDopwqTs4hheuNZ; echo
0.01000000

你会发现这个地址在2012年2月持续了大约2天。

另见:“fuckyou”,其中持有2.5个百分点 for 12 festive days at the turn of last year.

因此在实践中可以强制比特币地址创建,但仅限于选择不当的密码短语。这些可能只是人们在玩“将比特币存放在他们头脑中”的想法,这就是为什么他们的数量如此之少,以及为什么他们不会长期获得资金。

在回答这个问题时,没有任何地址余额受到损害。


43

为了花钱发送到比特币地址,您只需要找到一个散列到相同160位值的ECDSA公钥。这平均需要2160 key generations.

假设你可以产生十亿(230) per second, you need 2130 seconds.

使用十亿台机器并行执行此操作仅需要2台100 seconds.

让十亿最富有的朋友加入你的行列只需2个70 seconds.

大概有2个25 seconds per year, so you need 245 years.

宇宙的年龄大约是2岁34 years so far — better get cracking!


0

是的,在技术进步之后,一旦可以达到1Thash / sec及以上的设备,就可以开始以合理的成功率找到碰撞。我估计在大约2 - 3年内这将是可行的,至于是否有人试图获得一个与其相关的具有相当数量的BTC的地址是另一回事,以及是否有它的问题甚至可以进一步盈利。

我很确定赔率比基本数学表明的要小得多..如果你找到一个大约20个字符长的匹配,由于生成密钥所涉及的过程,完整地址匹配的几率相当高对。

向前跳过十年,这将是一个更加现实的担忧,或者在Thash变得正常的时候,Phash已经出现了......就像GPU现在处于休眠状态并寻找用途一样,采矿设备也是如此甚至已经发明了几年。


1

如果您更喜欢图表:HTTP://i.i蒙古人.com/A股3K Q0l.PNG (there are more addresses in the address space than there are zeptometres, 1/1 000 000 000 000 000 000 of a metre, in the universe's width).

如果您更喜欢数学:HTTP://download.WP software.net/bit coin-birthday.PDF (by 安德鲁波尔斯特拉) says (slightly edited):

使用[生日攻击数学],我们计算[上面]对于0.1%的碰撞概率,我们需要5.4×??存在10 ^ 22个地址。对于99.9999%的几率,我们需要6.35×?? 10 ^ 24个地址。

因此,即使生成了10 ^ 22个比特币地址,也不会发生碰撞。但如果生成了10 ^ 25个地址,则绝对会发生冲突。

我们应该担心吗?不,出于以下独立原因:

  1. 获得特定碰撞的机会,例如与您的某个地址发生碰撞,仍然是1 ^ 2 160或1 ^ 10 ^ 48。因此,即使您拥有数百万的地址,也没有人有机会与您发生冲突。

  2. 在撰写本文时,网络中使用的地址少于10 ^ 7个。所以任何拥有10 ^ 25地址的人都只会碰撞他们自己的地址。

  3. 每个地址大约需要100个字节才能存储。 (实际上大约只有一半,但我们只关心数量级。)因此,对于支持10 ^ 25个地址的网络,只需要记录1000亿个TB的存储空间。 (这甚至没有触及问题搜索 such a huge data store.

  4. 根据sipa的说法,如果当前的采矿网络(世界历史上最强大的计算网络是25,并且是世界历史上最强大的计算网络)被切换到地址生成,那么网络可以生成2.5×每秒10 ^ 12个地址(一个地址生成对应于大约10个哈希)。按照这个速度,获得这么多地址需要127,000年。智人是否已经在地球上行走了很长时间,这是值得商榷的。

  5. 有2100万比特币存在,和8位小数的可分性,最多2.1×?? 10 ^ 14可能会立刻有钱。但是在10 ^ 24个地址的空间中,这意味着10 ^ 12个地址中只有一个可能有钱。所以攻击者在经历了3万亿次物理上的不可能之后,只有一万亿的机会从中获得一个饱和感。


9

如果您希望看到一些证据来验证生成已知的密钥对是否真的非常不可能,您可以自己测试一下,如果您愿意的话。

帕沃尔鲁斯纳克 has created coinkit, a python library for interacting with Bitcoin related stuff. In there, there is an 关于如何使用它的例子 that does exactly what you are asking.

它的作用是生成随机密钥对并在blockchain.info中搜索余额。

我让它在大约一个月前运行,对大约1米的地址略有修改,并没有发现任何一个碰撞。


0

我在bitcoin.org上读到私钥$ d_A $是$ 1 $和$ n-1 $之间的任何整数。另外$ n = FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE 0x00 = 18,446,744,073,709,551,615 0d00 $。假设100M的不同地址是$ 5.42 e ^ { - 12} $选择使用过的地址的概率。如果我们有$ x $猜测,我们需要$ x = $ frac {1} {5.42e ^ { - 12}} $私钥以确保找到一个。那就是$ 5.42 e ^ {12} $地址生成然后生成的所有5.42万亿随机生成的私钥,你必须将$ G $乘以椭圆字段中的每个私钥$ d_n $来获得$ Q_n $然后搜索$ Q_n $的比特币区块链。在5.42万亿之后你几乎肯定会找到一个并且能够窃取其btc。

你可以计算出这种计算机科学,比如将$ d_n \乘以G $和搜索区块链多长时间。几乎所有人都不会参与其中,这将是所有最糟糕的案例搜索。


2

LBC (Large Bitcoin Collider) project that attempts to do that. According to their website they've created over 8,000 trillion keys, as of October 2017.

根据主板文章 of April 2017, LBC found over 30 Bitcoin private keys.