### 课程概况

密码学是计算机系统中信息保护不可缺少的工具。这门课将解释密码原语的内部运作方式，以及如何正确使用它们。学生将学到加密结构安全方面的思考方法，以及如何将这一知识应用到现实世界中。课程最开始将详细讨论，有强大对手偷听和干预通信时，拥有共享密钥的双方如何安全通信。我们会讨论很多布署协议并分析既有系统中的错误。课程第二部分将讨论能让两方或多方生成共享密钥的公钥技术。我们将会讲到相关的数论知识，并讨论公钥加密和基本的密钥交换。通过这门课的学习，学生将会碰到该领域中很多激动人心的开放性问题。

这门课将包括书面作业和编程实验。课程内容完全自给自足，不过拥有离散概率理论的基本了解，将对这门课的学习有所帮助。

Cryptography is an indispensable tool for protecting information in computer systems. In this course you will learn the inner workings of cryptographic systems and how to correctly use them in real-world applications. The course begins with a detailed discussion of how two parties who have a shared secret key can communicate securely when a powerful adversary eavesdrops and tampers with traffic. We will examine many deployed protocols and analyze mistakes in existing systems. The second half of the course discusses public-key techniques that let two parties generate a shared secret key. Throughout the course participants will be exposed to many exciting open problems in the field and work on fun (optional) programming projects. In a second course (Crypto II) we will cover more advanced cryptographic tasks such as zero-knowledge, privacy mechanisms, and other forms of encryption.

### 你将学到什么

Cryptography

Cryptographic Attacks

Public-Key Cryptography

Symmetric-Key Algorithm

### 课程大纲

周1

完成时间为 4 小时

Course overview and stream ciphers

Week 1. This week's topic is an overview of what cryptography is about as well as our first example ciphers. You will learn about

pseudo-randomness and how to use it for encryption. We will also look at a few basic definitions of secure encryption.

12 个视频 （总计 210 分钟）, 2 个阅读材料, 2 个测验

周2

完成时间为 3 小时

Block Ciphers

Week 2. We introduce a new primitive called a block cipher that will let us build more powerful forms of encryption. We will look at a few classic block-cipher constructions (AES and 3DES) and see how to use them for encryption. Block ciphers are the work horse of cryptography and have many applications. Next week we will see how to use block ciphers to provide data integrity. The optional programming assignment this week asks students to build an encryption/decryption system using AES.

11 个视频 （总计 167 分钟）, 2 个测验

周3

完成时间为 3 小时

Message Integrity

Week 3. This week's topic is data integrity. We will discuss a number of classic constructions for MAC systems that are used to ensure data integrity. For now we only discuss how to prevent modification of non-secret data. Next week we will come back to encryption and show how to provide both confidentiality and integrity. This week's programming project shows how to authenticate large video files. Even if you don't do the project, please read the project description --- it teaches an important concept called a hash chain.

11 个视频 （总计 130 分钟）, 2 个测验

周4

完成时间为 3 小时

Authenticated Encryption

Week 4. This week's topic is authenticated encryption: encryption methods that ensure both confidentiality and integrity. We will also discuss a few odds and ends such as how to search on encrypted data. This is our last week studying symmetric encryption. Next week we start with key management and public-key cryptography. As usual there is also an extra credit programming project. This week's project involves a bit of networking to experiment with a chosen ciphertext attack on a toy web site.

12 个视频 （总计 167 分钟）, 2 个测验

周5

完成时间为 3 小时

Basic Key Exchange

Week 5. This week's topic is basic key exchange: how to setup a secret key between two parties. For now we only consider protocols secure against eavesdropping. This question motivates the main concepts of public key cryptography, but before we build public-key systems we need to take a brief detour and cover a few basic concepts from computational number theory. We will start with algorithms dating back to antiquity (Euclid) and work our way up to Fermat, Euler, and Legendre. We will also mention in passing a few useful concepts from 20th century math. Next week we will put our hard work from this week to good use and construct several public key encryption systems.

9 个视频 （总计 133 分钟）, 1 个阅读材料, 2 个测验

周6

完成时间为 3 小时

Public-Key Encryption

Week 6. This week's topic is public key encryption: how to encrypt using a public key and decrypt using a secret key. Public key encryption is used for key management in encrypted file systems, in encrypted messaging systems, and for many other tasks. The videos cover two families of public key encryption systems: one based on trapdoor functions (RSA in particular) and the other based on the Diffie-Hellman protocol. We construct systems that are secure against tampering, also known as chosen ciphertext security (CCA security). There has been a ton of research on CCA security over the past decade and given the allotted time we can only summarize the main results from the last few years. The lectures contain suggestions for further readings for those interested in learning more about CCA secure public-key systems. The problem set this week involves a bit more math than usual, but should expand your understanding of public-key encryption. Please don't be shy about posting questions in the forum. This is the last week of this Crypto I course. I hope everyone learned a lot and enjoyed the material. Crypto is a beautiful topic with lots of open problems and room for further research. I look forward to seeing you in Crypto II where we will cover additional core topics and a few more advanced topics.

11 个视频 （总计 155 分钟）, 2 个测验

周7

完成时间为 26 分钟

Final exam

Congratulations! We are at the end of the course. This module contains only the final exam which covers the entire course. I hope everyone

learned a lot during these 6 weeks. Good luck on the final exam and I look forward to seeing you at a future course!

### 预备知识

这门课中会包含一些编程作业，有一定编程基础对这门课将会有所帮助。不过，我们会下发很多初学者代码来帮助学生完成作业。我们还会推荐一些在线资源，引导学生学习必要的编程知识。对离散概率有所了解，会对这门课的学习有所帮助。