Pages:
Author

Topic: == 2024 Bitcoin halving tribute puzzle - Challenge to win 10,000,000 sats! == (Read 930 times)

newbie
Activity: 14
Merit: 19
Brilliant!

As I said, this challenge uses simple rules, I thought you'd notice that C1 and C2 have the same "URU" starts and "5ef" ends.
C1:
URU/Yw
...
K>I5ef

C2:
URUd53
...
ee15ef

I think this implies enough that these two lines are rules about decoding, but when you don't know which table to use to interpret these two lines, the easiest (and therefore most beautiful) way is to make the two cards perfectly overlap.

In this combination, you can interpret the rules: card with serial number ending in FC is placed below, card with serial number B4 is placed on top and the letter in the upper left corner and the lower right corner are m and D respectively. For the four substitution tables around each index letter, numbered clockwise from the upper right corner as 1, 2, 3 and 4.

So let's go to this particular combination and encode all the rest of the information in the order of 234134.

I hope that answers your questions.

Well done, man, well done!

Hey everyone, winner here, in this post I’m going to share my method of how I’ve solved it. The ciphertexts seemed simpler than I initially thought, but with some additional rules that I didn’t expect at first. I’ve written Python scripts to work with the puzzle to get the solution, but they were done quickly and in a very terrifying manner, so let me warn you about the code spaghetti. Also spoiler warning for those who want to solve on their own.

...

Code:
234134
URU/Yw

...

Thanks again OP for this challenge, and I’m looking forward to the next one. There’s still two questions left in my mind: How do we choose which card placement to choose? How are cipher blocks connection choices determined? I believe the answer might be in the first and last blocks of the ciphers. Perhaps I will try to look into it more.
newbie
Activity: 8
Merit: 14
Using the function above, and setting the block character values for each position “234134”, we get the first word as follows:

Code:
234134
LwE~T1
aseatb
You lost me here. I did figure out that wE~T is seat, but I couldn't figure out what's 'L' and '1'. Why did you turn them into 'a' and 'b'?

  • 'a' points to L, top right.
  • 'b' points to '1' top left

How did you work out the "top right" and "top left"? We both didn't figure out how the OP decides the silver card placement in the beginning, as far as I can tell.

