He's not dead, he's been posting in this thread: https://bitcointalksearch.org/topic/m.64634546
It was the Bitcointalk forum that inspired us to create Bitcointalksearch.org - Bitcointalk is an excellent site that should be the default page for anybody dealing in cryptocurrency, since it is a virtual gold-mine of data. However, our experience and user feedback led us create our site; Bitcointalk's search is slow, and difficult to get the results you need, because you need to log in first to find anything useful - furthermore, there are rate limiters for their search functionality.
The aim of our project is to create a faster website that yields more results and faster without having to create an account and eliminate the need to log in - your personal data, therefore, will never be in jeopardy since we are not asking for any of your data and you don't need to provide them to use our site with all of its capabilities.
We created this website with the sole purpose of users being able to search quickly and efficiently in the field of cryptocurrency so they will have access to the latest and most accurate information and thereby assisting the crypto-community at large.
#!/usr/bin/env python3
# 2023/Dec/03, create_database_arulbero.py
import secp256k1 as ice
import sys
#############################################################################
# Set the number of public keys to generate
#############################################################################
start_key = 1
num_public_keys = 2**32 #(about 4 billions of keys)
bits_to_store = 64
bytes_to_store = bits_to_store//8
rate_of_key_to_generate = 2**20
rate_of_key_to_store = rate_of_key_to_generate
interval_to_generate = range(start_key, start_key + num_public_keys, rate_of_key_to_store)
interval_to_store = range(start_key,start_key + num_public_keys,rate_of_key_to_store)
binary_mode = 1
#############################################################################
if (binary_mode == 1):
f = open("public_keys_database.bin", "wb") #binary mode
########################################generation#############################################
public_keys=[]
public_keys_complete=list(map(ice.scalar_multiplication,interval_to_generate)) #generates the public keys complete
public_keys=list(map(lambda w: int(w[33-bytes_to_store:33].hex(),16),public_keys_complete)) #extract only the last bytes_to_store
########################################writing the db##########################################
for i in range(0,len(interval_to_store)):
f.write(public_keys[i].to_bytes(bytes_to_store,sys.byteorder)) #writes each key
f.close()
else:
f = open("public_keys_database.txt", "w")
#generation
public_keys=[]
for i in interval_to_generate:
P4 = ice.scalar_multiplication(i)
public_keys.append(P4[33-bytes_to_store:33].hex())
#writing the db
for i in range(0,len(interval_to_store)):
f.write(public_keys[i])
f.close()
# 2023/Dec/03, arulbero_search_key.py
import secp256k1 as ice
import random
import sys
#############################################################################
# Set the number of public keys to generate
#############################################################################
start_key = 1
num_public_keys = 2**32
bits_to_store = 64
bytes_to_store = bits_to_store//8
rate_of_key_to_generate = 2**20
rate_of_key_to_store = rate_of_key_to_generate
split_database = 256 #read only a fraction of the database to speedup the finding of the string
interval_to_generate = range(start_key,start_key + num_public_keys, rate_of_key_to_store)
interval_to_store = range(start_key,start_key + num_public_keys,rate_of_key_to_store)
binary_mode = 1
#########################################################################################
#pk = 0x3243 = 12867
#P = ice.scalar_multiplication(12867)
#P="0x6800b#b8a9dffe1709ceac95d7d06646188c2cb656c09cd2e717ec67487ce1be3"
#############generates random private key and public key#################################
pk= random.randint(start_key, start_key + num_public_keys)
#pk=start_key + num_public_keys-1
P = ice.scalar_multiplication(pk)
print()
print("This is the public key: " + P[1:33].hex())
print("I need to find this private key: "+str(pk))
###################subtraction of : P - 1G, P - 2G, ..., P - rate_of_key*G################
substract_pub = ice.scalar_multiplication(1)
complete_pub= ice.point_loop_subtraction(rate_of_key_to_generate, P, substract_pub)
partial_pub=[] #need only the last bytes_to_store
P2=int(P[33-bytes_to_store:33].hex(),16).to_bytes(bytes_to_store,sys.byteorder)
partial_pub.append(P2)
for i in range(1,rate_of_key_to_store+1):
partial_pub.append(int(complete_pub[(i-1)*65+33-bytes_to_store:(i-1)*65+33].hex(),16).to_bytes(bytes_to_store,sys.byteorder))
################search in database##########################################################
num_bytes = num_public_keys*bytes_to_store//rate_of_key_to_store
size = num_bytes//split_database
s_partial_pub = set(partial_pub)
with open("public_keys_database.bin", 'r+b') as f:
#s=f.read()
for k in range(0, num_bytes, num_bytes//split_database):
f.seek(0,1)
partial_db = f.read(num_bytes//split_database)
l_partial_db = [partial_db[i:i + bytes_to_store] for i in range(0, size, bytes_to_store)]
s_partial_db = set(l_partial_db)
a = list(s_partial_db & s_partial_pub)
if (len(a)>0):
n = partial_db.find(a[0])
if n > -1:
print()
print("Private key found!!!")
private_key = (n+k)//bytes_to_store*rate_of_key_to_generate + partial_pub.index(a[0])+1
if(pk == private_key):
print("It is correct!!!")
else:
print("Collision!")
print(private_key)
P3 = ice.scalar_multiplication(private_key)
pub_key=P3[1:33].hex()
print((pub_key)[:])
f.close()
sys.exit(0)
print("string not found")
This is the public key: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Building the Binary Database
Targeting PubKey: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Number of PubKeys: 20,000,000
Writing to file every: 20,000,000 keys
Subtract Value: 1
Space Covered: 20,000,000 / 0x1312d00
DB Generation Time: 0:00:09.604563
Scanning Randomly
Current Random Key: 0x9dd926219 Jumps Made: 291
PK Found: 42387769980
PK Found: 0x9de820a7c
Search Time: 0:00:01.815859
Total Time: 0:00:11.420422
import secp256k1 as ice
def _point_subtraction(pubkey1_bytes, pubkey2_bytes):
return ice.point_subtraction(pubkey1_bytes, pubkey2_bytes)
def point_subtraction(pubkey1_bytes, pubkey2_bytes):
res = _point_subtraction(pubkey1_bytes, pubkey2_bytes)
return bytes(bytearray(res))
target_public_key = "026ecabd2d22fdb737be21975ce9a694e108eb94f3649c586cc7461c8abf5da71a"
target = ice.pub2upub(target_public_key)
num = 2**23
subtract= 2**10
subtract_pub= ice.scalar_multiplication(subtract)
with open('data-base.bin', 'wb') as binary_file:
current_pubkey = target
byte_accumulator = 0
bit_position = 0
for _ in range(num):
current_pubkey = point_subtraction(current_pubkey, subtract_pub)
binary_data = int(current_pubkey.hex(), 16)
bit = 0 if str(binary_data).endswith(('0', '2', '4', '6', '8')) else 1
byte_accumulator = (byte_accumulator << 1) | bit
bit_position += 1
if bit_position == 8:
binary_file.write(byte_accumulator.to_bytes(1, byteorder='big'))
byte_accumulator = 0
bit_position = 0
if bit_position > 0:
byte_accumulator <<= (8 - bit_position)
binary_file.write(byte_accumulator.to_bytes(1, byteorder='big'))
import multiprocessing
import random
import secp256k1 as ice
from bitstring import BitArray
import psutil
import mmap
def kmp_prefix(pattern):
prefix_table = [0] * len(pattern)
j = 0
for i in range(1, len(pattern)):
while j > 0 and pattern[i] != pattern[j]:
j = prefix_table[j - 1]
if pattern[i] == pattern[j]:
j += 1
prefix_table[i] = j
return prefix_table
def kmp_search(text, pattern, prefix_table):
j = 0
for i in range(len(text)):
while j > 0 and text[i] != pattern[j]:
j = prefix_table[j - 1]
if text[i] == pattern[j]:
j += 1
if j == len(pattern):
return i - j + 1
return -1
def main_task(start, end, file_map):
prefix_table = kmp_prefix(file_map)
try:
while True:
pk = random.randint(start, end)
target = ice.scalar_multiplication(pk)
num = 64 # number of times
sustract = 2**10 # amount to subtract each time
sustract_pub = ice.scalar_multiplication(sustract)
res = ice.point_loop_subtraction(num, target, sustract_pub)
binary = ''
for t in range(num):
h = (res[t * 65:t * 65 + 65]).hex()
hc = int(h[2:], 16)
if str(hc).endswith(('0', '2', '4', '6', '8')):
binary += "0"
if str(hc).endswith(('1', '3', '5', '7', '9')):
binary += "1"
my_str = binary
b = bytes(BitArray(bin=my_str))
match_position = kmp_search(file_map, b, prefix_table)
if match_position != -1:
inx = match_position * sustract
Pk = (int(pk) + int(inx)) + int(inx) * 7
print(hex(Pk))
with open("win45.txt", "a") as data_file:
data_file.write("Pk:" + " " + hex(Pk) + "\n")
except KeyboardInterrupt:
print("Пpoцecc был пpepвaн пoльзoвaтeлeм")
return
def worker(start, end, file_map):
main_task(start, end, file_map)
def split_range(start, end, num_splits):
step = (end - start) // num_splits
return [(start + i * step, start + (i + 1) * step) for i in range(num_splits)]
if __name__ == '__main__':
total_start = 2**44
total_end = 2**45
num_physical_cores = psutil.cpu_count(logical=False)
with open("data-base.bin", "r+b") as f:
file_map = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
range_splits = split_range(total_start, total_end, num_physical_cores)
processes = []
try:
for start, end in range_splits:
p = multiprocessing.Process(target=worker, args=(start, end, file_map))
processes.append(p)
p.start()
for p in processes:
p.join()
except KeyboardInterrupt:
print("Ocнoвнoй cкpипт был пpepвaн. Зaвepшeниe вcex пpoцeccoв.")
for p in processes:
p.terminate()
p.join()
print("Bce пpoцeccы ycпeшнo зaвepшeны.")
file_map.close()
This is the public key: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Building the Binary Database
Targeting PubKey: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.915161
Scanning Incrementally (BSGS?! Maybe Meet In The Middle?)
Current Key Position: 0x8000d693a3e2 Jumps Made: 30
PK Found: 191206974700443
PK Found: 0xade6d7ce3b9b
Search Time: 0:00:01.605224
Total Time: 0:00:01.606917
This is the public key: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Building the Binary Database
Targeting PubKey: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.915161
Scanning Incrementally (BSGS?! Maybe Meet In The Middle?)
Current Key Position: 0x8000d693a3e2 Jumps Made: 30
PK Found: 191206974700443
PK Found: 0xade6d7ce3b9b
Search Time: 0:00:01.605224
Total Time: 0:00:01.606917
This is the public key: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Building the Binary Database
Targeting PubKey: 0291bee5cf4b14c291c650732faa166040e4c18a14731f9a930c1e87d3ec12debb
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.915161
Scanning Incrementally (BSGS?! Maybe Meet In The Middle?)
Current Key Position: 0x8000d693a3e2 Jumps Made: 30
PK Found: 191206974700443
PK Found: 0xade6d7ce3b9b
Search Time: 0:00:01.605224
Total Time: 0:00:01.606917
This is the public key: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Building the Binary Database
Targeting PubKey: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.133606
Scanning Randomly
Current Random Key: 0x9dba52300 Jumps Made: 133
PK Found: 42387769980
PK Found: 0x9de820a7c
Search Time: 0:00:02.973942
Total Time: 0:00:34.107548
creating Baby Step
DB Generation Time: 0:00:27.731941
Found the Baby Steps Table file: baby_steps__binary.bin. Will be used directly
Checking 3600000000000000 keys from 0x800000000
BSGS FOUND PrivateKey : 42387769979
Time Spent : 60.55 seconds
Found the Baby Steps Table file: baby_steps__binary.bin. Will be used directly
Checking 3600000000000000 keys from 0x9de000a7c
BSGS FOUND PrivateKey : 42387769979
Time Spent : 0.13 seconds
This is the public key: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Building the Binary Database
Targeting PubKey: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.133606
Scanning Randomly
Current Random Key: 0x9dba52300 Jumps Made: 133
PK Found: 42387769980
PK Found: 0x9de820a7c
Search Time: 0:00:02.973942
Total Time: 0:00:34.107548
creating Baby Step
DB Generation Time: 0:00:27.731941
Found the Baby Steps Table file: baby_steps__binary.bin. Will be used directly
Checking 3600000000000000 keys from 0x800000000
BSGS FOUND PrivateKey : 42387769979
Time Spent : 60.55 seconds
This is the public key: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Building the Binary Database
Targeting PubKey: 02b3e772216695845fa9dda419fb5daca28154d8aa59ea302f05e916635e47b9f6
Number of PubKeys: 60,000,000
Writing to file every: 60,000,000 keys
Subtract Value: 1
Space Covered: 60,000,000 / 0x3938700
DB Generation Time: 0:00:31.133606
Scanning Randomly
Current Random Key: 0x9dba52300 Jumps Made: 133
PK Found: 42387769980
PK Found: 0x9de820a7c
Search Time: 0:00:02.973942
Total Time: 0:00:34.107548
creating Baby Step
DB Generation Time: 0:00:27.731941
Found the Baby Steps Table file: baby_steps__binary.bin. Will be used directly
Checking 3600000000000000 keys from 0x800000000
BSGS FOUND PrivateKey : 42387769979
Time Spent : 60.55 seconds