As a Newbie, i DCA-ed BTC for the past 6 months on Binance
I don't want to use any CEX no more. I want my keys.
So based on internet articles and a bit of chat-gpt
i could generate my key pair locally as follow:
Use secp256k1 elliptic curve to generate a priv key:
> openssl ecparam -genkey -name secp256k1 -noout -out privatekey.pem
Find matching pub key on the curve:
> openssl ec -in privatekey.pem -pubout -out publickey.pem
Derive an address in python:
from ecdsa import VerifyingKey
import hashlib
import base58
def generate_bitcoin_address_from_public_key(public_key_bytes):
public_key = VerifyingKey.from_pem(public_key_bytes)
# Hash the public key
hash_pubkey = hashlib.sha256(public_key.to_string()).digest()
hash_pubkey_ripemd160 = hashlib.new('ripemd160', hash_pubkey).digest()
version_byte = b'\x00'
hash_pubkey_with_version = version_byte + hash_pubkey_ripemd160
checksum = hashlib.sha256(hashlib.sha256(hash_pubkey_with_version).digest()).digest()[:4]
binary_address = hash_pubkey_with_version + checksum
bitcoin_address = base58.b58encode(binary_address).decode('utf-8')
return bitcoin_address
with open('publickey.pem', 'r') as file:
public_key_pem = file.read()
bitcoin_address = generate_bitcoin_address_from_public_key(public_key_pem.encode('utf-8'))
print("Bitcoin Address:", bitcoin_address)
This got me the following:
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIDRd6/hvSUmI3jubQv+FEve/bkPRBi4d4ddCKf1Cdz8yoAcGBSuBBAAK
oUQDQgAEr6/Q3oyxMl6Fourug/AVW2a/WyrhoGDPP0iXBPp2rEKSRF+p1G5DL7BL
gFsOOBN/U0IT3iiw7agk/DCTxEO0wQ==
gFsOOBN/U0IT3iiw7agk/DCTxEO0wQ==
-----END EC PRIVATE KEY-----
-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEr6/Q3oyxMl6Fourug/AVW2a/WyrhoGDP
P0iXBPp2rEKSRF+p1G5DL7BLgFsOOBN/U0IT3iiw7agk/DCTxEO0wQ==
-----END PUBLIC KEY-----
Bitcoin Address: 12XjArifNjhfNWDo5MBZaBMXjyYVVbVgxZ
So, did i do the correct thing ? Is it safe to transfer my BTC to an address generated this way (not this one ofc)
Or is there a better way to do it ?
Also keys seem to be base64 encoded, should i save it in another form ?
Thnaks in advance.