Author

Topic: Need help recovering private key from 2009-2010 (Read 918 times)

newbie
Activity: 1
Merit: 0
February 18, 2024, 04:10:22 AM
#31
I would try to cipher the first 40 hex characters from scratch as if I'm writing them down today. What would you do if you were to cipher it today? Try that on paper. Maybe your brain may try the same way. Other than that:

1) Can all the question marks be the same hex character? I would look for a hex that is missing. For example there is no "B" and all others are present, i would put B in the '?' marks. There is no "4" i would put 4 in the '?' marks.

2) Is the hint in exact format? Can we see the hint in exact format, and also with exact numbers? (just the hint that you penned down on that notebook. not the actual keys) Maybe we should focus on the hint.
hero member
Activity: 1386
Merit: 599
Oh man, this is brutal I hope you find a way to get your bitcoin back OP. Its hard to trust people to help you accomplish something like this I feel but definitely not impossible. Just don't give up looking for it whatever you do and surely you will find it! Even if it gets hard just don't give up 3 feet short of gold!!!
member
Activity: 124
Merit: 37
Thanks. Then how would I use the result? Just convert the hex to another format?

If you are familiar with python, you could use this script (offline) or any of the other software suggested.
Check the addresses for a balance, if you find one sweep into a new secure wallet using the corresponding WIF

Code:
from bitcoinaddress import Wallet


# Convert a string with hex digits, colons, and whitespace to a long integer
def hex2int(hexString):
    return int("".join(hexString.replace(":", "").split()), 16)


dA  = hex2int('54040CDA88EE1CA322FEB4BD61C1098224222444F9453637802FE66526674199')
# put your test key between the ' ' the key above is to demonstrate

dx = str(f'{dA:064x}')
wallet = Wallet(dx)
priv_key = wallet.key.hex
wif = wallet.key.mainnet.wif
publ_key = wallet.address.pubkey
publ_keyc = wallet.address.pubkeyc
address = wallet.address.mainnet.pubaddr1
addressc = wallet.address.mainnet.pubaddr1c
address3 =wallet.address.mainnet.pubaddr3
wifc = wallet.key.mainnet.wifc

addressd = wallet.address.mainnet.pubaddrbc1_P2WSH
addresse = wallet.address.mainnet.pubaddrbc1_P2WPKH

print('Private key : ' + str(priv_key) + '\n' +
      'Public key  : ' + str(publ_key) + '\n' +
      'Address     : ' + str(address) + '\n' +
      'WIF         : ' + str(wif) + "\n\n" +
      'Public key C: ' + str(publ_keyc) + '\n' +
      'Address    C: ' + str(addressc) + '\n' +
      'WIF        C: ' + str(wifc) + "\n\n" +
      'BC1 P2WSH   : ' + str(addressd) + '\n' +
      'BC1 P2WPKH  : ' + str(addresse) + '\n' +
      'P2SH        : ' + str(address3) + '\n')

hero member
Activity: 714
Merit: 1010
Crypto Swap Exchange
OP, if you're working with private keys, converting HEX to WIF, you should do this only in a safe and offline environment. Definitely not on your daily machine on which you do all your online stuff! Idealy you start a Live Linux box that runs only in RAM so that it doesn't leave traces of your private key(s) once it is shutdown.

If you're not tech savvy, better learn some basics before you continue to avoid your private keys getting compromised by some unsafe computer environment. Who knows if and how much coins your potential private keys control, don't risk foolish losses.

Another tool to convert HEX to WIF has already been mentioned in post #2 and #3, the offline version of https://www.bitaddress.org (get it from its Github repo and verify its authenticity before you use it!).
legendary
Activity: 2618
Merit: 6452
Self-proclaimed Genius
-snip-
Thanks. Then how would I use the result? Just convert the hex to another format?
But that's if you can get something like that from your backup, only if it starts exactly with "0x", otherwise it's a 66character hex or not.
64 characters is exactly the max length of a Bitcoin Private key in hex. (excluding 0x)

