====== Complexity, Cryptography and Financial Technology ====== This course is one of the [[teaching_activities|security courses]] of the [[start|Security Group]] in Trento. It is offered at the University of Trento in the framework of the [[https://masterschool.eitdigital.eu/programmes/cse/|Cyber Security track]] of the [[https://www.eitdigital.eu/|European Institute of Innovation and Technology (EIT Digital)]] Master School programme. It is also available in the normal[[http://web.unitn.it/en/scienze/6859/master-science-computer-science|Master Degree in Computer Science]] and in [[http://offertaformativa.unitn.it/en/lm/information-and-communications-engineering |Information and Communications Engineering]] at the University of Trento. ===== Lecturers ===== * [[http://www.massacci.org|Fabio Massacci]] * [[https://sites.google.com/g.unitn.it/namnc/home|Chan Nam Ngo]] ===== Syllabus ===== ==== Course Objectives ==== This 12ECTS course provides the broad overview of modern crypto-based Financial Technology. Module 1 provides the foundations of Cryptography and Computational Complexity that are needed for understanding the technology that is behind crypto-based FinTech. Module 2 focuses on two rich case studies in collaboration with EIT partners. The first case study is [[https://www.innopay.com/blog/join-the-co-creation-of-unbias-to-revolutionise-sme-financing|UNBIAS]] in collaboration with InnoPay NL. The second case study is [[https://www.youtube.com/watch?v=cOGgB9GdPT0|FuturesMEX]] in collaboration with Durham Business School UK. //Students interested in further exploring the research topics behind this area can also take a Software Project (6ECTS) or a Research Project (12ECTS) by contacting the lecturers.// ==== Intended Learning Outcomes ==== Regular and active participation in the teaching activities offered by the course (lectures, laboratories and group work) and in independent study and project activities will enable students to: * identify the relevant security characteristics of a crypto-based FinTech problem; * organize and integrate the algorithm and information needed for finding a solution; * compare methods and tools discussed during the course and choose the ones most suited to the solution; * apply the methods learned during the course to a complex industrial relevant scenario. In terms of soft skills, active participation in the group-based teaching activities will enable students to learn how to organize group work, apply problem-solving techniques, deliver a presentation, and make critical code review to support their results with compelling arguments. ==== Prerequisites ==== Students should have attended a general security course, e.g. [[https://sites.google.com/view/intro2cns|Introduction to Computer and Network Security]] or a cryptography course. ==== Course Content ==== * Introduction to Crypto-based FinTech: * Fintech Characteristics, Bitcoin as an example, Distributed systems overview * Complexity: * Introduction to computing relations, P vs NP (search and decision problems), One-way functions, Interactive proofs, Zero knowledge proofs, Introduction to Multi-Party Computations * Cryptography * Finite Field (Discrete Log, Quadratic Residuosity), recap of Digital Signatures, Elliptic Curves Digital Signature Algorithm, Quadratic Arithmetic Programs, Pairing-based zk-SNARKS, Multy-party computation based on Garbled Circuits, Secret Sharing * Labs will be done for libraries implementing the above features * Hyperledger (Java), libsnark (C), SPDZ (Python) * FinTech Case Studies (depend on the EIT partnership) * Students Presentations * Proposal for FinTech case study 1, Hostile review for FinTech case study 1 See details in the list of upcoming topics below. ==== Teaching Methods and Learning Activities ==== The instructors will use: * highly interactive lecture-style presentation during which students will be required to actively participate; * lab exercises given to small groups of students, who must discuss, analyze and present to the class the results achieved. If the number of attendees is too small, individual projects will be assigned for the EIT students who need to attend the course. ==== Assessment Methods and Criteria ==== This is an eligible course so we expect active participations. Grading is organized as follows: * Participation and submission of lab materials: 7 points * Midterm theory evaluation: 8 points * Presentation by students on the UNBIAS case study: 4 points * Participation, submission of lab materials, and final implementation of UNBIAS: 8 points * Participation, submission of lab materials, and final implementation of IOP: 8 points ==== Reference and Bibliographic Material ==== The following books might be useful: * Complexity and Cryptography: An Introduction. Book by DJA Welsh and J Talbot * [[http://www.wisdom.weizmann.ac.il/~/oded/cc-book.html|Computational Complexity: A Conceptual Perspective]]. Book by O Goldreich. An old version of the book is on'line. See also [[http://www.wisdom.weizmann.ac.il/~/oded/cc.html|Goldreich's page on complexity theory]] * [[http://cacr.uwaterloo.ca/hac/|Handbook of Applied Cryptography|]] Book by AJ Menezes, PC van Oorschot and SA Vanstone More advanced books * Cryptography: An Introduction. Book by N Smart * [[http://theory.cs.princeton.edu/complexity/|Computational Complexity: A Modern Approach]]. Book by S Arora and B Barak Additional research papers will be given by the instructors in class. ===== Schedule ===== The lectures/seminars etc. are * Mon. 13:30-15:30 room A220 * Wed. 9:30-11:30 room A211 (Changed!) * Fri. 13:30-15:30 room A215 (well, they change us all the time so check on [[https://easyroom.unitn.it/Orario|Easyroom]]. ==== Past Lectures, Lab Sessions and Exercises ==== ^ Date ^ Weekday ^ Hours ^ Topic ^ Slides ^ Additional materials ^ | //13/09/18// | Thu | 2 | Admin and Introduction | {{:teaching:cryptofintech:2018:2018-lecture-1-intro.pdf|Slides}} | [[http://www.sciencedirect.com/science/article/pii/S0007681317301246|FinTech General Overview]],[[http://www.sciencedirect.com/science/article/pii/S1567422315000678|a summary article on payments and cards]] (you should read it and then pick the cited articles), [[http://www.sciencedirect.com/science/article/pii/S0148619518300390|fintech lenders]], [[http://www.sciencedirect.com/science/article/pii/S0921800917301295|InsurTech and FinTech ]], [[http://www.sciencedirect.com/science/article/pii/B9780128104415000117|Payments for Ecosystem Services and REDD+]], [[http://www.sciencedirect.com/science/article/pii/S1084804517303247|Security and Privacy Requirements]] | | 14/09/18 | Fri | 2 | Introduction to Crypto-based FinTech | {{:teaching:cryptofintech:2018:2018-lecture-2-introduction_to_crypto-based_fintech.pdf|Slides}} {{:teaching:cryptofintech:2018:2018-lecture-2-introduction_to_crypto-based_fintech_-_exercise.pdf|Exercise}} | For a bit of history see [[https://en.wikipedia.org/wiki/DigiCash|wiki page on DigiCash]]. For general introduction to the key issues in payment see a paper on [[https://www.federalreserve.gov/econresdata/feds/2016/files/2016095pap.pdf|payments and distributed ledgers]] by the Federal Reserve Board | | 17/09/18 | Mon | 2 | Cryptocurrency Examples | {{:teaching:cryptofintech:2018:2018-lecture-3-cryptocurrency.pdf|Slides}} | For further details and possible extensions of PTN see a {{ teaching:cryptofintech:2018:money.pdf|PTN survey}} (joint work of instructors with an Economics professor in UK). For a bit of history see [[https://en.wikipedia.org/wiki/Ripple_(payment_protocol)|Wiki page on Ripple]] and [[https://en.wikipedia.org/wiki/Zcash|Wiki page on ZCash]]. Technical details of Ripple can be explored on [[https://developers.ripple.com/introduction.html|Ripple Developer Center]]. To understand more about ZCash, look into their [[https://z.cash/technology/index.html|Technology page]] and the [[http://zerocash-project.org/media/pdf/zerocash-extended-20140518.pdf|original scientific paper of ZeroCash]].| | 19/09/18 | Wed | 2 | Requirements for FinTech Case Studies | {{:teaching:cryptofintech:2018:2018-lecture-4-requirements-fintech.pdf|slides}}| The Innopay Case study is on Google Classroom | | 21/09/18 | Fri | 2 | Bitcoin by prof. A. Montresor | | | | 24/09/18 | Mon | 2 | Introduction to Complexity | {{:teaching:cryptofintech:2018:2018-lecture-5-complexity-introduction.pdf|sides}} | See Section 1.2 of [[http://www.wisdom.weizmann.ac.il/~/oded/cc-book.html|Gold Reich Book]]. There is an old version of the chapter on the web page. You can also see | | 26/09/18 | Wed | 2 | Finite Field, Discrete Logs, Quadratic Residuosity | {{:teaching:cryptofintech:2018:2018-lecture-6-finite_fields.pdf|slides}} | Read [[http://cacr.uwaterloo.ca/hac/about/chap2.pdf|Chapter 2]] and [[http://cacr.uwaterloo.ca/hac/about/chap3.pdf|Chapter 3]] of the [[http://cacr.uwaterloo.ca/hac/|Handbook of Applied Cryptography]]. Read also the original paper of [[https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1057074|El-Gamal Cryptosystem]] and [[https://dl.acm.org/citation.cfm?id=802212|GM Cryptosystem]]. Find the reference implementation of [[https://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=blob_plain;f=cipher/elgamal.c;hb=HEAD|El-Gamal Cryptosystem]] and [[https://github.com/prvnkumar/libgm|GM Cryptosystem]] in C. | | 28/09/18 | Fri | 2 | Lab on Finite Field 1 (libsnark) | {{:teaching:cryptofintech:2018:lab1.pdf|Exercise}} | | | 01/10/18 | Mon | 2 | Lecture + Lab on Elliptic Curves | {{:teaching:cryptofintech:2018:2018-lecture-7-elliptic_curves.pdf|Slides and Exercise}} | Read Appendix 6 of [[https://csrc.nist.gov/csrc/media/publications/fips/186/2/archive/2000-01-27/documents/fips186-2.pdf|FIPS 186-2]] for the list of recommended curves. | | 05/10/18 | Fri | 2 | Digital Signature | {{:teaching:cryptofintech:2018:2018-lecture-8-digital_signature.pdf|Slides}} | Read the main body of [[https://csrc.nist.gov/csrc/media/publications/fips/186/2/archive/2000-01-27/documents/fips186-2.pdf|FIPS 186-2]]. | | 08/10/18 | Mon | 2 | P vs NP: Decision | | | | 12/10/18 | Wed | 2 | Recap on P vs NP: Search & Decision | | | | 15/10/18 | Fri | 2 | P vs NP: Computational | | | | 19/10/18 | Mon | 2 | Randomness | | | | 24/10/18 | Wed | 2 | Zero-Knowledge Proof | | | | 14/11/18 | Wed | 2 | Libsark Tutorial: Getting Started | {{:teaching:cryptofintech:2018:tut1.pdf|Tutorial}} | | | 16/11/18 | Fri | 2 | Libsnark Tutorial: Basic Gadgets | {{:teaching:cryptofintech:2018:tut2.pdf|Tutorial}} | | | 19/11/18 | Mon | 2 | Student evaluation (theory) | | | | 21/11/18 | Wed | 2 | Libsnark Tutorial: Fundamental Relations and Gadgets | {{:teaching:cryptofintech:2018:tut3.pdf|Tutorial}} | | | 23/11/18 | Fri | 2 | Students presentation and feedback on Invoice Factoring use case (1) | | | | 26/11/18 | Mon | 2 | Libsnark Exercise: Basic FinTech Gadgets | {{:teaching:cryptofintech:2018:exercise1.pdf|Exercise}} | | | 28/11/18 | Wed | 2 | Libsark Tutorial: Merkle Tree for FinTech | | | | 30/11/18 | Fri | 2 | Students presentation and feedback on Invoice Factoring use case (2) | | | | 3/12/18 | Mon | 2 | FuturesMEX | {{:teaching:cryptofintech:2018:2018-lecture-15-futuresmex.pdf|Slides}} | {{:sp18proceedings.pdf|FuturesMEX paper}} | | 05/12/18 | Wed | 1 | Libsnark Tutorial: FuturesMEX advanced gadgets (1) | | | | 07/12/18 | Fri | 3 | Libsnark Tutorial: FuturesMEX advanced gadgets (2) | | | | 10/12/18 | Mon | 2 | Student final presentation and feedback on Invoice Factoring use case (graded) | | | 12/12/18 | Wed | 2 | HyperLedger Tutorial | | | | 14/12/18 | Mon | 2 | Student tutoring in class | | | | 17/12/18 | Wed | 2 | Student tutoring in class | | | | 19/12/18 | Wed | 2 | SPDZ Tutorial| {{:teaching:cryptofintech:2018:tut1mpc.pdf|Tutorial}} | | ==== Planned Lectures, Lab Sessions and Exercises==== ^ Date ^ Weekday ^ Hours ^ Topic ^ Slides ^ Additional materials ^ | 21/12/18 | Fri | 2 | Student tutoring in class | | | | 25/01/19 | Fri | 8 | Final project | | | ===== Other Material ===== Other material is available in Google Classroom or in the Github repo.