1 điểm bởi GN⁺ 2024-02-02 | 1 bình luận | Chia sẻ qua WhatsApp

Mật mã kháng lượng tử cho hệ sinh thái Go

  • filippo.io/mlkem768 là bản triển khai thuần Go của ML-KEM-768, được tối ưu cho tính chính xác và khả năng đọc hiểu.
  • ML-KEM là cơ chế trao đổi khóa kháng lượng tử đang trong quá trình được NIST tiêu chuẩn hóa và đang được phần lớn ngành công nghiệp chấp nhận.
  • Gói này gồm khoảng 500 dòng mã, 200 dòng chú thích và 650 dòng kiểm thử, không có phụ thuộc nào ngoài golang.org/x/crypto/sha3.
  • Dự kiến sẽ được tích hợp vào thư viện chuẩn Go, và được thiết kế để mang lại mức độ tin cậy bảo mật cao thông qua khả năng review dễ dàng, tính đơn giản và kiểm thử kỹ lưỡng.

Bản triển khai để kiểm chứng đặc tả

  • Khác với phần lớn các bản triển khai khác, đoạn mã này không được port từ thư viện tham chiếu pq-crystals mà được viết lại từ đầu, không đọc kỹ các codebase khác.
  • Tài liệu FIPS 203 là một hướng dẫn triển khai rất tốt, cung cấp mã giả chi tiết, định nghĩa kỹ lưỡng và thông tin kiểu dữ liệu nhất quán.
  • Để tăng khả năng đọc hiểu của mã và giá trị như một tài nguyên học tập, tên hàm, tên biến và thứ tự các phép toán đã được lựa chọn cẩn thận để khớp với đặc tả FIPS.

Đủ đa thức và đại số tuyến tính để triển khai

  • Đặc tả đòi hỏi nền tảng toán học tương đối hạn chế, nhưng để giúp công việc của người triển khai dễ dàng hơn, tác giả đã viết "Đủ đa thức và đại số tuyến tính để triển khai Kyber".
  • Phần còn lại được để lại như bài tập cho người đọc, gồm 1) số học modulo với số nguyên tố 3329, 2) cách hiện thực cụ thể của các hàm nén và giải nén từ [0, 3329) sang [0, 2ᵈ), 3) bảo đảm các phép toán thời gian hằng số.

Khả năng đọc hiểu và giá trị giáo dục

  • Khả năng đọc hiểu là một trong những mục tiêu chính của bản triển khai, phục vụ cho việc review hiệu quả và đóng vai trò như tài nguyên đào tạo cho thế hệ maintainer và kỹ sư mật mã tiếp theo.
  • Đôi khi mã được viết dài hơn và ít tái sử dụng hơn để cải thiện khả năng đọc hiểu của các hàm phức tạp.

Mức độ tin cậy bảo mật cao nhờ kiểm thử

  • Kiểm tra việc sinh khóa, encapsulation và decapsulation có hoạt động chính xác hay không, đồng thời duy trì độ bao phủ kiểm thử trên 95%.
  • Bảo đảm khả năng tương tác với các test vector từ NIST và các bản triển khai khác, đồng thời kiểm thử kỹ lưỡng các phép toán số học trên trường cơ sở bằng cách so sánh với giá trị kỳ vọng.
  • Là một phần của dự án CCTV, tác giả công bố các test vector có thể tái sử dụng cho các bản triển khai khác.

Hiệu năng

  • Hiệu năng không phải mục tiêu chính, nhưng gói này cần đủ nhanh để thực sự hữu ích.
  • ML-KEM vốn đã đủ nhanh, và bản triển khai đơn giản này có thể cạnh tranh với các bản triển khai P-256 và X25519 được tối ưu bằng assembly.
  • Đã có các nỗ lực như tuân theo các mẫu lập trình Go và giảm thiểu cấp phát trên heap để cải thiện hiệu năng.

Dùng bản triển khai ML-KEM như Kyber v3

  • NIST đã thực hiện một vài thay đổi nhỏ đối với bản nộp Round 3 của Kyber.
  • Một số giao thức thử nghiệm được định nghĩa dựa trên Kyber v3 (hoặc "draft00"), nhưng không cần tạo một gói riêng cho việc đó.
  • Có thể dùng ML-KEM để tạo bí mật dùng chung K, sau đó áp dụng thêm bước dẫn xuất khóa để tạo bí mật dùng chung của Kyber.

Ý kiến của GN⁺

  • Tầm quan trọng của mật mã kháng lượng tử: Khi điện toán lượng tử phát triển, các kỹ thuật mật mã hiện có có thể trở nên dễ bị tổn thương, vì vậy việc phát triển và tiêu chuẩn hóa các công nghệ mật mã kháng lượng tử như ML-KEM là rất quan trọng.
  • Khả năng mở rộng của ngôn ngữ Go: Bản triển khai này cho thấy tính mở rộng và linh hoạt của Go, đồng thời có kế hoạch tích hợp thư viện mật mã vào thư viện chuẩn, nên sẽ là tài nguyên hữu ích cho cộng đồng lập trình viên Go.
  • Giá trị giáo dục: Cách tiếp cận nhấn mạnh vào khả năng đọc hiểu của mã và giá trị giáo dục sẽ là nguồn học tập rất hữu ích cho thế hệ kỹ sư mật mã tiếp theo và các lập trình viên quan tâm.

1 bình luận

 
GN⁺ 2024-02-02
Ý kiến trên Hacker News
  • Câu hỏi về tình trạng hiện tại của điện toán lượng tử

    Đặt nghi vấn liệu điện toán lượng tử đã thực sự đạt đến mức cần thiết hay chưa, hay giống như AI, khái niệm đã thay đổi để tung lại các sản phẩm cũ dưới một cái tên mới.

  • Lời chào và chia sẻ từ Kudelski Security

    Giới thiệu một trường hợp gần đây tại Kudelski Security, nơi họ phải ngừng một trong các thư viện Go cho mật mã kháng lượng tử. Có thể xem chi tiết trong bài viết được liên kết.

  • Gợi ý sách về các hệ mật được triển khai bằng Go

    Giới thiệu cuốn sách của John Arundel về triển khai hệ mật với phiên bản Go 1.22. Phần cuối sách có đề cập đến mật mã kháng lượng tử và sách có thể được cập nhật sau khi NIST chuẩn hóa PQ.

  • Câu hỏi về triển khai trong các ngôn ngữ khác như Java, C#

    Câu hỏi xin thông tin về các triển khai tương tự trong những ngôn ngữ lập trình khác.

  • Lo ngại về bản triển khai thuần Go

    Bày tỏ lo ngại rằng nếu được viết hoàn toàn bằng Go thì có thể dễ bị tấn công kênh kề về thời gian/điện năng.

  • Sự quan tâm và câu hỏi về hỗ trợ Kyber v3

    Đánh giá tích cực về việc hỗ trợ draft00/kyber v3 và đặt câu hỏi về khả năng hỗ trợ chế độ Kyber 90's mà không cần SHA-3.

  • Trò đùa về bảng system call 32-bit

    Một câu đùa rằng bảng system call 32-bit "sắp ra mắt".

  • Thiện cảm với việc dùng tên biến Unicode

    Dù không có khả năng đánh giá chất lượng của thuật toán hay bản triển khai, người viết vẫn rất đánh giá cao việc sử dụng tên biến Unicode.

  • Khen ngợi các dự án khác của FiloSottile

    Bày tỏ sự yêu thích với một công cụ khác do FiloSottile phát triển là age.

  • Chia sẻ liên kết tới tài liệu NIST FIPS 203

    Chia sẻ liên kết tới tài liệu NIST FIPS 203 được nhắc đến trong bài viết.