Post
Topic
Board Development & Technical Discussion
Merits 2 from 1 user
Re: Maths Q1 - address to key ratio
by
BlackHatCoiner
on 05/01/2021, 12:35:15 UTC
⭐ Merited by o_e_l_e_o (2)
It's actually 1 in 2160, on average, since there are 296 private keys per address, on average.
I was wrong about that. Yes, it's actually 1 in 2160.

Say someone was giving you clues to their private key.  For each character they gave you a couple of options eg, for the fifth position is either 1, 3, f or a.  How many options would they have to give you per position for it to be crackable by brute force?

First of all let's define the private key's format. Is it going to be hexadecimal or WIF? [the difference]
Secondly what do you mean by saying crackable by brute force? Are we trying to find his private key or a private key that unlocks his address?
If we assume that you want his private key and that his private key is hexadecimal then a character of the fifth position isn't going to help you. You still have almost 2252 different combinations. (for every hex character you remove you have 24 less combinations)

If you want to find a private key that unlocks his address then, as @o_e_l_e_o wrote, you have 1 in 2160 on average. To cut a long story short, if he doesn't give you at least 25 hexadecimal characters of his private key then you have less possibilities of finding it than succeeding on an address' brute force.

Knowing 25 hex characters and their positions is 16 times easier than 2160. It's 1 in 2156. Still impossible, but easier than the stupidly enormous range of [1, 2160].

@thirdprize, note that we use the phrase "on average". There may be addresses like this one: 1111111111111111111114oLvT2 that have no private keys that unlocks them. Every address most likely has more than 1 billion, but you can't prove it if you don't try all the possible combinations. It is quite funny to think that there are so many numbers that unlock you 69 bitcoins, but no one knows them. And that happens because most of us can't imagine the largeness of 2160.


[the difference]
Example of a private key in hexadecimal:
Code:
e1398ffab41618b4c63313912d2c407e57c60feeb799544503e0aeca8c5aede1

Example of a private key in WIF (Wallet Import Format):
Code:
L4mX2hsUq4LFbMmAomWHCARAuMkzTuAZjmGCQsvmny1aahRE1Aie
(The above works only on mainnet)

A WIF is nothing but the original hex private key encoded in base58 plus some other technical stuff like version byte and checksum. This code shows exactly how we end up with a WIF:

Code:
privatekey = "e1398ffab41618b4c63313912d2c407e57c60feeb799544503e0aeca8c5aede1"
extended = "80" + privatekey + "01"
extendedchecksum = extended + checksum(extended)
wif = base58_encode(extendedchecksum)

// wif is "L4mX2hsUq4LFbMmAomWHCARAuMkzTuAZjmGCQsvmny1aahRE1Aie"

You can read more about the WIF here: https://learnmeabitcoin.com/technical/wif

P.S, o_e_l_e_o is faster.