Bitcoin Forum
May 25, 2024, 05:08:01 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2]  All
  Print  
Author Topic: Dubbio su WP Nakamoto  (Read 442 times)
arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 04, 2018, 03:25:41 PM
 #21

Chiaro anche che tipo di chiave pubblica estesa o compressa non dipende dal tipo di script.

In particolare i 32 byte della chiave pubblica compressa corrispondono ai primi 32 byte della chiave pubblica o c'è qualche altro sistema di derivazione?

Una chiave pubblica è un punto di una curva ellittica, la sua forma è (X,Y), dove X e Y sono valori di 256 bit che soddisfano l'equazione Y^2 = x^3 + 7 modulo un certo numero primo p.

Per questo motivo, se conosco anche solo la X, posso derivare facilmente la Y dall'equazione. Più precisamente, per ogni valore di X ci sono 2 valori di Y possibili:




Link utili:

https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc
https://bitcointalk.org/index.php?topic=1339031.0

Una cosa che non capisco se prendo la chiave pubblica dell'esempio precedente cioè: 04bc3ee049bebf27e6e29403aeb61a1c48acee5d4c3b687252a99add1b7dbe38272e42882747493 f2d2e6c92e22dc46567491f3cd5a25259e269ac66649ef6d871

e mi derivo l'indirizzo usando questo tool
http://gobittest.appspot.com/Address

ottengo come indirizzo 18L8V7DaFBjAbzF5rzmZqCym31KAbjDQXC che è uguale a quello riportato nella transazione https://blockchain.info/it/tx/7f1f0cbd84a06c073c3164b463eda189fe3f98a9744e553380c23e41d6125c60

Se faccio però i passaggi da riga di comando già al primo hash sha256 ottengo un valore diverso cosa sbaglio?


Al 99% hai considerato la chiave

Quote
04bc3ee049bebf27e6e29403aeb61a1c48acee5d4c3b687252a99add1b7dbe38272e42882747493 f2d2e6c92e22dc46567491f3cd5a25259e269ac66649ef6d871

come una stringa di caratteri anzichè come una sequenza di byte rappresentati in formato esadecimale,

prova https://www.fileformat.info/tool/hash.htm usando "Binary Hash" anzichè "String Hash" e otterrai i valori corretti come in http://gobittest.appspot.com/Address


pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 04, 2018, 03:42:36 PM
 #22

Chiaro anche che tipo di chiave pubblica estesa o compressa non dipende dal tipo di script.

In particolare i 32 byte della chiave pubblica compressa corrispondono ai primi 32 byte della chiave pubblica o c'è qualche altro sistema di derivazione?

Una chiave pubblica è un punto di una curva ellittica, la sua forma è (X,Y), dove X e Y sono valori di 256 bit che soddisfano l'equazione Y^2 = x^3 + 7 modulo un certo numero primo p.

Per questo motivo, se conosco anche solo la X, posso derivare facilmente la Y dall'equazione. Più precisamente, per ogni valore di X ci sono 2 valori di Y possibili:




Link utili:

https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch04.asciidoc
https://bitcointalk.org/index.php?topic=1339031.0


Perfetto


Quote
Una cosa che non capisco se prendo la chiave pubblica dell'esempio precedente cioè: 04bc3ee049bebf27e6e29403aeb61a1c48acee5d4c3b687252a99add1b7dbe38272e42882747493 f2d2e6c92e22dc46567491f3cd5a25259e269ac66649ef6d871

e mi derivo l'indirizzo usando questo tool
http://gobittest.appspot.com/Address

ottengo come indirizzo 18L8V7DaFBjAbzF5rzmZqCym31KAbjDQXC che è uguale a quello riportato nella transazione https://blockchain.info/it/tx/7f1f0cbd84a06c073c3164b463eda189fe3f98a9744e553380c23e41d6125c60

Se faccio però i passaggi da riga di comando già al primo hash sha256 ottengo un valore diverso cosa sbaglio?
Al 99% hai considerato la chiave

