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 #
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)
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 nell’esecuzione (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 Diffie–Hellman key exchange
Alice
g
Pk(Bob)
Shared
Secret Alice &
Bob
Bob g
Sk(Bob)
Sk(Alice)
Pk(Alice)