Author

Topic: Bitcoin puzzle transaction ~32 BTC prize to who solves it - page 115. (Read 230098 times)

member
Activity: 499
Merit: 38

So what exactly did you want to show us or point out ?

I believe there is a formula that can solve all puzzles at once.  I'm not kidding.
Logarithms and polynomials are in play. But I can't prove it. It's a matter of belief for now.

The complexity is great. Maybe lifetime won't be enough Grin
jr. member
Activity: 50
Merit: 3
Pure math is reasoning
What do you know about math?  if you know how to solve a key by using pure math,  then this is for you if you know things.
We have 4 points and 4 scalar, 3 points are unknown but they do relate to all 4 scalar keys. Can you point out a hint as to how we can solve any of the 3 points?

Here are our 3 points
Code:
P1=
03f4bef7834ec36e40f1c007a4c27c2f7d2ded709fda3333fdd5801625736ed152
P2=
03389523df912b20e7f5b2223f50a3e074551d3859487701d9e6297b950c9a78ea
P3=
032b0d9abd02f210631ca0fdf138a19c6725f6b67f2dba6c22bf181c73e81abd08
Here are 4 scalar
Code:
A1=
0x1c16e0f93f27c98dfa5
A2=
0x3f6feeff01e9e8d265
A3=
0x181fe2094f092b00d40
A4=
0x200ddfe92f46681b20a
P1+P2= A4, P2-P1= P3, P3-A4= P2*2, P1-A4/2= P3/2.
Here is the trick, A1, A2 and A3 point to different public keys,  however if we subtract A1-1 from P1, subtract A2-1 from P2 and add the results,  we would get 2, which means P1 and P2 are close they are also close to P3 because half of A4 subtracted from P1 equals half of P3.  This is pure math,  but how can we solve any of the 3 points while we only have A4 and why A1, A2 and A3 behave similar to our 3 points?  They are in close range with each other but where are they exactly?
newbie
Activity: 12
Merit: 1
All wallets in the puzzle were simply created randomly within their exponent.
There is no point in engaging in any type of hypothesis/study.

This is my opinion.

I totally agree, look at the % of the Range column

#puzzle  Private Key Range                  Private Key                 % of the Range
-----------------------------------------------------------------------------------------
1     1...1 (2^0...2^1-1)                                  1                   --> 100%
2     2...3 (2^1...2^2-1)                                  3                   --> 100%
3     4...7 (2^2...2^3-1)                                  7                   --> 100%
4     8...f (2^3...2^4-1)                                  8                   --> 0%
...........................
                                                           

I see that I'm not the only one who made this table :-)

best way to search with keyhunt is to go for sectors of 5% each randomly.
Maybe starting from the end between 100%-95% and 95%-90% of the range.....
newbie
Activity: 41
Merit: 0
All wallets in the puzzle were simply created randomly within their exponent.
There is no point in engaging in any type of hypothesis/study.

This is my opinion.

I totally agree, look at the % of the Range column

#puzzle  Private Key Range                  Private Key                 % of the Range
-----------------------------------------------------------------------------------------
1     1...1 (2^0...2^1-1)                                  1                   --> 100%
2     2...3 (2^1...2^2-1)                                  3                   --> 100%
3     4...7 (2^2...2^3-1)                                  7                   --> 100%
4     8...f (2^3...2^4-1)                                  8                   --> 0%
5     10...1f (2^4...2^5-1)                                15                  --> 33.33%
6     20...3f (2^5...2^6-1)                                31                  --> 54.84%
7     40...7f (2^6...2^7-1)                                4c                  --> 19.05%
8     80...ff (2^7...2^8-1)                                e0                  --> 75.59%
9     100...1ff (2^8...2^9-1)                              1d3                 --> 82.75%
10   200...3ff (2^9...2^10-1)                             202                 --> 0.39%
11   400...7ff (2^10...2^11-1)                            483                 --> 12.81%
12   800...fff (2^11...2^12-1)                            a7b                 --> 31.02%
13   1000...1fff (2^12...2^13-1)                          1460                --> 27.35%
14   2000...3fff (2^13...2^14-1)                          2930                --> 28.71%
15   4000...7fff (2^14...2^15-1)                          68f3                --> 63.99%
16   8000...ffff (2^15...2^16-1)                          c936                --> 57.2^%
17   10000...1ffff (2^16...2^17-1)                        1764f               --> 46.2^1%
18   20000...3ffff (2^17...2^18-1)                        3080d               --> 51.57%
19   40000...7ffff (2^18...2^19-1)                        5749f               --> 36.39%
20   80000...fffff (2^19...2^20-1)                        d2c55               --> 64.66%
21   100000...1fffff (2^20...2^21-1)                      1ba534              --> 72.78%
22   200000...3fffff (2^21...2^22-1)                      2de40f              --> 43.41%
23   400000...7fffff (2^22...2^23-1)                      556e52              --> 33.49%
24   800000...ffffff (2^23...2^24-1)                      dc2a04              --> 72%
25   1000000...1ffffff (2^24...2^25-1)                    1fa5ee5             --> 97.8%
26   2000000...3ffffff (2^25...2^26-1)                    340326e             --> 62.54%
27   4000000...7ffffff (2^26...2^27-1)                    6ac3875             --> 66.82%
28   8000000...fffffff (2^27...2^28-1)                    d916ce8             --> 69.6%
29   10000000...1fffffff (2^28...2^29-1)                  17e2551e            --> 49.2^8%
30   20000000...3fffffff (2^29...2^30-1)                  3d94cd64            --> 92.44%
31   40000000...7fffffff (2^30...2^31-1)                  7d4fe747            --> 95.8%
32   80000000...ffffffff (2^31...2^32-1)                  b862a62e            --> 44.05%
33   100000000...1ffffffff (2^32...2^33-1)                1a96ca8d8           --> 66.18%
34   200000000...3ffffffff (2^33...2^34-1)                34a65911d           --> 64.53%
35   400000000...7ffffffff (2^34...2^35-1)                4aed21170           --> 17.07%
36   800000000...fffffffff (2^35...2^36-1)                9de820a7c           --> 23.36%
37   1000000000...1fffffffff (2^36...2^37-1)              1757756a93          --> 45.89%
38   2000000000...3fffffffff (2^37...2^38-1)              22382facd0          --> 6.94%
39   4000000000...7fffffffff (2^38...2^39-1)              4b5f8303e9          --> 17.77%
40   8000000000...ffffffffff (2^39...2^40-1)              e9ae4933d6          --> 82.56%
41   10000000000...1ffffffffff (2^40...2^41-1)            153869acc5b         --> 32.63%
42   20000000000...3ffffffffff (2^41...2^42-1)            2a221c58d8f         --> 31.67%
43   40000000000...7ffffffffff (2^42...2^43-1)            6bd3b27c591         --> 68.48%
44   80000000000...fffffffffff (2^43...2^44-1)            e02b35a358f         --> 75.13%
45   100000000000...1fffffffffff (2^44...2^45-1)          122fca143c05        --> 13.67%
46   200000000000...3fffffffffff (2^45...2^46-1)          2ec18388d544        --> 46.11%
47   400000000000...7fffffffffff (2^46...2^47-1)          6cd610b53cba        --> 70.06%
48   800000000000...ffffffffffff (2^47...2^48-1)          ade6d7ce3b9b        --> 35.86%
49   1000000000000...1ffffffffffff (2^48...2^49-1)        174176b015f4d       --> 45.35%
50   2000000000000...3ffffffffffff (2^49...2^50-1)        22bd43c2e9354       --> 8.56%
51   4000000000000...7ffffffffffff (2^50...2^51-1)        75070a1a009d4       --> 82.86%
52   8000000000000...fffffffffffff (2^51...2^52-1)        efae164cb9e3c       --> 87.2^5%
53   10000000000000...1fffffffffffff (2^52...2^53-1)      180788e47e326c      --> 50.18%
54   20000000000000...3fffffffffffff (2^53...2^54-1)      236fb6d5ad1f43      --> 10.74%
55   40000000000000...7fffffffffffff (2^54...2^55-1)      6abe1f9b67e114      --> 66.79%
56   80000000000000...ffffffffffffff (2^55...2^56-1)      9d18b63ac4ffdf      --> 22.73%
57   100000000000000...1ffffffffffffff (2^56...2^57-1)    1eb25c90795d61c     --> 91.85%
58   200000000000000...3ffffffffffffff (2^57...2^58-1)    2c675b852189a21     --> 38.76%
59   400000000000000...7ffffffffffffff (2^58...2^59-1)    7496cbb87cab44f     --> 82.17%
60   800000000000000...fffffffffffffff (2^59...2^60-1)    fc07a1825367bbe     --> 96.9%
61   1000000000000000...1fffffffffffffff (2^60...2^61-1)  13c96a3742f64906    --> 23.67%
62   2000000000000000...3fffffffffffffff (2^61...2^62-1)  363d541eb611abee    --> 69.5%
63   4000000000000000...7fffffffffffffff (2^62...2^63-1)  7cce5efdaccf6808    --> 95.01%
64   8000000000000000...ffffffffffffffff (2^63...2^64-1)  f7051f27b09112d4    --> 92.98%
65   10000000000000000...1ffffffffffffffff (2^64...2^65-1)1a838b13505b26867   --> 65.71%
                                                           
newbie
Activity: 12
Merit: 1
All wallets in the puzzle were simply created randomly within their exponent.
There is no point in engaging in any type of hypothesis/study.

This is my opinion.
hero member
Activity: 630
Merit: 731
Bitcoin g33k
Look result of this madness:

Puzzle:1: Log(2) for 1 is approximately 0.0. Reverse calculation: 1.0
...
Result is instant.

I can not see pattern here... Can you see ?? Grin
I'm lost here between the size of the numbers and the precision required here . . .
Result is instant because you know the result, this is called a verification. Otherwise on average you need precision to represent 2**n values for each range. In reality the precision needs to gradually increase according to log-scale rules. In even more reality floating points can't hold any rational numbers, just close-enough values (think about 1/3 which is impossible to represent as a non-fraction by a binary-based computer), so most likely you'll skip the value you're looking for unless you know its floating point formula (based on mantissa and exponent) can represent it exactly. High-level decimal libraries expansions can't save you from these problems.

