Bitcoin Forum
June 17, 2024, 03:09:02 PM *
News: Voting for pizza day contest
 
   Home   Help Search Login Register More  
Pages: [1] 2 3 »  All
  Print  
Author Topic: Brute-forceable puzzle - free crypto for whoever manages to crack it [SOLVED]  (Read 941 times)
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 01, 2021, 01:01:11 PM
Last edit: August 11, 2021, 07:33:36 PM by f3tus
Merited by ABCbits (2), NotATether (2), PawGo (1)
 #1

I saw this thread of "don't do's" on Reddit and decided to do the opposite; I will write down and post my mnemonic seed words for everyone to see:

Code:
bacon bitter goddess sheriff differ kit sock stomach rhythm skill trade drastic

There is an x amount of crypto I put there as an award for whomever manages to get ahold of it. It is encrypted with a date shift cipher using this script I wrote: Seedshift. I basically used 1-4 dates in YYYY-MM-DD format to shift the mnemonic words (modulo 2048 to wrap around the wordlist, you can do it manually without the script).

Basically you can brute-force my encrypted seed words by trying date combinations until you find the correct x ones I used and get the crypto prize.

This in itself could also be considered a real-time simulation of how long it would take for a potential thief (with programming background and who also magically knows it is encrypted with a date shift cipher) to steal my crypto before I manage to transfer it somewhere safe (and also to validate how safe and secure my method of storing my mnemonic seed words is).

So anyway, good luck to everyone and get crackin'!

Edit:
The puzzle got solved. See the write-up here: https://www.reddit.com/r/CryptoCurrency/comments/p2jkh3/how_i_solved_utoshiromiballzas_puzzle_in_just/
BrewMaster
Legendary
*
Offline Offline

Activity: 2114
Merit: 1292


There is trouble abrewing


View Profile
August 01, 2021, 01:44:12 PM
 #2

Quote
x amount of crypto

you should also include the address containing the funds and the amount of it. this puzzle may not even be worth the time for example if it contains some small amount of a shitcoin.

There is a FOMO brewing...
COBRAS
Member
**
Offline Offline

Activity: 883
Merit: 22


View Profile
August 01, 2021, 02:00:42 PM
 #3

Put 0,5 btc to adders, send from this adress 0.0000000001 btc to any address, wait and you see result.

