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
Ý 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ử
Lời chào và chia sẻ từ Kudelski Security
Gợi ý sách về các hệ mật được triển khai bằng Go
Câu hỏi về triển khai trong các ngôn ngữ khác như Java, C#
Lo ngại về bản triển khai thuần Go
Sự quan tâm và câu hỏi về hỗ trợ Kyber v3
Trò đùa về bảng system call 32-bit
Thiện cảm với việc dùng tên biến Unicode
Khen ngợi các dự án khác của FiloSottile
Chia sẻ liên kết tới tài liệu NIST FIPS 203