Điểm:2

Lợi ích của việc băm một hạt giống cụ thể trong PRNG

lá cờ il

Câu hỏi này được liên kết với câu hỏi này (stackoverflow) nơi tôi đã hỏi về chi tiết triển khai cụ thể của trình tạo số ngẫu nhiên của Python (Mersenne Twister). Ở đây, tôi có một tiêu điểm hơi khác. Vui lòng đóng, nhưng tôi không thể tìm thấy câu hỏi tương tự nào trả lời chính xác câu hỏi của mình

  • Trong PRNG, lợi ích của việc băm một hạt giống cụ thể (do người dùng cung cấp) là gì?
  • Sẽ có bất kỳ lợi ích bổ sung nếu muối được áp dụng?

Ví dụ, trong trường hợp của Pythons, chúng làm cả hai, trong đó muối được sử dụng chính là hạt giống.

CHỈNH SỬA: Tôi được hỏi về một trường hợp sử dụng mà tôi thấy khó trả lời? Nghiên cứu việc triển khai một số PRNG bằng một số ngôn ngữ phổ biến, dường như luôn băm/muối/sửa đổi hạt giống do người dùng của họ cung cấp. Xem ví dụ https://github.com/python/cpython/blob/a57ec7a4feaf24f470a9d1e5b1b3f2cb1b062af7/Lib/random.py#L157

Vì hầu hết các ngôn ngữ dường như làm điều này, tôi hỏi tại sao họ băm hạt giống người dùng thay vì chỉ phân tích cú pháp đó thành PRNG

AleksanderCH avatar
lá cờ nl
Điều này có trả lời câu hỏi của bạn không? [Thuộc tính của PRNG / Băm?](https://crypto.stackexchange.com/questions/277/properties-of-prng-hashes)
lá cờ il
@AleksanderCH Đáng buồn là không, câu hỏi hỏi về lợi ích của _always_ băm hạt giống. (Tôi có thể thấy nếu bạn sắp xếp thời gian hoặc lúc nào khác) Ở đây tôi đang hỏi nó sẽ có những lợi ích gì khi chúng ta cài đặt hạt giống theo cách thủ công.
kodlu avatar
lá cờ sa
trường hợp sử dụng cho một thực hành như vậy là gì? bạn cần cung cấp thêm chi tiết trong câu hỏi
SAI Peregrinus avatar
lá cờ si
Một PRNG sẽ xuất ra cùng một chuỗi cho một hạt giống nhất định. CSPRNG không nên, nếu nó sử dụng hạt giống do người dùng kiểm soát thì nó nên trộn nó với các nguồn entropy khác trước khi sử dụng. Python mà bạn đã liên kết là PRNG thông thường, nó chỉ băm đầu vào để đảm bảo nó có số byte phù hợp cho các hoạt động sau.
Paul Uszak avatar
lá cờ cn
@SAIPeregrinus Re. _"CSPRNG không nên"_. Bạn có chắc không? Có khả năng nào bạn đang kết hợp CSPRNG với TRNG không? ChaCha, SecureRandom và tất cả các RNG dựa trên mật mã khối đều được coi là CSPRNG. Tuy nhiên, tất cả chúng đều mang tính quyết định.
SAI Peregrinus avatar
lá cờ si
ChaCha là mật mã luồng, không phải CSPRNG. Theo định nghĩa, CSPRNG mang tính quyết định (đó là chữ P). Chúng cũng không chỉ dựa vào đầu vào của người dùng cho entropy trong bất kỳ triển khai thực tế nào (SecureRandom không có, getrandom() không có, CryptGenRandom không có, v.v.). CSPRNG *nên* lấy entropy đầu vào từ HWRNG nếu có và từ các nguồn phần cứng khác khi không.Bạn có thể tạo CSPRNG từ mật mã luồng, nhưng mật mã luồng không nhất thiết phải là CSPRNG.
Điểm:1
lá cờ fr

Khi chúng tôi tạo bất kỳ loại PRNG nào, chúng tôi có thể có dữ liệu không đồng nhất về entropy của nó. Ví dụ: có thể nguồn ngẫu nhiên an toàn bằng mật mã duy nhất của chúng tôi là một tập hợp UUID dạng chuỗi ngẫu nhiên. Tuy nhiên, trong hầu hết các triển khai PRNG, chúng tôi muốn tính ngẫu nhiên của mình đồng nhất và có kích thước cố định. Để có được điều đó, chúng tôi cần một số cách để chắt lọc đầu vào thành kích thước phù hợp và hàm băm là một cách dễ dàng để thực hiện điều đó.

Khi chúng tôi có PRNG không mã hóa, thông tin đầu vào mà người dùng cung cấp thường có thể có kích thước bất kỳ và thường hữu ích khi cho phép người dùng cung cấp một nguồn gốc tùy ý. Ví dụ: một số trò chơi điện tử cho phép bạn tạo PRNG của chúng bằng văn bản tùy ý để phát lại cùng một trò chơi và điều đó sẽ cần được chắt lọc thành đầu vào phù hợp, trong đó hàm băm phù hợp. Muối trong trường hợp này sẽ không hữu ích vì mục tiêu là tạo ra kết quả xác định.

Khi chúng tôi sử dụng CSPRNG, thuật toán chúng tôi sử dụng là xác định, nhưng chúng tôi muốn tạo nó với các đầu vào có đủ entropy để đảm bảo đầu ra của nó là không thể đoán được. Đó là, mục tiêu của chúng tôi là đầu ra không xác định. Một số thiết kế chọn buộc các đầu vào có entropy đồng nhất, nhưng hầu hết các thiết kế sử dụng một số loại hàm dẫn xuất, giống như hàm được sử dụng bởi CTR_DRBG, để cho phép các đầu vào không đồng nhất. Đôi khi các thuật toán đó dựa trên hàm băm và đôi khi thì không. Ví dụ: CTR_DRBG sử dụng hàm dẫn xuất dựa trên mật mã khối để làm cho toàn bộ thuật toán có thể thực hiện được chỉ bằng một triển khai AES. HMAC_DRBG sử dụng HMAC trong vai trò này, dựa trên hàm băm.

Các thiết kế DRBG cho phép sử dụng chuỗi muối hoặc chuỗi cá nhân hóa và điều này thường được khuyến nghị. Một loại muối cố định hoặc không ngẫu nhiên sẽ không cải thiện tính bảo mật nếu không đủ entropy, vì chúng tôi cho rằng muối là công khai, nhưng có những bối cảnh mà nó có thể hữu ích, chẳng hạn như nếu nhiều DRBG phải được tạo từ cùng một đầu vào entropy.

Có một số trường hợp chúng tôi sử dụng thiết kế CSPRNG cho đầu ra xác định không thể phân biệt được với ngẫu nhiên và muối rất hữu ích ở đó. Ví dụ: trong RFC 6979, mô tả DSA và ECDSA xác định, chúng tôi sử dụng HMAC_DRBG để tạo giá trị ngẫu nhiên $k$. Khóa riêng là đầu vào entropy của chúng tôi và hàm băm của tin nhắn là muối và cả hai đều cần thiết để bảo mật.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.