Hi all,
I've been working on a tool for brute-forcing Bitcoin private keys. The main purpose of this tool is to contribute to the effort of solving the Bitcoin puzzle transactions:
https://blockchain.info/tx/08389f34c98c606322740c0be6a7125d9860bb8d5cb182c02f98461e5fa6cd15Screenshot:
It is open-source under the MIT licence and requires no external dependencies other than the CUDA toolkit. It builds on Windows using Visual Studio 2015, and Linux using Make (you might have to edit the Makefile and point it towards your CUDA toolkit directory).
It can search for compressed/uncompressed keys or both.
The performance is good, but can likely be improved. On my hardware (GeForce GT 640) it gets 9.4 million keys per second compressed, 7.3 million uncompressed.
Note:
-Currently it is CUDA only.
-It can only search one target key at a time
Features I would like to add if there is enough interest for the project:
-Support for searching multiple target keys at one time Done-OpenCL/AMD device support
-CPU with AVX/AVX2/SHA support
-Checkpoints/Stop and resume
-Vanity address generation
Source and Win32/Win64 binaries available here:
https://github.com/brichard19/BitCrackhttps://github.com/brichard19/BitCrack/releases/tag/v0.0.6Thoughts?
Thanks!
I wrote a package last year called 'inflection', its detailed on
www.inflection.top, but I have been working on this problem since 2012, and I was an early miner, but I always found BTC-HACKING, e.g. solving the 'discrete log problem' more interesting than accumulating btc.
All the things you have asked for have been done,
But I might add that 'brute force' hunting is not the way to go about this problem, like the other guy 'LBC' linear collider, its stupid to search 1-N, where N is 2**256, as that is counting all the atoms in the universe, many times over. It can't be done, unless you have an infinite time-frame to solve the problem,
The way to go about this is INTELLIGENT selection of the seed for searching the frames ECDSA, also using SAGE and MSEIVE ( most powerful factoring tool on earth ), you can factor public-keys, and develop a good band for your search, also using FFT, and RNN-LSTM you can generate favorable regions for searching,
My software that supports all GPU HW, currently does 150M/sec calcs per 1060 class card, so on a typically GPU rig for mining, I can do over a Billion calc's per second, but that is still just 10***9, where our scope is say 10**77, and there are 10**71 atoms in the universe.
Also I don't think its possible to find a particular key for a particular address, the way to go about this problem, is I have 200 million addresses with value, and 100k with high-value, I use a four layer hierarchical bloom-filter that starts at 2*32, and goes up to 2**40, everytime I find a priv-key that matches my list, there is 0.0000001% chance of false-positive, that one in 10 million, but I'm doing a billion a second, so I'm geting a lot of false positive hits, so as candidates are found, they past to the next heirarchy of bloom filters, so I can kick out up to one in a billion false-positives, I usually dial this stuff in so I can about 100 candidates a day, then its easy to use the database online to check if the key found has a 'current value', if > 0, then I log, I have found lots of 0.001 BTC, but the odd's of finding > 0.01 BTC are low, as we're talking 2*22 in a space of 2**128
So in reality here I'm looking for 200 million keys at once, not looking for one, and I'm using best estimates of likelyness to search in spaces
I think the most progress will be made in the area of sage/msieve using the published papers on discrete-log problem solving, if you want to find a particular key for a particular public address. Right now I have it down to 2**42, which is still to long to search, but with 2**24 at once, my search space is only 2**22, which is no problem