Author

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

legendary
Activity: 1915
Merit: 2074
It is possible that all these addresses will be reset to zero in the next few days.

I don't think so,  the #85 and #90 for sure, maybe #95 and #100, but not the other addresses. And it will take many many days, not just a few.


From : https://en.wikipedia.org/wiki/Discrete_logarithm_records

Quote
In July 2009, Joppe W. Bos, Marcelo E. Kaihara, Thorsten Kleinjung, Arjen K. Lenstra and Peter L. Montgomery announced that they had carried out a discrete logarithm computation on an elliptic curve modulo a 112-bit prime. The computation was done on a cluster of over 200 PlayStation 3 game consoles over about 6 months. They used the common parallelized version of Pollard rho method.

112 bit is the current record for the ECDLP (Elliptic Curve Discrete Logarithm Problem = retrieve the private key from the public key)
member
Activity: 255
Merit: 27
I try description algorim. But I do not understand a few moments.

Code:
int main(int argc, char **argv) {
    secp256k1_context *ctx = secp256k1_context_create(SECP256K1_CONTEXT_NONE);

    int next = 0;//Initial varibale next for cicl search in publick kes
   
    //Convert publik keys from raw to eckey format. Nothing intresested.
    for (int i = 0; i < NUMPUBKEYS; i++) {
        if (!secp256k1_eckey_pubkey_parse(&pubkeys[i], rawpubkeys[i], 33)) {
            printf("Unparsable pubkey %2d\n", i);
            return -1;
        }
    }

    printf("Build Hash\n");
    secp256k1_gej pt;//Init variable pt
    secp256k1_gej_set_ge(&pt, &secp256k1_ge_const_g);//??????
    //Start cicle from 1 to GSTEP (1<<25 or other count bits). With step one.
    for (size_t i = 1; i < GSTEP; i++) {
        /*if(i%1000000==0){
        printf("Generate %zu from %2d \n", i, GSTEP);
        }*/
        secp256k1_fe x,zinv;//Init variable z and zinv
        secp256k1_fe_storage xst;//Init variable xst
        secp256k1_fe_inv_var(&zinv, &pt.z);//????????? Maybe inverted variable. But zinv or pt.z?
        secp256k1_fe_sqr(&zinv, &zinv);//Sqr from who? Sqr zinv from zinv?
        secp256k1_fe_mul(&x, &pt.x, &zinv);//Multiple x pt.x and zinv. But who changes?
        secp256k1_fe_to_storage(&xst, &x);//Return hash data to xst from x . xst this array from 8 part of hashes.
        uint32_t entry = xst.n[0] & (HASH_SIZE-1);//In entry getted last (25-1 or other setted count bit) bit from xst.n[0] (first part from hash)
        while (table[entry].exponent != 0) {//Cicle run if in table with key entry already setted data.
            entry = (entry + (xst.n[1] | 1)) & (HASH_SIZE - 1);//Changed entry. In current xst.n[1] setted last bit to 1 plus add current entry. From this value get last 25-1 or other setted bits.
        }//This is algortim searned free row in table with changed key by algoritm in up.
        table[entry].exponent = i;//Set in table with key entry to subkey exponent varuibale i (currently pozition in main for)
        table[entry].x = xst.n[2];//Set in table with key entry to subkey x, xst.n[2] (part of hash from storage)
        //------------
        //I try inserte here searched this hash in curently public keys. Algoritm founded, but maksimal found 25 or other setted bit, no more! Logical is true.
        //------------
        secp256k1_gej_add_ge_var(&pt, &pt, &secp256k1_ge_const_g, NULL);//????????????
    }
    //End generated main table
    //But undestord. Variable i not used for generated hashes. Who is used aka privatkey?

    printf("Search Keys\n");
    secp256k1_ge ptgstep;//Init variable ptgstep
    secp256k1_gej_neg(&pt, &pt);//Negativation pt ????? pt from previos step?
    secp256k1_gej_double_var(&pt, &pt, NULL);//Double pt ???
    secp256k1_ge_set_gej(&ptgstep, &pt);//????
    secp256k1_gej_set_infinity(&pt);//????
    //In up init variable from main cicl.
   
    //Start cicl i from 0 (previos cilck start from 1). To 2*GSTEP (double gstep). With step 1.
    for (size_t i = 0; i < 2*GSTEP; i++) {
        //Start cicl j from next (dinamic variable for exclude founded keys on begin array). To NUMPUBKEYS (coun publick keys). With step 1.
        for (int j = next; j < NUMPUBKEYS; j++) {
            secp256k1_gej diff;//Init variable diff
            secp256k1_fe x,zinv;//Init variable x and zinv
            secp256k1_fe_storage xst;//Init variable xst
            secp256k1_gej_add_ge_var(&diff, &pt, &pubkeys[j],  NULL);//????? May be added variable diff, pt and pubkeys[j] (currently publick key)
            secp256k1_fe_inv_var(&zinv, &diff.z);//??????Maybe inverted variable. But zinv or pt.z?
            secp256k1_fe_sqr(&zinv, &zinv);//Sqr from who? Sqr zinv from zinv?
            secp256k1_fe_mul(&x, &diff.x, &zinv);//Multiple x pt.x and zinv. But who changes?
            secp256k1_fe_to_storage(&xst, &x);//Return hash data to xst from x . xst this array from 8 part of hashes.
            uint32_t entry = xst.n[0] & (HASH_SIZE-1);//In entry getted last (25-1 or other setted count bit) bit from xst.n[0] (first part from hash)
            //-----------------
            //I try showed this entry for each publcik addr. And with each new cycle, this value was different for the same public key. Why?
            //-----------------
            while (table[entry].exponent != 0) {//Cicl run if in table with key entry present data.
                if (table[entry].x == (uint32_t) xst.n[2]) {//If table[entry].x (hash part 2 generated in in prevos loop) equal xst.n[2] (hash part 2 from currently publik key) run block down
                    uint64_t key = (uint64_t) i *  (uint64_t) (2 * GSTEP);//Generate varibale key. i * (2*GSTEP) . !!!!!!!!!!! Do not understand the logic. !!!!!!!!!!
                    //show founded key
                    printf("Found private key %2d: %16lx or %16lx\n", j + 1,
                           key - table[entry].exponent,
                           key + table[entry].exponent);
                    next++;//Add in variable next +1; Exclude this publick key from next searched.
                    if (next == NUMPUBKEYS)//if next equal NUMPUBKEYS, found ded last key, programm is stop
                        return 0;
                }       
                entry = (entry + (xst.n[1] | 1)) & (HASH_SIZE - 1);//Changed entry. In current xst.n[1] setted last bit to 1 plus add current entry. From this value get last 25-1 or other setted bits.
            }
            if (j == next)///????????? In cycl each firt loop this is true, break? not searched other public keys.
                break;
        }
        secp256k1_gej_add_ge_var(&pt, &pt, &ptgstep, NULL);//?????????? Choto gdeto kakto
    }
    return 0;
}
full member
Activity: 206
Merit: 444
I don't understand thoroughly the algorithm Embarrassed
can you explain in short why the size of RAM matters in this algorithm?
I thought it just generates privkey hex sequentially, finds corresponding pubkey and compares it to target pubkey

