Bitcoin Forum
December 13, 2024, 04:31:20 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: I've implemented a high performance bitcoin address finder  (Read 269 times)
Bernicc (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 19


View Profile
May 28, 2021, 09:35:24 PM
Merited by hugeblack (5), ABCbits (4), a.a (3), o_e_l_e_o (2), NotATether (1)
 #1

Hi folks, Smiley

I've read many times about this idea and I like you to present my implementation.

I'll do some further improvements but it works like a charm currently and has a high code coverage.

You can create a database (or use my precomputed) containing addresses with amount.

Afterwards you can use a CPU and/or OpenCL to create many private keys and the corresponding public addresses and check if the address was already used and check if the address has an amount.

I know it's unlikely to find one. Roll Eyes

This tool is able to crack a puzzle transaction much faster than every other existing tool.

https://github.com/bernardladenthin/BitcoinAddressFinder

Feel free to use it, improve it or write me some suggestions.

Cheers and greetings from Berlin, Bernard
NotATether
Legendary
*
Offline Offline

Activity: 1820
Merit: 7476


Top Crypto Casino


View Profile WWW
May 29, 2021, 11:52:57 AM
 #2

Ok, this is great stuff Smiley

Your README mentions that it can read and parse different altcoins' addresses, but how is your code computing public keys from located private keys? Since most altcoins use their own curves, that would mean a separate EC curve implementation for each altcoin. Or is there a more creative solution you did that does this all generically?

As far as I can see, there's only a secp256k1 package in there, so it won't work on stuff like curve25519 monero or ethereum (whatever that uses).

███████████████████████
████▐██▄█████████████████
████▐██████▄▄▄███████████
████▐████▄█████▄▄████████
████▐█████▀▀▀▀▀███▄██████
████▐███▀████████████████
████▐█████████▄█████▌████
████▐██▌█████▀██████▌████
████▐██████████▀████▌████
█████▀███▄█████▄███▀█████
███████▀█████████▀███████
██████████▀███▀██████████

███████████████████████
.
BC.GAME
▄▄▀▀▀▀▀▀▀▄▄
▄▀▀░▄██▀░▀██▄░▀▀▄
▄▀░▐▀▄░▀░░▀░░▀░▄▀▌░▀▄
▄▀▄█▐░▀▄▀▀▀▀▀▄▀░▌█▄▀▄
▄▀░▀░░█░▄███████▄░█░░▀░▀▄
█░█░▀░█████████████░▀░█░█
█░██░▀█▀▀█▄▄█▀▀█▀░██░█
█░█▀██░█▀▀██▀▀█░██▀█░█
▀▄▀██░░░▀▀▄▌▐▄▀▀░░░██▀▄▀
▀▄▀██░░▄░▀▄█▄▀░▄░░██▀▄▀
▀▄░▀█░▄▄▄░▀░▄▄▄░█▀░▄▀
▀▄▄▀▀███▄███▀▀▄▄▀
██████▄▄▄▄▄▄▄██████
.
..CASINO....SPORTS....RACING..


▄▄████▄▄
▄███▀▀███▄
██████████
▀███▄░▄██▀
▄▄████▄▄░▀█▀▄██▀▄▄████▄▄
▄███▀▀▀████▄▄██▀▄███▀▀███▄
███████▄▄▀▀████▄▄▀▀███████
▀███▄▄███▀░░░▀▀████▄▄▄███▀
▀▀████▀▀████████▀▀████▀▀
Bernicc (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 19


View Profile
May 29, 2021, 12:22:31 PM
 #3

Here are some suggestions,
1. Give short guide how to run it. Looking at the GitHub, i only can assume i must use Windows OS and run "build.bat" file.
2. Mention any prerequisites that might be needed, such as install OpenCL library/driver.

If someone wish to make performance comparison, a user benchmark BitCrack on several GPU few years ago at https://bitcointalk.org/index.php?topic=4453897.msg55552855#msg55552855.
Thanks a lot, I'll take car of it soon.
Bernicc (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 19


View Profile
May 29, 2021, 12:31:19 PM
Last edit: May 29, 2021, 01:01:45 PM by Bernicc
Merited by hugeblack (2)
 #4

Ok, this is great stuff Smiley

Your README mentions that it can read and parse different altcoins' addresses, but how is your code computing public keys from located private keys? Since most altcoins use their own curves, that would mean a separate EC curve implementation for each altcoin. Or is there a more creative solution you did that does this all generically?

As far as I can see, there's only a secp256k1 package in there, so it won't work on stuff like curve25519 monero or ethereum (whatever that uses).
Hi, It can read / parse and create a database of any altcoin address (P2PKH) which is similar to bitcoin (RIPEMD 160 hash). In short, I'll create a database of any RIPEMD 160 hashes of P2PKH which I've found. A cross collision can be found also.

This means my database contains
  • bitcoin
  • bitcoin cash
  • bitcoin gold
  • blackcoin
  • dash
  • dogecoin
  • feathercoin
  • litecoin
  • namecoin
  • novacoin
  • reddcoin
  • vertcoin
  • ZCash

The difference of my program is, you can search this giantic databases and not only one address. This increases the chance of an unlikely hit/collision drastic:

Light (2.68 GiB), Last update: February 10, 2021
  • Contains Bitcoin addresses whith amount and many altcoin addresses with amount.
  • Static amount of 0 is used to allow best compression.
  • Unique entries: 65170711
  • Mapsize: 2752 MiB
  • Link (1.8 GiB packed): http://ladenthin.net/lmdb_light.zip
  • Time to create the database: ~4 hours

Full (32.2 GiB), Last update: February 10, 2021
  • Contains all Bitcoin addresses which are ever used and many altcoin addresses with and without amount.
  • Static amount of 0 is used to allow best compression.
  • Unique entries: 781419881
  • Mapsize: 32992 MiB
  • Link (17.5 GiB packed): http://ladenthin.net/lmdb_full.zip
  • Time to create the database: ~34 hours

Cheers, Bernard
a.a
Member
**
Offline Offline

Activity: 126
Merit: 36


View Profile
May 29, 2021, 01:36:56 PM
 #5

Hi

I saw your questions in hashcat repo and on stackoverflow. Does your code also searches for uncompressed addresses?
Bernicc (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 19


View Profile
May 29, 2021, 02:53:00 PM
 #6

Hi

I saw your questions in hashcat repo and on stackoverflow. Does your code also searches for uncompressed addresses?

Hi, yes, always booth together, I build a RIPEMD 160 (P2PKH) from compressed and one from uncompressed x,y coordinates. Each private key results in two public keys with two database lookups.

Cheers, Bernard
a.a
Member
**
Offline Offline

Activity: 126
Merit: 36


View Profile
May 29, 2021, 04:03:19 PM
 #7

Is it possible to provide in the OpenCL a private key like a int 32 array and get the private keys?

Do you have a codesnippet for this?
Bernicc (OP)
Newbie
*
Offline Offline

Activity: 5
Merit: 19


View Profile
May 29, 2021, 04:26:05 PM
Merited by hugeblack (2)
 #8

Is it possible to provide in the OpenCL a private key like a int 32 array and get the private keys?

Do you have a codesnippet for this?
If you provide the private key you already have the private key. You mean get the public keys?

Yes, but my kernel is only for one private key and use an offset to generate multiple private/public key pairs. You can easily transfer an array and don't use the offset (| global_id). https://github.com/bernardladenthin/BitcoinAddressFinder/blob/main/src/main/resources/inc_ecc_secp256k1custom.cl#L170 You need to adapt my custom method __kernel void generateKeysKernel_grid(__global u32 *r, __global const u32 *k). In k must be transfered more than one private key. Then you can calculate each k offset for every kernel and calculate for every given private key all public key pais and fetch the result.

This is also easily prossible in my project because many unit tests existing which can be adapted easily.

But keep in mind, memory access is very slow. If you transfer many private keys, it cost a lot of shared memory and this memory needs to be written and read by each kernel which is a very slow operation. Therefore I decided to pass a single key and calculate multiple keys with an offset. This operation will be done on the CPU also and is a trick that I don't need so much memory operations.

Cheers, Bernard
CryptoSh1va
Jr. Member
*
Offline Offline

Activity: 33
Merit: 7


View Profile
May 29, 2021, 07:21:32 PM
 #9

Is it possible to provide in the OpenCL a private key like a int 32 array and get the private keys?
I'd like to do that, too.
I have a file with non-standard generated seeds, and I need to get private keys ->public keys ->addresses with using Opencl.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!