Author

Topic: Need vanitygen modified to work with minikeys (Read 1943 times)

donator
Activity: 1218
Merit: 1079
Gerald Davis
January 08, 2012, 09:45:11 PM
#3
is c++ AMP ok for part 1?
Quote
C++ Accelerated Massive Parallelism (C++ AMP) accelerates the execution of your C++ code by taking advantage of the data-parallel hardware that is commonly present as a GPU on a discrete graphics card.


Sure as long as it has acceptable performance.
legendary
Activity: 2058
Merit: 1431
is c++ AMP ok for part 1?
Quote
C++ Accelerated Massive Parallelism (C++ AMP) accelerates the execution of your C++ code by taking advantage of the data-parallel hardware that is commonly present as a GPU on a discrete graphics card.
donator
Activity: 1218
Merit: 1079
Gerald Davis
For this project I need someone to take the vanitygen v0.17 (specifically oclvanitygen.exe) and modify it so that it is compatible w/ 30 charecter minikey format (mini private keys).

Vanitygen thread:
https://bitcointalksearch.org/topic/vanitygen-vanity-bitcoin-address-generatorminer-v022-25804

Information on minikey format:
https://en.bitcoin.it/wiki/Mini_private_key_format

Simplified version (so reader understands enough to follow proposal):
Minikeys are formed by brute force.  
1) Take a 30 character (bitcoin base58) nonce (potential minikey).  
2) Append it with question mark "?"
3) Take the SHA256 hash of minikey w/ appended "?" (this is check hash).
4) If the first byte of hash is "00" then continue.  If not then discard nonce and goto step 1
5) Take SHA-256 hash of minikey ONLY this is the full private key.  You can now generate public key and public address.

Obviously this is a computationally intensive process.  On average it will require 256 SHA-256 hashes to find one valid minikey.  I would prefer to not use CPU for the minikey generation simply because CPU would form a bottleneck in performance.  At best a Phenom II x6 can perform roughly 40 million SHA-256 hashes per second.  That would result in only 80,000 minikeys per second available for vanity gen which is insufficient to keep a GPU "fed".

The machine running this system has multiple GPUs (3x 5970) so likely the best method would be to break this into two processes.

Find valid minikeys
1) Create a program which uses GPU resources to find valid minikeys and write them to a file.  User should be able to set OpenCL platform and device.  

2) modify oclvanitygen to obtain nonces not from random number generator but from the input file created in step 1.  Hash the minikey to produce private key, then produce the public address as normal and check it against patterns (as normal).  When outputting a found match output the minikey, corresponding private key, and public key.

This would allow me to run address generation in batches.  Run minikey generator for a day to produce a couple trillion keys then run vanitygen to check those minikeys for proper address.  Rinse-repeat.

I am open to other solutions.  Technically the rig this custom code will be running on should be capable of "real time processing".  It has 3x5970 so 6 GPU capable of ~360 MH/s or ~ 720 million hashes per second.  If 1 in 256 are valid that means each GPU should be able to produce ~2.5 to 3.0 million minikeys per second.  If 5 of those GPU were set to produce minikeys it would be produce up to 15 million minikeys per second.  One 5970 GPU can process ~15M vanitygen nonces per second.

Linux developers I am sorry but the machine MUST run windows OS (likely windows 7).  Sorry the keys will be used for a high end HID card printer and they don't provide Linux drivers.  For security reasons I don't want keys moved from machine to machine so entire process from nonce to final  card output must be done on a single windows machine.

Please respond with any clarifications, potential issues, time frame for delivery, and contracted price (in BTC of course).
Jump to: