This project is maintained by valerio-vaccaro
Le firme digitali xe na componente fondamentale de Bitcoin che permet de provar l’autenticità de le transazioni e l’identità del mittente. In questa lezion esploreremo come funziona ECDSA (Elliptic Curve Digital Signature Algorithm) in Bitcoin.
Messagio + Chiave Privata → Firma
Messagio + Firma + Chiave Pubblica → Verifica
import hashlib
import secrets
# Genera chiave privata casuale
private_key = secrets.randbelow(2**256)
# Calcola chiave pubblica
# (semplificato - in realtà usa moltiplicazion de punto)
public_key = private_key * G # G xe il punto generatore
def sign_message(message, private_key):
# Hash del messagio
message_hash = hashlib.sha256(message.encode()).digest()
# Genera k casuale
k = secrets.randbelow(2**256)
# Calcola R = k * G
R = k * G
# Calcola S = k⁻¹ * (hash + private_key * R_x) mod n
S = (pow(k, -1, n) * (int.from_bytes(message_hash, 'big') + private_key * R[0])) % n
return (R[0], S)
def verify_signature(message, signature, public_key):
R, S = signature
message_hash = hashlib.sha256(message.encode()).digest()
# Calcola w = S⁻¹ mod n
w = pow(S, -1, n)
# Calcola u1 = hash * w mod n
u1 = (int.from_bytes(message_hash, 'big') * w) % n
# Calcola u2 = R * w mod n
u2 = (R * w) % n
# Calcola P = u1 * G + u2 * public_key
P = u1 * G + u2 * public_key
# Verifica che P_x = R
return P[0] == R
def sign_bitcoin_message(message, private_key):
# Formato Bitcoin
bitcoin_message = f"\x18Bitcoin Signed Message:\n{len(message)}"
bitcoin_message += message
# Hash doppio
hash1 = hashlib.sha256(bitcoin_message.encode()).digest()
hash2 = hashlib.sha256(hash1).digest()
# Firma
return sign_message(hash2, private_key)
def verify_bitcoin_message(message, signature, public_key):
# Stesso processo de firma
bitcoin_message = f"\x18Bitcoin Signed Message:\n{len(message)}"
bitcoin_message += message
hash1 = hashlib.sha256(bitcoin_message.encode()).digest()
hash2 = hashlib.sha256(hash1).digest()
return verify_signature(hash2, signature, public_key)
Le firme digitali ECDSA xe na componente critica de Bitcoin che garantisce sicurezza e autenticità. La comprension de come funzionano xe essenziale par sviluppatori e utenti avanzati.