To use it: You just have to encode it into WIF private key to be compatible with almost all wallets.
There are a couple of tools that can do that, the working fork of brainwallet tool has one but do not attempt it using the web version or on an online machine.
If you wan't to use the tool, get its source code (GitHub link), audit it if possible, extract and launch its index.html file using your offline machine's browser.
Go to 'Convert' tab, toggle "HEX" as 'Source Encoding' and 'Convert to' "B58Check"; type/paste to convert it into WIF.
newbie
Activity: 6
Merit: 0
Quote: Also keep in mind that removing all question marks it leaves you with 66 chars. You still need to remove 2 

Could the first 2 characters be 0X ? If so, you can remove these 2 leaving you with 64 chars (32 hex pairs)
often hex output is prefixed with 0X to denote a hex string follows.

Thanks. Then how would I use the result? Just convert the hex to another format?
member
Activity: 124
Merit: 37
Quote: Also keep in mind that removing all question marks it leaves you with 66 chars. You still need to remove 2 

Could the first 2 characters be 0X ? If so, you can remove these 2 leaving you with 64 chars (32 hex pairs)
often hex output is prefixed with 0X to denote a hex string follows.
newbie
Activity: 6
Merit: 0
Thank you all for sharing your ideas and suggestions. It is helping to jog my memory.

I'm wondering how to create a CUDA program. The goal of this program would be to generate all conceivable permutations based on the current understanding of characters. From these permutations, the program should then be able to produce both compressed and uncompressed private keys. Once these keys are generated, it should derive their corresponding addresses. Then, it should check the balances of these addresses against a public directory to find matches.

I stumbled upon a potential hint that I had penned down in a different section of the notebook. However, I'm struggling to decode its exact meaning. Given that the missing characters are expected to be of the HEX variety, I'm leaning towards the idea that creating a CUDA-based solution might be our most efficient route to uncover these characters.

This is the hint: The numbers in my note are separated by single, double, or even multiple vertical lines. For context, I've denoted these vertical lines using the character located directly below the backspace key on a standard keyboard.

5| | | 6| | | 7|9|8|    5| | | 6|7|8|9|10|11|12
     2|3|4|                            2|3|4|
       1|                                   1|


I did a little research. Would a good starting template for the CUDA program look like this? Do you have any feedback?

Code:
// Including required header files
#include
#include
#include

// CUDA Kernel function for generating permutations
__global__ void generatePermutations(char *baseString, char *result, unsigned long long num_permutations, unsigned long long offset) {
    // Calculate the global index for this thread across all blocks
    unsigned long long idx = blockIdx.x * blockDim.x + threadIdx.x + offset;

    // Check if the index exceeds the number of permutations we want to generate
    if (idx >= num_permutations) return;

    // Create a local copy of the base string in this thread
    char localString[81];
    memcpy(localString, baseString, 81);

    // Loop to replace '?' with hexadecimal characters based on idx
    // Start from the end of the string and move toward the beginning
    for (int i = 79; i >= 0; i--) {
        if (localString[i] == '?') {
            int hexVal = idx % 16; // Get the remainder when idx is divided by 16
            if (hexVal < 10) {
                localString[i] = '0' + hexVal; // If hexVal is a single-digit number
            } else {
                localString[i] = 'A' + (hexVal - 10); // If hexVal is a letter (A-F)
            }
            idx /= 16; // Divide idx by 16 for the next '?'
        }
    }

    // Store the generated string into the result array on the GPU
    memcpy(&result[(blockIdx.x * blockDim.x + threadIdx.x) * 81], localString, 81);
}

// Main program function
int main() {
    // Initialize your 80-character string with 14 '?' characters, plus a null-terminator
    char baseString[81] = "BASE_STRING_WITH_14_?";

    // Declare device pointers for the base string and the result array
    char *d_baseString, *d_result;

    // Number of permutations to generate in this subset (due to memory limitations)
    unsigned long long subset_size = 1e5;
    size_t result_size = 81 * subset_size; // Size of the result array in bytes

    // Allocate memory on the GPU for the base string and result array
    cudaMalloc((void**)&d_baseString, 81);
    cudaMalloc((void**)&d_result, result_size);

    // Copy the base string from the CPU to the GPU
    cudaMemcpy(d_baseString, baseString, 81, cudaMemcpyHostToDevice);

    // Define the number of threads per block and the number of blocks per grid
    int threadsPerBlock = 256;
    int blocksPerGrid = (subset_size + threadsPerBlock - 1) / threadsPerBlock;

    // Launch the CUDA Kernel
    generatePermutations<<>>(d_baseString, d_result, subset_size, 0);

    // Allocate memory on the CPU to store the result and copy it from the GPU
    char *h_result = (char*) malloc(result_size);
    cudaMemcpy(h_result, d_result, result_size, cudaMemcpyDeviceToHost);

    // You can now process the result further or save it to a file

    // Free the allocated memory on the GPU and CPU
    cudaFree(d_baseString);
    cudaFree(d_result);
    free(h_result);

    return 0;
}

To compile the code:
Code:
nvcc filename.cu -o outputname
./outputname

Retrieve Permutations from GPU: After the CUDA kernel execution, there is a subset of permutations stored in a device array. Copy this array back to the host.
Code:
char *h_result = (char*) malloc(result_size);
cudaMemcpy(h_result, d_result, result_size, cudaMemcpyDeviceToHost);

Initialize OpenSSL: Before using OpenSSL's functions, initialize the library.
Code:
OpenSSL_add_all_algorithms();

Generate Private Key: For each permutation string, generate a SHA-256 hash to serve as a Bitcoin private key
Code:
unsigned char hash[SHA256_DIGEST_LENGTH];
SHA256_CTX sha256;
SHA256_Init(&sha256);
SHA256_Update(&sha256, permutation_string, strlen(permutation_string));
SHA256_Final(hash, &sha256);

Generate Public Key: Use the private key to generate an uncompressed public key using ECDSA with the secp256k1 curve
Code:
EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
BIGNUM *bn = BN_bin2bn(hash, 32, NULL);
EC_KEY_set_private_key(eckey, bn);
EC_KEY_generate_key(eckey);

Generate Compressed Public Key: The compressed public key is essentially the X-coordinate of the public key point along with one byte that helps to recover the Y-coordinate.

Code:
const EC_POINT *pub_key = EC_KEY_get0_public_key(eckey);
size_t size = EC_POINT_point2oct(group, pub_key, POINT_CONVERSION_COMPRESSED, NULL, 0, NULL);
unsigned char *compressed_key = malloc(size);
EC_POINT_point2oct(group, pub_key, POINT_CONVERSION_COMPRESSED, compressed_key, size, NULL);

Cleanup: Don't forget to free any dynamically allocated resources.
Code:
free(h_result);
EC_KEY_free(eckey);
BN_free(bn);
free(compressed_key);

Compile and link C code with OpenSSL:
Code:
gcc your_file.c -o your_program -lcrypto

Combined into a unified program
Code:
#include 
#include
#include
#include
#include
#include
#include

__global__ void generatePermutations(char *baseString, char *result, unsigned long long num_permutations, unsigned long long offset) {
    unsigned long long idx = blockIdx.x * blockDim.x + threadIdx.x + offset;
    if (idx >= num_permutations) return;

    char localString[81];
    memcpy(localString, baseString, 81);

    for (int i = 79; i >= 0; i--) {
        if (localString[i] == '?') {
            int hexVal = idx % 16;
            localString[i] = hexVal < 10 ? '0' + hexVal : 'A' + (hexVal - 10);
            idx /= 16;
        }
    }
    memcpy(&result[(blockIdx.x * blockDim.x + threadIdx.x) * 81], localString, 81);
}

