Post
Topic
Board Bitcoin Discussion
Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it
by
Bram24732
on 05/04/2025, 11:29:26 UTC
1. I still cannot understand how and why this work...can you elaborate on this please?
2. what do you mean by "At least I know that if you have the correct base key for the right bit flip?
thanks

Python code:
Code:
xor_masks = {
    67: 0b1100111100000011110111001010001111100110101111010011111001010001,
    66: 0b10111110011010001001010001011000011010100101000011100101000010001,
    65: 0b101011111000111010011101100101011111010010011011001011110011000,
    64: 0b100011111010111000001101100001001111011011101110110100101011,
    63: 0b1100110001101000010000001001010011001100001001011111110111,
    62: 0b100111000010101010111110000101001001111011100101010000010001,
    61: 0b110000110110100101011100100010111101000010011011011011111001,
    60: 0b111111100001011110011111011010110010011000010001000001,
    59: 0b10110110100100110100010001111000001101010100101110110000,
    58: 0b100111001100010100100011110101101111001110110010111011110,
    57: 0b10100110110100011011011111000011010100010100111100011,
    56: 0b1100010111001110100100111000101001110110000000000100000,
    55: 0b10101010000011110000001100100100110000001111011101011,
    54: 0b11100100100000100100100101010010100101110000010111100,
    53: 0b111111110000111011100011011100000011100110110010011,
    52: 0b1000001010001111010011011001101000110000111000011,
    51: 0b101011111000111101011110010111111111011000101011,
    50: 0b1110101000010101111000011110100010110110010101011,
    49: 0b100010111110100010010100111111101010000010110010,
    48: 0b10100100001100100101000001100011100010001100100,
    47: 0b100110010100111101111010010101100001101000101,
    46: 0b100010011111001111100011101110010101010111011,
    45: 0b11011101000000110101111010111100001111111010,
    44: 0b11111110101001100101001011100101001110000,
    43: 0b10100001011000100110110000011101001101110,
    42: 0b10101110111011110001110100111001001110000,
    41: 0b1010110001111001011001010011001110100100,
    40: 0b1011001010001101101101100110000101001,
    39: 0b11010010100000011111001111110000010110,
    38: 0b1110111000111110100000101001100101111,
    37: 0b100010101000100010101001010101101100,
    36: 0b11000100001011111011111010110000011,
    35: 0b1101010001001011011110111010001111,
    34: 0b10110101100110100110111011100010,
    33: 0b1010110100100110101011100100111,
    32: 0b1000111100111010101100111010001,
    31: 0b10101100000001100010111000,
    30: 0b10011010110011001010011011,
    29: 0b1000000111011010101011100001,
    28: 0b10011011101001001100010111,
    27: 0b1010100111100011110001010,
    26: 0b101111111100110110010001,
    25: 0b1011010000100011010,
    24: 0b1000111101010111111011,
    23: 0b1010101001000110101101,
    22: 0b100100001101111110000,
    21: 0b1000101101011001011,
    20: 0b101101001110101010,
    19: 0b101000101101100000,
    18: 0b1111011111110010,
    17: 0b1000100110110000,
    16: 0b11011011001001,
    15: 0b1011100001100,
    14: 0b1011011001111,
    13: 0b101110011111,
    12: 0b10110000100,
    11: 0b1101111100,
    10: 0b111111101,
    9: 0b101100,
    8: 0b11111,
    7: 0b110011,
    6: 0b1110,
    5: 0b1010,
    4: 0b111,
    3: 0b0,
    2: 0b0,
    1: 0b0
}

def generate_private_keys():
    print("Puzzle | Private Key")
    print("-------------------")
    for puzzle in range(1, 68):
        if puzzle in xor_masks:
            puzzle_end = 2**puzzle - 1
            private_key = puzzle_end ^ xor_masks[puzzle]
            print(f"{puzzle:6} | {private_key}")
        else:
            print(f"{puzzle:6} | (Missing XOR mask)")

generate_private_keys()


Is it clearer now? If not, then nothing.  Grin

Hi, still no understand why this works...and why it is more efficient than bruteforcing.
The masks I suppose are the result of Mutagen?
Can you take please two minutes to explain in full?

also, "private_key = puzzle_end ^ xor_masks[puzzle]" is useless given that you xor the end of the range which is all 1s with the "mask", so in reality your "mask" is the opposite bits of the private key ALWAYS...meaning it gives you nothing!

Thanks

It’s not more efficient than brute forcing. It actually requires the exact same number of computations than brute force to scan the range.

Yup, even with my skills, it’s obvious that the total number of bit combinations is the same as the keys in the puzzle. So I’ll probably use this approach when choosing the sub-ranges I’m scanning: start from the previous range, apply the mutagen to that string.

If the key is found before 50% of the 50% expected in random mode, then we can start talking about efficiency.

Nope, it will only mean they were lucky on this particular instance and will have no impact on any future puzzle whatsoever.