Thicket data repository for the EEG
1{
2 "id": "http://martin.kleppmann.com/2020/11/18/distributed-systems-and-elliptic-curves.html",
3 "title": "New courses on distributed systems and elliptic curve cryptography",
4 "link": "http://martin.kleppmann.com/2020/11/18/distributed-systems-and-elliptic-curves.html",
5 "updated": "2020-11-18T00:00:00",
6 "published": "2020-11-18T00:00:00",
7 "summary": "I have just published new educational materials that might be of interest to computing people: a new 8-lecture course on distributed systems, and a tutorial on elliptic curve cryptography. Distributed Systems Since last year I have been delivering an 8-lecture undergraduate course on distributed systems at the University of Cambridge....",
8 "content": "<p>I have just published new educational materials that might be of interest to computing people:\na new 8-lecture course on distributed systems, and a tutorial on elliptic curve cryptography.</p>\n\n<h2>Distributed Systems</h2>\n\n<p>Since last year I have been delivering an 8-lecture undergraduate course on distributed systems at the University of Cambridge.\nThe first time I delivered it, I inherited the slides and exercises from the people who lectured it in previous years (Richard Mortier, Anil Madhavapeddy, Robert Watson, Jean Bacon, and Steven Hand), and I just used those materials with minor modifications.\nIt was a good course, but it was getting quite dated (e.g. lots of material on <a href=\"https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture\">CORBA</a>, which is now of mostly historical interest).</p>\n\n<p>Therefore, this year I decided to do a thorough refresh of the course content, and wrote a brand new set of slides and lecture notes.\nAlso, due to the pandemic we are not having any in-person lectures, so I recorded videos for all of the lectures.\nI decided to make all of this available publicly under a <a href=\"https://creativecommons.org/licenses/by-sa/4.0/\">creative commons CC BY-SA license</a>, which means that you’re welcome to use it freely (including incorporating it into your own work), provided that you give credit to me, and that you share your derived work under the same license.</p>\n\n<p>The result is here:</p>\n\n<ul>\n <li><a href=\"https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/dist-sys-notes.pdf\">Lecture notes (PDF)</a> (including exercises)</li>\n <li>Slides: <a href=\"https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/dist-sys-slides.pdf\">slideshow</a> and <a href=\"https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/dist-sys-handout.pdf\">printable</a> (PDF)</li>\n <li><a href=\"https://www.youtube.com/playlist?list=PLeKd45zvjcDFUEv_ohr_HdUFe97RItdiB\">Lecture videos (YouTube)</a></li>\n <li><a href=\"https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/\">Course web page</a></li>\n <li>Solution notes for the exercises are available on demand (<a href=\"/contact.html\">email me</a> and convince me that you’re not a student trying to cheat).\nCambridge supervisors can <a href=\"https://www.cl.cam.ac.uk/teaching/2122/ConcDisSys/supervisors/dist-sys-solutions.pdf\">download the solution notes directly</a> (Raven login required).</li>\n</ul>\n\n<p>The course is primarily designed for Cambridge undergraduate students, and it includes some cross-references to other courses.\nMany other courses also make their notes or slides publicly available, so you can still look them up if you’re not at Cambridge by going to the <a href=\"https://www.cl.cam.ac.uk/teaching/2122/part1b.html\">course web pages</a>.\n(Many lecturers restrict their video recordings to Cambridge users only, so those might not be publicly available.)</p>\n\n<p>The distributed systems course comprises about 7 hours of video and 87 pages of lecture notes.\nIt covers the following topics:</p>\n\n<ol>\n <li>Introduction: distributed systems, computer networks, and RPC</li>\n <li>System models: network faults, crash and Byzantine faults, synchrony assumptions</li>\n <li>Physical clocks, clock synchronisation, and causality</li>\n <li>Logical time, broadcast protocols (reliable, FIFO, causal, total order)</li>\n <li>Replication, quorum protocols, state machine replication</li>\n <li>Consensus, details on the Raft consensus algorithm</li>\n <li>Replica consistency, two-phase commit, linearizability, eventual consistency</li>\n <li>Case studies: collaboration software, Google’s Spanner</li>\n</ol>\n\n<p>The main focus of this course is on understanding the algorithms and the principles that allow us to build robust and reliable distributed systems.\nIt uses examples of practical systems as motivation, and the videos include a few live demos of real distributed systems in action.\nThe aim is to convey the fundamentals without being excessively theoretical; there are a few mathematical proofs in the exercises, but most of the discussion is informal and example-based.</p>\n\n<p>The level of this course is intended for second-year undergraduates.\nOur students at this level have reasonable fluency with mathematical notation, and some background in programming languages and operating systems, so that’s what this course assumes.</p>\n\n<h2>Elliptic Curve Cryptography</h2>\n\n<p>Another document I’m releasing today is called\n<a href=\"https://martin.kleppmann.com/papers/curve25519.pdf\">Implementing Curve25519/X25519: A Tutorial on Elliptic Curve Cryptography</a>.\nThere’s no video for this one, just a 30-page PDF.</p>\n\n<p>Many textbooks cover the concepts behind Elliptic Curve Cryptography (ECC), but few explain how to go from the equations to a working, fast, and secure implementation.\nOn the other hand, while the code of many cryptographic libraries is available as open source, it can be <a href=\"https://github.com/jedisct1/libsodium/blob/master/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c#L91-L132\">rather opaque to the untrained eye</a>, and it is rarely accompanied by detailed documentation explaining how the code came about and why it is correct.</p>\n\n<p>This tutorial bridges the gap between the mathematics and implementation of elliptic curve cryptography.\nIt is written for readers who are new to cryptography, and it assumes no more mathematical background than most undergraduate computer science courses.\nStarting from first principles, this document shows how to derive every line of code in an implementation of the <a href=\"https://tools.ietf.org/html/rfc7748\">X25519</a> Diffie-Hellman key agreement scheme, based on the <a href=\"https://ianix.com/pub/curve25519-deployment.html\">widely-used Curve25519 elliptic curve</a>.\nThe implementation is based on Dan Bernstein et al.’s <a href=\"https://tweetnacl.cr.yp.to/\">TweetNaCl</a>.\nIt is fast and secure; in particular, it uses constant-time algorithms to prevent side-channel attacks.</p>\n\n<p>I wrote this because I wanted to learn how real implementations of ECC work, but I couldn’t find good resources that explained it, so I wrote the document as I figured it out step-by-step from a number of sources (and by doing a lot of the calculations myself).\nI hope others will also find it useful.</p>",
9 "content_type": "html",
10 "author": {
11 "name": "Martin Kleppmann",
12 "email": null,
13 "uri": null
14 },
15 "categories": [],
16 "source": "http://feeds.feedburner.com/martinkl"
17}