BLOCKCHAIN E CRYPTOCURRENCIES
Anno accademico 2024/2025 - Docente: MARIO DI RAIMONDORisultati di apprendimento attesi
Negli ultimi dieci anni Bitcoin ed Ethereum sono diventati sistemi da decine (se non centinaia) di miliardi di dollari. Inoltre il potenziale dei cosiddetti decentralized ledgers (blockchain) ha attratto l’interesse di ricercatori e sviluppatori in ambiti che spaziano dalla finanza al voto elettronico, passando per corporate governance e online-gaming. Obiettivo del corso è studiare i concetti fondamentali alla base di tali sistemi: append-only ledgers, consenso decentralizzato, smart contracts e zero-knowledge proof systems. Gli studenti acquisiranno familiarità con il sistema Bitcoin attraverso un approccio concreto che prevede, tra le altre cose, l’approfondimento della programmazione legata a Bitcoin e, soprattutto, ad Ethereum. Infine, una parte del corso ospiterà interventi di esperti che lavorano in aziende legate direttamente o indirettamente al mondo delle criptovalute.
Obiettivi formativi generali dell'insegnamento in termini di risultati di apprendimento attesi.
- Conoscenza e capacità di comprensione (knowledge and understanding): l'obiettivo del corso è quello di far acquisire conoscenze che consentano allo studente di comprendere le idee ed i principi che stanno alla base di Bitcoin e di altre criptovalute; in particolare lo studente acquisirà familiarità anche con i principali strumenti crittografici sottostanti le moderne crittovalute.
- Capacità di applicare conoscenza e comprensione (applying knowledge and understanding): lo studente acquisirà le competenze necessarie per utilizzare attivamente sistemi basati su blockchain come Bitcoin ed Ethereum.
- Autonomia di giudizio (making judgements): Attraverso lo studio di attacchi e di esempi concreti hands-on lo studente acquisirà la capacità di comprendere l’effettiva robustezza delle soluzioni proposte e di utilizzare autonomamente soluzioni in grado di garantire elevati livelli di sicurezza ed affidabilità.
- Abilità comunicative (communication skills): lo studente acquisirà le necessarie abilità comunicative e di appropriatezza espressiva nell'impiego del linguaggio tecnico nell'ambito generale delle moderne crittovalute.
- Capacità di apprendimento (learning skills): il corso si propone, come obiettivo, di fornire allo studente le necessarie metodologie teoriche e pratiche per poter affrontare e risolvere autonomamente nuove problematiche che dovessero richiedere l'utilizzo di strumenti quali blockchain, proof of work e smart contracts.
Modalità di svolgimento dell'insegnamento
Le lezioni sono tenute in aula con l'ausilio di slide. Le slide non sostituiscono i testi di riferimento, ma, oltre che agevolare la comprensione della lezione, forniscono un dettaglio puntuale sul programma svolto.
Qualora l'insegnamento venisse impartito in modalità mista o a distanza potranno essere introdotte le necessarie variazioni rispetto a quanto dichiarato in precedenza, al fine di rispettare il programma previsto e riportato nel syllabus.
Prerequisiti richiesti
Frequenza lezioni
Contenuti del corso
1. Introduzione e breve panoramica dei contenuti del corso.
2. Introduzione alla crittografia e alle cryptocurrencies.
Firme digitali. Breve introduzione alle firme digitali. Caso Concreto Firme DSA. Commitment schemes e loro proprietà. Hash functions crittografiche e loro proprietà. Blockchain e Merkle Trees. Cryptocurrencies elementari e perché non funzionano.
Materiale: [1] Capitolo 1
3. Il protocollo di Bitcoin
Il problema del consenso. Come Bitcoin realizza consenso. Incentivi e Proof of work. La meccanica di Bitcoin. Transazioni. Primissimi dettagli su bitcoin scripts. Semplici applicazioni e limiti. La rete Bitcoin.
Materiale: [1] Capitoli 2, 3
4. Bitcoin applications, security e mining
Come “conservare” bitcoin. Wallets, hot e cold wallets. Chiavi distribuite. Secret Sharing. Introduzione a threshold cryptography. Schemi di firma distribuiti. Mining. Mining hardware. Il costo di produrre bitcoin e il conseguente impatto energetico.
Materiale: [1] Capitoli 4, 5
5. Privacy e Anonimato e nelle cryptocurrencies.
Il problema dell’anonimato in Bitcoin. Come de-anonimizzare Bitcoin. Contromisure. Criptovalute e anonimato. Zero Knowledge proofs. Zerocoin e Zerocash. Vantaggi e svantaggi.
Materiale: [1] capitolo 6, e per approfondire [5] e [6].
6. Ethereum e Smart contract applications & security
Materiale: [1] Capitolo 10 e per approfondire [3]
7. Approcci alternativi a mining e consenso
Proof of Stake. Proof of stake vs proof of work. Problemi inerenti a proof of stake: grinding attack, nothing at stake problem. Ulteriori prerequisiti crittografici. Pseudorandom Functions e Verifiable Random Functions. La soluzione di Algorand.
[1] Capitolo 8 e per approfondire [7]
8. Laboratorio
Ethereum, Smart Contracts, Ethereum Virtual Machine (EVM) e introduzione alla scrittura di Smart Contracts usando il linguaggio Solidity.
Materiale: [3], [8]
Testi di riferimento
Testo principale
[1] Arvind Narayanan, Joseph Bonneau, Edward Felten, Andrew Miller, Steven Goldfeder
Bitcoin and Cryptocurrency Technologies: A Comprehensive Introduction
(Author’s preprint edition disponibile gratuitamente al sito: https://bitcoinbook.cs.princeton.edu/)
Altre letture consigliate:
[2] Bitcoin Developer Reference https://bitcoin.org/en/developer-reference
[3] Ethereum “white” paper: https://github.com/ethereum/wiki/wiki/White-Paper
[4] Ethereum “yellow” paper: http://gavwood.com/paper.pdf
[5] Zerocoin: Anonymous Distributed e-cash from Bitcoin.
[6] Zerocash: Decentralized Anonymous Payments from Bitcoin
[7] Algorand: Scaling Byzantine Agreements for Cryptocurrencies
[8] Guida "Solidity": https://solidity.readthedocs.io
Programmazione del corso
Argomenti | Riferimenti testi | |
---|---|---|
1 | Introduzione alla Crittografia e alle Cryptocurrencies | Cap. 1 di [1] |
2 | Come Bitcoin realizza decentralizzazione | Cap 2 di [1] |
3 | Meccanica di Bitcoin | Cap. 3 di [1], e pre approfondire [2] |
4 | Come conservare e gestire Bitcoins. | Cap. 4 di [1] |
5 | Privacy e Anonimato e nelle cryptocurrencies. | Cap. 6 di [1] capitolo 6, e per approfondire [5] e [6]. |
6 | Altri aspetti di Bitcoin: comunità, politica, controversie ed estensioni | Cap. 7 e 9 di [1] |
7 | Ethereum e Smart contract applications & security | Cap 10 di [1], slides e per approfondire [3] e [4] |
8 | Approcci alternativi a mining e consenso | Cap. 8, slides e per approfondire [7] |
9 | Laboratorio su Ethereum. Smart Contracts, Ethereum Virtual Machine (EVM) e introduzione alla scrittura di Smart Contracts usando il linguaggio Solidity. | [8] |
Verifica dell'apprendimento
Modalità di verifica dell'apprendimento
L'esame consiste di una prova di laboratorio seguita da un esame orale.
Prove in itinere: è prevista la possibilità da fare 1 o più prove in itinere sui contenuti teorici del corso.
La verifica dell’apprendimento potrà essere effettuata anche per via telematica, qualora le condizioni lo dovessero richiedere.
- Non approvato: lo studente non ha acquisito i concetti di base e non è in grado di rispondere ad almeno il 60% delle domande né di svolgere gli esercizi teorici e pratici.
18-20: lo studente dimostra una padronanza appena sufficiente dei concetti base, e/o riesce ad impostare gli esercizi teorico/pratici con molta difficoltà e con vari errori. 21-24: lo studente dimostra una padronanza minima dei concetti di base, le sue capacità di collegamento dei contenuti sono modeste, riesce a risolvere semplici esercizi. 25-27: lo studente dimostra una buona padronanza dei contenuti del corso, le sue capacità di collegamento dei contenuti sono buone, risolve gli esercizi con pochi errori. 28-30 e lode: lo studente ha acquisito tutti i contenuti del corso ed è in grado di padroneggiarli compiutamente e di collegarli con spirito critico; risolve gli esercizi in modo completo e senza errori di particolare rilievo.
Esempi di domande e/o esercizi frequenti
Illustrare il funzionamento di hash pointers e di alcune strutture dati ad essi correlati (qauli blockchain o Merkle Tree.)
Esercizi sugli strumenti e le primitive crittografiche introdotte (es dimostrare che un dato protocollo non è zero knowledge)
Esempi di smart contract in Solidity saranno visti a lezione, inoltre tutti i precedenti compiti di laboratorio assegnati negli anni precedenti saranno resi disponibili.