Computers don’t exist in isolation anymore. They coexist with each other in a computational ecosystem. More often than not, they must communicate and collaborate. In an idealised distributed setting, all computers are good and work towards a common goal. There is a protocol that they follow with nice provable guarantees on achieving their common goal.

Alas, reality is a far cry from such a computational utopia. This brings us to the topic of this course. How can a distributed collection of computers communicate and collaborate effectively despite some of them breaking protocol? This situation is somewhat easy when the “bad computers” behave erratically and can therefore be identified as being bad; such computers can be blacklisted and ignored by the good computers. The situation is more challenging when the bad computers behave maliciously. They will be more surreptitious making them much harder to identify as being bad. Such computers are said to be Byzantine — a term dating back to the first works on this topic (from a CS point of view) by Lamport, Pease, and Shostak. In such settings, computers cannot afford to blindly trust each other. The protocols must be designed with verification mechanisms built into them. Computers must maintain their reputation and earn the trust of other computers. All these become challenging in a distributed environment because the Byzantine computers cannot be distinguished from the good ones in a straightforward manner.

<aside> 💡 Thus the study of distributed trust can be framed as follows. Suppose we have $n$ computer nodes (or just nodes) that have some network facility by which they can communicate with each other. Moreover, they wish to collaborate with each other to solve some common problem. However, some $\beta$ fraction of the nodes are Byzantine and can behave in malicious ways. How can the remaining $(1-\beta)n$ good nodes solve the common problem?

</aside>


Course Structure

The course will comprise two modules.

Module 1: Foundations

The course will start with the fundamentals of distributed trust established by the extensive study of Byzantine fault tolerance in distributed computing. We will begin with foundational problems reliable broadcast, Byzantine agreement, state machine replication, etc. Apart from these traditional Byzantine fault tolerance problems, we will also explore other contexts that are active areas of research.

Module 2: Distributed Ledgers

This distributed trust framework is quite widespread and appears in diverse contexts. The most prominent and practical “real-world” example is distributed ledger technology (DLTs) used for cryptocurrencies and collaborative maintenance of records and contracts between mutually distrusting entities. Such DLTs are typically implemented through a secure data structure call the blockchain that is maintained by a peer-to-peer network of computers. More recently, we have also seen variations such as DAG-based DLTs that have gained widespread use. This course will include a thorough grounding on DLTs

Project

This course will require a project. The project may either be of a theoretical nature or of an applied nature. Options will be discussed in due course.


Course Evaluation

Assignments 27 (Three assignments, 9 marks each)
Midterm 20 Based on Module 1
Final 20 Based on Module 2
Project 30 Evaluation will be in three stages (5+5+20)
Class Participation 3 One mark for each month (Feb, March, April.)
Total 100

Administrivia