Let me clarify this, it's really difficult to look at it manually and solve it, but it's possible. Basically we assign one value from 1234, each meaning top left, top right, bottom left, bottom right (I'm not sure what directions these actually are in my code, as the puzzle is a bit different in my mind). Each character in a 6-char cipher block maps to one of these. For C1, this value is 234134.

Code:
234134
LwE~T1
aseatb

L corresponds to 2 -> choose 1 of 4 directions, the direction that we assign as 2. Read the connection of the direction, and we get "a".
1 corresponds to 4 -> we choose 4th direction. Read the connection, and we get "b".

If you're asking how I managed to find it, I kind of manually tried in my program, which prints the resulting mapping combinations for any given string with 6 numerical characters ranging from 1 to 4. If I input "111111" then I try to read one direction connection for all characters in C1 or C2, like "choose the black card character bottom right of the chosen silver card character, given 1 out of 12 placement.

Basically each character in a 6-character cipher block corresponds to exactly one direction. And this value differs for the cipher block characters in C2. Consequently, "a" and "b" are order markers, taking their value from the word "incomputable", so 9th and 10th letters, which correspond to first two words. Then, each word has one of the letters in their beginning.

legendary
Activity: 1512
Merit: 7340
Farewell, Leo
Code:
JEQLJY
rEQL5U
These two particular rows drew my attention as well, but I didn't think of "bris" and "risk". At first, I thought that maybe "tool" is "&TT2" from &TT2&E. But, then the OP clarified that it is not a simple substitution ('&'='t', 'T'='o' etc.). Then, I was trying at different silver card placements, until I hit the 6th. Then, I started checking silver characters and where they point, and it was a matter of time until all words fit.

Using the function above, and setting the block character values for each position “234134”, we get the first word as follows:

Code:
234134
LwE~T1
aseatb
You lost me here. I did figure out that wE~T is seat, but I couldn't figure out what's 'L' and '1'. Why did you turn them into 'a' and 'b'?

  • 'a' points to L, top right.
  • 'b' points to '1' top left

How did you work out the "top right" and "top left"? We both didn't figure out how the OP decides the silver card placement in the beginning, as far as I can tell.

And that was it!
Very good opponent. See you at the next puzzle!

Jokes asides, you deserve it. I didn't write a program, you took it to the next level.

Nice if i solve it before its like life change for me hahah
If you solve the next one, it's two life changes, so make sure to dedicate all your time.  Wink



Edit: This is how far I reached:
Code:
URU/YwL

wE~T 1: seat
AE&8 I: prop
f4YQ 8: semi
IwC2 Q: cat3
~EEn v: aren
H~TE J: late
EQLJ Y: risk
rEQL 5: bris
U4wu Q: desp
IwCT &: catt
lQ&& T: tool
T2&E K: repe

>I5ef
newbie
Activity: 14
Merit: 0
Nice if i solve it before its like life change for me hahah , Embarrassed   

















BTCbc1qp8ukly4t86sg0du8hszqatth49r4k25n6upxrrBTC
newbie
Activity: 8
Merit: 14
Hey everyone, winner here, in this post I’m going to share my method of how I’ve solved it. The ciphertexts seemed simpler than I initially thought, but with some additional rules that I didn’t expect at first. I’ve written Python scripts to work with the puzzle to get the solution, but they were done quickly and in a very terrifying manner, so let me warn you about the code spaghetti. Also spoiler warning for those who want to solve on their own.

First of all, we need to define the character set in the black card, and a way to get which letter can correspond to them. We need to create a function that gets combinations of 12 silver card placements, while also defining silver card sides A and B, char at index 0 meaning first silver card char on top left most corner, index 1 to the right of the previous one etc. :

Code:
char_set = [r"0874923156Xgwk?",
            r"Xm9+/sN^pdGb7ZS",
            r"nu=iH!tGRehD/Bv",
            r"y!624lCFe>8A@tM",
            r"mzf}yjTZxc)]*-M",
            r"V~LvET-5*Q&uPj#",
            r"IrblN~U+&#CYWJP",
            r"ciwfUKrnJqHBzh<",
            r"%FLpSE            r"a?RIW$1Y3g%x=kD",
            r"a$q%?5wA^mV7n9>"]

silver_a = r"1234567890-+=~!@#$%^&*<>?/abcdefghijklmnopqrstuvwxyz"
silver_b = r"1234567890-+=qwertyuiop&^$asdfghjkl@#*%zxcvbnm<>?/~!"

combs = [[0, 2, 4, 6, 8], [2, 4, 6, 8, 10], [1, 3, 5, 7, 9]]
results = []
for comb in combs:
    for n in range(0, 2):
        comb_st = ""
        for list_ind in comb:
            if n == 0:
                comb_st += (char_set[list_ind][:-1])
            if n == 1:
                comb_st += (char_set[list_ind][1:])
        results.append(comb_st)

def get_comb(ind):
    return results[ind]

print(get_comb(0))
# this returns ‘0874923156Xgwknu=iH!tGRehD/Bmzf}yjTZxc)]*-IrblN~U+&#CYWJ%FLpSE
def get_char_index(char, side):
    if side == 0:
        return silver_a.index(char)
    else:
        return silver_b.index(char)

print(get_char_index("q", 1)) # returns 13 for 1, and 42 for 0 in the second param


Now, we have a function to set combinations of strings for each placement, and we need to define another function to input a silver card character, and get back possible 4 connections on any given card placement combination:

Code:
def get_cons(ind, comb):
    # Get connections - ind+1, ind+2, ind+14, ind+15
    if ind > 12: # without this, the order of connections gets ruined
        ind = ind + (ind // 13)
    return [comb[ind], comb[ind+1], comb[ind+14], comb[ind+15]]

I was mostly manually trying around different combinations and placements using the functions above. There are some really interesting two blocks in C1:

Code:
JEQLJY
rEQL5U

We know that the first 4 letters are used from the hints, and if we need to use one card placement (out of 12) for all of the ciphertext, then these two blocks must have similar words. Namely:

Code:
J r i s k Y
b r i s 5 U

Now we have an idea of what kind of a structure we’re working with. 4 letters are used, and they shift left with every word by one character.

In my program, I wrote a simple for loop to loop over known seed phrase word letters, and I kind of got lucky looking at the connecting black card chars for them. In one of the last combinations, they map perfectly.

However, the order of choosing 4 possible characters in the silver card for a given black card character differs. How do you find that out? Well, I’m still not sure what the first 3 and the last 3 characters in C1 and C2 mean, but they might be about choosing the placement, and choosing the cycle in which 1 out of 4 letters to choose every character in the block, although these both variables are different for C1 and C2. Looking at possible mapping for that last one placement in C1, this pattern shows up:

Code:
234134
URU/Yw

Assigning one of the 4 directions (top left, top right, bottom left, bottom right), each character in the ciphers are assigned these, which determine the connecting silver card character to choose.

My next script originally iterated through all possible combinations, that's why it has 0,6 and 0,2. 0,6 for all the ways a silver card can be placed, and 0,2 for two sides of the silver card. Below I define a function to input a black card character “chrc”, and a number “num” for position encoding in the cipher block:

Code:
def get_slv(num, chrc):
    rslt = ""
    n = 0 # (5,6), (1, 2), (3, 4), (0, 1) C1 and C2 use these specific combinations for c and s
    for c in range(5, 6):
        for s in range(1, 2):
            for letter in silver_a: # only need one side to get silver card chars
                n += 1
                comb0 = get_comb(c)
                char1 = get_char_index(letter, side=s)
                slv = get_cons(char1, comb0)
                if slv[num-1] == chrc:
                    rslt += letter
    return rslt

Now we can input any black character we want, and we get all the possible combinations if we set c to range from 0 to 6, and s to 0, 2. But to decipher C1, we need to take the specific combination 5,6 to 1,2, which corresponds to one of 12 card placement and side to choose. I believe I discovered the combination by luck, as it happened to be the last one being printed on my Python console.

But which block should we start from? We know that 4 letters are used for each seed phrase, and C1 and C2 both start with “URU” and end with “5ef”. So perhaps we can start with the second block, right?

Using the function above, and setting the block character values for each position “234134”, we get the first word as follows:

Code:
234134
LwE~T1
aseatb

Very interesting! Now let’s try to apply this algorithm to all of ciphertext C1, with the script below:
(sorry for horrible variable naming)

Code:
strn = old_cipher
pos_enc = "234134"
mapping = {0: int(pos_enc[0]),
        1: int(pos_enc[1]),
        2: int(pos_enc[2]),
        3: int(pos_enc[3]),
        4: int(pos_enc[4]),
        5: int(pos_enc[5])}
count = 0
newst = ""
for l in strn:
    pos = mapping[count]
    result = get_slv(pos, l)
    count += 1
    if count > 5:
        count = 0
        #newst += "\n"
    elif count == 1:
        newst += "\n"
    try:
        newst += result
    except TypeError:
        newst += "_"
print(newst)

And when we input the C1 stored in old_cipher variable, we get this result:

Code:
cxd4ma
aseatb
propcs
emipca
t3iare
nelate
mriskn
brisud
esplca
ttotoo
ltrepe
v9xj8s

Incredible! We can see all the words! But hold on, there are no numbers or anything to mark the orders? Without the order, these words would be completely useless, as the possible combinations of these words are way too many to bruteforce.

Let’s try to write down the single characters between each word, shall we?

Code:
a-b-c-p-3-i-e-m-n-u-l-o-t

Now what does this mean? Well, we have the word “incomputable” on silver cards. This word determines the order of words.

Code:
i-n-c-o-m-p-u-t-a-b-l-e
1-2-3-4-5-6-7-8-9-10-11-12

When you use this knowledge to put the words in order, you get the words and the correct word order. Now, that we have an idea of how C1 is made, we can input the program the ciphertext C2, and let’s see the result:

Code:
cxd9um
85r
r567
8g
<75
87dtlk
kf
k%fl%
rv7d670
5%%
u8bj8s

Well… That didn’t work as expected. This must mean the block characters have a different mapping, and a different placement out of 12 is used. At this part of the puzzle, I was just manually printing different combinations and pos values. But the interesting thing is, you can sort of approach the correct plaintext slowly for C2 by modifying one thing at a time. It turns out, the mapping for C2 is “312134”, and combination (3,4) (0,1) is used, so c=3, side=0.

Code:
%8eyr
lwiset
pridac
lusuic
oniski
lnecon
pmargb
mirroe
nromsk
inedas
hcrive
91

Wow. It fits perfectly, and the letters of incomputable are all also there. So when you put them together in the correct order, we get the 12 seed phrase words in correct order for C2:

Code:
skill economy river enroll skin margin icon pride cluster mirror wise dash

However, there’s one more problem. The checksum isn’t correct! This seed phrase is invalid! But all of them are valid BIP39 words! Well, again perhaps to my luck, I was trying different word combinations (maybe pride is price? prize? Another layer to get the sats?)

I remembered that there might be 3-letter words, and I tried the easiest thing I can think of: ski instead of skin.

And that was it!

Thanks again OP for this challenge, and I’m looking forward to the next one. There’s still two questions left in my mind: How do we choose which card placement to choose? How are cipher blocks connection choices determined? I believe the answer might be in the first and last blocks of the ciphers. Perhaps I will try to look into it more.
newbie
Activity: 14
Merit: 0
@Ginux


use OLD grain on the next challenge
newbie
Activity: 14
Merit: 0
@marleen01

Can you explain how you did that? I had a problem with the cards, how to use them   
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
I was so close on this one. I figured out how to go backwards from C1 to S1, but I never understood how the rules are encoded, so I was quite just brute forcing by mind. The big problem was that I neither understood how the word position is translated. For example, "wE~T" which I found as "seat" is in position "1" ("wE~T1"), but it's the third word in the phrase.

Hey, it was me! I've PM'd OP with some proof. Thanks for the fun and good luck everyone! I won't spoil anything!
We were solving it at the same time! You didn't need to pay $300 for a mining fee, though.  Tongue

I don't know how he or she made it yet, but I know he or she is smart enough, and I hope you'll all continue to participate in my next challenge, complex rules, double rewards. Wink
Challenge accepted my friend.
newbie
Activity: 14
Merit: 19
Hey, it was me! I've PM'd OP with some proof. Thanks for the fun and good luck everyone! I won't spoil anything!

Folks, we have a winner for my challenge. Congratulations to the winner and thanks to everyone for participating.

Although our mystery winner decided not to spoil anything, I am still PM him or her hoping our winner will share with you guys.

I don't know how he or she made it yet, but I know he or she is smart enough, and I hope you'll all continue to participate in my next challenge, complex rules, double rewards. Wink
newbie
Activity: 8
Merit: 14
Hey, it was me! I've PM'd OP with some proof. Thanks for the fun and good luck everyone! I won't spoil anything!
hero member
Activity: 714
Merit: 1010
Crypto Swap Exchange
The puzzle prize has been transfered out from address 3ARNTrr77hteEMpsR9czY9fjr3iUK4u9DJ with transaction 5dff9435c467098b5a87c3c1ced1b64d342892d86d105b908fe777c268837cc8 and confirmed in block 840283. It seems someone solved the puzzle? Transfer fee overpaid 8x, well, well, it hurts to see it that way. Curious to see the solution...
newbie
Activity: 3
Merit: 0
arena :  URU/Yw
brisk  :  LwE~T1
seminar :  AE&8If
tool :     4YQ8Iw
risk :     C2Q~EE
cat  :     nvH~TE
despair :  JEQLJY
repeat :rEQL5U
seat  :   4wuQIw
property : CT&lQ&
cattle :  &TT2&E
later  :  K>I5ef


Are these in the right order which is S1= C1 ? and one more thing the positions of the letters in C1 are they same as S1 word or scrambled? as per my observation each Cipher has 12 combinations of positions and we can choose which position card we want while  encrypting  but not sure which pattern or position you use to encrypt these seed 1.








jr. member
Activity: 38
Merit: 8
 I've made this website btc-puzzle.netlify.app

It's just like having the cards in your hands.  The website is responsive so that you can use it on your phone or tablet too.

How to use:

Flip the Black Card: Hit "Q" or click the "Flip the Black Card" button.
Flip the Silver Card: Hit "W" or click the "Flip Silver Card" button.

Moving Cards:
On Desktop: Click and hold the silver card, then move your mouse.
On Mobile/Tablet: Tap and hold the silver card, then drag your finger.

Keyboard Controls:
Arrow keys can Control the silver key movement.

The source code is here

https://github.com/johnnstewart/btc-puzzle

newbie
Activity: 14
Merit: 19
That's good for you, I believe you have skills that most people don't have, and I hope all technology becomes more accessible, which is good for everyone. Wink

I trust my Tails with blocked communication drivers thus I can do encryption/decryption on any device, all I need is to insert to USB port my Tails flash drive.

Even if someone will get (somehow) my pgp encrypted SEED, which is hold in password manager, (again protected with hardware key) in persisted volume protected with composite password part of which  on the    security key,  he still need to get my pin-protected (only 3 wrong attempts allowed) pgp card to decrypt it. Triple  safeguard  as you can see.
newbie
Activity: 2
Merit: 0
Upon deciphering a part of the given C1, you could see there's tool 4, prope 10 (for property), semin 3 (for seminar), and that would be enough for you to make out the rest of your 12 word seed phrase (given that you decipher the rest of the cipher blocks).
You only need the first 4 characters for each word. "prop", "tool", "semi". I think he has clarified this already.

I also doubt that the words are scrambled, like "property" -> "pr_o_p", "seminar" -> "se__mi". He's bragging about the puzzle's simplicity, and that's too complex.

If "property" -> "pr_o_p" and all words was scrambled like this before cipher it will be hard enough to use some "simple rule" to decipherd it back, cause you also need to remember in what row what exact symbols was fake or navigation symbols and what symbols was from seed. Or that "simple rule" isn't so "simple" and has several points in it, which are based on the author's imagination Roll Eyes
newbie
Activity: 3
Merit: 0
Hi, i just wanted to thank you for the chance at the puzzle even if i dont get to solve it first. it's fun. i'm unsure if i'm in the right direction but i'm still going to try. Smiley Cheesy
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
Upon deciphering a part of the given C1, you could see there's tool 4, prope 10 (for property), semin 3 (for seminar), and that would be enough for you to make out the rest of your 12 word seed phrase (given that you decipher the rest of the cipher blocks).
You only need the first 4 characters for each word. "prop", "tool", "semi". I think he has clarified this already.

I also doubt that the words are scrambled, like "property" -> "pr_o_p", "seminar" -> "se__mi". He's bragging about the puzzle's simplicity, and that's too complex.
newbie
Activity: 8
Merit: 14
One thing that I'm struggling with, do we actually know the plaintext S1? If the words have letters omitted from them, if there's symbols and numbers that can mark the word orders, extra obfuscation characters for more security, and if everything is in a securely random mixed position, doesn't that make S1 different from the actual plaintext?
But, he tells you that S1 is a seed phrase, and particularly this one:
Do we actually start with the seed phrase to end up with the C1, or is there arbitrary personal choices involved BEFORE applying the rules to substitute
As far as I can tell, there's an arbitrary choice to which he refers as a "starting point", and information about this is onto the cards. And it normally has to happen at first, so yes, before everything else.

I mean, IF some part of the plaintext actually looks like this, I'm just making this up by giving an example:
to4ol%.
1prop0e#
se@mi3n
....
Upon deciphering a part of the given C1, you could see there's tool 4, prope 10 (for property), semin 3 (for seminar), and that would be enough for you to make out the rest of your 12 word seed phrase (given that you decipher the rest of the cipher blocks).

If the plaintext looks like above, then the challenge immediately becomes even harder, even to figure out how to go backwards. This would mean we are working with a more obfuscated, altered, reordered, and with missing parts of the actual plaintext (if smaller number of letters are used for each word).
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
One thing that I'm struggling with, do we actually know the plaintext S1? If the words have letters omitted from them, if there's symbols and numbers that can mark the word orders, extra obfuscation characters for more security, and if everything is in a securely random mixed position, doesn't that make S1 different from the actual plaintext?
But, he tells you that S1 is a seed phrase, and particularly this one:
Do we actually start with the seed phrase to end up with the C1, or is there arbitrary personal choices involved BEFORE applying the rules to substitute
As far as I can tell, there's an arbitrary choice to which he refers as a "starting point", and information about this is onto the cards. And it normally has to happen at first, so yes, before everything else.

Edit: But, don't take my word for it. Let's wait and see what he has to say.
newbie
Activity: 8
Merit: 14
Thanks for the challenge! It's been a blast trying to solve it for the past 2 days. There's so many pieces of information we can think of, although connecting them all together is quite difficult.

One thing that I'm struggling with, do we actually know the plaintext S1? If the words have letters omitted from them, if there's symbols and numbers that can mark the word orders, extra obfuscation characters for more security, and if everything is in a securely random mixed position, doesn't that make S1 different from the actual plaintext? Or should we assume that the substitution rules involve those changes in positions, how to place marker numbers for the order (if there's one), going by the 12 word seed phrase in order?

"arena brisk seminar..."

Do we actually start with the seed phrase to end up with the C1, or is there arbitrary personal choices involved BEFORE applying the rules to substitute, that is out of cards' reach? I believe if the latter is the case, then it's much more difficult. I'm not sure if its unsolvable, but this "starting point" is really important.

Either way, I constantly find new things to try and connect them. It raises some important questions about how such a product might work, for better or worse.
Pages:
Jump to: