|
September 16, 2014, 09:16:47 AM Last edit: September 16, 2014, 09:33:40 AM by deepceleron |
|
Less than 1% of the population has completed a college-level calculus class; likely a similar percentage have seen hexadecimal numbers. However it is just not the general populace, but a majority of programmers that may get an eye-opener when looking at Bitcoin for the first time.
Hashes are large enough that most comp-sci people would have considered them as data instead of a number previously. They are constructed from bit manipulations, not traditional math, and when numbers become larger than our experience (such as the "number" which represents the contents of a Blu-Ray disc), we conceptualize them differently. We only cared about them for creating file signatures or message digests for vector databases and other bit array operations.
Here's some SHA256s. This is what an average hash looks like:
4f7834804afaaecb19f2d8526986e9cb493f0d23ab9b0e9592986832e10cddb4 3ac61d53845dc33d94739bef070490238b115ef527cdd0a41361ee717b178c6a
The first, for example, is just the number 35945099035430891806054863367923539732599575709697077792070944691543081803188, but we don't use a hash as a number when doing any of the things a message digest is designed to do.
They look like random junk? Well, that's the idea. Satoshi was not the first to recognize that a hash function with cryptographically robust avalanche and diffusion properties works much like a random number generator, and that it could be used in probability puzzles for proof-of-work.
The first digit of a hash can represent a value between 0 and 15 (0-F). However, if I am hashing arbitrary data, only one in sixteen hashes will have a specific digit in that place. Two digits matching? One-in-256. Viewing the whole hash as a number, and using it's statistical robustness, is just one of many novel things that all come together in Bitcoin.
Here's a Bitcoin difficulty target as it might be represented in hexadecimal. It doesn't look much like a number, but now we start to see all those leading zeros that would have made someone think a hash function was broken before.
00000000000003eb8aede235b24b72dd7cec49acfb73a8d8a7142673187fa0a5
Compared to that target, here is a hash of an actual block: 00000000000003de8402fc00a7cdd47a387e9c7ea054f27c79ed3f80a6032c77
The block hash has a notable property. Only one-in-18381623636892592 hashes are like it in being smaller than the target.
Saying that "we are looking for a hash with many leading zero characters" is in line with how programmers would have talked about hashes before. Teaching them the math of Bitcoin targets may have distracted from the impact of the white paper as a whole, with its well-presented blockchain concept and security proofs.
|