Khóa học mật mã học trực tuyến của Dan Boneh (2017)
(crypto.stanford.edu)- Đây là khóa học mật mã học trực tuyến miễn phí do Dan Boneh của Stanford University giảng dạy; danh sách đầy đủ các bài giảng được công khai, còn bài tập chính thức, project và thi cuối kỳ được cung cấp trên Coursera
- Sử dụng kèm giáo trình miễn phí A Graduate Course in Applied Cryptography, bổ sung nội dung sâu hơn bài giảng cùng các chứng minh bảo mật và bài tập thực hành
- Chương trình học kéo dài 7 tuần, từ stream cipher đến chữ ký số, và mỗi tuần đều được liên kết với chương sách, video bài giảng và slide
- Bao quát rộng các thành phần mật mã thực dụng như one-time pad, PRG, DES, AES, MAC, HMAC, TLS 1.2, Diffie-Hellman, RSA, ElGamal, chữ ký dựa trên hàm băm, v.v.
- Có thể xem từng bài giảng dưới dạng video Coursera; nếu cần chấm điểm và chứng nhận hoàn thành thì đăng ký khóa học trên Coursera
Cách học và giáo trình
- Đây là khóa học mật mã học trực tuyến do Dan Boneh của Stanford University giảng dạy
- Toàn bộ bài giảng của khóa học miễn phí được tổng hợp trên một trang
- Nếu muốn học chính thức, bao gồm cả bài tập, project và thi cuối kỳ, cần dùng trang khóa học trên Coursera
- Giáo trình miễn phí là A Graduate Course in Applied Cryptography của D. Boneh và V. Shoup
- Sách đi sâu hơn bài giảng và bao gồm chứng minh bảo mật cùng nhiều bài tập
Tuần 1: Tổng quan khóa học và stream cipher
- Tuần 1 tương ứng với chương 2–3 của giáo trình, bao gồm tổng quan khóa học, nền tảng xác suất rời rạc và stream cipher
- Slide được cung cấp theo các chủ đề Introduction và Stream ciphers
- Các bài giảng chính:
- Course overview: 10 phút
- What is cryptography: 15 phút
- History of cryptography: 18 phút
- Discrete probability (crash course): 18 phút
- Information theoretic security and the one-time pad: 18 phút
- Stream ciphers and pseudorandom generators: 19 phút
- Attacks on stream ciphers and the one-time pad: 23 phút
- Real-world stream ciphers: 19 phút
- PRG security definition: 24 phút
- Semantic security: 15 phút
Tuần 2: Block cipher
- Tuần 2 tương ứng với chương 4–5 của giáo trình, bao gồm block cipher và cách sử dụng block cipher
- Slide được cung cấp theo các chủ đề Block ciphers và Using block ciphers
- Các bài giảng chính:
- What are block ciphers: 16 phút
- The Data Encryption Standard (DES): 21 phút
- Exhaustive search attacks: 19 phút
- More attacks on block ciphers: 16 phút
- The AES block cipher: 13 phút
- Block ciphers from PRGs: 11 phút
- Review: PRPs and PRFs: 11 phút
- Modes of operation: one-time key: 7 phút
- Security for many-time key (CPA security): 22 phút
- Modes of operation: many-time key (CBC): 16 phút
- Modes of operation: many-time key (CTR): 9 phút
Tuần 3: Toàn vẹn thông điệp và hàm băm kháng va chạm
- Tuần 3 tương ứng với chương 6–8 của giáo trình, bao gồm mã xác thực thông điệp (MAC), tính kháng va chạm và HMAC
- Slide được cung cấp theo các chủ đề Message integrity và Collision resistant hashing
- Các bài giảng chính:
- Message authentication codes: 15 phút
- MACs based on PRFs: 9 phút
- CBC-MAC and NMAC: 19 phút
- MAC padding: 8 phút
- PMAC and Carter-Wegman MAC: 15 phút
- Generic birthday attack: 14 phút
- The Merkle-Damgard paradigm: 11 phút
- Constructing compression functions: 8 phút
- HMAC: 7 phút
- Timing attacks on MAC verification: 8 phút
Tuần 4: Mã hóa xác thực và các bẫy khi triển khai
- Tuần 4 tương ứng với chương 9 của giáo trình, bao gồm mã hóa xác thực và các cạm bẫy khi sử dụng hệ mật mã
- Slide được cung cấp theo các chủ đề Authenticated encryption và Odds and ends
- Các bài giảng chính:
- Active attacks on CPA-secure encryption: 12 phút
- Definitions: 5 phút
- Chosen ciphertext attacks: 12 phút
- Constructions from ciphers and MACs: 20 phút
- Case study: TLS 1.2: 17 phút
- CBC padding attacks: 14 phút
- Attacking non-atomic decryption: 9 phút
- Key derivation: 13 phút
- Deterministic encryption: 14 phút
- Deterministic encryption: SIV and wide PRP: 20 phút
- Tweakable encryption: 14 phút
- Format preserving encryption: 12 phút
Tuần 5: Trao đổi khóa và nền tảng lý thuyết số
- Tuần 5 tương ứng với chương 10 của giáo trình, bao gồm bài toán trao đổi khóa và nền tảng lý thuyết số
- Slide được cung cấp theo các chủ đề Basic key exchange và Crash course in number theory
- Các bài giảng chính:
- Trusted 3rd parties: 11 phút
- Merkle puzzles: 11 phút
- The Diffie-Hellman protocol: 19 phút
- Public-key encryption: 10 phút
- Notation: 14 phút
- Fermat and Euler: 18 phút
- Modular e'th roots: 17 phút
- Arithmetic algorithms: 12 phút
- Intractable problems: 18 phút
Tuần 6: Mật mã khóa công khai
- Tuần 6 tương ứng với chương 11–12 của giáo trình, bao gồm hoán vị cửa sập, RSA và mật mã khóa công khai dựa trên Diffie-Hellman
- Slide được cung cấp theo các chủ đề Trapdoor permutation và Diffie-Hellman
- Các bài giảng chính:
- Definitions and security: 15 phút
- Constructions: 10 phút
- The RSA trapdoor permutation: 17 phút
- PKCS1: 21 phút
- Is RSA a one-way function?: 16 phút
- RSA in practice: 13 phút
- The ElGamal public-key system: 19 phút
- ElGamal security: 13 phút
- ElGamal variants with better security: 10 phút
- A unifying theme: 11 phút
- Farewell for now: 5 phút
Tuần 7: Chữ ký số
- Tuần 7 tương ứng với chương 13–14 của giáo trình, bao gồm chữ ký số và chữ ký dựa trên hàm băm
- Slide được cung cấp theo các chủ đề Digital signatures và Hash-based signatures
1 bình luận
Ý kiến trên Hacker News
Khi còn là sinh viên Stanford, CS255 Intro to Cryptography là một trong những môn tôi thích nhất, và Dan thực sự là một giảng viên xuất sắc
Nếu muốn có thêm tài liệu bài giảng về bảo mật của Stanford, tôi cũng khuyên xem CS253 Web Security (https://web.stanford.edu/class/cs253/). Nói rõ luôn, môn này là do tôi tạo ra, và CS356 Topics in Computer and Network Security (https://cs356.stanford.edu/) cũng ổn
Video CS253 ở đây: https://www.youtube.com/playlist?list=PL1y1iaEtjSYiiSGVlL1cH...
Rất tài năng và giải thích khái niệm cực kỳ tốt
Vài năm trước tôi đã học khóa mật mã học trực tuyến của giáo sư này và thấy rất hay
Dù có nền tảng toán học, sau khi học khóa đó tôi nhận ra mình không muốn trở thành một nhà mật mã học chuyên nghiệp; chỉ riêng điều đó cũng đã là một thu hoạch khá đáng giá
Đùa vậy thôi, tôi thật sự thích cách phân tích các hệ mật mã như một trò chơi với ác quỷ, cố gắng phân biệt chuỗi bit ngẫu nhiên với các byte đã được mã hóa
Kết luận là đừng tự tạo thuật toán mã hóa, vì làm cho đúng rất khó. Khá bi quan, nhưng nó cũng phần nào làm giảm hứng thú muốn đào sâu thêm của tôi
Đây là một khóa học xuất sắc. Tuy nhiên, thời gian hoàn thành ước tính 23 giờ có thể thay đổi rất nhiều tùy vào mức độ thành thạo sẵn có của bạn về chủ đề này
Nên chuẩn bị và điều chỉnh nhịp học với điều đó trong đầu
Trông có vẻ hay, nhưng tôi ước có tài liệu nào đó tiếp cận từ góc nhìn thực hành, bắt đầu bằng cách dùng thư viện mật mã thay vì bắt đầu từ toán học
Vấn đề không phải là phải biết cấu trúc chi tiết của RSA, mà là biết cách kết hợp nó an toàn với các primitive khác để xây dựng một hệ thống có các thuộc tính mong muốn
Giờ tôi đã đọc được khoảng ba phần tư và đang hài lòng. Sách nói nhẹ về toán nhưng vẫn có một chút, và có vẻ nhắm tới những người sẽ thấy khó chịu nếu dùng mà không hiểu cơ chế bên trong, nhưng thực tế không cần làm công việc triển khai nội bộ
Nhờ cuốn sách này, tôi cảm thấy mình đã học đủ để có thể ghép các primitive thành một giao thức mà bề ngoài hoạt động đúng như dự định. Đồng thời, tôi cũng học được rằng có rất nhiều chi tiết tinh vi có thể phá hỏng hoàn toàn một giao thức, rằng việc kết hợp các primitive có thể tạo ra những điểm yếu ngoài dự đoán, và rằng ngay cả những người hiểu mật mã hơn tôi rất nhiều cũng có thể tạo ra các giao thức hỏng từ những primitive an toàn
Có thể đây không phải cuốn sách bạn đang tìm, nhưng nếu bạn muốn hiểu mật mã chứ không phải tự thiết kế, tôi nghĩ đây là một cuốn hay
Ví dụ, nếu bạn dùng libsodium đúng theo cách mà 100 lập trình viên khác đã dùng thành công trước đó thì ổn. Nhưng chỉ qua vài bước rất nhỏ và tinh vi, bạn có thể vô tình tổng hợp ra một hệ mật mã mới. Một ví dụ là nỗ lực tạo hệ thống nhắn tin bảo mật bằng các primitive của libsodium
Phải học nhiều lý thuyết. Điều đó rất quan trọng
Ví dụ: https://gist.github.com/tqbf/be58d2d39690c3b366ad hoặc https://www.latacora.com/blog/2018/04/03/cryptographic-right...
Đây là sách của Bruce Schneier, Niels Ferguson, Tadayoshi Kohno
Một phần lớn của mật mã học hiện đại là tìm ra các cách kết hợp an toàn
Có vẻ nhiều người trong thread này quan tâm đến việc học mật mã thiên về thực hành mà không có lý thuyết. Nếu vậy thì nên xem cryptopals.com của HN MVP tptacek
Nếu muốn luyện các nội dung như thế này theo định dạng CTF, tôi khuyên dùng https://cryptohack.org/. Đây là một trang rất tuyệt
Đây là một khóa học xuất sắc và đã đóng vai trò quan trọng trong sự phát triển sự nghiệp của tôi
Cũng đáng chú ý là Dan Boneh là cố vấn của nhóm nghiên cứu a16z crypto[1], và cùng họ tạo ra nhiều nội dung liên quan đến blockchain[2]
[1]: https://a16zcrypto.com/research/
[2]: https://a16zcrypto.com/team/dan-boneh/
Các triển khai hiện đại dùng đường cong elliptic, còn trong lịch sử có lẽ đã dùng logarit rời rạc trong một nhóm con của trường số nguyên tố lớn. Ngoài ra còn có chữ ký BLS, cái này hoàn toàn dựa trên đường cong elliptic
Nhìn chung, bất cứ thứ gì có bảo mật phụ thuộc vào logarit rời rạc đều có thể được triển khai bằng đường cong elliptic. Nhưng trong các lớp nhập môn mật mã học, hầu hết thứ cần đến là một nhóm có bậc nguyên tố, và đường cong elliptic cũng thường có thể được xử lý như một nhóm bậc nguyên tố dạng hộp đen, nên được coi là chi tiết triển khai
Chữ ký BLS là ngoại lệ. Nó cần pairing song tuyến tính, và điều này đòi hỏi một loại đường cong elliptic đặc biệt chứ không phải một nhóm bậc nguyên tố hộp đen đơn giản
Có nhiều thủ thuật hình học đại số tuyệt vời có thể làm với đường cong elliptic, nhưng những nội dung đó hầu như sẽ không xuất hiện trong lớp nhập môn mật mã học, và có lẽ cũng khó gặp trong bất kỳ lớp khoa học máy tính nào
Có ai vẫn đang chờ khóa Cryptography II trên Coursera không?
Cuốn sách ông ấy đồng tác giả, A Graduate Course in Applied Cryptography, đã giúp tôi rất nhiều
https://toc.cryptobook.us/