int main() {
    char baseString[81] = "BASE_STRING_WITH_14_?";
    char *d_baseString, *d_result;
    unsigned long long subset_size = 1e3;
    size_t result_size = 81 * subset_size;

    cudaMalloc((void**)&d_baseString, 81);
    cudaMalloc((void**)&d_result, result_size);
    cudaMemcpy(d_baseString, baseString, 81, cudaMemcpyHostToDevice);

    int threadsPerBlock = 256;
    int blocksPerGrid = (subset_size + threadsPerBlock - 1) / threadsPerBlock;
    generatePermutations<<>>(d_baseString, d_result, subset_size, 0);

    char *h_result = (char*) malloc(result_size);
    cudaMemcpy(h_result, d_result, result_size, cudaMemcpyDeviceToHost);

    // Initialize OpenSSL
    OpenSSL_add_all_algorithms();

    for (int i = 0; i < subset_size; ++i) {
        char *perm = &h_result[i * 81];

        // Generate SHA-256 Hash
        unsigned char hash[SHA256_DIGEST_LENGTH];
        SHA256_CTX sha256;
        SHA256_Init(&sha256);
        SHA256_Update(&sha256, perm, strlen(perm));
        SHA256_Final(hash, &sha256);

        // Generate Public Key
        EC_KEY *eckey = EC_KEY_new_by_curve_name(NID_secp256k1);
        BIGNUM *bn = BN_bin2bn(hash, 32, NULL);
        EC_KEY_set_private_key(eckey, bn);
        EC_KEY_generate_key(eckey);

        // Generate Compressed Public Key
        const EC_GROUP *group = EC_KEY_get0_group(eckey);
        const EC_POINT *pub_key = EC_KEY_get0_public_key(eckey);
        size_t size = EC_POINT_point2oct(group, pub_key, POINT_CONVERSION_COMPRESSED, NULL, 0, NULL);
        unsigned char *compressed_key = (unsigned char*) malloc(size);
        EC_POINT_point2oct(group, pub_key, POINT_CONVERSION_COMPRESSED, compressed_key, size, NULL);

        // TODO: Store or process the keys

        // Cleanup
        EC_KEY_free(eckey);
        BN_free(bn);
        free(compressed_key);
    }

    // Final Cleanup
    free(h_result);
    cudaFree(d_baseString);
    cudaFree(d_result);

    return 0;
}

Compile the program using both the CUDA and OpenSSL libraries:
Code:
nvcc -o combined_program combined_program.cu -lssl -lcrypto

Run the program:
Code:
./combined_program
legendary
Activity: 2114
Merit: 1403
Disobey.
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B

Are the question marks included inside the backup you made, or are they part of the redaction?

I wish you the best of luck to successfully restore your wallet. Given the fact that it's "only" 14 characters missing there is a good chance at some point within the foreseeable future it will be crackable by a strong (cloud)-computing-network within a reasonable timeframe.
https://www.proxynova.com/tools/brute-force-calculator/ currently gives an estimate of ~1000 years, but I think that's based on the time it takes an average home computer to crack this. Meaning a powerful super-computer could quite likely already crack it within a few days or weeks.
With the current rate of Bitcoin this is most likely still not worth it, but if Bitcoin climbs up to $1M/BTC and computational power is getting cheaper and cheaper in the meantime, it will most likely be a profitable thing to crack.

Only 14 hex characters missing? That should not be too hard to brute force since there are only 16 possible hex haracters for each position, and if you know how to program in CUDA it should be simple to write a program that makes all of these permutations and then creates the compressed or uncompressed private key and its address from which you can check for balances against, using publicly available lists.

Ah yes, indeed it's HEX numbers only, so this reduces computational time a ton. WOW! So it's just a question of how to program a nice script that will allow an easy brute-force and checking the derivated public address with the blockchain history to find the correct private key.
Happy news in this regard.
Guess the challenge is to find someone trustworthy to create some good code without a backdoor.

And, on a sidenode, usually the knowledge what you did with these missing ? digits is still somewhere in your head @OP. There is a good chance if you think about this on a regular basis and try to remember what you were up to back then an epiphany moment will occure and you know how to fill these blanks.
legendary
Activity: 2018
Merit: 1108
This is extremely difficult to give advice on without figuring your thought flow at the time of creating this backup.

It would be very important if you can figure out if the formatting matters (i.e. is there a reason to have specific amount of HEX numbers on each row).

The only thing we know for certain is that it likely is HEX. Question marks are likely obfuscated HEX characters. We do not know if all of the characters are part of a private key or additional obfuscation.

Is it significant that there are 10 groups of 4 HEX characters WITH question marks and exactly same amount without? Sometimes small things help remember so I would suggest you to give thought to different scenarios and how you may have thought at the time.
hero member
Activity: 560
Merit: 1060
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B

Would writing it this way help a bit?

Quote
32?F
7F?B

34F6 | 2AEB
37A4 | 4AAF

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

The fact that you had exactly 3 elements on the first row, 2 on the second row, 4 on the third row and 1 on the last row could potentially be because you wanted to know their order afterwards.