You could look up the algorithms here: https://www.math.auckland.ac.nz/~sgal018/crypto-book/crypto-book.html
BSGS is in chapter 13.3
When memory is limited - Distributed Kangaroo in chapter 14.6
member
Activity: 166
Merit: 16
Since I don't have the resources to hope to compete here and everyone else is likely frantically converting pubkeys into byte arrays and re-writing thier stuff... Smiley  So anyway the breakshort program uses the baby step giant step algo and the public key  ( https://en.wikipedia.org/wiki/Baby-step_giant-step ) to basically cut the searching down to the squareroot  but it is ram intensive (like build a hashtable that can hold 2^80 and it can then search 2^160 and that is VERY cool, BUT the sheer ram needed to do something like that doesn't exist at the moment. ) say you have 8gb ram you can do maybe* 2^27 in the hashtable which seems to search "about" 2^55 keyspace - in a freakishly short amount of time. Kinda awesome right? say you wanna do 2^28 hashtable.. now you just doubled memory requirements. 
* maybe is because of certain variables.. like the breakshort program as is, you can in theory do 2^29? (i think) with 8gb but with unint32_t you have potential for false collisions - and on my comp for some reason while 2^28 "should" work fine - 2^27 takes 52% mem so if I try 2^28 it starts using the swap file and SIGNIFICANTLY slowing it down. you figure that 4% wouldn't be THAT big a deal but it is the difference between driving a car a mile vs riding a skateboard a mile and a half.  All over this thread is all kinds of info that is far more informative than I'm being - look around, have fun with it. (seriously I started out as "What?!?! free bitcoin!!! and then got sucked into teaching myself C (With quite a bit of help - you know who you are and thank you again) At my age this is kind of a "thing" - and going from not having a clue what an elliptic curve is to being fascinated by cryptography (well okay that whole journey started in 2012? 13? when my son first said the word bitcoin and I was like "Huh?" ) -:) anyway go back as many pages as you need to and happy hunting.

arulbero
It seems that someone is doing something very odd here. the above recent transaction https://www.blockchain.com/de/btc/tx/17e4e323cfbc68d7f0071cad09364e8193eedf8fefbcbd8a21b4b65717a4b3d3
~
Who else other than puzzle owner can spend from theses wallets??
I think that's the reason he can find #65 private key, exposed public key makes it easier  
@arulbero can you tell us how you found it? details on how you used baby-step giant-step algorithm

I think that beyond #85 it will be very difficult to recover the private key, even with 1 TB of RAM (with the Baby-Giant Step algorithm).

With my 32 GB finding the #70 is already a hard task.

But there are other algorithms more suitable that don't need so much ram.
I don't understand thoroughly the algorithm Embarrassed
can you explain in short why the size of RAM matters in this algorithm?
I thought it just generates privkey hex sequentially, finds corresponding pubkey and compares it to target pubkey
hero member
Activity: 1232
Merit: 738
Mixing reinvented for your privacy | chipmixer.com
arulbero
It seems that someone is doing something very odd here. the above recent transaction https://www.blockchain.com/de/btc/tx/17e4e323cfbc68d7f0071cad09364e8193eedf8fefbcbd8a21b4b65717a4b3d3
~
Who else other than puzzle owner can spend from theses wallets??
I think that's the reason he can find #65 private key, exposed public key makes it easier  
@arulbero can you tell us how you found it? details on how you used baby-step giant-step algorithm

I think that beyond #85 it will be very difficult to recover the private key, even with 1 TB of RAM (with the Baby-Giant Step algorithm).

With my 32 GB finding the #70 is already a hard task.

But there are other algorithms more suitable that don't need so much ram.
I don't understand thoroughly the algorithm Embarrassed
can you explain in short why the size of RAM matters in this algorithm?
I thought it just generates privkey hex sequentially, finds corresponding pubkey and compares it to target pubkey
jr. member
Activity: 138
Merit: 2
My life would change abruptly if I found the key to one of the addresses with the cue ball here is my address just in case  Roll Eyes 39xoA35q27BZEvc5acyPmBwvZ3xVfqvnn5
legendary
Activity: 1915
Merit: 2074
It is possible that all these addresses will be reset to zero in the next few days.

I don't think so,  the #85 and #90 for sure, maybe #95 and #100, but not the other addresses. And it will take many many days, not just a few.

jr. member
Activity: 119
Merit: 1
It seems that this opens a new perspective. We do have now spending scripts for these puzzle wallet

#65 18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe (0.00001 BTC - Sortie)
#70 19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7QR (0.00001 BTC - Sortie)
#75 1J36UjUByGroXcCvmj13U6uwaVv9caEeAt (0.00001 BTC - Sortie)
#80 1BCf6rHUW6m3iH2ptsvnjgLruAiPQQepLe (0.00001 BTC - Sortie)
#85 1Kh22PvXERd2xpTQk3ur6pPEqFeckCJfAr (0.00001 BTC - Sortie)
#90 1L12FHH2FHjvTviyanuiFVfmzCy46RRATU (0.00001 BTC - Sortie)
#95 19eVSDuizydXxhohGh8Ki9WY9KsHdSwoQC (0.00001 BTC - Sortie)
#100  1KCgMv8fo2TPBpddVi9jqmMmcne9uSNJ5F (0.00001 BTC - Sortie)
#105 1CMjscKB3QW7SDyQ4c3C3DEUHiHRhiZVib (0.00001 BTC - Sortie)
#110 12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg (0.00001 BTC - Sortie)
#115  1NLbHuJebVwUZ1XqDjsAyfTRUPwDQbemfv (0.00001 BTC - Sortie)
#120  17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT (0.00001 BTC - Sortie)
#125  1PXAyUB8ZoH3WD8n5zoAthYjN15yN5CVq5 (0.00001 BTC - Sortie)
#130  1Fo65aKq8s8iquMt6weF1rku1moWVEd5Ua (0.00001 BTC - Sortie)
#135  16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v (0.00001 BTC - Sortie)
#140  1QKBaU6WAeycb3DbKbLBkX7vJiaS8r42Xo (0.00001 BTC - Sortie)
#145  19GpszRNUej5yYqxXoLnbZWKew3KdVLkXg (0.00001 BTC - Sortie)
#150  1MUJSJYtGPVGkBCTqGspnxyHahpt5Te8jy (0.00001 BTC - Sortie)
#155 1AoeP37TmHdFh8uN72fu9AqgtLrUwcv2wJ (0.00001 BTC - Sortie)
#160 1NBC8uXJy1GiJ6drkiZa1WuKn51ps7EPTv (0.00001 BTC - Sortie)

 a GPU version of this code https://gist.github.com/jhoenicke/2e39b3c6c49b1d7b216b8626197e4b89  or arulbero code is worthed .... 


It is possible that all these addresses will be reset to zero in the next few days.
newbie
Activity: 22
Merit: 0
arulbero
well done now it is clear who takes Bitcoin
newbie
Activity: 2
Merit: 0

I think that beyond #85 it will be very difficult to recover the private key, even with 1 TB of RAM (with the Baby-Giant Step algorithm).

Nvme ssd as a swap?

SSD is much slower than RAM. (DDR4 47GB/s)
member
Activity: 173
Merit: 12

I think that beyond #85 it will be very difficult to recover the private key, even with 1 TB of RAM (with the Baby-Giant Step algorithm).

Nvme ssd as a swap?
jr. member
Activity: 119
Merit: 1
I can't see the address on bitcoin blockchain.
Code:
19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7GR
and i want to ask, what equipment is needed to solve the puzzle and what software?

https://www.blockchain.com/ru/btc/address/19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7QR
legendary
Activity: 1915
Merit: 2074

there is nothing strange about this.  If you have the right software ans a lots of RAM  (I assume much more than 128 Gb) you can do it too.

I think that beyond #85 it will be very difficult to recover the private key, even with 1 TB of RAM (with the Baby-Giant Step algorithm).

With my 32 GB finding the #70 is already a hard task.

But there are other algorithms more suitable that don't need so much ram.

If the aim of this puzzle transaction has been to test the sha256 cracking power, now the challenge is cracking the elliptic curve relationship between private and public key.
member
Activity: 242
Merit: 17

there is nothing strange about this.  If you have the right software ans a lots of RAM  (I assume much more than 128 Gb) you can do it too.
member
Activity: 242
Merit: 17
why steping is five?


Puzzle owner has picked up those to do a spending transaction. It is faster to figure out a pvkey once a spending is done than to brute force directly the pvkey. Is is well explained on previous posts by our expert @arulbero.
But what I don't understand yet is how come the corresponding BCH wallets are not emptied as fast.



Ooops  ... all BCH are gone too now lol
member
Activity: 242
Merit: 17
why steping is five?


Puzzle owner has picked up those to do a spending transaction. It is faster to figure out a pvkey once a spending is done than to brute force directly the pvkey. Is is well explained on previous posts by our expert @arulbero.
But what I don't understand yet is how come the corresponding BCH wallets are not emptied as fast.

member
Activity: 255
Merit: 27
why steping is five?
jr. member
Activity: 39
Merit: 12
member
Activity: 242
Merit: 17
It seems that this opens a new perspective. We do have now spending scripts for these puzzle wallet

#65 18ZMbwUFLMHoZBbfpCjUJQTCMCbktshgpe (0.00001 BTC - Sortie)
#70 19YZECXj3SxEZMoUeJ1yiPsw8xANe7M7QR (0.00001 BTC - Sortie)
#75 1J36UjUByGroXcCvmj13U6uwaVv9caEeAt (0.00001 BTC - Sortie)
#80 1BCf6rHUW6m3iH2ptsvnjgLruAiPQQepLe (0.00001 BTC - Sortie)
#85 1Kh22PvXERd2xpTQk3ur6pPEqFeckCJfAr (0.00001 BTC - Sortie)
#90 1L12FHH2FHjvTviyanuiFVfmzCy46RRATU (0.00001 BTC - Sortie)
#95 19eVSDuizydXxhohGh8Ki9WY9KsHdSwoQC (0.00001 BTC - Sortie)
#100  1KCgMv8fo2TPBpddVi9jqmMmcne9uSNJ5F (0.00001 BTC - Sortie)
#105 1CMjscKB3QW7SDyQ4c3C3DEUHiHRhiZVib (0.00001 BTC - Sortie)
#110 12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg (0.00001 BTC - Sortie)
#115  1NLbHuJebVwUZ1XqDjsAyfTRUPwDQbemfv (0.00001 BTC - Sortie)
#120  17s2b9ksz5y7abUm92cHwG8jEPCzK3dLnT (0.00001 BTC - Sortie)
#125  1PXAyUB8ZoH3WD8n5zoAthYjN15yN5CVq5 (0.00001 BTC - Sortie)
#130  1Fo65aKq8s8iquMt6weF1rku1moWVEd5Ua (0.00001 BTC - Sortie)
#135  16RGFo6hjq9ym6Pj7N5H7L1NR1rVPJyw2v (0.00001 BTC - Sortie)
#140  1QKBaU6WAeycb3DbKbLBkX7vJiaS8r42Xo (0.00001 BTC - Sortie)
#145  19GpszRNUej5yYqxXoLnbZWKew3KdVLkXg (0.00001 BTC - Sortie)
#150  1MUJSJYtGPVGkBCTqGspnxyHahpt5Te8jy (0.00001 BTC - Sortie)
#155 1AoeP37TmHdFh8uN72fu9AqgtLrUwcv2wJ (0.00001 BTC - Sortie)
#160 1NBC8uXJy1GiJ6drkiZa1WuKn51ps7EPTv (0.00001 BTC - Sortie)

 a GPU version of this code https://gist.github.com/jhoenicke/2e39b3c6c49b1d7b216b8626197e4b89  or arulbero code is worthed .... 
Jump to: