Post
Topic
Board Bitcoin Discussion
Merits 1 from 1 user
Re: It is necessary to find one private key out of 10 million Bitcoin Addresses
by
MrFreeDragon
on 03/11/2019, 13:12:27 UTC
⭐ Merited by A-Bolt (1)
I guess these addresses were generated in "HD wallet" way, i.e there is a dependence between the addresses. However, only creator could say the forlmula. So, of course, knowing the private key to one address, it is possible to find all other keys.

In ECDSA group there is rule for point additions: for p*G=Q (where p is some key, G - basis point and Q - public key for p), and some increment number k, (p+k)*G = p*G + k*G = Q + R, where R is public point for k. It means that you can receive another address from the public key (Q) without knowing the private key (p), just making the point addition to the public point.

I can also generate the group of 10 million addresses, or 100 million addresses or 1 billion addresses, where knowing just 1 private key it will be possible to calculate all the others. The simpliest way is to make step equal to 1, but it is also possible to make any other step (like 1000, 10000 or other) between the neighbour keys, or even some hash to make it more complex to understand (like was implemented in HD wallets).

Example, let's take the number 2^150 (1427247692705959881058285969449495136382746624) as the private key p, (in hex: 40000000000000000000000000000000000000). The corresponding compressed legacy address for this key is 1LzavTBoHPskiD5KAmvVpV6VpN47XZ8bKz and public key Q = 024154b506ab766f42fbe37f699976f84db89f4f2f6bed98325c1a0b6e326dd4e4

So, now I take some "step" between addresses, let's say 13000000 (13 million), and knowing the pubkey Q, I calculate the point sum Q + 13000000*G = 024154b506ab766f42fbe37f699976f84db89f4f2f6bed98325c1a0b6e326dd4e4 + 034d11d3fef403710f1332ae54d99d12e383e9ad1a87d3972ab737b0dffe359be7 which is equal to 02464e23afad4a987d1d7c93ffe1d2d1cd196b0c1999b76bf1225e229fd7a1e770, and easily have the address from this pubkey 1DYKxtsVMrivdAEVvC6AnH46BKzFq3gfHo
I received this address without knowing the private key, i just add step*G (13000000*G) to the public point.
The private key for received address will be p + 13000000 = 2^150 + 13000000 = 1427247692705959881058285969449495136395746624 (in hex: 40000000000000000000000000000000C65D40)