Also keep in mind that removing all question marks it leaves you with 66 chars. You still need to remove 2  Tongue
legendary
Activity: 1568
Merit: 6660
bitcoincleanup.com / bitmixlist.org
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B

Are the question marks included inside the backup you made, or are they part of the redaction?

I wish you the best of luck to successfully restore your wallet. Given the fact that it's "only" 14 characters missing there is a good chance at some point within the foreseeable future it will be crackable by a strong (cloud)-computing-network within a reasonable timeframe.
https://www.proxynova.com/tools/brute-force-calculator/ currently gives an estimate of ~1000 years, but I think that's based on the time it takes an average home computer to crack this. Meaning a powerful super-computer could quite likely already crack it within a few days or weeks.
With the current rate of Bitcoin this is most likely still not worth it, but if Bitcoin climbs up to $1M/BTC and computational power is getting cheaper and cheaper in the meantime, it will most likely be a profitable thing to crack.

Only 14 hex characters missing? That should not be too hard to brute force since there are only 16 possible hex haracters for each position, and if you know how to program in CUDA it should be simple to write a program that makes all of these permutations and then creates the compressed or uncompressed private key and its address from which you can check for balances against, using publicly available lists.
legendary
Activity: 2114
Merit: 1403
Disobey.
I finally found the backup I wrote down after using Gavin Andresen's Bitcoin faucet. I don't remember if I was using only Bitcoin Core, Armory, or something like Multi-bit. Those sound familiar.

There are 5 bitcoins in the first address and I never moved or used them. The characters I found on my handwritten paper backup are 80 characters, between (0-9) and (A-F). I wrote these in blocks of four characters. Within these 80 characters, I have 14 question marks. So a total of 66 known characters. I'm not sure if I only need 64, 66, or 80 characters total.

I have Bitcoin Core and Electrs downloaded on my Umbrel to start trying the recovery process. I also have Electrum and Armory downloaded.

I'm not sure the best course to go from here to find out what the key may be and how long it should be. I'm not in a hurry and have time to try to figure this out, hopefully with your help.

Offering a full Bitcoin to the best helper.

Do you have any reference as to what the questionmark characters might be? Might be worth to try hypnotherapy, not sure if there is real science that this can work, but I guess it wouldn't hurt to try.
A typical case of making it too secure for your own good. I have done similar things myself in the past, so not blaming you. It's human nature, expecially back in the day when there was not a bunch of publicly available resources regarding crypto floating around.
It's something I heard Andreas Antonopoulos warn about again and again. In the moment it seems like a cool and logical thing to somehow add some encryption to your written backup. - Personally I noticed that sometimes even within 1 year I have no clue what I was thinking back then.

I wish you the best of luck to successfully restore your wallet. Given the fact that it's "only" 14 characters missing there is a good chance at some point within the foreseeable future it will be crackable by a strong (cloud)-computing-network within a reasonable timeframe.
https://www.proxynova.com/tools/brute-force-calculator/ currently gives an estimate of ~1000 years, but I think that's based on the time it takes an average home computer to crack this. Meaning a powerful super-computer could quite likely already crack it within a few days or weeks.
With the current rate of Bitcoin this is most likely still not worth it, but if Bitcoin climbs up to $1M/BTC and computational power is getting cheaper and cheaper in the meantime, it will most likely be a profitable thing to crack.
newbie
Activity: 1
Merit: 1
Are the blocks of 4 potentially unicode? 80 hex characters in blocks of 4 would give you 20 unicode characters, which could potentially be a 20 character brain wallet password or similar.

You could download an offline version of a website like https://r12a.github.io/app-conversion/ and on a machine not connected to the internet put them in and see if you get anything that makes sense.
jr. member
Activity: 33
Merit: 37
I am surprised that you publicly give every bit of information about that bitcoin address you owned a long time ago.

He mentioned that he has changed all the characters, so the only information he is giving here is the format and notation of the HEX keys.

...but I changed all the characters...


The private key in HEX is only 64characters long.
The private key in HEX with the network bytes and checksum included is only 74characters long. (uncompressed WIF)
The private key in HEX with the network bytes, compressed flag (0x01) and checksum included is only 76characters long. (compressed WIF)
Any other length will produce an invalid WIF private key.
Ah, my apologies I believed that the HEX key with with checksum and the compressed flag prefix was 80 characters, thanks for the clarification.
legendary
Activity: 1512
Merit: 7340
Farewell, Leo
0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B
Is there a specific reason you've written the hexadecimal private key in that order? Is it just as you'd written it down on paper?

I wasn't around back then, but the faucet didn't give you a private key, right? Just to confirm you're really looking for the wallet you used.
Gavin's faucet was working until January 2013, and it was consisted by a captcha-protected form with an address input. It also linked to bitcoin.org, so if the OP did indeed use the faucet, they most likely used the very first Bitcoin client.

That being said, it's very weird that they've written 80 hexadecimal characters. @signer, do you remember using a program that backed you up the private keys?
legendary
Activity: 2618
Merit: 6452
Self-proclaimed Genius
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.
Have you tried asking goatpig already about that "80-characters private key" mentioned in the old Armory website?
The old developer may not be active anymore, but goatpig (the current Armory developer) is pretty much actively replying on that board.

Once you have a 80 character HEX string, you can try encoding it to base 58 to obtain potentially a WIF compressed key for your wallet.
The private key in HEX is only 64characters long.
The private key in HEX with the network bytes and checksum included is only 74characters long. (uncompressed WIF)
The private key in HEX with the network bytes, compressed flag (0x01) and checksum included is only 76characters long. (compressed WIF)
Any other length will produce an invalid WIF private key.
jr. member
Activity: 33
Merit: 37
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B
It is very likely that the ? characters are actual Hex characters that you need to fill in. Filling these in would be up to you. Try looking for patterns you can see in the key that could explain the “?”s.

Once you have a 80 character HEX string, you can try encoding it to base 58 to obtain potentially a WIF compressed key for your wallet. https://appdevtools.com/base58-encoder-decoder

This is also a great source that has a lot of information about bitcoin key formats: https://www.oreilly.com/library/view/mastering-bitcoin/9781491902639/ch04.html
legendary
Activity: 3290
Merit: 16489
Thick-Skinned Gang Leader and Golden Feather 2021
I finally found the backup I wrote down after using Gavin Andresen's Bitcoin faucet.
I wasn't around back then, but the faucet didn't give you a private key, right? Just to confirm you're really looking for the wallet you used.

If it's HEX, it's not Armory:
  • Armory Root Key: 18 four letter "words".
    Example (from bitkee.com): eoaj gghu ruaf ghwe jnrh ftuu hweu aeun agkg tudt waja gunn oawg jkwh dhei hjdn itar naoj
    Use Armory.

Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B
It doesn't look like any format I've ever seen. I've seen many stories from people who couldn't figure out how they stored their Bitcoins anymore, so I think your best bet is trying really hard to remember what you did. That's tough after this much time.
newbie
Activity: 6
Merit: 0
Great theories. Here is the exact format I wrote it in, but I changed all the characters. I do remember maybe converting it to hex or binary, or at least considering it.

0486 | 4AE5 | 41BC
A58F | 3FBA | 1AD7

34F6 | 2AEB
37A4 | 4AAF

7?A4 | ?42? | 6F?? | ??D8
71?D | 6?A? | ?FCA | 86B?

32?F
7F?B
hero member
Activity: 714
Merit: 1010
Crypto Swap Exchange
It definitely has all the characteristics of hexadecimal. The question marks are sort of spread around the first half of the characters and aren't in the beginning or end. I'm sure I could read everything clearly when I wrote it down so I put the question marks there intentionally. All characters used in hexadecimal are located in the string of characters, so I didn't intentionally leave a specific character or two out and just add those in place of the question marks. I stacked they string of characters in a way I couldn't tell if it was two 40 character keys or an 80 character key. If I only use the top line I have a 40 character string with no question marks, but that is an odd length.

The transaction to your address took place about half a year before I learned about Bitcoin and I don't know which wallets besides Bitcoin-GUI were common or popular around July 2010. So, lets assume you used Bitcoin-GUI, because I'm not aware of any deterministic wallet around that time. Armory came later and its recovery and chain key did look very different from what you describe.

