Tiếng Việt

Văn bản & công cụ hàng ngày · Trình tạo mật khẩu

PRNG so với CSPRNG: số ngẫu nhiên trên trình duyệt của bạn thực sự đến từ đâu

· Lý lịch

mật khẩu web-crypto csprng

Các byte mật mã của trình duyệt chảy qua việc lấy mẫu từ chối tới chỉ mục một từ
Hình minh họa vector ToolAcre gốc

Giải thích sự khác biệt giữa trình tạo giả ngẫu nhiên và bảo mật bằng mật mã, cách hệ điều hành thu thập entropy từ các sự kiện phần cứng và cách tính ngẫu nhiên đó tiếp cận một trang web thông qua Web Crypto API.

Máy tính có tính quyết định, vậy tính ngẫu nhiên đến từ đâu? — câu đố cơ bản đằng sau mỗi trình tạo

JavaScript chạy trong ToolAcre bắt đầu tại ranh giới API. Nó có thể yêu cầu byte từ `crypto.getRandomValues`, quan sát xem cuộc gọi đó có thành công hay không và sử dụng mảng được trả về. Nó không thể kiểm tra mọi sự kiện vật lý, nhóm nhân hoặc thành phần phần cứng mà một nền tảng cụ thể có thể sử dụng bên dưới. Do đó, câu chuyện về nguồn gốc của cuốn sách bài tập về tính ngẫu nhiên đã vượt quá bằng chứng địa phương.

Một lời giải thích trung thực về mặt kỹ thuật bắt đầu từ việc quan sát bắt đầu. Ứng dụng sẽ thăm dò Web Crypto, công cụ sẽ bao bọc nó và tất cả các lựa chọn sẽ sử dụng nguồn đó. Nội bộ dành riêng cho nền tảng cần có tài liệu và kiểm tra nền tảng, không phải một tuyên bố chung được suy ra từ tên phương thức trình duyệt.

Kho lưu trữ bắt đầu từ trình duyệt API; nó không kiểm tra các nguồn entropy vật lý

Trình tạo giả ngẫu nhiên thường được mô tả bằng hạt giống và trạng thái có thể tái tạo, nhưng kho lưu trữ này không yêu cầu các công cụ JavaScript phải chia sẻ một thiết kế Math.random. ToolAcre tránh sự mơ hồ bằng cách cấm hoàn toàn API trong quá trình tạo thông tin xác thực. Quét nguồn thực thi sự đảm bảo tiêu cực đó.

Các thử nghiệm vẫn cần các byte xác định nên chúng chèn các đối tượng hiển thị `getRandomValues` thông qua một tham số nội bộ. Những hàng giả đó tồn tại trong hỗ trợ thử nghiệm và không được xuất khẩu dưới dạng chế độ sản xuất hạt giống. Khả năng kiểm tra không tạo ra tùy chọn ẩn cho người dùng đối với các mật khẩu có thể lặp lại.

Math.random bị cấm ở đây nếu không yêu cầu một thiết kế PRNG phổ biến

Sản phẩm sử dụng “mật mã” theo cách có phạm vi: giao diện trình duyệt được yêu cầu là Web Crypto và việc tạo không thành công khi không có hoặc không sử dụng được. Ứng dụng gọi phương thức này trong quá trình phát hiện thay vì chỉ kiểm tra loại của nó, nắm bắt các môi trường bị hạn chế nơi thực hiện lệnh gọi.

Hợp đồng đó không hứa hẹn sẽ chống lại mọi thỏa hiệp trạng thái giả định hoặc chứng nhận việc triển khai trình duyệt. Nó chứng minh API nào trang yêu cầu và không có dự phòng yếu hơn nào được kết nối cùng với nó. Tính toàn vẹn của thiết bị vẫn ở bên ngoài trình tạo.

Thuộc tính mật mã đã được xác minh là nguồn Web Crypto và đường dẫn từ chối bắt buộc

Các sự kiện định thời gian, hướng dẫn bộ xử lý chuyên dụng, lịch trình khởi tạo lại và nhóm entropy của hệ điều hành đều nằm bên dưới bề mặt Web API. Không có gì được xác nhận ở đây vì nguồn gói không thể xác minh chúng. Một bài viết dành riêng cho nền tảng trong tương lai sẽ cần tài liệu chính cho từng môi trường mà nó mô tả.

Sự thiếu sót củng cố hơn là làm suy yếu tuyên bố hiện tại. ToolAcre có thể nói chính xác những gì nó yêu cầu trình duyệt thực hiện và cách nó xử lý byte. Không cần phải giả vờ JavaScript có thể kiểm tra toàn bộ chuỗi entropy để biện minh cho việc từ chối Math.random.

Chi tiết về sự kiện phần cứng và nhóm hệ điều hành là các tuyên bố triển khai mà nguồn này không chứng minh được

`getRandomValues` lấp đầy `Uint8Array` có kích thước từ giới hạn độc quyền được yêu cầu. `secureRandomInt` tập hợp các byte đó thành số cuối lớn không dấu, tính toán cửa sổ chấp nhận chia hết lớn nhất và loại bỏ các giá trị còn lại. Giá trị được chấp nhận sau đó được giảm xuống thành một chỉ mục.

Các từ, dấu phân cách, ký tự và hoán đổi ngẫu nhiên đều sử dụng lại đường dẫn này. Một điểm nghẽn duy nhất giúp chuỗi trình duyệt được lựa chọn có thể được xem xét lại và đảm bảo rằng việc sửa lỗi giới hạn giảm sẽ ảnh hưởng đến mọi chế độ tạo thay vì một người gọi bị lãng quên.

Từ getRandomValues ​​đến safeRandomInt: đường dẫn từ trình duyệt đến chỉ mục hiển thị

Đối với nhóm từ 7,776, hàm sẽ chọn đủ byte để biểu thị mọi chỉ mục hợp lệ. Nó tạo thành một số nguyên, từ chối bất kỳ giá trị nào bằng hoặc cao hơn giới hạn được tính toán và chỉ trả về phần còn lại sau khi được chấp nhận. `secureRandomChoice` sử dụng kết quả đó để đọc một từ trong mảng đủ điều kiện.

Chỉ số sản xuất cụ thể là riêng tư và không được sao chép trong tài liệu. Thay vào đó, các thử nghiệm xác định cung cấp các byte đuôi và byte trong phạm vi đã biết để chứng minh luồng điều khiển. Điều này theo dõi một lựa chọn mà không biến cụm từ được tạo thành ví dụ công khai.

Ví dụ đã hoạt động: theo dõi byte thông qua lấy mẫu từ chối tới một chỉ mục danh sách

Thiết kế trình tạo số ngẫu nhiên phần cứng và bằng chứng mật mã chính thức không được bao gồm trong gói. Không phải thời gian chạy máy chủ hoặc ứng dụng gốc. Việc triển khai là một trình tạo trình duyệt và các đảm bảo của nó sẽ không được sao chép vào các hệ thống không liên quan.

Nó cũng không đề cập đến việc lưu trữ hoặc sử dụng sau này. Giá trị được chọn thông qua Web Crypto vẫn có thể bị lộ do sử dụng lại, lừa đảo, lịch sử bảng nhớ tạm hoặc phần mềm độc hại. Lựa chọn CSPRNG giải quyết được vấn đề nguồn chứ không phải mọi vấn đề xử lý thông tin xác thực.

Bài học rút ra - Trình tạo mật khẩu yêu cầu trình tạo mật mã của trình duyệt, đây là nguồn phù hợp cho một bí mật

Chuỗi hành động có thể thực hiện rất ngắn: kiểm tra xem Web Crypto có hoạt động hay không, từ chối việc tạo khi nó không hoạt động, điền byte, từ chối phần đuôi không đồng đều và ánh xạ giá trị được chấp nhận vào một chỉ mục. ToolAcre giúp hiển thị từng bước và kiểm tra các giới hạn khó.

Hãy xem lại chuỗi đó thay vì dựa vào nhãn “ngẫu nhiên” mơ hồ. Sau đó xem xét riêng điểm cuối và điểm đến. Mật mã API của trình duyệt là nguồn chính xác cho sản phẩm này nhưng kho lưu trữ không yêu cầu chứng nhận những gì nằm bên dưới nó hoặc mọi thứ tiếp theo.