Điểm:3

Tôi có thể coi hàm băm SHA-256 là 64 lần tung xúc xắc công bằng với các số từ 1 đến 16 không?

lá cờ in

Tôi hiểu rằng SHA-256 khá ngẫu nhiên hoặc đủ "ngẫu nhiên".

Tôi cho rằng điều đó có nghĩa là mọi nhân vật sẽ hoạt động giống như một lần tung xúc xắc từ 1 đến 16.

Với giả định này, tôi hy vọng rằng bạn có thể lập mô hình xác suất lặp lại các ký tự như $16^x$. Vì vậy, một chuỗi $\texttt{FFF}$ hoặc $\texttt{333}$ sẽ có cơ hội 1 đến $16^3 (4096)$ và một chuỗi $\texttt{FFFF}$ cơ hội 1 để $16^4 (65536)$.

Nhưng trong khi tạo ra nhiều giá trị băm (với UUID ngẫu nhiên làm hạt giống) để xác nhận giả định của tôi, các con số không cộng lại. Ví dụ: trong tập hợp 100 nghìn giá trị băm, tôi đã có hơn 1 nghìn chuỗi từ 4 ký tự trở lên (trong khi tôi đang mong đợi từ 1 đến 2 chuỗi).

Vì vậy, ở đây tôi đang cố gắng hiểu tại sao giả định của tôi lại sai ngay từ đầu.

Về cơ bản, tôi đã hiểu sai về tính ngẫu nhiên của hàm băm SHA-256 hay nó là thứ gì khác?

kelalaka avatar
lá cờ in
Không phải là một câu hỏi rõ ràng vì thử nghiệm của bạn không rõ ràng. Xem [thử nghiệm của SHA-1 trên các số 0 đứng đầu](https://crypto.stackexchange.com/a/83227/18298) của tôi. Làm thế nào để bạn có chuỗi 1K? Lưu ý rằng chúng tôi lập mô hình SHA-256 dưới dạng Hàm giả ngẫu nhiên mà chúng tôi không biết đó có phải là hàm không.
kelalaka avatar
lá cờ in
Mô hình của bạn thiếu một điểm là trong đầu ra 64-hex của SHA-256, bạn cần tìm xác suất của một chuỗi 4 ký tự ở bất kỳ đâu. Bạn thực sự không thể mô hình hóa khi mỗi hex đầu ra dưới dạng một cuộn vì chúng không độc lập với đầu vào ...
lá cờ in
@kelalaka thx cho đầu vào!
Điểm:4
lá cờ my

Vì vậy, một chuỗi $\texttt{FFF}$ hoặc $\texttt{333}$ sẽ có cơ hội 1 đến $16^3 (4096)$

Trên thực tế, một cơ hội của ba lần lặp lại nybble (có thể là $\texttt{FFF}$ hoặc $\texttt{333}$ hoặc $\texttt{000}$) sẽ là 1 trong $16^2 (256)$ - điều đó xảy ra bởi vì có $16^3$ các giá trị có khả năng bằng nhau của 3 nybble đó và 16 trong số các mẫu đó được lặp lại - do đó xác suất lặp lại là ${16 \trên 16^3} = {1 \trên 16^2}$. Nếu bạn chỉ định rằng họ phải $\texttt{FFF}$ (và vì thế $\texttt{333}$ sẽ không được tính), sau đó bạn sẽ nhận được $16^3$; tuy nhiên đó không phải là những gì bạn đang làm.

Ví dụ: trong một tập hợp 100 nghìn giá trị băm, tôi đã có hơn 1 nghìn chuỗi từ 4 ký tự trở lên

Điều đó gần như đúng - trong 100 nghìn lần băm, có khoảng 6.000.000 vị trí có thể xảy ra chuỗi 4 nybble lặp lại; bất kỳ một nơi nào cũng có xác suất $16^{-3} = {1 \hơn 4096}$ lặp lại - một tính toán đơn giản đưa ra khoảng 1.400 chuỗi lặp lại dự kiến.

Tôi nói đơn giản, bởi vì tính toán đơn giản này bỏ qua các chuỗi chồng chéo - ví dụ: một chuỗi gồm 5 nybble lặp lại sẽ được tính là một lần chạy, không phải 2 lần chạy 4. Ngoài ra, các xác suất liên quan đến các chuỗi chồng chéo không độc lập. Mặc dù những tác động này làm giảm phần nào tổng dự kiến, nhưng tôi tin rằng tính toán đơn giản là đủ tốt để ước tính tổng thể.

lá cờ in
Cảm ơn rât nhiều! Bằng cách chỉ ra lỗi trong giả định của mình, tôi có thể hiểu vấn đề nằm ở đâu và với video này https://www.youtube.com/watch?v=O4Qnsubo2tg tôi đã có thể hiểu cách tôi phải điều chỉnh chức năng của mình
lá cờ in
Tuy nhiên, tôi vẫn hơi bối rối về lý do tại sao cơ hội 1/4096 không có nghĩa là trung bình là 100k/4096 kết quả, bởi vì đó sẽ là ~24.
knaccc avatar
lá cờ es
@braunbaer Bởi vì trong chuỗi 64 ký tự hex, có 61 vị trí có thể có trong đó có thể có chuỗi 4 chuỗi hex. Đối với mỗi vị trí đó, khả năng ký tự đầu tiên giống với ba ký tự tiếp theo là (1/16)^3 = (1/4096). Do đó, chuỗi tứ giác lặp lại trên mỗi hàm băm sẽ là (1/4096 * 61) = 0,01489257812. Mỗi 100 nghìn lần băm, đó là 0,01489257812 * 100k = 1489.
lá cờ in
@knaccc vâng! Nghe có lý. Vì vậy, để rõ ràng, nếu chúng ta làm việc với chuỗi 4 ký tự hex, chúng ta sẽ có cơ hội "đơn giản" là 1/4096 vì chỉ có một vị trí khả dĩ cho chuỗi 4 chuỗi hex hoặc (1/4096 *1) rõ ràng
knaccc avatar
lá cờ es
@braunbaer vâng, chính xác. Cơ hội 1/4096 của tất cả các ký tự hex đều giống nhau, đó là một cách khác để nói rằng ký tự thứ 2, 3 và 4 đều giống như ký tự đầu tiên.
Maarten Bodewes avatar
lá cờ in
Q/A này do HNQ làm nên mình edit câu hỏi mang tính đại diện - tức là cũng cập nhật đáp án tất nhiên - mong các bạn không phiền.

Đă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.