As far as I remember if you did export a private key of your receiving address then Bitcoin-GUI would've given you a private key in WIF format (not 100% sure about this as I didn't do such things with Bitcoin-GUI in 2011 when I first used it). What you say about your characters doesn't appear as a WIF key, so it might be that you converted it to hex for some reason (maybe as a decoy).

Are you absolutely sure, you don't have any sort of documentation about your "backup"? If not, as a reminder to other readers, stay away from selfmade obfuscation or backup methods without documenting it properly. There's very likely lots of footguns with such approaches.

I don't quite get or can visualize what you mean by "The question marks are sort of spread around the first half of the characters and aren't in the beginning or end." and together with "I stacked they string of characters in a way I couldn't tell if it was two 40 character keys or an 80 character key. If I only use the top line I have a 40 character string with no question marks, but that is an odd length.".

A private key in hex is 64 characters. You have 66 if we ignore the purpose of the questions marks (could be a decoy). You say your hex string starts with "001", so what about if you drop the leading "00" which would give you remaining 64 hex chars and try to use that as a hex private key. Also try your 64 char hex string in reverse! Who knows what "crazy" scheme you invented? No pun intended, just being mildly creative...

I have some other idea if you would explain me in more details what you mean by "The question marks are sort of spread around the first half of the characters and aren't in the beginning or end.".

From what I understood so far, the question marks don't replace any missing hex characters as you say you have all of them, 0...F, in the written characters already. 14 missing characters hidden by the question marks would be a bit too long to remember, except if they hide something like a regular series like ascending or descending hex digits.

When you say you wrote blocks of four hex characters: where do the question marks appear in the blocks where they are?

BTW, what do you get in terms of number of hex characters when you completely discard the blocks which have a question mark in them? Could this give you a mini private key? Hm, I'm just brainstorming, but I find this a bit odd to assume you used a mini private key as that would've required external tools to create one. Not sure how good your memory is roughly 13 years ago.

legendary
Activity: 2380
Merit: 5213
Public apology to @hosseinimr93 ................
That's OK DaveF. It happens.
legendary
Activity: 3500
Merit: 6320
Crypto Swap Exchange
Public apology to @hosseinimr93 when making the post I did a few edits on my tablet and then a few quick edits here and lost the quote reference to his post with the info on the key types.
Since it's not on loyce.club or ninjastic.space with the quote I either killed it it my 1st quick edit (doubtful) or it just never made it in the 1st place.

Sorry.


-Dave
legendary
Activity: 2618
Merit: 6452
Self-proclaimed Genius
I read this in Armory's FAQ, and opposes some other things I've seen. What kind of key are they talking about here?
"Each bitcoin (or fragment of) belongs to a cryptographic private key, which is an 80-digit number that is essentially impossible to guess."
https://www.bitcoinarmory.com/faq/
Could be the decimal representation of a private key but the end range can only be 78 characters long.
That FAQ page is outdated by the way, the latest Armory website is "btcarmory"
Another thing is, Armory's first Alpha release was on "Feb 15, 2012", that's 2 years past after you received your Bitcoins.

I'll try to download some old versions of Armory and check if I can find an 80-character private key like described in the old FAQ.
You can also directly ask in Armory sub-board (link) if the new developer 'goatpig' knows about what 'etotheipi' said in the FAQ.
newbie
Activity: 28
Merit: 0
 Hi after reading your post it sounds like a Armory wallet. If you look at how to restore armory backups they are separated in 4 characters. Maybe you use question marks to divide the characters. I would try to restore your wallet with Armory and see if it works. You will need to probably try different settings. Go and read how restore let me know how it works.
legendary
Activity: 3472
Merit: 3217
Playbet.io - Crypto Casino and Sportsbook
I finally found the backup I wrote down after using Gavin Andresen's Bitcoin faucet. I don't remember if I was using only Bitcoin Core, Armory, or something like Multi-bit. Those sound familiar.


If the backup private key was generated from the year 2009 to 2010 I'm sure it was not created from Armory or multibit wallet because these two wallets was announced between year 2011 and 2012.

Thanks for the information. The public address starts with a 1 and here it is: 1DYFqhdKDkHYytVn66QWKGY4PUebNYH9j9

The character starts with most likely an A or 1, but read another way these are the first three 001.

