SlideShare ist ein Scribd-Unternehmen logo
1 von 82
Downloaden Sie, um offline zu lesen
BITCOIN
IN CODICE
GiancarloValente
@gncvalente
@gncvalente - www.giancarlovalente.it
@gncvalente - www.giancarlovalente.it
WARNING CODE !!!
il codice e’ qui:
https://github.com/gncvalente/bitcoin_playground
DECENTRALIZZATA
• no single point of failure
• trasparenza
• verificabile
• non necessita di fiducia
• globale
PEERTO PEERTECHNOLOGY
reti decentralizzate paritetiche
VALORE
• limitato
• veloce
• sicuro
21 Milioni
quanti ne
restano ?
CRYPTOCURRENCY
crittografia
PRIVATE KEY E
BITCOIN ADDRESS
• il lucchetto e’ la public key
• la chiave e’ la private key
• www.bitcoinaddress.org
• bitcoinpaperwallet.com
INDIRIZZO BITCOIN
private key public key
non e’ possibile da un’indirizzo bitcoin ritrovare la private key
meglio: e’ altamente improbabile
bitcoin address
In bitcoin la chiave pubblica e’ usata per ricevere
la chiave privata per firmare le transazioni e spendere
non deterministic bitcoin address
00_newaddress.js
BITCOIN ADDRESS
E’ GENERATO DA
UNA PUBLIC KEY
random 256 bit number -> private key (HEX format)
WIF (Wallet import format) private key (base 58 check encode)
512 bit public key with a prefix (Elliptic Curve DSA)
160bit public key hash (SHA-256 | RIPEM 160)
base 58 check encode (BITCOIN ADDRESS)
https://asecuritysite.com/encryption/Bitcoin
CRITTOGRAFIA ASIMMETRICA
messaggio:
il tesoro si trova
nel punto x
chiave pubblica
messaggio cifrato:
svxhsvhgxvhgjvdjg
vsdcvgsjhcvhjdsv
chiave privata
messaggio:
il tesoro si trova
nel punto x
messaggio cifrato:
svxhsvhgxvhgjvdjg
vsdcvgsjhcvhjdsv
https://en.wikipedia.org/wiki/Electronic_signature
Bitcoin utilizza la Digital Signature
COSA MI IMPEDISCE DITROVARE LA
CHIAVE PRIVATA DI UN’ALTRO UTENTE
O DI GENERARE UNA CHIAVE ESISTENTE?
10^24 atomi
addresses
10^48 10^50 atomi
fermi lab
PRIVATE KEY
• random number between 0 and 2^256
• or between 0 and 10^77
• visibile universe contains 10^80 atoms
https://www.youtube.com/watch?v=S9JGmA5_unY
https://www.youtube.com/watch?v=S9JGmA5_unY
BRAIN WALLET
Deterministic Bitcoin address
01_newaddress.js
sorgente qui
Regaliamoci un po’ di BTC
Testnet faucets
Bitcoin faucet
02_open_testnet_faucet.sh
LIBRO MASTRO
• contiene i movimenti di
frazioni di bitcoin (satoshi)
da wallet a wallet
• bitcoin unspent outputs
• il reward del mining e’
l’unica transazione che
parte dal nulla
https://freedomnode.com/guides/17/how-bitcoin-works
i bitcoin consistono in voci in un database distribuito
che tiene traccia della proprietà dei bitcoin. A
differenza di una banca, i bitcoin non sono legati a
utenti o account. Invece i bitcoin sono di proprietà di
un indirizzo Bitcoin,
Unspent Outputs (UTXO)
04_transaction.js
ORA SIAMO PRONTI PER FARE
UNA NOSTRATRANSAZIONE
“nota bene …
… non abbiamo chiesto il permesso a nessuno …
… e’ un software ! :) “
Bitcoin transaction
05_transaction.js
COORDINAMENTO
come faccio a coordinare tutti i nodi
come faccio ad avere fiducia nel network
BLOCK CHAIN
un database mondiale … immutabile !!!!
wikipedia qui
LATRANSAZIONE NON
CONTIENE
UNA SEMPLICE NOTA
DITRASFERIMENTO DI
VALORE,
MA CONTIENE DEL CODICE !!!
Bitcoin script
06_transaction.js
Pay-to-Public-Key-Hash (P2PKH) script
https://bitcore.io/api/lib/script
MONETA PROGRAMMABILE
• alla transazione e’ associato
un linguaggio di
programmazione (non
touting complete)
• decision based spending
(link)
• esempio crowdfounding
IN
Transaction
OUT
OUT locking script
(scriptPubKey)
unlocking script
(scriptSig)
locking script
(scriptPubKey)
IN
Transacti
OUT
OUT locking
unlock locking
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
IN
Transacti
OUT
OUT locking
unlock locking
72
0x3045022100ed2b9bfa58dcc57e9e2248de9d868dba01abd0535f6080416835bd
2996fd7e6e022004ce8927f9ca94fce2ab4b1216e9e98b13560ea7b46709b52a7e
70ae047713f801
33
0x02ae5929a65e8173c3af2f5bb52f33a2822de3c0f85ce78c5e848adb7076399e
79
OP_DUP
OP_HASH160
20 0x8653d84ce54d693fafbd860251bd475f904e4c80
OP_EQUALVERIFY
OP_CHECKSIG
72 bytes <private key>
0x3045022100ed2b9bfa58dcc57e9e2248de9d868dba01abd0535f6080416835bd
2996fd7e6e022004ce8927f9ca94fce2ab4b1216e9e98b13560ea7b46709b52a7e
70ae047713f801
33 bytes <public key>
0x02ae5929a65e8173c3af2f5bb52f33a2822de3c0f85ce78c5e848adb7076399e
79
OP_DUP
OP_HASH160
20 bytes <pubKey hash (bitcoin address dest address)>
0x8653d84ce54d693fafbd860251bd475f904e4c80
OP_EQUALVERIFY
OP_CHECKSIG
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
EXECUTE !
STACK
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
72 bytes <signature>
33 bytes <public key>
OP_DUP
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
72 bytes <signature>
33 bytes <public key>
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
33 bytes <public key>
72 bytes <signature>
33 bytes <public key>
OP_HASH160
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
33 bytes <public key>
72 bytes <signature>
33 bytes <public key>
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
<public key hash>
72 bytes <signature>
33 bytes <public key>
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
<public key hash>
72 bytes <signature>
33 bytes <public key>
20 bytes <pubKey hash>
OP_EQUALVERIFY
OP_CHECKSIG
STACK
<public key hash>
72 bytes <signature>
33 bytes <public key>
20 bytes <pubKey hash>
OP_EQUAL
OP_CHECKSIG
STACK
<public key hash>
OP_VERIFY
72 bytes <signature>
33 bytes <public key>
OP_CHECKSIG
STACK
1
OP_VERIFY
72 bytes <signature>
33 bytes <public key>
OP_CHECKSIG
STACK
https://en.wikipedia.org/wiki/Electronic_signature
1
STACK
PROOF OF BURN
La tua firma sulla Blockchain
07_transaction_data.js
La tua firma sulla blockchain
(proof-of-burn)
Inviamo la firma sulla Blockchain
08_transaction_data.js
ERRORI DI CODING COSTOSI
OP_IFDUP
OP_IF
OP_2SWAP
OP_VERIFY
OP_2OVER
OP_DEPTH
That script turns out to be the ASCII text: script
http://www.righto.com/2014/03/the-programming-error-that-cost-mt-gox.html
COSA SUCCEDE QUANDO
INVIAMO UNATRANSAZIONE
AL NETWORK?
COORDINAMENTO
come faccio a coordinare tutti i nodi
come faccio ad avere fiducia nel network
peer
2
peer
1
DOUBLE SPENDING
come posso evitare il problema del riutilizzo di una stessa
“moneta” in un sistema distribuito ?
COORDINAMENTO• book keepers (peers)
• block-chain
• ogni 10 minuti n transazioni
entrano in un blocco
• transaction order
• consenso - siamo tutti
d’accordo?
B B B
parte competizione per risolvere il blocco nei prossimi 10 minuti
e’ una competizione basata sulla risoluzione di un problema
crittografico
yes !!! va bene bravo … :( va bene bravo … :(
transazione
transazione
transazione
transazione
Blocco #234
IL BOOKKEEPER CHE HA RISOLTO PER PRIMO
IL PROBLEMAVINCE DUE PREMI
le commissioni associate alle transazioni nel blocco
e dei nuovi bitcoin generati dal nulla (mining)
MINATORI
• mining difficulty
• bitcoin consenso (1 voto per 1 CPU)
• generazione controllata di nuova moneta
• transaction order
• commissioni piu’ alte consentono transazioni piu’ veloci
–Ciccio Cappuccio
“non ho capito … come funziona questa
block chain ! problema crittografico ?!
:(”
clicca qui …
SEMPLICE FUNZIONE DI HASH
• somma le lettere, dividi per 5 ritorna il resto
• casa => 3 + 1 + 19 + 1 = 24 mod 5 => 4
• case => 3 + 1 + 19 + 5 = 28 mod 5 => 3
in modo consistente ad input ottengo sempre lo stesso output
dall’output non posso ricostruire l’input
obiettivo di una funzione di hash e’ non essere reversibile!
–Mario Rossi
“non ho capito … come funziona questa
block chain ! problema crittografico ?!
:(”
clicca qui …
BITCOIN CRYPTOGRAPHIC HASH
SHA256 (Secure Hash Algorithm)
come funziona ? clicca qui …
–Johnny Appleseed
“non ho capito … come funziona questa
block chain ! problema crittografico ?!
:(”
clicca qui …
REFERENCES
• http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html
• https://www.amazon.it/Mastering-Bitcoin-Programming-Open-Blockchain/dp/
1491954388
• https://www.coursera.org/learn/cryptocurrency
• https://blockgeeks.com/guides/best-bitcoin-script-guide/
• https://en.bitcoin.it/wiki/Script
• https://bitcore.io/
• https://github.com/bitpay/bitcore-lib/blob/master/docs/examples.md
• http://lenschulwitz.com/base58
Blockchain e dintorni :D … Meetup Bari
Blockchain e dintorni :D … Meetup Bari
Giovedi’ 7 Giugno ore 18:00 primo meetup
presso auLAB - Hack-space X
GRAZIE
Agile Coach,
Giancarlo Valente
twitter: @gncvalente
www.giancarlovalente.it

Weitere ähnliche Inhalte

Ähnlich wie Bitcoin in codice

Ähnlich wie Bitcoin in codice (20)

BitGold. L'estinzione dei dinosauri.
BitGold. L'estinzione dei dinosauri.BitGold. L'estinzione dei dinosauri.
BitGold. L'estinzione dei dinosauri.
 
Bitcoin and blockchain
Bitcoin and blockchainBitcoin and blockchain
Bitcoin and blockchain
 
Blockchain4 devs slides
Blockchain4 devs slidesBlockchain4 devs slides
Blockchain4 devs slides
 
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
Blockchain e Cryptovalute, cosa c'è da sapere sulla tecnologia protagonista
 
Slide Federico Tenga - Conferenza Blockchain Roma 17-06-16
Slide Federico Tenga - Conferenza Blockchain Roma 17-06-16Slide Federico Tenga - Conferenza Blockchain Roma 17-06-16
Slide Federico Tenga - Conferenza Blockchain Roma 17-06-16
 
Bitcoin Revolution
Bitcoin RevolutionBitcoin Revolution
Bitcoin Revolution
 
Blockchain
BlockchainBlockchain
Blockchain
 
Marco Casario - Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzar...
Marco Casario - Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzar...Marco Casario - Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzar...
Marco Casario - Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzar...
 
Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzare le proprie Ski...
Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzare le proprie Ski...Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzare le proprie Ski...
Blockchain, Bitcoin, Ethereum e Javascript Mining: Monetizzare le proprie Ski...
 
bitcoin il denaro del futuro
bitcoin il denaro del futurobitcoin il denaro del futuro
bitcoin il denaro del futuro
 
Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?Blockchain: fuffa, innovazione o metà e metà?
Blockchain: fuffa, innovazione o metà e metà?
 
Bitcoin
BitcoinBitcoin
Bitcoin
 
Come interagire con la blockchain di Bitcoin
Come interagire con la blockchain di BitcoinCome interagire con la blockchain di Bitcoin
Come interagire con la blockchain di Bitcoin
 
Smau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICToSmau Firenze 2016 - dirICTo
Smau Firenze 2016 - dirICTo
 
Linux day 2017
Linux day 2017Linux day 2017
Linux day 2017
 
Blockchain essenziale
Blockchain essenzialeBlockchain essenziale
Blockchain essenziale
 
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
Esplorando il concetto di Blockchain Exploring Blockchain Technology (Italian)
 
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
Cristina Baldi - Chi ha detto Blockchain? - Rinascita Digitale | DAY #4
 
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e ZcashProtocolli per la protezione dell'anonimato nelle valute Monero e Zcash
Protocolli per la protezione dell'anonimato nelle valute Monero e Zcash
 
Bitcoin e blockchain - concetti base
Bitcoin e blockchain - concetti baseBitcoin e blockchain - concetti base
Bitcoin e blockchain - concetti base
 

Mehr von Giancarlo Valente

Mehr von Giancarlo Valente (7)

Bitcoin in codice - Parte 3
Bitcoin in codice - Parte 3Bitcoin in codice - Parte 3
Bitcoin in codice - Parte 3
 
Bitcoin in codice - Parte 2
Bitcoin in codice - Parte 2Bitcoin in codice - Parte 2
Bitcoin in codice - Parte 2
 
Bitcoin history - Blockchaine e Dintorini Meetup Bari
Bitcoin history - Blockchaine e Dintorini Meetup BariBitcoin history - Blockchaine e Dintorini Meetup Bari
Bitcoin history - Blockchaine e Dintorini Meetup Bari
 
Blockchain - Una tecnologia destinata a restare
Blockchain - Una tecnologia destinata a restareBlockchain - Una tecnologia destinata a restare
Blockchain - Una tecnologia destinata a restare
 
Back to basics - il Manifesto Agile
Back to basics - il Manifesto AgileBack to basics - il Manifesto Agile
Back to basics - il Manifesto Agile
 
Functional Programming per tutti
Functional Programming per tuttiFunctional Programming per tutti
Functional Programming per tutti
 
Agile e creazione di una cultura aziendale
Agile e creazione di una cultura aziendaleAgile e creazione di una cultura aziendale
Agile e creazione di una cultura aziendale
 

Bitcoin in codice