EDIT: See correction from o_e_l_e_o in the next post below this one. I made a dumb mistake in this post and his clears it up. The point I'm making is still accurate, but the numerical representation is wrong.So first of all, there are no hash functions involved in converting a bitcoin private key in to a public key. The process you are looking for is called elliptic curve multiplication.
In elliptic curve multiplication, you take two points on a curve and draw a straight line between them, or draw a tangent line to a single point. These lines will intersect the curve at one additional point. You do this many times - drawing a line and marking the point. The number of times you do this being your private key. This is easy to work forwards - draw a line, mark the point. Draw a new line, mark the point. Draw a new line, mark the point. And so on.
Now imagine trying to work backwards. I mark two points on a curve and say to you "Figure out how many hops it took me to get from point A to point B". Where do you start? There is nowhere to start, other than just starting at 1 hop and testing every possible number of hops until you reach the right answer. This is the (very simplified) essence of elliptic curve multiplication. It is easy to go forwards - just draw the lines and mark the points - but it is essentially impossible to go backwards - work out how many hops between two points, without simply starting at the beginning and drawing all the lines yourself.
More importantly...
Drawing as much as 2
256 lines to find the second point (the public key) would take a horribly long time if we actually needed to draw all those lines to get to the public key from the private key. Hoevere, elliptic curves have this very nice property that allows us to take short-cuts in the "multiplication" direction, but there are no equivalent short-cuts known for the reverse.
For example:
If I draw a tangent line to a single point (P), the resulting intersection point is P
2. If I then draw a line tangent to the point (P
2), the resulting intersection point is (P
2)
2 or P
4. This is the exact same point as I would have gotten if I had drawn a line connecting P and P
2 (to get P
3) and then drawn a line connecting P and P
3 to get P
4. I can keep doing that to make bigger jumps, so tangent to P
4 will give me (P
4)
2 which is P
8, and tangent to P8 will give me P
16.
Notice that after drawing only 256 lines, I've gotten to P
115792089237316195423570985008687907853269984665640564039457584007913129639936 (that's P
A where A = 2^256). No need to draw 115792089237316195423570985008687907853269984665640564039457584007913129639936 lines, I can just draw 256 of them.
If I want P
6277101735386680763835789423207666416102355444464034512896 (that's P
A where A = 2
64 + 2
128), then I can just draw 128 tangent lines. Keep track of where the 64th point was, and where the final (128th) point is, and just connect those 2 points. Again, no need to draw 6277101735386680763835789423207666416102355444464034512896 lines, it was sufficient to just draw 129 of them.
These short-cuts are what allows a computer to calculate the public key in a fraction of a second. The math to find an intersecting point from a tangent (or from connecting 2 other points) is pretty simple and super fast and there isn't a need to do it more than a few hundred times.
However, there are no equivalent short-cuts going backwards. To find out what power of P a public key is, you have to start with P, then calculate P
2 by drawing the tangent and see if the resulting intersection point is the public key. If not, then you need to draw a line connecting P and P
2 to get P
3 and see if the resulting intersection point is the public key. If not, then you need to draw a line connecting P and P
3 to get P
4 and see if the resulting intersection point is the public key. If not, then you need to draw a line connecting P and P
4 to get P
5 and see if the resulting intersection point is the public key, and so on. If the public key is P
6277101735386680763835789423207666416102355444464034512796, you won't know that until you've drawn (or calulated) 6277101735386680763835789423207666416102355444464034512796 lines. Sure, you could connect P
6 and P
12 in order to find out where P
72 is, but if the public key was P
68 you'll have skipped over it and never know. You still need to go back and check all the values P
12 through P
72.
[/list]