Codice sorgente delle demo: https://github.com/janmaru/BitGold
Abstract:
Partiremo dalla definizione di criptomoneta e vedremo alcuni esempi di utilizzo di Bitcoin nel campo
della certificazione dei documenti nella blockchain.
In particolare capiremo le potenzialit di un sistema distribuito e anonimo, "read only" e "append only" nell'ambito finanziario, tecnico e politico.
Durante la presentazione vedremo diversi esempi pratici per comprendere il funzionamento delle criptomenete e delle blockchain.
Come? Usando F#, Programmazione Funzionale, CLR,.NET e Azure Notebooks
Mauro Ghiani
Sr. Dev con 30 anni di esperienza in coding.
Programma nell'ambito del Framework Net Core e Standard su AWS per una delle + grandi community di Fantacalcio in Italia.
Promuove lo sviluppo del paradigma della programmazione funzionale, in particolare F# e Scala.
5. Sol. Distribuita: Problemi?
Chi mantiene il ledger?
Chi decide quali transazioni siano valide?
Chi crea la criptomoneta?
Chi stabilisce le regole e il loro cambiamento?
Come pu嘆 la criptomoneta avere un valore nella
compravendita?
8. [bB]itcoin
Bitcoin Core binaries presso at bitcoin.org
Bitcoin Core source code presso Github
Libreria .Net NBitcoin
Libreria di indicizzazione .Net QBitNinja e le
API
Azure Notebooks #
15. Authenticity - Non-Repudiability (*)
Alice
Tx(1BTC) S
Sk(Alice)
516c43b617a6fa6de
e5f3e9b34d99365b
3b89d1381dc9aebc
ca1e8822c8cb5f4
Bob V
Pk(Alice)
Tx(1BTC)
* Prevent message tampering
16. Identity
Random key pair: (Sk, Pk)
Pk looks random (sembra casuale)
Public key (Pk) == identity
Verify (Pk, msg, sg) == true
Autenticazione: Pk dice msg
17. Privacy
Gli indirizzi bitcoin non sono collegati al mondo
reale (non parliamo di identit reali)
E possibile collegare varie transazioni (attivit) nel
tempo per fare delle inferenze
19. Se pensate che sette anni di
sfortuna siano troppi per
aver rotto uno specchio
Provate a rompere un
preservativo!
20. Encoding (usability)2
Trasforma dati in un particolare
formato*
Scopo 竪 quello della fruibilit
Non 竪 crittografia ed 竪 reversibile
*(ASCII, Unicode, URL Encoding, Base64)
23. Comincia con una
grossa e aspetta
sei mesi!!!
Come faccio a
creare una
piccola azienda?
Piccoli passi
24. (Digital) Signature
Autenticazione -> sign
Verifica pubblica
Non ripudiabilit
Come trasferire la valuta?
3
, janmaru
Sk(M)Pk(M)
,
John Doe
Pk(D) Sk(D)
36. Servizi: Secure Timestamping
Tesi:
Dimostrare che abbiamo conoscenza di
un certo dato X ad un determinato
istante T. Senza rivelare la conoscenza di
X al tempo T (se non necessario).
40. Servizio: Secure Timestamping
Ipotesi:
Struttura dati che mi permetta di aggiungere solo i dati
Read only (immutabile)
Sempre disponibile (availability)
Deve avere un sistema con timestamp
Deve utilizzare un impegno al dato x (funzione di hash: x->
H(x), non possa trovare x: H(x) = H(x)) che pu嘆 essere
rivelato anche dopo
Identit digitale (io sono io) ma anonima
42. Blockchain (Proof of Existence)
The original Blockchain notary service, offering instant,
anonymous, distributed, and secure proof of existence for
any document, agreement, or contract.
I documenti non vengono salvati in un database proprietario
o sulla blockchain. Viene salvato un cryptographic digest del
documento.
44. P2PK[H] (Pay to Public Key [Hash])
Pay to public key :
02fb8021bc7dedcc2f89a67e75cee81fedb8e41d6bfa6
769362132544dfdf072d4 OP_CHECKSIG
Pay to public key hash : OP_DUP OP_HASH160
0ae54d4cec828b722d8727cb70f4a6b0a88207b2
OP_EQUALVERIFY OP_CHECKSIG
45. Bitcoin Script
Script
Design Goals:
Ispirato al Forth.
Semplice, compatto.
Supporto per la crittografia
Stack based
Limite nellesecuzione (tempo) e nella memoria
No loop
Ouchh!!!
46. Come funziona lo script
Stack Based
Eseguito in uno spazio di
memoria
LIFO
Stack = script interpreter
Validazione Tx Bitcoin
ScriptSig
POP PUSH
2
7
11
13
49. Servizio: Secure Timestamping
Ipotesi:
Struttura dati che mi permetta di aggiungere solo i dati
Read only (immutabile)
Sempre disponibile (availability)
Deve avere un sistema con timestamp
Deve utilizzare un impegno al dato x (funzione di hash: x->
H(x), non possa trovare x: H(x) = H(x)) che pu嘆 essere
rivelato anche dopo
Identit digitale (io sono io) ma anonima
51. Gli utenti creano degli accounts chiamati Wallet.
I Wallet sono messi in sicurezza usando password e
contengono le chiavi private usate per trasferire i
bitcoin.
Propriet bitcoins
52. Servizio: Secure Timestamping
Ipotesi:
Struttura dati che mi permetta di aggiungere solo i dati
Read only (immutabile)
Sempre disponibile (availability)
Deve avere un sistema con timestamp
Deve utilizzare un impegno al dato x (funzione di hash: x->
H(x), non possa trovare x: H(x) = H(x)) che pu嘆 essere
rivelato anche dopo
Identit digitale (io sono io) ma anonima
53. Hash function
1. Input qualsiasi tipo di stringa
2. Output fisso (256 bits)
3. Efficiently computable
54. Good Hash Function
Deterministica
Collision free
Non reversibili (hiding)
Piccole variazioni in input >>> output
Puzzle -friendly
55. Hash function
Una funzione di hash 竪 una funzione
che mette in relazione un insieme di
dati di dimensione arbitrariamente
grande con uno di dati a dimensione
determinata (fissa).
57. Collision free
Indipendentemente dalla funzione di
Hash:
Provare 2^130 random inputs
(1,3611294676837538538534984297271e+39)
99.8% trovare una collisione
61. Smart Contracts
1997
Idea di memorizzare i contratti in un registro
distribuito. Contratti digitali, intesi come piccoli
programmi (software) salvati nella blockchain.
66. Messaging
Messaging con endpoint un arbitrary Bitcoin address
ChatBot automatizzano i processi di pagamenti su canali sicuri
Anonymous messenger
Identification -> Bitcoin Address : ID per la comunicazione tra i
peers.
a. http://digitalnote.org/
b. https://shadowproject.io/en/features#shadow
c. chat https://bitmessage.org/wiki/Main_Page
67. (ECDH algorithm ) vs DiffieHellman key exchange
Alice
g
Pk(Bob)
Shared
Secret Alice &
Bob
Bob g
Sk(Bob)
Sk(Alice)
Pk(Alice)