Quote
04bc3ee049bebf27e6e29403aeb61a1c48acee5d4c3b687252a99add1b7dbe38272e42882747493 f2d2e6c92e22dc46567491f3cd5a25259e269ac66649ef6d871

come una stringa di caratteri anzichè come una sequenza di byte rappresentati in formato esadecimale,

prova https://www.fileformat.info/tool/hash.htm usando "Binary Hash" anzichè "String Hash" e otterrai i valori corretti come in http://gobittest.appspot.com/Address




Non va lo stesso
arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 04, 2018, 03:47:34 PM
 #23

Non va lo stesso

Io ho appena provato e funziona. Stai usando il sito che ti ho linkato?
pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 05, 2018, 06:14:54 AM
 #24

Si ora va, ho ripreso la chiave pubblica dalla transazione, se la prendo dal post non funziona, forse c'è qualche carattere sporco o errato non ho indagato molto.
Grazie mille

pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 05, 2018, 03:52:42 PM
 #25

Ciao per essere sicuri che ho capito bene, se leggo

P2PKH
Code:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>

Oppure

P2PK
Code:
scriptPubKey: <pubKey> OP_CHECKSIG
scriptSig: <sig>

In entrambi i casi la parte relativa a scriptPubKey si riferisce ovviamente alla trx precedente?

Questo a livello di funzionamento di verifica della trx rispetto al ricevente cioè la rete

Mentre a livello di creazione della trx la parte con scriptPubKey viene creata con i dati del ricevente

Corretto?


arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 05, 2018, 04:51:40 PM
Last edit: June 06, 2018, 08:45:34 AM by arulbero
 #26

Ciao per essere sicuri che ho capito bene, se leggo

P2PKH
Code:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
scriptSig: <sig> <pubKey>

Oppure

P2PK
Code:
scriptPubKey: <pubKey> OP_CHECKSIG
scriptSig: <sig>

In entrambi i casi la parte relativa a scriptPubKey si riferisce ovviamente alla trx precedente?

Questo a livello di funzionamento di verifica della trx rispetto al ricevente cioè la rete

Mentre a livello di creazione della trx la parte con scriptPubKey viene creata con i dati del ricevente

Corretto?

Sì. I due script (quello di output della tx precedente e quello di input della tx attuale) sono due facce della stessa medaglia, il primo è il "locking" script, il secondo l'"unlocking" script. Ma appartengono sempre a 2 transazioni distinte.

Invece quando crei una transazione, il locking script della transazione potrebbe essere anche di una tipologia diversa rispetto all'unlocking script della stessa transazione.

Per esempio se vuoi spendere l'output non speso di una tx P2PK verso un'indirizzo standard, creando quindi una tx P2PKH, questa transazione avrà come
 
script di input (unlocking script):
Code:
scriptSig: <sig>

(poichè per svincolare i bitcoin vincolati dalla tx precedente con la condizione <pubKey> OP_CHECKSIG è sufficiente fornire solo la firma)

e come script di output (locking script):
Code:
scriptPubKey: OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

La tipologia di una transazione (P2PK, P2PKH, multisig, P2SH) si ricava dalla condizione che viene posta nello script di output che vincola i bitcoin.
pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 06, 2018, 08:17:52 AM
 #27

Ciao, in base a quanto scritto nell'ultimo esempio mi troverei questa situazione per la creazione della transazione la sintassi da considerare è

Code:
scriptSig: <sig>
scriptPubKey:P_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

dove il primo, scriptSig è da considerarsi il locking script.

Mentre per la verifica

Code:
scriptPubKey: <pubKey> OP_CHECKSIG
scriptSig: <sig>

dove lo scriptPubKey è lo unlocking script.

Mentre una transazione di questo genere https://blockchain.info/tx/40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8

E' una transazione P2PKH infatti ritrovo nello scriptSing la firma e la chiave pubblica compressa e in output l hash 160 del destinatario....

