Glossario / Indirizzi e chiavi
Indirizzo P2PKH
Noto anche come Pay-to-Public-Key-Hash, Output P2PKH.
- Che cos'è un indirizzo P2PKH?
- P2PKH è il tipo di output che blocca i bitcoin su un hash di 20 byte di una chiave pubblica, così la chiave stessa resta nascosta fino al momento in cui li spendi.
Pay to public key hash è lo schema di script dietro ogni indirizzo che inizia con 1. Il suo script di blocco è esattamente di 25 byte ed esegue cinque operazioni quando i bitcoin si muovono. Poiché l'output si impegna su un'impronta e non sulla chiave, un output P2PKH non speso non dice nulla a un osservatore sulla chiave pubblica che c'è dietro.
Come funziona
Un output P2PKH porta un solo script di blocco, sempre della stessa forma: OP_DUP OP_HASH160 <hash di 20 byte> OP_EQUALVERIFY OP_CHECKSIG. Quel hash di 20 byte è HASH160, cioè RIPEMD-160 applicato allo SHA-256 della chiave pubblica compressa, ed è così che una chiave di 33 byte diventa un impegno di 20 byte.
La spesa fornisce due elementi nello scriptSig dell'input: una firma, poi la chiave pubblica. L'esecuzione procede in ordine. OP_DUP copia la chiave, OP_HASH160 riduce la copia a 20 byte, OP_EQUALVERIFY la confronta con il valore impegnato e interrompe se differiscono, e OP_CHECKSIG verifica la firma rispetto alla transazione. Entrambi i controlli devono essere superati; se uno dei due fallisce, l'intera transazione diventa non valida, non solo quell'input.
Le dimensioni derivano dalla struttura. Un output P2PKH costa 34 byte on-chain, formati da un importo di 8 byte, una lunghezza di 1 byte e lo script di 25 byte. Un input costa circa 148 vbyte, perché una firma ECDSA codificata in DER occupa da 71 a 72 byte, la chiave compressa ne aggiunge altri 33, e tutto questo sta fuori dal witness, dove ogni byte pesa quattro volte.
Dove lo vedi
Ogni indirizzo che inizia con 1 è un indirizzo P2PKH, il che copre la maggior parte dei bitcoin che si sono mossi prima che SegWit si attivasse al blocco 481.824, ad agosto 2017. Gli explorer di blocchi indicano il tipo su ogni output, così puoi controllare cosa stai guardando senza decodificare nulla.
Il dettaglio che vale la pena portare via è quando la tua chiave pubblica diventa pubblica. Finché non spendi, la catena conserva solo l'hash. La prima spesa pubblica la chiave nello scriptSig, in modo permanente. Se poi riutilizzi quell'indirizzo, qualsiasi saldo successivo sta dietro una chiave già visibile a tutti, il che elimina uno strato di protezione che non ti costava nulla. È subito un problema di privacy, ed è il motivo per cui il lungo dibattito sui futuri attacchi alla crittografia su curva ellittica si concentra sugli indirizzi riutilizzati e già spesi, non su quelli nuovi.
In pratica: lascia che il tuo wallet ti dia un nuovo indirizzo di ricezione per ogni pagamento, e lascia che anche il resto vada a un indirizzo nuovo. Il software moderno fa entrambe le cose per impostazione predefinita.
Indirizzo P2PKH vs P2WPKH
P2PKH e P2WPKH si impegnano sulla stessa cosa e costano cifre molto diverse. Entrambi bloccano i bitcoin su un HASH160 di 20 byte di una singola chiave pubblica compressa, ed entrambi si sbloccano con una firma di quella chiave. A separarli è dove vengono scritti i dati di sblocco. P2PKH tiene la firma e la chiave nello scriptSig, contato a quattro unità di peso per byte; P2WPKH le sposta nel witness, contato a una. Per questo lo stesso segreto può produrre un indirizzo 1 e un indirizzo bc1q che non si somigliano affatto, custodiscono bitcoin in modo indipendente e differiscono per più di un fattore due in quanto costa svuotarli.