Bitcoin Forum

Other => Beginners & Help => Topic started by: KingZee on November 03, 2014, 04:35:37 PM



Title: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 04:35:37 PM
So, I have been thinking this through, and I kind of decided to go crazy all the way now.

We all know that every BTC address has its own unique private key.

And so for extra security, the private key is generated randomly, from a completely random set of 64 HEX chars.

But this is where I'm lost. What exactly is "randomly"? I have searched and found over 4 or 5 essays about types of private key generation. And in many places I cannot understand some few nuances.

Quote from: from Bitcoin Wiki
Specifically, any 256-bit number from 0x1 to 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 is a valid private key.

Why 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140? Why not 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF?


And when you're reading about Private keys you get to the "Elliptic Curve Digital Signature Algorithm (https://en.bitcoin.it/wiki/ECDSA)"

And again, " A private key is essentially a randomly generated number."

What exactly is randomly generated? Is it as simple as rand() % 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 ? Where it takes any random number from 1 to 1.157920892373162e+77? and then hash them to SHA-256 twice? or is it more complicated than that?

Wouldn't that lead to some wallets being completely easy to crack as their initial code being only a 6 char or 18 char number? It is random after all, don't go tell me about how low the chances are, I know they're almost infinite, but they're still a chance.

Bottom line is, I want a clear idea of how "random" in generation bitcoin private keys is? Thanks for reading.


Title: Re: Bitcoin Secret key questions
Post by: BitCoinDream on November 03, 2014, 04:58:30 PM
So, I have been thinking this through, and I kind of decided to go crazy all the way now.

We all know that every BTC address has its own unique private key.

And so for extra security, the private key is generated randomly, from a completely random set of 64 HEX chars.

But this is where I'm lost. What exactly is "randomly"? I have searched and found over 4 or 5 essays about types of private key generation. And in many places I cannot understand some few nuances.

Quote from: from Bitcoin Wiki
Specifically, any 256-bit number from 0x1 to 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 is a valid private key.

Why 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140? Why not 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF?


And when you're reading about Private keys you get to the "Elliptic Curve Digital Signature Algorithm (https://en.bitcoin.it/wiki/ECDSA)"

And again, " A private key is essentially a randomly generated number."

What exactly is randomly generated? Is it as simple as rand() % 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140 ? Where it takes any random number from 1 to 1.157920892373162e+77? and then hash them to SHA-256 twice? or is it more complicated than that?

Wouldn't that lead to some wallets being completely easy to crack as their initial code being only a 6 char or 18 char number? It is random after all, don't go tell me about how low the chances are, I know they're almost infinite, but they're still a chance.

Bottom line is, I want a clear idea of how "random" in generation bitcoin private keys is? Thanks for reading.


Nice to see that someone is asking out the core questions. All I see now new guys come and ask "How to make quick BTC ?".

To get to the point, I'll request u to read the following 2 threads and then ask if things still remain unclear...

i. https://bitcointalk.org/index.php?topic=563750.0

ii. https://bitcointalk.org/index.php?topic=560557.0


Title: Re: Bitcoin Secret key questions
Post by: Tammy Chan on November 03, 2014, 05:02:03 PM
I am not an expert, but the following are what I know.

We all know that every BTC address has its own unique private key.

Not true. Private key is 256bit while address is 160bit, so there are many different private keys that are associated with the same address.



Why 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140? Why not 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF?

http://www.reddit.com/r/Bitcoin/comments/22nezb/just_got_my_16_sided_dice_extra_secure_paper/cgp1bto




Title: Re: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 05:56:28 PM
Nice to see that someone is asking out the core questions. All I see now new guys come and ask "How to make quick BTC ?".

To get to the point, I'll request u to read the following 2 threads and then ask if things still remain unclear...

i. https://bitcointalk.org/index.php?topic=563750.0

ii. https://bitcointalk.org/index.php?topic=560557.0

So :

1. Private keys are indeed generated through random numbers. Are these numbers simply converted into SHA256 to generate the Private key? Or are they hashed twice? Or is there more to it?

2. Brainwallets. Who the hell came up with such a stupid idea? Reducing bruteforcing techniques to only include dictionary words that can be counted by the finger. Do many people still use Brainwallets?

3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?


Title: Re: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 06:00:13 PM
I am not an expert, but the following are what I know.

We all know that every BTC address has its own unique private key.

Not true. Private key is 256bit while address is 160bit, so there are many different private keys that are associated with the same address.



Why 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140? Why not 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF?

http://www.reddit.com/r/Bitcoin/comments/22nezb/just_got_my_16_sided_dice_extra_secure_paper/cgp1bto




I see, it's all about the curve's definition. Simple enough. 

Question : How can different private keys have the same address? Maybe the same wallet yes, but when you pick a number, that same number generates both the Private key and the address. If two numbers (or words) collide with the same hash, why would they collide only in the private key generation, and not the Bitcoin address?


Title: Re: Bitcoin Secret key questions
Post by: Tammy Chan on November 03, 2014, 06:20:19 PM
3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?

There are 2^160 addresses in total. That number is incredibly huge.
Let's say everyone in the world (7 billion people) are creating 10000 addresses every second and the addresses created are all unique, it will take 6.620559 * 10^26 years to generate all addresses (=2^160 /7000000000 / 10000 / 60 / 60 / 24 / 365).

For comparison, our universe has an estimated age of 13.798* 10^9 years only (http://en.wikipedia.org/wiki/Age_of_the_universe).


Title: Re: Bitcoin Secret key questions
Post by: Tammy Chan on November 03, 2014, 06:27:00 PM
I am not an expert, but the following are what I know.

We all know that every BTC address has its own unique private key.

Not true. Private key is 256bit while address is 160bit, so there are many different private keys that are associated with the same address.



Why 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4140? Why not 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF?

http://www.reddit.com/r/Bitcoin/comments/22nezb/just_got_my_16_sided_dice_extra_secure_paper/cgp1bto




I see, it's all about the curve's definition. Simple enough. 

Question : How can different private keys have the same address? Maybe the same wallet yes, but when you pick a number, that same number generates both the Private key and the address. If two numbers (or words) collide with the same hash, why would they collide only in the private key generation, and not the Bitcoin address?

How to get the address from the private key: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses
Private key is the random number you generated. Address can be computed easily from your private key (but not the reverse).
Even when the inputs (private keys) are different, the outputs (address) could still be the same.
A very bad example would be (-2)^2 = 4 = (2)^2 while -2 ≠ 2.


We know there are slightly less than 2^256 private keys and 2^160 addresses, so theoretically speaking there are an average of 2^96 different private keys that will give the same address.
However, AFAIK, there is no reported case of collision yet (because the chance is extremely low), and so we are not really sure how they are distributed.



Title: Re: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 06:37:44 PM
3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?

There are 2^160 addresses in total. That number is incredibly huge.
Let's say everyone in the world (7 billion people) are creating 10000 addresses every second and the addresses created are all unique, it will take 6.620559 * 10^26 years to generate all addresses (=2^160 /7000000000 / 10000 / 60 / 60 / 24 / 365).

For comparison, our universe has an age of 13.798* 10^9 years only (http://en.wikipedia.org/wiki/Age_of_the_universe).

So any address I search in blockchain.info for example is whether not generated yet, or is generated and empty?

And after looking around a bit, and taking in count all BTC addresses with actual balance, I have rounded up that if someone decided to bruteforce the whole numbers existing that generate private keys, they have a chance of ~~ 1 / (3 x 10^38) of finding a wallet with actual balance.


Title: Re: Bitcoin Secret key questions
Post by: Tammy Chan on November 03, 2014, 06:46:26 PM
3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?

There are 2^160 addresses in total. That number is incredibly huge.
Let's say everyone in the world (7 billion people) are creating 10000 addresses every second and the addresses created are all unique, it will take 6.620559 * 10^26 years to generate all addresses (=2^160 /7000000000 / 10000 / 60 / 60 / 24 / 365).

For comparison, our universe has an age of 13.798* 10^9 years only (http://en.wikipedia.org/wiki/Age_of_the_universe).

So any address I search in blockchain.info for example is whether not generated yet, or is generated and empty?

And after looking around a bit, and taking in count all BTC addresses with actual balance, I have rounded up that if someone decided to bruteforce the whole numbers existing that generate private keys, they have a chance of ~~ 1 / (3 x 10^38) of finding a wallet with actual balance.

You can search any valid address on blockchain.info.
Among the 2^160 valid addresses, only a tiny fraction of them has an associated private key generated. Among them, only a fraction of them has been used.

For example, address 1BitcoinEaterAddressDontSendf59kuE is a valid address but no one has generated a private key for it. Every person can send bitcoin to it, but no one can send bitcoin out of it (unless someone generate the private key with a incredibly tiny chance).

On the other hand, I have the private key for the address in my profile, but I haven't spent any of the bitcoin on it yet.


Title: Re: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 07:08:07 PM

How to get the address from the private key: https://en.bitcoin.it/wiki/Technical_background_of_version_1_Bitcoin_addresses
Private key is the random number you generated. Address can be computed easily from your private key (but not the reverse).
Even when the inputs (private keys) are different, the outputs (address) could still be the same.
A very bad example would be (-2)^2 = 4 = (2)^2 while -2 ≠ 2.


We know there are slightly less than 2^256 private keys and 2^160 addresses, so theoretically speaking there are an average of 2^96 different private keys that will give the same address.
However, AFAIK, there is no reported case of collision yet (because the chance is extremely low), and so we are not really sure how they are distributed.




Hmm.. Okay, so :

Every Bitcoin address has 2^96 Private key.

The easiest way to go is to take all the 2^256 Private keys.

The chance of finding X' private key of X known Bitcoin address, is 2^96.

There is roughly about 4 million bitcoin addresses with balance today (rounded up). Let's say 2^22

So the chance of finding any private key that "has balance" is 2^118 / 2^160 ~= 3 / 10^13





Title: Re: Bitcoin Secret key questions
Post by: KingZee on November 03, 2014, 07:11:06 PM
3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?

There are 2^160 addresses in total. That number is incredibly huge.
Let's say everyone in the world (7 billion people) are creating 10000 addresses every second and the addresses created are all unique, it will take 6.620559 * 10^26 years to generate all addresses (=2^160 /7000000000 / 10000 / 60 / 60 / 24 / 365).

For comparison, our universe has an age of 13.798* 10^9 years only (http://en.wikipedia.org/wiki/Age_of_the_universe).

So any address I search in blockchain.info for example is whether not generated yet, or is generated and empty?

And after looking around a bit, and taking in count all BTC addresses with actual balance, I have rounded up that if someone decided to bruteforce the whole numbers existing that generate private keys, they have a chance of ~~ 1 / (3 x 10^38) of finding a wallet with actual balance.

You can search any valid address on blockchain.info.
Among the 2^160 valid addresses, only a tiny fraction of them has an associated private key generated. Among them, only a fraction of them has been used.

For example, address 1BitcoinEaterAddressDontSendf59kuE is a valid address but no one has generated a private key for it. Every person can send bitcoin to it, but no one can send bitcoin out of it (unless someone generate the private key with a incredibly tiny chance).

On the other hand, I have the private key for the address in my profile, but I haven't spent any of the bitcoin on it yet.

I see! Thanks anyhow for the explanation and for your time! I think I understand now the general idea of how this is. One last thing, you wouldn't know anywhere where I could find a script that automatically finds the BTC address out of a known Private Key?



Title: Re: Bitcoin Secret key questions
Post by: Tammy Chan on November 03, 2014, 07:42:21 PM
3. Are all the adresses (who would be generated) from 0 to 0xFFF... already generated? Could I land on wallets that are not existent if I bruteforce numbers?

There are 2^160 addresses in total. That number is incredibly huge.
Let's say everyone in the world (7 billion people) are creating 10000 addresses every second and the addresses created are all unique, it will take 6.620559 * 10^26 years to generate all addresses (=2^160 /7000000000 / 10000 / 60 / 60 / 24 / 365).

For comparison, our universe has an age of 13.798* 10^9 years only (http://en.wikipedia.org/wiki/Age_of_the_universe).

So any address I search in blockchain.info for example is whether not generated yet, or is generated and empty?

And after looking around a bit, and taking in count all BTC addresses with actual balance, I have rounded up that if someone decided to bruteforce the whole numbers existing that generate private keys, they have a chance of ~~ 1 / (3 x 10^38) of finding a wallet with actual balance.

You can search any valid address on blockchain.info.
Among the 2^160 valid addresses, only a tiny fraction of them has an associated private key generated. Among them, only a fraction of them has been used.

For example, address 1BitcoinEaterAddressDontSendf59kuE is a valid address but no one has generated a private key for it. Every person can send bitcoin to it, but no one can send bitcoin out of it (unless someone generate the private key with a incredibly tiny chance).

On the other hand, I have the private key for the address in my profile, but I haven't spent any of the bitcoin on it yet.

I see! Thanks anyhow for the explanation and for your time! I think I understand now the general idea of how this is. One last thing, you wouldn't know anywhere where I could find a script that automatically finds the BTC address out of a known Private Key?

You could go to https://brainwallet.github.io/#generator, click "private key" in the 1st row, enter the private key in the 5th row and you will get the bitcoin address in the 6th row.

Or you could refer to http://davanum.wordpress.com/2014/03/17/generating-a-bitcoin-private-key-and-address/ and slightly modify it to get a simple code to convert the private key to bitcoin address.