[
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 01, 2021, 02:09:01 PM
 #4

you should also include the address containing the funds and the amount of it. this puzzle may not even be worth the time for example if it contains some small amount of a shitcoin.
It's not a shitcoin wallet, and you wouldn't know how much (and of what) an encrypted wallet you found/stole contained either until you cracked it.

I'll just say it has more than $10.
PawGo
Legendary
*
Offline Offline

Activity: 952
Merit: 1367


View Profile
August 01, 2021, 02:28:32 PM
 #5

Doable...

Could you at least say which address we should check (first?) and if it is BIP32 or BIP84 or... ?
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 01, 2021, 03:23:48 PM
 #6

BIP44, and some more clues from Reddit: I used 2 dates from 1900-2021.
NotATether
Legendary
*
Offline Offline

Activity: 1638
Merit: 6897


bitcoincleanup.com / bitmixlist.org


View Profile WWW
August 01, 2021, 03:54:36 PM
Last edit: August 01, 2021, 04:09:38 PM by NotATether
 #7

Doable...

Could you at least say which address we should check (first?) and if it is BIP32 or BIP84 or... ?

748016^3 combinations of dates if we use years from 0-2048 and all months/days and ignore 1900-2021 range.

OP, which timezone/country are you in?

Did you move the coins in the address before or after you posted this challenge?



UPDATE:

using python datetime() + timedelta of 693595 gives 1900-01-01 and + 738154 gives 2021-21-31, so that is our range, and the difficulty is:

Code:
minv=693595
maxv=738154
print(maxv-minv)
print(pow(maxv-minv,3))
import math
print(math.log(pow(maxv-minv,3),2))

44559
88472094168879
46.330287706213426

i.e. unless you have hundreds of CPUs then it's not doable on CPU. However 2^46 can be tackled by one GPU.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 01, 2021, 04:27:51 PM
Last edit: August 01, 2021, 04:42:49 PM by f3tus
 #8

748016^3 combinations of dates if we use years from 0-2048 and all months/days and ignore 1900-2021 range.

OP, which timezone/country are you in?

Did you move the coins in the address before or after you posted this challenge?
Timezone/country doesn't matter and I put the coins there before the challenge. The 2 dates I used are in 1900-2021 range, shifted in YYYY-MM-DD format from oldest to youngest date, so knowing that, the number of possible combinations lowers, because the 1st date you shift should always be older than the second. Smiley
PawGo
Legendary
*
Offline Offline

Activity: 952
Merit: 1367


View Profile
August 01, 2021, 04:53:14 PM
 #9

I have a working solution - knowing address would make it much easier (faster), now I am stuck on creating list of addresses and checking them against addresses with balance (I must transfer file between machines etc.).
NotATether
Legendary
*
Offline Offline

Activity: 1638
Merit: 6897


bitcoincleanup.com / bitmixlist.org


View Profile WWW
August 01, 2021, 04:58:02 PM
Last edit: August 01, 2021, 06:14:20 PM by NotATether
 #10

Timezone/country doesn't matter

Oh it does  Smiley it allows us to go to a block explorer and skim it for addresses inside transactions made between midnight (wherever your TZ is) and date of the OP so we can check the results against a list of addresses instead of making an expensive network call. This assumes you made the transaction today though, where "today" begins at midnight, your timzeone.

But if you don't tell us we can always assume it was made in Hawaii timezone (UTC-10) which isn't going to add too many extra addresses if we use its midnight as the starting point.  Wink

A few gems I'll post here; they are the basis for a client-server implementation I'm writing that'll let everyone share the load on their systems:

Server:

Code:
!/usr/bin/env python
# Python Network Programming Cookbook,
   Second Edition -- Chapter - 1
# This program is optimized for Python 2.7.12
   and Python 3.5.2.
# It may run on any other version with/without
  modifications.
 
import socket
import sys
import argparse
 
host = 'localhost'
data_payload = 2048
 
def echo_server(port):
    """ A simple echo server """
    # Create a UDP socket
    sock = socket.socket(socket.AF_INET,
                         socket.SOCK_DGRAM)
 
    # Bind the socket to the port
    server_address = (host, port)
    print ("Starting up echo server
            on %s port %s" % server_address)
 
    sock.bind(server_address)
 
    while True:
        print ("Waiting to receive message
                 from client")
        data, address = sock.
                        recvfrom(data_payload)
    
        print ("received %s bytes
                from %s" % (len(data), address))
        print ("Data: %s" %data)

        if data == "PROOFOFWORK":
            pass
          # validates via block explorer
        elif data == "GETWORK":
            # generate work and send it to client
        else:
            # unrecognized command

        if proof_of_work == true:
            message = "MATCH {} {} {}".format(address, pubkey, prvkey)
            # send this to all clients:

            for address in addressess:
                sent = sock.sendto(message, address)
        else:
        # Normally this would be whether the work is
        # the correct address or not but here we just
        # insert a dummy
            message = "NOTMATCH {} {} {}" .format(address, pubkey, prvkey);
            sent = sock.sendto(data, address)
    
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser
             (description='Seedshifter Cracker Server')
    parser.add_argument('--port', action="store", dest="port", type=int, required=True)
    given_args = parser.parse_args()  
    port = given_args.port
    echo_server(port)
 

Client:

Code:
#!/usr/bin/env python
# Python Network Programming Cookbook, Second Edition -- Chapter - 1
# This program is optimized for Python 2.7.12 and Python 3.5.2.
# It may run on any other version with/without modifications.
 
import socket
import sys
import argparse
 
host = 'localhost'
data_payload = 2048
 
def echo_client(port):
    """ A simple echo client """
    # Create a UDP socket
    sock = socket.socket(socket.AF_INET,
                         socket.SOCK_DGRAM)
 
    server_address = (host, port)
 
    while true:
        try:
    
            # Send data
            message = "GETWORK"
            sent = sock.sendto(message.encode
                  ('utf-8'), server_address)
    
            # Receive response
            message, server = sock.recvfrom(data_payload)
            # get head of message
            if message == "WORK"
                # perform work on GPU
            elif message == "FOUND"
                # record private key, public key and address and break
                break
            else:
                # ignore all unrecognized commands
          except Exception as e:
            break
    
    print ("Closing connection to the server")
    sock.close()
 
if __name__ == '__main__':
    parser = argparse.ArgumentParser
             (description='Seedshifter Cracker Client')
    parser.add_argument('--port', action="store", dest="port", type=int, required=True)
    given_args = parser.parse_args()  
    port = given_args.port
    echo_client(port)

It won't run as is though because this is just a skeleton I found in a book and slightly adapted to act as a PoW server, similar to the stratum servers used in mining.

EDIT:

I just tried querying Blockchair's API, it limits me to 10 records per call, ironically I went to buy an API key but their only payment processor is PayPal (!) I mean, not even CC, much less crypto.

So this means unless someone already has an API key it is technically infeasible to gather a large number of addresses.

I think this highlights one of the big problems with the current state of APIs, namely, there is no easy way to [pay to] query them in bulk, if you can even query them at all - and Blockchair is pretty much the only one with this feature (blockchain.info has a very very limited set of endpoints).

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 01, 2021, 05:09:39 PM
 #11

Oh it does  Smiley it allows us to go to a block explorer and skim it for addresses inside transactions made between midnight (wherever your TZ is) and date of the OP so we can check the results against a list of addresses instead of making an expensive network call.
Hey, that's cheating!  Grin
pooya87
Legendary
*
Offline Offline

Activity: 3486
Merit: 10663



View Profile
August 02, 2021, 04:01:56 AM
 #12

Shift ciphers aren't considered strong and should never be used to encrypt anything important such as a bitcoin mnemonic.
Also whether or not someone solves this "puzzle" should not be used as an indication of security of this algorithm.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 02, 2021, 04:59:01 AM
Last edit: August 02, 2021, 05:16:32 AM by f3tus
 #13

Shift ciphers aren't considered strong and should never be used to encrypt anything important such as a bitcoin mnemonic.
Also whether or not someone solves this "puzzle" should not be used as an indication of security of this algorithm.
Is it safer than storing it in plain-text? Yes. Does it give you a lot of more time to react and move your coins in case someone breaks in and steals your written down seed words? Yes.

What's a safer and easier alternative to store your seed words and in case something happens to you, your loved ones can decrypt the words? Other than a complex passphrase on a Trezor/Ledger, which you would also need to write down in plain-text and make it a security risk?
pooya87
Legendary
*
Offline Offline

Activity: 3486
Merit: 10663



View Profile
August 02, 2021, 05:03:37 AM
 #14

What's a safer and easier alternative to store your seed words and in case something happens to you, your loved ones can decrypt the words?
Encryption using a cryptographic strong encryption algorithm such as AES using a proper passphrase then creating proper backups from the encrypted result and the passphrase used and storing them separately.

Quote
Other than a complex passphrase on a Trezor/Ledger, which you would also need to write down in plain-text and make it a security risk?
Even though this is called "passphrase" but it is not encrypting anything, it is "extending" the seed phrase and should not be considered a proper security measure.


P.S. https://security.stackexchange.com/questions/18197/why-shouldnt-we-roll-our-own

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 02, 2021, 05:26:46 AM
 #15

How do I explain to my mother to AES decrypt "71TjQQYPkadCq8qUA6Lqt7FhUBEjPSzgDSbBA6spbtD/j8v3JXp9Vpco0H8rS/TK2/IOMS0aHF5QIyLihGuP2dSgdoKdyDrb82O72tNPdT4=" and ensure to type it out correctly?

Birthdays and anniversaries everyone remembers, and with 24 seed words you can shift it with up to 8 dates. Never said it's unbreakable, but it's not easy to break either, it gives you plenty of time to react in case of theft and it's simple enough by knowing the dates to do it by hand.
NotATether
Legendary
*
Offline Offline

Activity: 1638
Merit: 6897


bitcoincleanup.com / bitmixlist.org


View Profile WWW
August 02, 2021, 09:25:12 AM
 #16

Field day 2, so to get a list of addresses that could've been OP's challenge address, I went to the "outputs" database dumps of Blockchair and downloaded the spreadsheets for August 1 and July 31 (the former was not available until today hence the wait). It is a little slow, but the download speed is a manageable 10 minutes on a high-speed ethernet network.

The next step is to (1) filter out all the coinbase outputs, (2) filter all the non- pubkeyhash outputs and (3) filter out all outputs <= $10.

Then we filter outputs that are less than $100 because let's be honest, a challenge worth less than $100 are not worth solving Tongue when I applied this filter on the website it eliminated a surprisingly large number of transactions.

I am expecting to be left with some 10 thousand addresses which can then be placed in a bloom filter.

All spreadsheet software are either lagging or outright crash when I open the DB dump so I have to resort to dirty Python tricks again to apply the above.



How do I explain to my mother to AES decrypt "71TjQQYPkadCq8qUA6Lqt7FhUBEjPSzgDSbBA6spbtD/j8v3JXp9Vpco0H8rS/TK2/IOMS0aHF5QIyLihGuP2dSgdoKdyDrb82O72tNPdT4=" and ensure to type it out correctly?

I'm sure even most developers have trouble doing that.

.
.BLACKJACK ♠ FUN.
█████████
██████████████
████████████
█████████████████
████████████████▄▄
░█████████████▀░▀▀
██████████████████
░██████████████
████████████████
░██████████████
████████████
███████████████░██
██████████
CRYPTO CASINO &
SPORTS BETTING
▄▄███████▄▄
▄███████████████▄
███████████████████
█████████████████████
███████████████████████
█████████████████████████
█████████████████████████
█████████████████████████
███████████████████████
█████████████████████
███████████████████
▀███████████████▀
█████████
.
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 02, 2021, 10:29:21 AM
 #17

Remember that you don't know which crypto wallet this is, or if the award is only on one or more crypto wallets with the same seed words.
PawGo
Legendary
*
Offline Offline

Activity: 952
Merit: 1367


View Profile
August 02, 2021, 12:02:36 PM
 #18

Remember that you don't know which crypto wallet this is, or if the award is only on one or more crypto wallets with the same seed words.

Does it mean that award is not on the first address (from first account)?
f3tus (OP)
Sr. Member
****
Offline Offline

Activity: 317
Merit: 275


View Profile
August 02, 2021, 12:10:11 PM
 #19

It means it could be BTC or ETH or both.
PawGo
Legendary
*
Offline Offline

Activity: 952
Merit: 1367


View Profile
August 02, 2021, 12:13:47 PM
 #20

It means it could be BTC or ETH or both.

Oh, so I gave up. I processed around 10% dates & BTC addresses - first ones from the seed in BIP44: m/44'/0'/0'/0/0, but if your coins could be anywhere and even we do not know which coins we look for - it is waste of energy.
Pages: [1] 2 3 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!