If it starts with 001 then it's a binary format you might need to covert it to the WIF key format to be able to import it to other wallets like Electrum
newbie
Activity: 6
Merit: 0
It definitely has all the characteristics of hexadecimal. The question marks are sort of spread around the first half of the characters and aren't in the beginning or end. I'm sure I could read everything clearly when I wrote it down so I put the question marks there intentionally. All characters used in hexadecimal are located in the string of characters, so I didn't intentionally leave a specific character or two out and just add those in place of the question marks. I stacked they string of characters in a way I couldn't tell if it was two 40 character keys or an 80 character key. If I only use the top line I have a 40 character string with no question marks, but that is an odd length.

I read this in Armory's FAQ, and opposes some other things I've seen. What kind of key are they talking about here?
"Each bitcoin (or fragment of) belongs to a cryptographic private key, which is an 80-digit number that is essentially impossible to guess. Bitcoins cannot be transferred unless the holder of the private key uses it to create a digital signature authorizing the transaction. A Bitcoin address is a string of letters that let other users know what your digital signature looks like without revealing the private key (it is related to the “public key”)." https://www.bitcoinarmory.com/faq/
newbie
Activity: 6
Merit: 0
Thanks for the information. The public address starts with a 1 and here it is: 1DYFqhdKDkHYytVn66QWKGY4PUebNYH9j9

The character starts with most likely an A or 1, but read another way these are the first three 001.
legendary
Activity: 1512
Merit: 4795
Leading Crypto Sports Betting & Casino Platform
The private key is in hexadecimal and it should be 64 characters.

Use https://www.bitaddress.org offline on an airgapped device: https://github.com/pointbiz/bitaddress.org/archive/v3.3.0.zip

How to use it offline on an airgapped device: https://bitcoin.stackexchange.com/questions/22115/how-to-download-bitaddress-org-to-use-offline

After you open it offline, click on 'wallet details' and input the private key on 'enter private key' space that you see and click on 'view details'.

Download Electrum from https://electrum.org/
You can verify its signature: https://bitcointalksearch.org/topic/guide-how-to-safely-download-and-verify-electrum-guide-5240594

Open electrum, click on 'import bitcoin addresses and private keys' and paste the private key on Electrum. You will be able to spend your coins.

WIF Private keys start with K or L for compressed, while 5 for uncompressed. I will advice you to use K or L for low fee.



Using bitaddress offline is for security, becuase the website (bitaddress) is online and you can not trust that.
Airgapped device is a device that its Bluetooth and WiFi card has been removed.
Reinstall the airgapped device OS after making it airgapped to avoid malware.
legendary
Activity: 3500
Merit: 6320
Crypto Swap Exchange
What character does it start with?

A private key starting with 5, K and L and including 51 or 52 characters is a WIF private key. That's the most common format of a bitcoin private key.
A private key can have other formats as well. For example, a private key can be in hexadecimal format and includes 64 characters (0-9 and A-F) or it can be a mini private key and includes only 22 or 30 characters.

So it sounds like a hex key.

Without more info it's impossible to get you more info.

What is the public address? The one that starts with 1.

Don't post any other info or send any of the private key info to others.

If it's a HEX key it's somewhat simple a process to do.

Go here https://bitcointalksearch.org/topic/m.62449902 and follow steps: #1, #1b, #2, #3, #4 and #6 the 64 characters that you have should give you the same address I asked about above and a private key you can import into core.

-Dave
newbie
Activity: 6
Merit: 0
I finally found the backup I wrote down after using Gavin Andresen's Bitcoin faucet. I don't remember if I was using only Bitcoin Core, Armory, or something like Multi-bit. Those sound familiar.

There are 5 bitcoins in the first address and I never moved or used them. The characters I found on my handwritten paper backup are 80 characters, between (0-9) and (A-F). I wrote these in blocks of four characters. Within these 80 characters, I have 14 question marks. So a total of 66 known characters. I'm not sure if I only need 64, 66, or 80 characters total.

I have Bitcoin Core and Electrs downloaded on my Umbrel to start trying the recovery process. I also have Electrum and Armory downloaded.

I'm not sure the best course to go from here to find out what the key may be and how long it should be. I'm not in a hurry and have time to try to figure this out, hopefully with your help.

Offering a full Bitcoin to the best helper.
Jump to: