Zamień słowa w klucze – bitcoin mnemonic sentence

Portfel Electrum oferuje nam wygenerowanie portfela na podstawie 12 słów z języka angielskiego, które należy gdzieś zapisać. Portfel możemy odtworzyć w dowolnym miejscu na ziemi korzystając z tych 12 słówek i portfela electrum. Jest to tzw. seed. Co jednak gdy nie chcemy nigdzie zapisywać seed’a i nie potrafimy go zapamiętać? Możemy stworzyć własnego seed’a który jest np. naszym ulubionym porzekadłem lub fragmentem książki za pomocą narzędzia pybitcointools. Jest to prosta biblioteka pythona oferująca wiele użytecznych funkcji.

Bibliotekę pybitcointools instaluje się wpisując w wierszu poleceń:

$ pip install pybitcointools

Następnie nieco modyfikujemy kod dostępny na githubie:

import pybitcointools as bitcoin

# wybieramy sobie nasz ulubiony cytat lub porzekadlo
seed = "Ala ma kota, kot ma ale"

# wygenerowanie klucza prywatnego
valid_private_key = False
while not valid_private_key:
    secret_exponent = bitcoin.electrum_stretch(seed)
    private_key = bitcoin.electrum_privkey(secret_exponent,0)
    decoded_private_key = bitcoin.decode_privkey(private_key, 'hex')
    valid_private_key =  0 < decoded_private_key < bitcoin.N

print "Private Key (hex) is: ", private_key
print "Private Key (decimal) is: ", decoded_private_key

# Przekonwertowanie klucza prywatnego do WIF format
wif_encoded_private_key = bitcoin.encode_privkey(decoded_private_key, 'wif')
print "Private Key (WIF) is: ", wif_encoded_private_key

#kompresowanie klucza prywatnego
compressed_private_key = private_key + '01'
print "Private Key Compressed (hex) is: ", compressed_private_key

#  WIF-compressed
wif_compressed_private_key = bitcoin.encode_privkey(
    bitcoin.decode_privkey(compressed_private_key, 'hex'), 'wif')
print "Private Key (WIF-Compressed) is: ", wif_compressed_private_key

public_key = bitcoin.fast_multiply(bitcoin.G, decoded_private_key)
print "Public Key (x,y) coordinates is:", public_key

hex_encoded_public_key = bitcoin.encode_pubkey(public_key,'hex')
print "Public Key (hex) is:", hex_encoded_public_key

(public_key_x, public_key_y) = public_key
if (public_key_y % 2) == 0:
    compressed_prefix = '02'
else:
    compressed_prefix = '03'
hex_compressed_public_key = compressed_prefix + bitcoin.encode(public_key_x, 16)
print "Compressed Public Key (hex) is:", hex_compressed_public_key

# Wygenerowanie adresu bitcoin z klucza publicznego
print "Bitcoin Address (b58check) is:", bitcoin.pubkey_to_address(public_key)

# Wygenerowanie skompresowanego adresu bitcoin z kompresowanego klucza publicznego
print "Compressed Bitcoin Address (b58check) is:", \
    bitcoin.pubkey_to_address(hex_compressed_public_key)

Możemy uzyskać pełen komplet kluczy i adresów, z wybranych przez nas słów. Rezultatem działania skryptu jest:

Private Key (hex) is: e3767d28e0f0a786fb51290f4a74627dbccab154b44798c284fcfee509066724
Private Key (decimal) is: 102884368402425487831277816288539521485269384393249441087206170986777349089060
Private Key (WIF) is: 5KYTpCkmBRfxpLaWJXr9qVFokyiC5gEk9MP8RMERdruzvZRgjuY
Private Key Compressed (hex) is: e3767d28e0f0a786fb51290f4a74627dbccab154b44798c284fcfee50906672401
Private Key (WIF-Compressed) is: L4qsMLtA11tyMwQtLP9x11iMP7JoueBfRrxfkUJFjhJvf9VToAVG
Public Key (x,y) coordinates is: (34840366328833946038392381445957385956771246390364988345332639965030718064460L, 57272009752993592679923871851768804429558728439413117325945856514783485843214L)
Public Key (hex) is: 044d06f2d2ca88066edff182576a96bf748e89ca60f105c9889632fed0dbef474c7e9ecf0c615dd7ff8081a0cce0f21516c5c0b08440ae64b59cb222697ccf570e
Compressed Public Key (hex) is: 024d06f2d2ca88066edff182576a96bf748e89ca60f105c9889632fed0dbef474c
Bitcoin Address (b58check) is: 15Qb421LpKvJZ4izeo5S4QiRSoQw2frdvf
Compressed Bitcoin Address (b58check) is: 1NsdePFXDTnrhsN5hPqgBcz5XUAuViWe5U

Otrzymany w ten sposób klucz prywatny można importować do dowolnego portfela BTC, celem uzyskania dostępu do swoich środków. Wystarczy, że pamiętasz swojego seed’a. Na jego podstawie używając biblioteki pybitcointools jesteś w stanie wygenerować klucz prywatny. Pamiętaj, żeby Twój seed był trudny do odgadnięcia przez postronne osoby. W szczególności nigdy nie używaj „Ala ma kota, kot ma ale”. Spójrz w historii transakcji ile osób postępuje nierozważnie i używa właśnie tego szkoleniowego seeda….

Może Ci się również spodoba

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *