9 điểm bởi GN⁺ 2024-05-03 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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 2: Block cipher

Tuần 3: Toàn vẹn thông điệp và hàm băm kháng va chạm

Tuần 4: Mã hóa xác thực và các bẫy khi triển khai

Tuần 5: Trao đổi khóa và nền tảng lý thuyết số

Tuần 6: Mật mã khóa công khai

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

 
GN⁺ 2024-05-03
Ý 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...

    • Đồng ý. Tôi rất thích các môn 155, 255, 251 của Giáo sư Boneh, và ông ấy là một trong những giảng viên tôi thích nhất trong nhiều năm
      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

    • Tôi cũng đã học khóa đó trên Coursera vài năm trước và thấy rất tuyệt
      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

    • Tôi bắt đầu đọc Real-World Cryptography của David Wong vì muốn hiểu rõ hơn về mật mã để tự tin hơn khi viết chương trình dùng các giao thức hiện có
      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
    • Cần cẩn thận với những năng lực mà bạn nghĩ mình có thể đạt được trong một hệ thống mới. Các nhà phát triển phần mềm thường vô thức nhận vài sievert liều phóng xạ của sự mới lạ, trong khi chưa xây đủ nền tảng lý thuyết nhàm chán
      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
    • Hãy tìm Cryptographic Right Answers trên Google. Có vài bài viết, và phần lớn những nội dung bạn tìm thấy nhìn chung sẽ đồng thuận với nhau
      Ví dụ: https://gist.github.com/tqbf/be58d2d39690c3b366ad hoặc https://www.latacora.com/blog/2018/04/03/cryptographic-right...
    • Thứ bạn cần có lẽ là một cuốn như Cryptography Engineering: Design Principles and Practical Applications
      Đây là sách của Bruce Schneier, Niels Ferguson, Tadayoshi Kohno
    • Kết hợp an toàn chắc chắn được đề cập trong khóa học này. Không phải chỉ nói về chi tiết của RSA, dù tất nhiên cũng có bài giảng liên quan, mà còn nói về các primitive khác nhau thỏa mãn những thuộc tính bảo mật nào và cách kết hợp chúng an toàn
      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/

  • Mã hóa khóa công khai
    Toàn là RSA. Các tutorial mật mã học giờ không thể đưa thêm chút mật mã đường cong elliptic vào sao?

    • Có thể chúng ta đang nhìn vào những thứ khác nhau, nhưng trong liên kết có mã hóa ElGamal, và nó dựa trên logarit rời rạc
      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/