I agree.

@nomachine:
I'm not entirely sure, but I can't see anything spectacular here. The log(2) is just a different notation. It makes no difference whether you use the range as a decimal number and generate random numbers there, or whether you use log(2). You could also chase the numbers through other algorithms, the result will always be the same. You cannot predict the range.

So what exactly did you want to show us or point out ?
member
Activity: 165
Merit: 26
Look result of this madness:

Puzzle:1: Log(2) for 1 is approximately 0.0. Reverse calculation: 1.0
...
Result is instant.

I can not see pattern here... Can you see ?? Grin
I'm lost here between the size of the numbers and the precision required here . . .
Result is instant because you know the result, this is called a verification. Otherwise on average you need precision to represent 2**n values for each range. In reality the precision needs to gradually increase according to log-scale rules. In even more reality floating points can't hold any rational numbers, just close-enough values (think about 1/3 which is impossible to represent as a non-fraction by a binary-based computer), so most likely you'll skip the value you're looking for unless you know its floating point formula (based on mantissa and exponent) can represent it exactly. High-level decimal libraries expansions can't save you from these problems.


Maybe you should define, "pure math" before I indulge in a response
Sure. Pure math is reasoning. Don't confuse that with arithmetics. Your examples are bad because 1 + 1 is the basis for subtraction, multiplication, and division. It's also the first rule in the definition of arithmetics (there exists a value 0, and every possible number x has a successor, hey, let's call that x + 1). So in a "pure math" way only an additive definition is enough, and you develop up from that. So a Riemann integral is also pure math. I really don't get where exactly you draw the line between "math" and "pure math". An EC equation is still pure math. Moving electrons in a circuit according to some principles is not math, it's physics or programming.
member
Activity: 499
Merit: 38
The concept of a logarithm was invented just a few centuries ago and immediately changed engineering as we know it.

Code:
import math
from mpmath import mp

def calculate_log2(decimal_value):
    log2_value = mp.log(decimal_value, 2)
    return log2_value

def calculate_reverse_log2(log2_value):
    decimal_value = mp.power(2, log2_value)
    return decimal_value

target_numbers = [
    (1, 1), (2, 3), (3, 7), (4, 8), (5, 21), (6, 49), (7, 76), (8, 224), (9, 467), (10, 514),
    (11, 1155), (12, 2683), (13, 5216), (14, 10544), (15, 26867), (16, 51510),
    (17, 95823), (18, 198669), (19, 357535), (20, 863317), (21, 1811764),
    (22, 3007503), (23, 5598802), (24, 14428676), (25, 33185509),
    (26, 54538862), (27, 111949941), (28, 227634408), (29, 400708894),
    (30, 1033162084), (31, 2102388551), (32, 3093472814), (33, 7137437912),
    (34, 14133072157), (35, 20112871792), (36, 42387769980), (37, 100251560595),
    (38, 146971536592), (39, 323724968937), (40, 1003651412950),
    (41, 1458252205147), (42, 2895374552463), (43, 7409811047825),
    (44, 15404761757071), (45, 19996463086597), (46, 51408670348612),
    (47, 119666659114170), (48, 191206974700443), (49, 409118905032525),
    (50, 611140496167764), (51, 2058769515153876), (52, 4216495639600700),
    (53, 6763683971478124), (54, 9974455244496707), (55, 30045390491869460),
    (56, 44218742292676575), (57, 138245758910846492), (58, 199976667976342049),
    (59, 525070384258266191), (60, 1135041350219496382), (61, 1425787542618654982),
    (62, 3908372542507822062), (63, 8993229949524469768),
    (64, 17799667357578236628), (65, 30568377312064202855)
]

mp.dps = 20  # Set the high decimal precision

for ordinal, decimal_value in target_numbers:
    log2_result = calculate_log2(decimal_value)
    reverse_result = calculate_reverse_log2(log2_result)
    print(f"Puzzle:{ordinal}: Log(2) for {decimal_value} is approximately {log2_result}. Reverse calculation: {reverse_result}")

Look result of this madness:

Puzzle:1: Log(2) for 1 is approximately 0.0. Reverse calculation: 1.0
Puzzle:2: Log(2) for 3 is approximately 1.5849625007211561815. Reverse calculation: 3.0
Puzzle:3: Log(2) for 7 is approximately 2.8073549220576041074. Reverse calculation: 7.0
Puzzle:4: Log(2) for 8 is approximately 3.0. Reverse calculation: 8.0
Puzzle:5: Log(2) for 21 is approximately 4.3923174227787602889. Reverse calculation: 21.0
Puzzle:6: Log(2) for 49 is approximately 5.6147098441152082149. Reverse calculation: 49.0
Puzzle:7: Log(2) for 76 is approximately 6.2479275134435854938. Reverse calculation: 76.0
Puzzle:8: Log(2) for 224 is approximately 7.8073549220576041074. Reverse calculation: 224.0
Puzzle:9: Log(2) for 467 is approximately 8.8672787397096619133. Reverse calculation: 467.0
Puzzle:10: Log(2) for 514 is approximately 9.0056245491938781069. Reverse calculation: 514.0
Puzzle:11: Log(2) for 1155 is approximately 10.173677136303419893. Reverse calculation: 1155.0
Puzzle:12: Log(2) for 2683 is approximately 11.389631339260521112. Reverse calculation: 2683.0
Puzzle:13: Log(2) for 5216 is approximately 12.348728154231077553. Reverse calculation: 5216.0
Puzzle:14: Log(2) for 10544 is approximately 13.364134655008051742. Reverse calculation: 10544.0
Puzzle:15: Log(2) for 26867 is approximately 14.713547616912692731. Reverse calculation: 26867.0
Puzzle:16: Log(2) for 51510 is approximately 15.652564919610652675. Reverse calculation: 51510.0
Puzzle:17: Log(2) for 95823 is approximately 16.548084361224413154. Reverse calculation: 95823.0
Puzzle:18: Log(2) for 198669 is approximately 17.600007248708430135. Reverse calculation: 198669.0
Puzzle:19: Log(2) for 357535 is approximately 18.447724952285439321. Reverse calculation: 357535.0
Puzzle:20: Log(2) for 863317 is approximately 19.719530872026151871. Reverse calculation: 863317.00000000000001
Puzzle:21: Log(2) for 1811764 is approximately 20.788963611792287227. Reverse calculation: 1811764.0
Puzzle:22: Log(2) for 3007503 is approximately 21.520134745822105762. Reverse calculation: 3007503.0
Puzzle:23: Log(2) for 5598802 is approximately 22.416686729787820277. Reverse calculation: 5598802.0
Puzzle:24: Log(2) for 14428676 is approximately 23.782435585948494073. Reverse calculation: 14428676.0
Puzzle:25: Log(2) for 33185509 is approximately 24.984050066697330736. Reverse calculation: 33185509.0
Puzzle:26: Log(2) for 54538862 is approximately 25.700781261712878111. Reverse calculation: 54538862.0
Puzzle:27: Log(2) for 111949941 is approximately 26.738278526958637998. Reverse calculation: 111949941.0
Puzzle:28: Log(2) for 227634408 is approximately 27.762143403294801415. Reverse calculation: 227634408.0
Puzzle:29: Log(2) for 400708894 is approximately 28.577979290797464122. Reverse calculation: 400708894.0
Puzzle:30: Log(2) for 1033162084 is approximately 29.944419458082398243. Reverse calculation: 1033162084.0
Puzzle:31: Log(2) for 2102388551 is approximately 30.969382178280594153. Reverse calculation: 2102388551.0
Puzzle:32: Log(2) for 3093472814 is approximately 31.526580209327912218. Reverse calculation: 3093472814.0
Puzzle:33: Log(2) for 7137437912 is approximately 32.732759144627864676. Reverse calculation: 7137437912.0000000001
Puzzle:34: Log(2) for 14133072157 is approximately 33.718356052472843908. Reverse calculation: 14133072157.0
Puzzle:35: Log(2) for 20112871792 is approximately 34.22740003868583903. Reverse calculation: 20112871792.0
Puzzle:36: Log(2) for 42387769980 is approximately 35.302929017096708804. Reverse calculation: 42387769980.000000001
Puzzle:37: Log(2) for 100251560595 is approximately 36.544833738746849477. Reverse calculation: 100251560595.0
Puzzle:38: Log(2) for 146971536592 is approximately 37.096745824716051977. Reverse calculation: 146971536592.0
Puzzle:39: Log(2) for 323724968937 is approximately 38.235977688802476225. Reverse calculation: 323724968937.0
Puzzle:40: Log(2) for 1003651412950 is approximately 39.868395419757349213. Reverse calculation: 1003651412950.0
Puzzle:41: Log(2) for 1458252205147 is approximately 40.407377394423366271. Reverse calculation: 1458252205147.0
Puzzle:42: Log(2) for 2895374552463 is approximately 41.396887129359569265. Reverse calculation: 2895374552463.0
Puzzle:43: Log(2) for 7409811047825 is approximately 42.752573892536879788. Reverse calculation: 7409811047825.0
Puzzle:44: Log(2) for 15404761757071 is approximately 43.808441604030467369. Reverse calculation: 15404761757071.0
Puzzle:45: Log(2) for 19996463086597 is approximately 44.184810076602017917. Reverse calculation: 19996463086597.0
Puzzle:46: Log(2) for 51408670348612 is approximately 45.547076931749783679. Reverse calculation: 51408670348612.0
Puzzle:47: Log(2) for 119666659114170 is approximately 46.766014580697737785. Reverse calculation: 119666659114170.0
Puzzle:48: Log(2) for 191206974700443 is approximately 47.442128478217754077. Reverse calculation: 191206974700443.0
Puzzle:49: Log(2) for 409118905032525 is approximately 48.539513532885657356. Reverse calculation: 409118905032525.00001
Puzzle:50: Log(2) for 611140496167764 is approximately 49.118497410306637905. Reverse calculation: 611140496167764.0
Puzzle:51: Log(2) for 2058769515153876 is approximately 50.870703748687580964. Reverse calculation: 2058769515153876.0
Puzzle:52: Log(2) for 4216495639600700 is approximately 51.904965885818221825. Reverse calculation: 4216495639600700.0
Puzzle:53: Log(2) for 6763683971478124 is approximately 52.586730675690989872. Reverse calculation: 6763683971478124.0
Puzzle:54: Log(2) for 9974455244496707 is approximately 53.147159473916182081. Reverse calculation: 9974455244496706.9998
Puzzle:55: Log(2) for 30045390491869460 is approximately 54.737993190511333013. Reverse calculation: 30045390491869460.0
Puzzle:56: Log(2) for 44218742292676575 is approximately 55.295507509568065689. Reverse calculation: 44218742292676575.0
Puzzle:57: Log(2) for 138245758910846492 is approximately 56.940012835374135824. Reverse calculation: 138245758910846492.0
Puzzle:58: Log(2) for 199976667976342049 is approximately 57.472609298293031082. Reverse calculation: 199976667976342049.0
Puzzle:59: Log(2) for 525070384258266191 is approximately 58.865288438176815787. Reverse calculation: 525070384258266190.99
Puzzle:60: Log(2) for 1135041350219496382 is approximately 59.977450564669282481. Reverse calculation: 1135041350219496382.0
Puzzle:61: Log(2) for 1425787542618654982 is approximately 60.306464728992728608. Reverse calculation: 1425787542618654982.0
Puzzle:62: Log(2) for 3908372542507822062 is approximately 61.761273698209320329. Reverse calculation: 3908372542507822061.9
Puzzle:63: Log(2) for 8993229949524469768 is approximately 62.963545065677060031. Reverse calculation: 8993229949524469767.8
Puzzle:64: Log(2) for 17799667357578236628 is approximately 63.948484083037149251. Reverse calculation: 17799667357578236628.0
Puzzle:65: Log(2) for 30568377312064202855 is approximately 64.728673773273428832. Reverse calculation: 30568377312064202855.0

So, puzzle 66 private key is from
65.000000000000000000  log(2)
to
66.000000000000000000  log(2)


You can test puzzle 15 (or any) with this formula :

Code:
from mpmath import mp
import random
import secp256k1 as ice
import sys

def calculate_reverse_log2(log2_value):
    decimal_value = mp.power(2, log2_value)
    return decimal_value

mp.dps = 20  # Set the decimal precision to a sufficiently high value
target = "1QCbW9HWnwQWiQqVo5exhAnmfqKRrCRsvW"

while True:
    random_log2_value = mp.mpf(random.uniform(14.0, 15.0))
    reverse_result = calculate_reverse_log2(random_log2_value)
    HEX = "%064x" % int(reverse_result)
    dec = int(HEX, 16)
    caddr = ice.privatekey_to_address(0, True, dec)
    message = "[+] {}".format(dec);messages = [];messages.append(message);output = ''.join(messages) + "\r";sys.stdout.write(output);sys.stdout.flush()
    if target in caddr:
       wifc = ice.btc_pvk_to_wif(HEX)
       print(f"\n\033[32m[+] PUZZLE SOLVED: {wifc} \033[0m")
       break

Result is instant.

I can not see pattern here... Can you see ?? Grin

You can even do regression analysis


I'm lost between the size of the numbers and the precision required here . . .

There is no pattern. But it's not random either according to the polynomial analysis. 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.
full member
Activity: 1162
Merit: 237
Shooters Shoot...
Regardless of the math used, eventually you have to transform the math into something, a public key, a h160, whatever type collision/match you are looking for.
Everything you listed is some math implementation.

But let us say it's pure math, do the "math" for how long it takes a current CPU to do straight additions, just using numbers. And use a higher end CPU with say 5.0 mghz capability.

IMO, you have to eventually transform the pure math into what you are searching for, or have a precomputed list of something...so to me, it can never be, just math.
You're failing on the assumption that nobody, nowhere, will ever advance the math itself. Or contrarily on the assumption that somebody will prove one day that you do need "precomputed tables" - this hasn't happened yet as well. The concept of a logarithm was invented just a few centuries ago and immediately changed engineering as we know it. Until that point, math without logs was the peak of advancements in human knowledge. So I beg you pardon - it is foremost, before of anything else, the math, not the count of transistors jumbling around in logic gates in your CPU, GPU, ASIC, or whatever. Those are just tools, not the fundaments.

I can give you a public key in a small bit range, and just using math, you would never solve/know if a match was found. Understand?

Arrogance much? What does "never" mean? Or is time only relevant when you zoom and peek into a nanosecond, a day, a trillion year? Maybe a single unit of Planck time?
Here's a hint: I start from 1 up to your N modulus, and I have a 100% probability that at some point I will break your key, or that at the end I can tell you a simple truth - that your key isn't in the finite cycle. Understand?

Ahhhh, finally, a response.

Maybe you should define, "pure math" before I indulge in a response, after all, that was the basis of my response.  But to quickly answer your last comment, no arrogance, if you use pure math, as in 1+1, 1-1, 1/1, 1x1. or something thereof, just math, pure math, then no, you will never find a public key that I give you, it could be public key with a private key of 1, you would not find it with simply, pure math, because you have to transform it somehow, based on a curve's properties. Whether that be a public/wallet address, a public key, a hash160, something. You understand what I am saying?

Who cares if one can do pure math additions at 14613798463164873684768763487632847687468364243274687346242387468746846238746 key/s, it's cool and all, but without transforming it somehow, via whatever curve's properties, you simply just have a bunch of numbers.
member
Activity: 165
Merit: 26
Regardless of the math used, eventually you have to transform the math into something, a public key, a h160, whatever type collision/match you are looking for.
Everything you listed is some math implementation.

But let us say it's pure math, do the "math" for how long it takes a current CPU to do straight additions, just using numbers. And use a higher end CPU with say 5.0 mghz capability.

IMO, you have to eventually transform the pure math into what you are searching for, or have a precomputed list of something...so to me, it can never be, just math.
You're failing on the assumption that nobody, nowhere, will ever advance the math itself. Or contrarily on the assumption that somebody will prove one day that you do need "precomputed tables" - this hasn't happened yet as well. The concept of a logarithm was invented just a few centuries ago and immediately changed engineering as we know it. Until that point, math without logs was the peak of advancements in human knowledge. So I beg you pardon - it is foremost, before of anything else, the math, not the count of transistors jumbling around in logic gates in your CPU, GPU, ASIC, or whatever. Those are just tools, not the fundaments.

I can give you a public key in a small bit range, and just using math, you would never solve/know if a match was found. Understand?

Arrogance much? What does "never" mean? Or is time only relevant when you zoom and peek into a nanosecond, a day, a trillion year? Maybe a single unit of Planck time?
Here's a hint: I start from 1 up to your N modulus, and I have a 100% probability that at some point I will break your key, or that at the end I can tell you a simple truth - that your key isn't in the finite cycle. Understand?
full member
Activity: 1162
Merit: 237
Shooters Shoot...
FinderOuter has similar functionality.
https://github.com/Coding-Enthusiast/FinderOuter


Code:
Missing Base16

PrivateKey: 00000000000000000000000000000000000000000000000000******a7b90de4
PubKey: 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f

The given key is missing 6 characters.
Total number of permutations to check: 16 777 216
Running in parallel.
Found the key: 00000000000000000000000000000000000000000000000000397f5aa7b90de4
Elapsed time: 00:00:37.3199093
k/s= 453 438

Hmmmm, I wonder why it's so much slower than the python script. I haven't looked at the foundouter code in a while, so I'm not 100% the language or if it is using multi threading.

When I run the same example in the one you used finderouter for, here are my results:

Code:
Known Characters aa7b90de4
 Public Key 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f
 Private Key Found: 0x397f5aa7b90de4
 Run Time         : 0:00:01.804207

That's a huge difference in speed, like 36 to 1, or 36 times faster.

Lol, Nevermind, I ran with 5 missing characters, instead of 6. Here is result for single core python script, and missing the first 6 characters:

Code:
Known Characters a7b90de4
 Public Key 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f
 Private Key Found: 0x397f5aa7b90de4
 Run Time         : 0:00:29.066556

It appears the more known characters, at the end, help reduce search time. Example:

Code:
Private Key Found: 0x33397f5aa7b90de4
 Run Time         : 0:00:19.312457

which was missing the first 6 characters compared to:

Code:
Known Characters a7b90de4
 Public Key 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f
 Private Key Found: 0x397f5aa7b90de4
 Run Time         : 0:00:29.066556

Also, is finderouter targeting the known public key or the h160/address? Mine is using h160. I imagine if I changed it to target known public key, it would speed it up. I'll test this later.

Not sure if I have the code best optimized, but first run, just checking for matching public key is a little faster than searching for h160 (obviously) but I wanted to see the difference, just in case finderouter was searching for public key match versus h160 match.

Result:

Code:
Known Characters a7b90de4
 Public Key 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f
 Private Key Found: 0x397f5aa7b90de4
 Run Time         : 0:00:23.770135
member
Activity: 174
Merit: 12
FinderOuter has similar functionality.
https://github.com/Coding-Enthusiast/FinderOuter


Code:
Missing Base16

PrivateKey: 00000000000000000000000000000000000000000000000000******a7b90de4
PubKey: 029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f

The given key is missing 6 characters.
Total number of permutations to check: 16 777 216
Running in parallel.
Found the key: 00000000000000000000000000000000000000000000000000397f5aa7b90de4
Elapsed time: 00:00:37.3199093
k/s= 453 438
full member
Activity: 1162
Merit: 237
Shooters Shoot...
Quote
Interesting,  could you please share a code for this method you mentioned?

Sure. I will keep this simple, for the example provided above. If the known/unknown characters were more or less, I would probably do the code a little different, optimize it for the known/unknown, but for the example provided I would do this:

Code:
import sys
from datetime import datetime
import secp256k1 as ice

startTimeRun = datetime.now()
arq1 = open("btctalkexample.txt", "a")
#Private Key given in example: 0x397F5AA7B90DE4; we don't know the first 4 characters, but we know the last 10 characters
KnownPart = int('5aa7b90de4', 16)
TargetPub = '029588f9aace0310751f37d130afa1b792e70b542b29d373f64a56a50bcd90ac3f'
TargetPubXCoord = TargetPub[2:66]
num = 0x1000
hex_num = hex(num)[2:]

while num < 0x4000:
    combined = (num << 40) + KnownPart
    ResultingPub = ice.scalar_multiplication(combined).hex()[2:66]
    if ResultingPub == TargetPubXCoord:
        print(' Private Key Found:', hex(combined))
        arq1.write(hex(combined) + '\n')
        print(" Run Time         : " + str(datetime.now() - startTimeRun))
        sys.exit()
    num += 1

When I run it, it takes less than a second to find the private key:

Code:
Private Key Found: 0x397f5aa7b90de4
 Run Time         : 0:00:00.088019

I ran a test in which the first 6 characters were "unknown", it took right at 20 seconds to find the private key:

Code:
Private Key Found: 0x33397f5aa7b90de4
 Run Time         : 0:00:19.312457

jr. member
Activity: 35
Merit: 1
Has anyone ever seen a tool that tries only a set of keys? Let me explain, imagine you have this key
0x397f5aa7b90de4
What if you want to set the public key of this one 0x5aa7b90de4 and then try all combinations for the first 4 missing characters? as I understand it,  no tool exist to scan selected parts of a range, or do they exist?

You would have to give a better example of how many leading characters, because what you have now would only take a few seconds/minute, to iterate all possible combos, even with a single thread python script. Even if you do not know the leading character, you are looking at 16^4 combos, 65,536 possible combos.

But initially, I was thinking the same thing as albert0bsd was, it is similar to BSGS, because BSGS basically cuts off the last x characters, depending on your baby step file (how many public keys it contains), but for your specific example, you would need a baby step file with 2^40 keys, or modify the keys known down, to use a smaller size file.

But as is, without mod, you would merely start with 0x1000 + 0x5aa7b90de4; and increment 0x1000 by +=1 until match is found. 0x1000, 0x1001, 0x1002, etc. Not a very difficult script to put together, using python.

Buuuuuuut,

Quote
In fact I can say that I am sure about first few digits but I want to quickly try different first digits

Even if you knew the first 5 characters (which there is no way that you do), that does not mean much in the scope of this challenge, for example #130, because that would leave you with 2^112 left to search. Which can be done now via subtraction/division with a file full of 2^18 keys. But let's be real, as far as this challenge goes, people may say they know the leading x amount of characters, which they obviously do not; but maybe you have a different purpose/reason for what you are wanting to do.
Interesting,  could you please share a code for this method you mentioned?
full member
Activity: 1162
Merit: 237
Shooters Shoot...
Has anyone ever seen a tool that tries only a set of keys? Let me explain, imagine you have this key
0x397f5aa7b90de4
What if you want to set the public key of this one 0x5aa7b90de4 and then try all combinations for the first 4 missing characters? as I understand it,  no tool exist to scan selected parts of a range, or do they exist?

You would have to give a better example of how many leading characters, because what you have now would only take a few seconds/minute, to iterate all possible combos, even with a single thread python script. Even if you do not know the leading character, you are looking at 16^4 combos, 65,536 possible combos.

But initially, I was thinking the same thing as albert0bsd was, it is similar to BSGS, because BSGS basically cuts off the last x characters, depending on your baby step file (how many public keys it contains), but for your specific example, you would need a baby step file with 2^40 keys, or modify the keys known down, to use a smaller size file.

But as is, without mod, you would merely start with 0x1000 + 0x5aa7b90de4; and increment 0x1000 by +=1 until match is found. 0x1000, 0x1001, 0x1002, etc. Not a very difficult script to put together, using python.

Buuuuuuut,

Quote
In fact I can say that I am sure about first few digits but I want to quickly try different first digits

Even if you knew the first 5 characters (which there is no way that you do), that does not mean much in the scope of this challenge, for example #130, because that would leave you with 2^112 left to search. Which can be done now via subtraction/division with a file full of 2^18 keys. But let's be real, as far as this challenge goes, people may say they know the leading x amount of characters, which they obviously do not; but maybe you have a different purpose/reason for what you are wanting to do.
hero member
Activity: 862
Merit: 662
In fact I can say that I am sure about first few digits but I want to quickly try different first digits,  if I understand it well,  no software tries first digits only without touching the rest of input range.

I already explained something similar here:

Re: Solving partial WIF with two missing parts

With some changes it can be applied to your case it's just matter to know what are you doing
jr. member
Activity: 50
Merit: 3
Has anyone ever seen a tool that tries only a set of keys? Let me explain, imagine you have this key
0x397f5aa7b90de4
What if you want to set the public key of this one 0x5aa7b90de4 and then try all combinations for the first 4 missing characters? as I understand it,  no tool exist to scan selected parts of a range, or do they exist?

If you are sure about the last digits of the Privatekey is easy to make some transformations on the public key with arithmetic and work with the result with BSGS.


In fact I can say that I am sure about first few digits but I want to quickly try different first digits,  if I understand it well,  no software tries first digits only without touching the rest of input range.

I already know about WIF solvers,  they are too slow,  what I don't know is the correct set of baby and giant steps based on the size of the key.
member
Activity: 499
Merit: 38
Has anyone ever seen a tool that tries only a set of keys?

Of course we saw it. If you are missing no more than 10 characters, maybe it will work.

Code:
import sys
import os
import time
import secrets
import random
import binascii
import base58
import secp256k1 as ice
import multiprocessing
from multiprocessing import cpu_count

def generate_private_key_WIF(start, miss):
    return start + "".join(
        secrets.choice(
            "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
        )
        for _ in range(miss)
    )

def check_private_key(start, miss, target_caddr):
    while not STOP_EVENT.is_set():  
        private_key_WIF_str = generate_private_key_WIF(start, miss)
        if start[0] == '5':
            private_key_WIF = private_key_WIF_str
            first_encode = base58.b58decode(private_key_WIF)
            private_key_full = binascii.hexlify(first_encode)
            private_key = private_key_full[2:-8]
        if start[0] in ['L', 'K']:
            private_key_WIF = private_key_WIF_str
            first_encode = base58.b58decode(private_key_WIF)
            private_key_full = binascii.hexlify(first_encode)
            private_key = private_key_full[2:-10]
        private_key_hex = private_key.decode("utf-8")
        dec = int(private_key_hex[0:64], 16)
        HEX = "%064x" % dec
        mul = ice.scalar_multiplication(dec)
        caddr = ice.pubkey_to_address(0, 1, mul)
        message = "\r[+] {} ".format(private_key_WIF_str)
        messages = []
        messages.append(message)
        output = "\033[01;33m" + ''.join(messages) + "\r"
        sys.stdout.write(output)
        sys.stdout.flush()
        if caddr == target_caddr:
            wifc = ice.btc_pvk_to_wif(HEX)
            t = time.ctime()
            sys.stdout.flush()
            print(f"\n\033[01;33m[+] BINGO!!! {t} \033[0m")  
            print(f"\033[32m[+] PUZZLE SOLVED: {wifc} \033[0m")
            with open('BINGO.txt', 'a') as file:
                t = time.ctime()
                file.write('\n\nMatch Found: ' + t)
                file.write('\nPrivatekey (dec): ' + str(dec))
                file.write('\nPrivatekey (hex): ' + hex(dec)[2:])
                file.write('\nPrivatekey (wif): ' + wifc)
                
            STOP_EVENT.set()  
            return  

if __name__ == '__main__':
    start = "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qZM21gaY8W"
    miss = 52 - (len(start))
    # Define the target
    target_caddr = "18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe"
    if os.name == 'nt':
        os.system('cls')
    else:
        os.system('clear')
    t = time.ctime()
    sys.stdout.write(f"\033[01;33m[+] {t}\n")
    sys.stdout.write(f"\033[01;33m[+] Ending characters missing: {miss}\n")
    sys.stdout.write(f"\033[01;33m[+] Target address: {target_caddr}\n")
    sys.stdout.flush()

    # Create a global STOP_EVENT
    STOP_EVENT = multiprocessing.Event()

    # Create a pool of worker processes
    num_processes = multiprocessing.cpu_count()
    pool = multiprocessing.Pool(processes=num_processes)

    # Start the worker processes with different starting points
    for i in range(num_processes):
        pool.apply_async(check_private_key, args=(start, miss, target_caddr))

    # Close the pool and wait for all processes to complete
    pool.close()
    pool.join()


  • Wed Feb 21 08:23:37 2024
  • Ending characters missing: 10
  • Target address: 18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe
  • KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qZM21gaY8WhMLMGKsr4w
  • BINGO!!! Wed Feb 21 08:23:37 2024
  • PUZZLE SOLVED: KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qZM21gaY8WN2CdwnTG57

But here, we need to solve Puzzle 66.
19 characters are missing from KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3q.

That is impossible to solve. It doesn't matter how you present the private key. The numbers are so big that it is impossible.
It doesn't matter which programming language it is.
hero member
Activity: 862
Merit: 662
Has anyone ever seen a tool that tries only a set of keys? Let me explain, imagine you have this key
0x397f5aa7b90de4
What if you want to set the public key of this one 0x5aa7b90de4 and then try all combinations for the first 4 missing characters? as I understand it,  no tool exist to scan selected parts of a range, or do they exist?

If you are sure about the last digits of the Privatekey is easy to make some transformations on the public key with arithmetic and work with the result with BSGS.

newbie
Activity: 30
Merit: 0
Has anyone ever seen a tool that tries only a set of keys? Let me explain, imagine you have this key
0x397f5aa7b90de4
What if you want to set the public key of this one 0x5aa7b90de4 and then try all combinations for the first 4 missing characters? as I understand it,  no tool exist to scan selected parts of a range, or do they exist?

WifSolverCuda
https://github.com/PawelGorny/WifSolverCuda
Read the instructions and see if it fits what you want.

You need to scan from
KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9SDFgRkaA5tUpAD
to
KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgh5KmfBjdfkR2qYYJ
with -stride 5fa8624c7fba400

Do what you want, but with private keys. For public keys I don't think there is any script.
Jump to: