Lo script di blocco P2PK è il modello di script iniziale utilizzato da Bitcoin per inviare e ricevere criptovalute nei suoi primi giorni. Un modello di script semplice ed elegante che ci ha permesso di esplorare la potenza di Bitcoin e che avrebbe aperto le porte a questa interessante tecnologia.
El blocco script P2PK o pagamento a chiave pubblica, È il script di blocco più antico e primitivo di Bitcoin, sviluppato direttamente da Satoshi Nakamoto nella sua prima versione di Bitcoin. Ci consente di effettuare pagamenti in bitcoin utilizzando la versione estesa di una chiave pubblica invece di un hash di essa come attualmente avviene con lo script standard P2PKH (paga all'hash della chiave pubblica).
Grazie a ciò, P2PK è una versione molto più semplice di P2PKH ed è stato utilizzato da Nakamoto nelle sue operazioni di mining iniziali durante la creazione del transazione coinbase dei suoi blocchi. Ma hai anche usato questo script nelle tue prime transazioni come quella che hai fatto Hal Finney.
Come funziona un P2PK?
Il funzionamento di un P2PK segue lo stesso schema di base delle transazioni Bitcoin, infatti il P2PK è l'origine di questo schema, solo in modo ancora più semplice. Quando vogliamo effettuare una transazione in Bitcoin dobbiamo avere solo la chiave privata in nostro possesso. Come abbiamo già spiegato in Come viene generato un indirizzo Bitcoin?, dalla chiave privata esce matematicamente la chiave pubblica e dalla chiave pubblica viene codificata per ottenere l'indirizzo Bitcoin.
In P2PK, quell'indirizzo Bitcoin (che di solito inizia con "1", "3" o "bc1") non è l'ultima parte, cioè non è criptato. In questo modo l'indirizzo rimane come chiave pubblica completa, che avrebbe una forma simile a questa:
0496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947
be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858ee
La precedente chiave pubblica Bitcoin corrisponde a uno degli indirizzi di Satoshi Nakamoto, in particolare, l'indirizzo a cui è stata inviata la seconda coinbase Bitcoin.
Quindi, ad esempio, per inviare una transazione a quell'indirizzo utilizzando un P2PK non utilizziamo un indirizzo Bitcoin come quello che conosciamo oggi. Basterebbe invece prendere l'intera chiave pubblica, metterla nel wallet e inviarla. Il risultato alla fine è lo stesso, quando la transazione sarà confermata il proprietario di quella chiave pubblica avrà in suo possesso i bitcoin che gli inviamo e potrà utilizzarli senza problemi.
Spiegazione del processo operativo di un P2PK
La differenza nel processo di invio tra P2PK e P2PKH è il modo in cui funzionano gli script di blocco e spieghiamo questo dettaglio di seguito:
Innanzitutto, in un P2PK non è necessario codificare la chiave pubblica. Invece, dobbiamo solo copiare detta chiave completa, inserirla nello script Bitcoin e possiamo inviare la transazione. Lo script P2PK da inviare (o bloccare bitcoin) ha la seguente forma:
Script di blocco (scritpPubKey): <Chiave pubblica da inviare> OP_CHECKSIG
Ciò significa che per sbloccare detti bitcoin e poterli utilizzare dovremmo fornire una firma digitale valida per la chiave pubblica che abbiamo fornito, come possiamo vedere nello scriptSig che avrebbe la seguente forma:
Sblocca script (scriptSig): <SIGNATURE> (Firma digitale valida)
Tuttavia, su un P2PKH questo cambia leggermente e lo script di blocco è scritto come segue:
Script di blocco (scritpPubKey): OP_DUP OP_HASH160 <Hash chiave pubblica> OP_EQUALVERIFY OP_CHECKSIG
E il suo sblocco avviene tramite:
Sblocca script (scriptSig): <SIGNATURE> <Public Key>
Ciò significa che dobbiamo fornire una chiave pubblica, duplicarla, hash, verificare che l'hash della chiave pubblica consegnato e verificare le firme digitali in modo da poter utilizzare i bitcoin a quell'indirizzo.
Come puoi vedere, P2PK è un'opzione molto più semplice e computazionalmente meno costosa. Tuttavia, P2PK è uno script di blocco usato raramente nel mondo Bitcoin oggi e spiegheremo il motivo di seguito.
Quanto sai, Cryptonuta?
Il motivo per cui P2PK è stato interrotto a favore di P2PKH per la sicurezza all'interno di Bitcoin?Certo!
Il motivo principale dell'abbandono del formato P2PK in Bitcoin è stato il fatto di aggiungere un nuovo livello di sicurezza agli script che erano responsabili di rendere le transazioni all'interno di Bitcoin una realtà, in particolare P2PKH poiché offre una maggiore resistenza agli attacchi futuri che i computer quantistici potrebbero fare.
Pro e contro del P2PK
Tra i pro del P2PK possiamo evidenziare che:
- È uno script molto più semplice e computazionalmente meno costoso di P2PKH.
- È ampiamente compatibile, tutte le versioni di Bitcoin Core supportano questo script, poiché è alla base del suo funzionamento sin dal suo inizio.
A suo sfavore possiamo però citare alcuni rischi, alcuni individuati dallo stesso Satoshi Nakamoto in un'analisi effettuata, che praticamente non ha più utilizzato il P2PK:
- Il rischio che la crittografia a curva ellittica possa essere completamente compromessa grazie alla corretta esecuzione di un algoritmo di Shor modificato per risolvere il problema del logaritmo discreto nelle curve ellittiche. Questa è una situazione in cui la visualizzazione di chiavi pubbliche come P2PK renderebbe vulnerabili quegli indirizzi. Per evitare ciò, Nakamoto ha deciso di utilizzare un hash della chiave pubblica tramite un processo che aggiunge un ulteriore livello di sicurezza a questo processo, risolvendo questo problema. Infatti, nella versione iniziale di Bitcoin, entrambi i metodi P2PK e P2PKH erano perfettamente utilizzabili.
- L'estensione più breve di P2PKH è stato un altro fattore a favore dell'abbandono del P2PK, non solo per l'estensione, ma anche per risparmiare byte nelle transazioni e migliorare la scalabilità di Bitcoin.
- Sono meno "umani". Cioè, le chiavi pubbliche hanno una lunghezza di 130 caratteri invece dei soliti indirizzi Bitcoin e dei suoi 34 caratteri. Ciò significa che i P2PK richiedono maggiore attenzione quando si verifica che gli indirizzi siano corretti, perché altrimenti i fondi potrebbero andare irreversibilmente persi. È facile vedere che un indirizzo inizia con 1 e sapere che è un indirizzo Bitcoin, oppure controllare gli ultimi caratteri per vedere se l'indirizzo non è cambiato grazie a checksum.