5 phút đọcCập nhật

Pseudo-random thường so với random mật mã: điều kỹ sư hay hiểu nhầm

Tác giả: Biên tập Safe Local Tools

Độ phức tạp hiển thị của một mật khẩu chỉ đáng tin khi tiến trình sinh nó không bị khám phá được. Chuỗi trông như ngẫu nhưng nếu RNG dưới mặt nạ là các phép chi giả trên trạng thái hữu hạn, kẻ tấn công vẫn huýt sáo thu hẹp không gian tìm kiếm.

Bài viết phân biệt PRNG nhanh với CSPRNG, mô hình đe dọa thực tế, entropy theo bảng chữ, bias do phép mod; nhấn mạnh khi Safe Local Tools chạy cục bộ giúp bạn thử nghiệm chính sách mà không gửi bản nháp lên mạng lạ.

OG illustration

Định nghĩa ngắn gọn mà không lấp liếm

PRNG nở trạng thái nội bộ nhỏ thành chuỗi xác định nếu biết phần trạng thái bị lộ. CSPRNG đặt mục tiêu đầu ra khó phân biệt với bit ngẫu thật kể cả khi đối thủ quan sát một phần chuỗi trước đó, trong giả định chuẩn mật mã thông thường. Thảm họa vận hành hiếm khi đến từ “code ngốc rõ mồn một”; họ thường phát sinh khi RNG thống kê của mô phỏng bị tái lập trong ranh giới chứa bí mật.

Vì việc không nên làm:

// Sai mô hình: token trông đẹp nhưng RNG có thể dự báo được
const sai = Math.random().toString(36).slice(2);
 
const buf = new Uint8Array(16);
crypto.getRandomValues(buf);
// byte thô từ CSPRNG trình duyệt thích hợp là nguyên liệu mã hoá đúng cách tiếp theo các quy định nội bộ của bạn

Entropy thực tế chứ không phải chỉ “mật khẩu dài một chút”

Nếu mỗi ký hiệu được chọn độc lập đồng đều từ bảng cỡ A qua độ dài L, không gian khả dĩ xấp xỉ A^L—tăng L một bước nhân hệ số A. Con người chọn mật khẩu theo thói quen văn hoá; từ điển và quy tắc thay thế @ cho a vẫn giúp kẻ tấn công. Máy chọn đồng đều thì khác. Lưu ý: ánh xạ byte ngẫu sang bảng in được bằng phép mod thô làm lệch phân phối nếu không dùng loại bỏ (rejection sampling) hoặc thư viện đã kiểm chứng.

Chính sách tổ chức và người dùng

File JSON chính sách minh hoạ hay tranh luận “độ dài tối thiểu mười sáu, có số”, nhưng random mật mã chỉ đạt mục tiêu entropy khi bảng mẫu và bước mã hoá byte về chuỗi được triển khai đúng. Kết hợp trình quản lý mật khẩu; yếu tố thứ hai vẫn quan trọng vì mật khẩu ngẫu không chống giả mạo trang đăng nhập hơn WebAuthn trong nhiều triển khai.

{
  "minLength": 16,
  "requireUpper": false,
  "requireDigits": true,
  "charset": "ASCII-in-được-in-dây-in-chuẩn"
}

Sinh phía client trong môi trường có kiểm soát

Trình tạo trên trình duyệt thuận tiện cho giai đoạn soạn thảo hoặc demo; hệ thống phải tuân thủ vẫn thường ký phát hành mật khẩu phía máy chủ để ghi log và thu hồi. Nhắc người dùng đừng quên lịch sử clipboard hay phần mềm ghi màn hình—đó là chính sách đào tạo, không phải chú thích ẩn.

Safe Local Tools tránh gửi bản nháp lên các endpoint không thống nhất với DPIA của bạn. Khi khảo sát mô hình kẻ tấn công offline sau rò rỉ CSDL, chỉ các mật khẩu dài và được băm bằng Argon2id/bcrypt có chi phí thích hợp mới chịu đựng brute-force thực tế.

Mối quan hệ với hashing chậm, rotation và các ràng buộc pháp lý trong doanh nghiệp

Sinh một mật khẩu chính xác bằng CSPRNG vẫn chưa xong phần hệ thống: phiên làm việc phía máy chủ nên băm bằng Argon2id hoặc bcrypt với cost phù hợp; token máy-máy có thể thiết kế khác hẳn vì không bị ràng buộc bộ nhớ con người. Khi rò rỉ base64 log, kẻ tấn công có thể lấy một phần đầu ra PRNG cũ—đó là lý do quy trình post-quantum hoặc rotation sau sự cố không thể quay lại “chỉ đổi password khi user quên”.

Về mặt quản trị, policy yêu cầu ký tự đặc biệt đôi khi buộc người dùng dùng máy sinh rồi lưu manager; khi organization chưa triển khai manager công ty, generator cục bộ giúp bridge thời gian miễn là training nói rõ clipboard lifecycle.

Nếu bạn benchmark “độ mạnh” bằng các công cụ web bên ngoài, bạn vừa vi phạm ranh giới dữ liệu vừa nhận kết quả gợi ý marketing. Một mô hình đe dọa thực tế hơn là kẻ tấn công có file dump sau khi site bị SQLi: họ chạy các công cụ bẻ hash kiểu John the Ripper với ruleset lớn trên hash yếu; độ dài mật khẩu ngẫu nhiên đủ dài vẫn là phòng tuyến tốt nếu băm không bị cắt.

Kết nối Safe Local Tools vào quy trình audit nội bộ

Reviewer có thể yêu cầu chứng cứ RNG gọi Crypto.getRandomValues so với gọi thư viện thống kê của ngôn ngữ scripting: giữ một diff nhỏ minh chứng chỗ production code phân nhánh không lẫn với các util Monte Carlo của data science trong cùng repo.

Khi chứng chỉ SOC2 hoặc ISO hỏi “làm sao chứng minh người dùng không dán nháp qua các trang không kiểm soát”, các buổi demo generator cục bộ đóng vai một bằng chứng thực tiễn—không đủ một mình nhưng tốt hơn chỉ có slide.

Kỹ năng cuối cùng không phải “biết các hằng số entropy” một cách cứng nhắc—mà là biết chỗ RNG nằm ở biên tin cậy nào, áp các thư viện đã được xét duyệt thay cho phép chia lấy dư modulo tự viết, và ghi vào wiki nội bộ các quyết định trên không gian các chính sách mật khẩu. Khi không chắc, cứ làm ví dụ bằng Safe Local Tools trong tab của bạn và đặt các bản sinh vào ví quản lý thay vì vào ô chat.