This project is maintained by valerio-vaccaro
Le firme digitali hann un rol fondamental nel protocoll Bitcoin, permettend di autenticà transazion e assicurà che solt i proprietari de le claav privad possen spend i fond associad. In questa lezion, esplorerem i concett fondamental de le firme digitali, con particolare attenzion a l’algoritmo ECDSA (Elliptic Curve Digital Signature Algorithm) doprad da Bitcoin.
Una firma digital l’è un meccanism matematic che permet de:
Aspett | Firma tradizional | Firma digital |
---|---|---|
Supporto fisic | Carta, penna | Dat digital |
Copiabilità | Difficil da copià | Facil da copià |
Verifica | Confronto visivo | Algoritmo matematic |
Sicurezza | Basad su caratteristiche fisiche | Basad su crittografia |
Scalabilità | Limitada | Alta |
Le firme digitali hann basad su la criptografia asimmetrica, che dopra do claav matematicament correlad:
Messaggio + Claav Privada → Firma Digital
Messaggio + Firma + Claav Pubblica → Verifica (Vera/Falsa)
Bitcoin dopra ECDSA (Elliptic Curve Digital Signature Algorithm) con la curva secp256k1 per generà e verificà le firme.
In Bitcoin, le firme digitali hann doprad per autenticà le transazion:
Transazione + Claav Privada → Firma Digital
Transazione + Firma + Claav Pubblica → Verifica
Ogni UTXO (Unspent Transaction Output) l’è associà a una claav pubblica. Per spend un UTXO, te devi:
Input:
- UTXO: 0.1 BTC
- ScriptSig: <Firma> <Claav Pubblica>
Output:
- ScriptPubKey: OP_DUP OP_HASH160 <Hash Claav Pubblica> OP_EQUALVERIFY OP_CHECKSIG
Bitcoin supporta divers tip de firme attraverso i SIGHASH flags, che determinan quell part de la transazion vegn firmada:
I flag poden vess combinad:
SIGHASH_ALL | SIGHASH_ANYONECANPAY
: Firma domà l’input specificSIGHASH_NONE | SIGHASH_ANYONECANPAY
: Firma domà l’input, permet modifiche a outputOltra a firmà transazion, te pödet anca firmà messagg arbitrari con le tue claav Bitcoin:
Bitcoin usa un format standard per i messagg da firmà:
Bitcoin Signed Message:
<Messaggio>
import hashlib
from bitcoin import *
# Messaggio da firmare
message = "Hello, Bitcoin!"
# Claav privada (in formato WIF)
private_key = "5KJvsngHeMpm884wtkJNzQGaCErckhHJBGFsvd3VyK5qMZXj3hS"
# Formatta il messaggio
formatted_message = f"Bitcoin Signed Message:\n{message}"
message_hash = hashlib.sha256(formatted_message.encode()).digest()
# Firma il messaggio
signature = ecdsa_raw_sign(message_hash, private_key)
print(f"Firma: {signature}")
import hashlib
from bitcoin import *
# Messaggio originale
message = "Hello, Bitcoin!"
# Claav pubblica
public_key = "04a1b2c3d4e5f6..."
# Firma
signature = "3045022100..."
# Formatta il messaggio
formatted_message = f"Bitcoin Signed Message:\n{message}"
message_hash = hashlib.sha256(formatted_message.encode()).digest()
# Verifica la firma
is_valid = ecdsa_raw_verify(message_hash, signature, public_key)
print(f"Firma valida: {is_valid}")
Prima de accettà una transazion, Bitcoin Core verifica:
# Crea una transazione raw
bitcoin-cli createrawtransaction '[{"txid":"...","vout":0}]' '{"address":0.1}'
# Firma la transazione
bitcoin-cli signrawtransactionwithwallet "raw_transaction_hex"
# Invia la transazione
bitcoin-cli sendrawtransaction "signed_transaction_hex"
# Verifica una transazione
bitcoin-cli getrawtransaction "txid" true
# Verifica un messaggio firmato
bitcoin-cli verifymessage "address" "signature" "message"
Le firme digitali ECDSA hann un component fondamental del protocoll Bitcoin, permettend di autenticà transazion e assicurà la sicurezza de la rete. La comprension de come funzionen l’è essenzial per sviluppator e utent che vören interagì con Bitcoin a livell avanzà.
Con l’evoluzion de Bitcoin e l’introduzion de tecnologie come Schnorr signatures e Taproot, le capacità de firm digital continuen a migliorà, offrend maggior sicurezza, efficienza e flessibilità.
Per approfondì l’argoment, raccomandi de: