creator says there is no pattern
This is the fact that there is no pattern. But it's not random either. There is an exact math formula for making this puzzle with some script, errors = ZERO. With high decimal precision (mp.dps = 20 at least) And the formula is in the creator's mind. This is all I have to say in public and outside the SCIF room
|
|
|
probably another digaran version?
It's amazing how persistent he is in his imagination. It turns out that the real Satoshi Nakamoto has been living a double life. The digaran mysterious genius behind it all. If you are the creator could you please sign a something to prove us? Alternative you can increase the puzzle by 10x again.
Why would anyone prove anything when we already have a verified creator: A few words about the puzzle. There is no pattern. It is just consecutive keys from a deterministic wallet (masked with leading 000...0001 to set difficulty).
|
|
|
Now you understand?
I've enlisted the help of my imaginary friends, Fibonacci and Euclid, for an epic escapade through the primeval forest of PVK values and the enigmatic realm of depressed progressions. Armed with nothing but a slide rule and a cat's evil eye, we've sacrificed Netflix binging to decode cryptographic riddles, as the crypto-gods eagerly await our impending mathematical breakthrough. Let's ride the prime number rollercoaster together and unveil the grand secret hidden within the pattern that goes beyond PVK values. I'm convinced we're on the verge of a breakthrough that will shake the foundations of mathematical academia. The pulse of the prime force guides our quest, and we stand on the cusp of a revelation that promises to echo through the corridors of intellectual history. Get ready for the revelation of the century! Cheers to the thrilling adventure of PVK values and their clandestine connections. May the prime force be with us!
|
|
|
215 805 661 416 years
Your calculation is correct. With 100 Ekeys/s would take an incredibly long time. That is unbreakable even at that speed. Speed needed for a 130 range scan time of 5 minutes is approximately 719,000,000 Ekeys/s.
|
|
|
I think that if the creator was to come here and give us hints, this would defeat the purpose of his creation which is to measure our cracking capabilities.
Can't really be giving out hints in an experiment like this one, we must check our own leads and see what comes out of it.
He succeeded in his idea. He showed our cracking capabilities are poor. Prize: 988.498 BTC (total), 31.998 BTC (won), 956.5 BTC (remaining) His 956 BTC is relatively safe even the whole world knows the ranges where the private keys are.
|
|
|
HI everyone, maybe someone here can explain to me how public key subtraction works? Thanks.
Or even better.... a simplified NSA accelerated study on how to solve any puzzle with key-subtraction.
|
|
|
sorry for jumping in and having to ask what i have to change binary_bsgs_v1.py using this one starting at another point instead of 1 using this "lm_upub= ice.scalar_multiplication(Add+(lm*i))" will go for 120 bit db how to setup after 125 any help on this , mean where are you're specific scripts, you all have your own scripts share it is care for it..
Example for 65bit It won't work if there are no chunks. It will throw out that you don't have enough memory even if you have 128GB of RAM. So this is will create baby_steps_binary.bin from 46117 stages.... Size of file over 5GB .... So calculate size for 130 bit. import secp256k1 as ice from bitstring import BitArray
print("creating Baby Step")
# create baby step num = 92233720368 # Keys number in Binary Babystep. same m in the search script Low_m = 20 lm = num // Low_m Add = 18446744073709551615 Add_pub = ice.scalar_multiplication(Add)
# Function to process a chunk and write to binary file def process_and_write_chunk(start, end): res = ice.point_sequential_increment(end - start, Add_pub)
# Ensure the length of res is a multiple of 65 res_length = len(res) if res_length % 65 != 0: res = res[:-(res_length % 65)]
binary = '' for t in range(start, end): h = res[t * 65 : (t + 1) * 65].hex() hc = int(h[2:], 16) if h else 0 # Handle the case when h is an empty string
if str(hc).endswith(('0', '2', '4', '6', '8')): A = "0" binary += ''.join(str(A))
if str(hc).endswith(('1', '3', '5', '7', '9')): A = "1" binary += ''.join(str(A))
my_str = BitArray(bin=binary)
binary_file = open('baby_steps_binary.bin', 'ab') my_str.tofile(binary_file) binary_file.close()
# Process the remaining chunks with a smaller chunk size chunk_size = 100000 for i in range(0, lm, chunk_size): print("stage: " + str(i // chunk_size + 1) + "/" + str((lm + chunk_size - 1) // chunk_size)) end = min(i + chunk_size, lm) process_and_write_chunk(i, end)
|
|
|
I have less. Only 5 Ekeys/s, which is very little.
And that's enough to solve 65 in two seconds. I'm scratching my head to find a way to make baby steps for the H160. There seems to be no way. There is only one way pub to rmd And make binary database full with H160. I don't know how long that process would take. I haven't tried it yet. Serialized point and get hash160 for it on the fly I moved this to another topic https://bitcointalk.org/index.php?topic=5477342.msg63451195#msg63451195
|
|
|
I have less. Only 5 Ekeys/s, which is very little.
And that's enough to solve 65 in two seconds. I'm scratching my head to find a way to make baby steps for the H160. There seems to be no way. There is only one way pub to rmd And make binary database full with H160. I don't know how long that process would take. I haven't tried it yet.
|
|
|
How to make lightweight database for Public Key Hashes (Hash 160) ?
|
|
|
I have less. Only 5 Ekeys/s, which is very little.
And that's enough to solve 65 in two seconds. I'm scratching my head to find a way to make baby steps for the H160. There seems to be no way.
|
|
|
And leave it like that until January 1, 2025 I have ~90 Ekeys/s in BSGS/keyhunt I've been tweaking linux for months to get every atom out of Dual CPU configuration. #RT kernel wget -qO - https://dl.xanmod.org/archive.key | sudo gpg --dearmor -o /usr/share/keyrings/xanmod-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/xanmod-archive-keyring.gpg] http://deb.xanmod.org releases main' | sudo tee /etc/apt/sources.list.d/xanmod-release.list sudo apt-get -y update && sudo apt install linux-xanmod-rt-x64v3 sudo apt install -y tuned tuned-utils tuned-utils-systemtap sudo tuned-adm profile latency-performance cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor should be performance for all cores /etc/default/grub quiet msr.allow_writes=on nosoftlockup mce=ignore_ce skew_tick=1 clocksource=hpet iommu=soft noresume mitigations=off nmi_watchdog=0 Nvme config (It must be a good Heatsink on Nvme, otherwise it goes over 50 C/I have had white smoke from them more than once.) /etc/fstab ext4 noatime,nodiratime,errors=remount-ro,inode_readahead_blks=0 0 1 AMD EPYC config wrmsr -a 0xc0011020 0x4400000000000 wrmsr -a 0xc0011021 0x4000000000040 wrmsr -a 0xc0011022 0x8680000401570000 wrmsr -a 0xc001102b 0x2040cc10 And so on and on....This is only part of it. I even modify BIOS on Intel boards and even GPU bios. Until the components burn *from efficiency.
|
|
|
Subtraction, multiplication, addition.....
This is like the movie Groundhog Day. About a man reliving the same day over and over and over. In this case trying to break the ECDSA.
|
|
|
Puzzle 130 will not be solved soon, around February 1, 2025 I am runung custom BSGS with 128 GB RAM on AMD EPYC bpfile size ~704 GB bloom size ~110.47 GB According to my calculation, it should end sometime in the middle of 2028. And all this if the server does not blink and there is no power outage. LOL ... That is ridiculous. Happy New Year
|
|
|
Puzzle 130 will not be solved soon, around February 1, 2025 I am running custom BSGS with 128 GB RAM on AMD EPYC bpfile size ~704 GB bloom size ~110.47 GB According to my calculation, it should end sometime in the middle of 2028. And all this if the server does not blink and there is no power outage.
|
|
|
Is there another way to build OpenSSL?
Yep....If you use Linux.... sudo apt-get install libgmp-dev libssl-dev build-essential
|
|
|
Here is my script that filters the 03 prefix. I cannot physically measure the benefits of this. Who cares if it's 10, 20 or 200 Mk/s ?. . .Same slow shit. puzzle.cpp #include <iostream> #include <vector> #include <iomanip> #include <cmath> #include <openssl/bn.h> #include <openssl/ec.h> #include <openssl/obj_mac.h> #include <openssl/evp.h> #include <openssl/rand.h> #include <openssl/sha.h> #include <openssl/ripemd.h> #include <ctime> #include <sstream> #include <fstream> #include <thread> #include <mutex> #include <atomic>
std::atomic<int> keysGenerated(0);
std::string bytesToHex(const std::vector<unsigned char>& bytes) { std::stringstream ss; for (unsigned char byte : bytes) { ss << std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(byte); } return ss.str(); }
std::vector<unsigned char> calculateSHA256(const std::vector<unsigned char>& data) { std::vector<unsigned char> hash(SHA256_DIGEST_LENGTH); SHA256(data.data(), data.size(), hash.data()); return hash; }
std::vector<unsigned char> calculateRIPEMD160(const std::vector<unsigned char>& data) { std::vector<unsigned char> hash(RIPEMD160_DIGEST_LENGTH); RIPEMD160(data.data(), data.size(), hash.data()); return hash; }
void generateKeys(BIGNUM* minKeyBN, BIGNUM* maxKeyBN, const std::vector<unsigned char>& target_hash160_bytes, std::mutex& outputMutex, std::atomic<int>& keysGenerated, int totalKeys) { BIGNUM* range = BN_new(); BIGNUM* randomPrivateKey = BN_new(); BIGNUM* bn_private_key = NULL;
BN_sub(range, maxKeyBN, minKeyBN);
EC_KEY* ec_key = EC_KEY_new_by_curve_name(NID_secp256k1); const EC_GROUP* curve = EC_KEY_get0_group(ec_key); EC_GROUP* ec_group = EC_GROUP_dup(curve); EC_KEY_set_group(ec_key, ec_group);
unsigned char sha256_result[SHA256_DIGEST_LENGTH]; std::vector<unsigned char> ripemd160_result(RIPEMD160_DIGEST_LENGTH);
while (keysGenerated < totalKeys) { BN_rand_range(randomPrivateKey, range); BN_add(randomPrivateKey, randomPrivateKey, minKeyBN);
int numBits = BN_num_bits(randomPrivateKey); int numBytes = (numBits + 7) / 8;
std::vector<unsigned char> private_key_bytes(numBytes, 0); int key_length = BN_bn2bin(randomPrivateKey, private_key_bytes.data());
bn_private_key = BN_bin2bn(private_key_bytes.data(), key_length, NULL); EC_KEY_set_private_key(ec_key, bn_private_key);
EC_POINT* public_key_point = EC_POINT_new(ec_group); EC_POINT_mul(ec_group, public_key_point, bn_private_key, NULL, NULL, NULL);
size_t public_key_length = EC_POINT_point2oct(ec_group, public_key_point, POINT_CONVERSION_COMPRESSED, NULL, 0, NULL); std::vector<unsigned char> public_key_bytes(public_key_length); EC_POINT_point2oct(ec_group, public_key_point, POINT_CONVERSION_COMPRESSED, public_key_bytes.data(), public_key_length, NULL);
if (public_key_bytes[0] != 0x03) { // Skip this iteration if the prefix is not 0x03 EC_POINT_free(public_key_point); continue; }
SHA256(public_key_bytes.data(), public_key_bytes.size(), sha256_result); ripemd160_result = calculateRIPEMD160(std::vector<unsigned char>(sha256_result, sha256_result + SHA256_DIGEST_LENGTH));
std::string calculated_hash160_hex = bytesToHex(ripemd160_result);
std::string message = "\r\033[01;33m[+] Public Key Hash (Hash 160): " + calculated_hash160_hex; { std::lock_guard<std::mutex> lock(outputMutex); std::cout << message << "\e[?25l"; std::cout.flush(); }
if (ripemd160_result == target_hash160_bytes) { std::time_t currentTime; std::time(¤tTime); std::tm tmStruct = *std::localtime(¤tTime); std::stringstream timeStringStream; timeStringStream << std::put_time(&tmStruct, "%Y-%m-%d %H:%M:%S"); std::string formattedTime = timeStringStream.str();
{ std::lock_guard<std::mutex> lock(outputMutex); std::cout << "\n\033[32m[+] PUZZLE SOLVED: " << formattedTime << "\033[0m" << std::endl; std::cout << "\r\033[32m[+] Target Public Key Hash (Hash160) found! Private Key: " << bytesToHex(private_key_bytes) << "\033[0m" << std::endl; std::cout << "\e[?25h"; std::cout.flush(); }
std::ofstream file("KEYFOUNDKEYFOUND.txt", std::ios::app); if (file.is_open()) { file << "\nPUZZLE SOLVED " << formattedTime; file << "\nPrivate Key (hex): " << bytesToHex(private_key_bytes); file << "\n-------------------------------------------------------------------------------------"; file.close(); }
keysGenerated++;
break; }
EC_POINT_free(public_key_point); }
BN_free(range); BN_free(randomPrivateKey); EC_KEY_free(ec_key); EC_GROUP_free(ec_group); }
int main() { if (OpenSSL_add_all_algorithms() != 1) { std::cerr << "OpenSSL initialization failed." << std::endl; return 1; } BIGNUM* minKeyBN = BN_new(); BIGNUM* maxKeyBN = BN_new(); BN_dec2bn(&minKeyBN, "524287"); // min range BN_dec2bn(&maxKeyBN, "1048575"); // max range std::string target_hash160_hex = "b907c3a2a3b27789dfb509b730dd47703c272868";
std::vector<unsigned char> target_hash160_bytes; for (size_t i = 0; i < target_hash160_hex.length(); i += 2) { std::string byteString = target_hash160_hex.substr(i, 2); unsigned char byte = static_cast<unsigned char>(std::stoul(byteString, nullptr, 16)); target_hash160_bytes.push_back(byte); }
unsigned int num_cores = std::thread::hardware_concurrency(); const int numThreads = num_cores; // Adjust the number of threads as needed std::system("clear"); time_t currentTime = std::time(nullptr); char* minKeyStr = BN_bn2dec(minKeyBN); char* maxKeyStr = BN_bn2dec(maxKeyBN); int minKeyBits = BN_num_bits(minKeyBN); int maxKeyBits = BN_num_bits(maxKeyBN); int numBits = std::max(minKeyBits, maxKeyBits); std::cout << "\r\033[01;33m[+] HASH160 Search by NoMachine" << "\n"; std::cout << "\r\033[01;33m[+] " << SSLeay_version(SSLEAY_VERSION) << std::endl; std::cout << "\r\033[01;33m[+] " << std::ctime(¤tTime); std::cout << "\r\033[01;33m[+] Puzzle: " << numBits << "\n"; std::cout << "\r\033[01;33m[+] Lower range limit: " << minKeyStr << "\n"; std::cout << "\r\033[01;33m[+] Upper range limit: " << maxKeyStr << "\n"; std::cout << "\r\033[01;33m[+] Using " << num_cores << " CPU cores for parallel search\033[0m" << std::endl; OPENSSL_free(minKeyStr); OPENSSL_free(maxKeyStr); std::cout.flush();
std::mutex outputMutex; std::vector<std::thread> threads;
for (int i = 0; i < numThreads; ++i) { threads.emplace_back(generateKeys, minKeyBN, maxKeyBN, target_hash160_bytes, std::ref(outputMutex), std::ref(keysGenerated), 1); }
for (auto& thread : threads) { thread.join(); }
BN_free(minKeyBN); BN_free(maxKeyBN);
return 0; } g++ -o puzzle puzzle.cpp -lssl -lcrypto -lpthread
|
|
|
How do you know if PubKey prefix = 02?
I think it's a waste of time to guess whether it's 02 or 03 prefix. Whatever the script is, it must pass all the private keys. It is impossible to accelerate this way. It can be filtered, but filtering is not acceleration.
|
|
|
I'm wondering if there is there any knowledge (or speculation!) of the methodology which was used in the creation of the transaction?
A few words about the puzzle. There is no pattern. It is just consecutive keys from a deterministic wallet (masked with leading 000...0001 to set difficulty).
|
|
|
|