Bram24732
Member

Offline
Activity: 196
Merit: 18
|
 |
April 05, 2025, 11:29:26 AM Last edit: April 06, 2025, 11:32:29 AM by hilariousandco |
|
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: 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.  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 Its 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, its obvious that the total number of bit combinations is the same as the keys in the puzzle. So Ill probably use this approach when choosing the sub-ranges Im 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. Yup, even with my skills, its obvious that the total number of bit combinations is the same as the keys in the puzzle. So Ill probably use this approach when choosing the sub-ranges Im 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.
Maybe they have something up their sleeve that they haven't shown publicly yetsome kind of filtering XOR masks or something more complex that might work. Anyway, maybe it's just a more elegant way to achieve the same thing, though not necessarily faster than other solutions. It is not faster, its actually way slower. KtimesG already explained why.
|