Se continuo https://blockchain.info/tx/7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45

mi sarei aspettato visto il tipo di output della sezione precedente una script sign composto da firma e chiave compressa e invece trovo

Code:
ScriptSig: 0[] PUSHDATA(72)[3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001] PUSHDATA(69)[5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae] 
Come lo devo interpretare?
arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 06, 2018, 08:34:28 AM
 #28

Gli scritpSig sono gli unlocking script, gli script di output sono invece i locking script. Tu hai scritto il contrario.

Ogni transazione sblocca momentaneamente dei btc (mediante firma e chiave pubblica per esempio) per rivincolarli immediatamente dopo con un altro "lucchetto" (tipo un address di destinazione)

La transazione 40eee... che stai guardando non è P2PKH ma P2PSH, si capisce dallo script di output (gli opt code sono diversi da quelli di un output verso un address) e infatti l'indirizzo di destinazione inizia con un 3 anzichè con il classico 1. L'hash di uno script è di 20 byte esattamente come l'hash di una chiave pubblica, ma ovviamente non sono la stessa cosa.
pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 06, 2018, 09:03:28 AM
 #29

Gli scritpSig sono gli unlocking script, gli script di output sono invece i locking script. Tu hai scritto il contrario. +


si è vero ma il concetto è chiaro  Smiley

Quote
La transazione 40eee... che stai guardando non è P2PKH ma P2PSH, si capisce dallo script di output (gli opt code sono diversi da quelli di un output verso un address)

Lo avrei dovuto capire da questo. EQUAL

Quote
infatti l'indirizzo di destinazione inizia con un 3 anzichè con il classico 1.

1 o 3 ti riferisci al primo carattere dell indirizzo codificato in base 58

Quote
L'hash di uno script è di 20 byte esattamente come l'hash di una chiave pubblica, ma ovviamente non sono la stessa cosa.

ok , e la  verifica unlocking coem deve essere considerata?

Code:
ScriptSig: 0[] PUSHDATA(72)[3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001] 
PUSHDATA(69[5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae]
arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 06, 2018, 09:43:21 AM
Last edit: June 06, 2018, 12:16:11 PM by arulbero
Merited by Piggy (2)
 #30

Innanzitutto ti consiglio caldamente di leggerti questi:

https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch06.asciidoc
https://github.com/bitcoinbook/bitcoinbook/blob/develop/ch07.asciidoc
http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html

Partiamo dalla tua transazione in formato hex:

https://blockchain.info/tx/7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45?format=hex

Quote
0100000001c8cc2b56525e734ff63a13bc6ad06a9e5664df8c67632253a8e36017aee3ee4000000 0009000483045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33b f88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b7900145514 1042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea 6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51aefeffffff0120f40e0000000 0001976a9141d30342095961d951d306845ef98ac08474b36a088aca7270400

https://blockchain.info/it/decode-tx  :

Code:
{
   "lock_time":272295,
   "size":229,
   "inputs":[
      {
         "prev_out":{
            "index":0,
            "hash":"40eee3ae1760e3a8532263678cdf64569e6ad06abc133af64f735e52562bccc8"
         },
         "script":"00483045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001455141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae"
      }
   ],
   "version":1,
   "vin_sz":1,
   "hash":"7edb32d4ffd7a385b763c7a8e56b6358bcd729e747290624e18acdbe6209fc45",
   "vout_sz":1,
   "out":[
      {
         "script_string":"OP_DUP OP_HASH160 1d30342095961d951d306845ef98ac08474b36a0 OP_EQUALVERIFY OP_CHECKSIG",
         "address":"13fLLox43yXYvfoZadXpGbkTUXkW8bhqut",
         "value":980000,
         "script":"76a9141d30342095961d951d306845ef98ac08474b36a088ac"
      }
   ]
}

Guardiamo solo allo script di input:
Code:
"script":"00483045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001455141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae"

lo decodifichiamo con http://chainquery.com/bitcoin-api/decodescript :

Code:
{
"result": {
"asm": "0 3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001 5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae",
"type": "nonstandard",
"p2sh": "3PDibfe9au3sruD1ZmwbMh7fMsYG9aL9nr"
},
"error": null,
"id": null
}

Osserviamo che ci sono due blocchi di istruzioni: la prima parte
Code:
3045022100ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf88302200b248593abc1259512793e7dea61036c601775ebb23640a0120b0dba2c34b79001 

è una firma (sequence 30, length 45, integer 02, length 21, X = ad0851c69dd756b45190b5a8e97cb4ac3c2b0fa2f2aae23aed6ca97ab33bf883, … vedi tabella "pushdata47" di qualche risposta fa)

Selezioniamo la seconda parte, che è uno script :
Code:
5141042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf51ae

e quindi la decodifichiamo a sua volta http://chainquery.com/bitcoin-api/decodescript :

Code:
{
"result": {
"asm": "1 042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf 1 OP_CHECKMULTISIG",
"reqSigs": 1,
"type": "multisig",
"addresses": [
"1Fz5s6qVFwP3MDGeNav4ESQXFMpm8ELzUw"
],
"p2sh": "3P14159f73E4gFr7JterCCQh9QjiTjiZrG"
},
"error": null,
"id": null
}

da qui si vede che è uno script multisig 1 su 1 della forma:

1 <pubKey> 1 OP_CHECKMULTISIG

dove la pubKey è
042f90074d7a5bf30c72cf3a8dfd1381bdbd30407010e878f3a11269d5f74a58788505cdca22ea6 eab7cfb40dc0e07aba200424ab0d79122a653ad0c7ec9896bdf


Riassumendo:

nella transazione precedente abbiamo lo script di output della forma

Code:
HASH160 PUSHDATA(20) e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a EQUAL

che contiene l'hash di uno script a questo stadio ancora sconosciuto alla rete;


nella transazione attuale, nello script di input abbiamo:

la firma
Code:
0 <signature>

+ lo script in chiaro che corrisponde a quello il cui hash è contenuto nell'output della precedente tx:
Code:
 <1  pubKey  1  OP_CHECKMULTISIG>

Dunque si procede così:

Code:
<1  pubKey  1 OP_CHECKMULTISIG> HASH160 <e9c3dd0c07aac76179ebc76a6c78d4d67c6c160a> EQUAL

Se l'hash160 dello script inserito nell'input coincide con l'hash fornito dalla transazione precedente, allora viene eseguito il controllo finale sulla firma:

Code:
0  signature 1  pubKey 1  OP_CHECKMULTISIG

si realizza così la verifica e si autorizza lo sblocco dei fondi collegati all'UTXO.

Piggy
Hero Member
*****
Offline Offline

Activity: 784
Merit: 1416



View Profile WWW
June 06, 2018, 01:45:50 PM
 #31

Parecchio interessante grazie per la spiegazione dettagliata, stavo provando a rispondere nell altro thread, ma non era chiaro neanche a me nel dettaglio il funzionamento e mi sono perso per strada Smiley
arulbero
Legendary
*
Offline Offline

Activity: 1915
Merit: 2074


View Profile
June 06, 2018, 01:58:09 PM
 #32

Parecchio interessante grazie per la spiegazione dettagliata, stavo provando a rispondere nell altro thread, ma non era chiaro neanche a me nel dettaglio il funzionamento e mi sono perso per strada Smiley

Prego, ma è spiegato molto meglio su Mastering Bitcoin. Lì ci sono molti più dettagli.
pf55351 (OP)
Jr. Member
*
Offline Offline

Activity: 51
Merit: 1


View Profile
June 07, 2018, 07:37:10 AM
 #33

Grazie mille ancora,
adesso mi studio tutto per bene che quando sembra di aver capito ti si apre un modno nuovo.
Nel caso ci risentiamo da queste parti  Smiley
Pages: « 1 [2]  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!