Thư viện tạo số ngẫu nhiên C++ gây tranh cãi gay gắt về sự đánh đổi giữa bảo mật và hiệu suất

BigGo Editorial Team
Thư viện tạo số ngẫu nhiên C++ gây tranh cãi gay gắt về sự đánh đổi giữa bảo mật và hiệu suất

Một thư viện tạo số ngẫu nhiên C++ mới có tính năng bộ tạo WELL (Well Equidistributed Long-period Linear) đã khơi mào những cuộc thảo luận sôi nổi trong cộng đồng lập trình về việc liệu các bộ tạo số ngẫu nhiên an toàn mật mã có nên là lựa chọn mặc định cho tất cả các ứng dụng hay không.

Thư viện này tập trung vào việc tạo số giả ngẫu nhiên hiệu suất cao với các tính năng như khả năng tái tạo đa nền tảng và thuật toán phân phối được tối ưu hóa, đã trở thành trung tâm của một cuộc tranh luận triết học rộng lớn hơn về bảo mật so với hiệu suất trong phát triển phần mềm.

So sánh họ bộ sinh WELL

  • WELL44497b và WELL19937a cho thấy kết quả "ngược lại" trong TestU01 trên các ngôn ngữ lập trình khác nhau
  • Tối ưu hóa kích thước không gian trạng thái phụ thuộc chủ yếu vào các giá trị TBit và MASK
  • Các tham số bổ sung (K, J) cung cấp các ràng buộc nhưng không ảnh hưởng đáng kể đến hiệu suất của bộ kiểm tra

Lập luận ưu tiên bảo mật đối mặt với sự phản đối mạnh mẽ

Một trong những điểm gây tranh cãi nhất xuất hiện khi một nhà phát triển lập luận rằng có rất ít trường hợp sử dụng cho các RNG không mã hóa và đề xuất rằng tất cả việc tạo số ngẫu nhiên nên được bảo mật mật mã theo mặc định. Quan điểm này, ủng hộ các thuật toán như Randen cung cấp đảm bảo bảo mật có thể chứng minh, đã gặp phải sự phản kháng đáng kể từ cộng đồng.

Các nhà phê bình nhanh chóng chỉ ra những tác động hiệu suất khổng lồ của cách tiếp cận này. Nhiều nhà phát triển nhấn mạnh rằng nhiều ngành công nghiệp bao gồm khoa học, mạng neural, mô phỏng, game, kết xuất, mô hình thời tiết, nghiên cứu hạt nhân, robot và xử lý tín hiệu cần hàng tỷ đến hàng nghìn tỷ số ngẫu nhiên một cách nhanh chóng. Đối với những ứng dụng này, chi phí phụ trội của các bộ tạo an toàn mật mã sẽ là cấm đoán.

Các Cân nhắc về Bảo mật

  • Việc triển khai ChaCha CSPRNG có thể có entropy seed không đủ (32-64 bits)
  • Luồng đầu ra sẽ quay vòng sau 2^32 blocks, có thể được mở rộng
  • Thuật toán Randen cung cấp bảo mật có thể chứng minh dựa trên các nguyên thủy AES
  • Linux vDSO getrandom() cung cấp các số ngẫu nhiên an toàn mật mã học nhanh chóng (được hợp nhất vào tháng 7 năm 2024)

Triết lý thiết kế API khơi mào thảo luận kỹ thuật

Cuộc trò chuyện cũng đi sâu vào các nguyên tắc thiết kế API cơ bản, đặc biệt là xung quanh các cơ chế seeding. Các nhà phát triển tranh luận về việc liệu các hàm tiện ích có nên cho phép seeding thủ công hay luôn sử dụng các nguồn entropy. Cuộc thảo luận tiết lộ một căng thẳng kinh điển giữa khả năng tương thích ngược và cải tiến bảo mật, với các tham chiếu đến cách các hệ thống cũ như hàm rand() của glibc vẫn bị mắc kẹt với các thuật toán lỗi thời do các hợp đồng API.

Một giải pháp kỹ thuật thú vị được đề xuất liên quan đến việc sử dụng thread-local storage để cung cấp cả sự tiện lợi và seeding phù hợp, chứng minh cách các tính năng C++ hiện đại có thể giải quyết các thách thức tạo số ngẫu nhiên truyền thống.

Tuyên bố hiệu suất gây hoài nghi

Các benchmark hiệu suất của thư viện, cho thấy một số bộ tạo chạy ở 100-105% hiệu suất của thư viện chuẩn, đã làm các nhà phát triển có kinh nghiệm ngạc nhiên. Một số đặt câu hỏi về độ tin cậy của những con số này, trong khi những người khác tập trung vào các mối quan tâm thực tế hơn như cách tiếp cận của thư viện đối với việc tạo số dấu phẩy động và tính nhất quán đa nền tảng.

Cuộc thảo luận cũng đề cập đến các giải pháp cấp kernel mới nổi như vDSO getrandom() của Linux, cung cấp truy cập nhanh đến các số ngẫu nhiên an toàn mật mã, mặc dù các nhà phát triển lưu ý rằng điều này vẫn chậm hơn đáng kể so với các bộ tạo giả ngẫu nhiên chuyên biệt cho các ứng dụng thông lượng cao.

So sánh hiệu suất

  • std::minstd_rand: hiệu suất cơ sở 100%
  • std::mt19937: 105% hiệu suất cơ sở
  • Thư viện tuyên bố có phân phối đồng nhất/chuẩn nhanh hơn với tính nhất quán chuỗi đa nền tảng
  • Phân phối chuẩn nhanh sử dụng xấp xỉ nhị thức dựa trên popcount cho các ứng dụng game/fuzzing

Phán quyết: Bối cảnh quan trọng

Cuộc tranh luận cuối cùng củng cố một nguyên tắc chính trong phát triển phần mềm: chọn công cụ phù hợp cho công việc. Trong khi các bộ tạo an toàn mật mã là thiết yếu cho các ứng dụng nhạy cảm về bảo mật, phần lớn việc sử dụng số ngẫu nhiên trong tính toán khoa học, game và công việc mô phỏng đòi hỏi tốc độ và tính xác định mà các bộ tạo giả ngẫu nhiên chuyên biệt cung cấp.

Sử dụng công cụ phù hợp cho công việc. Mở rộng tầm nhìn của bạn về những gì được sử dụng cho mục đích gì.

Cuộc thảo luận nhấn mạnh cách các lĩnh vực khác nhau có yêu cầu rất khác nhau, và những khuyến nghị chung cho việc luôn sử dụng các bộ tạo an toàn mật mã không tính đến nhu cầu đa dạng của cộng đồng lập trình.

Tham khảo: well-random