Random

寫入 /dev/random 的即時效果

  • November 1, 2019

出於最好描述為哲學的原因,我想知道以下內容。假設我要在時間 X 從 /dev/random(或 /dev/urandom)讀取。在一種情況下,我只是這樣做,但在另一種情況下,/dev/random 處於相同狀態,我推送一些字節數在時間 X 之前進入 /dev/urandom。輸出是否相同?忽略這種情況,由於巨大的、奇怪的巧合,我寫的特定字節發生了,使 /dev/random 的狀態保持與以前相同的狀態。

另一種詢問方式:寫入 /dev/random 是否會立即改變(除非不太可能的巧合)/dev/random 的狀態,或者是否存在某種緩衝(輸入或輸出),這意味著 /dev/random 將受我的寫作影響,但僅限於可能遙遠的未來?

注意:我沒有使用 ioctl 來聲明在我寫作時可以獲得額外的熵。

我想強調這不是一個“重要”的問題,而且我完全理解,據我所知,一些量子隨機性硬體可能會因為世界各地的某個人打哈欠或沒有打哈欠而改變狀態,更不用說我是否打哈欠了。不要寫。這個問題嚴格來說是關於寫入 /dev/random 的行為是否會立即改變軟體中的狀態,或者 /dev/random 是否已經緩衝了你接下來要得到的東西(或者緩沖你寫給它的東西,直到它決定重新播種),因此寫入的效果被延遲。

既然這個問題顯然是不可能的,讓我解釋一下我為什麼要問。我執行一個遊戲,其中 /dev/random 的輸出用於決定遊戲結果。在遊戲過程中,人們在喃喃自語,我會實時複製那個音頻流,對其進行雜湊處理,然後將其推送到 /dev/random。我要決定的是我是否可以準確但荒謬地聲稱“如果你不只是這麼說,你就不會擲出那個 1”,或者我是否應該只做出較弱的聲稱“你所說的總有一天會回來困擾你的骰子。”

同樣有趣的是,“現在影響它”是否可能是 /dev/random 的永久屬性,或者只是目前實現的僥倖。

謝謝!

(假設 drivers/char/random.c 中的文件是正確的,)您編寫的任何內容都直接混合到熵池中,並且隨機輸出是該池的雜湊。所以改變應該是立竿見影的。

但是,讀取 /dev/random 可能會阻塞(當熵為空時)並且寫入(使用 poll)也可能阻塞(當熵滿時),並且寫入 /dev/random 通常可能非常慢。所以這個想法有一些性能方面的考慮。

如果您希望隨機數據依賴於您的使用者喃喃自語,您可以完全跳過 /dev/random 並通過您自己的 SHA 函式滾動所有內容。這也可以讓你完全控制狀態。所以你可以給每個使用者自己的雜湊實例,這樣他們的隨機數就完全基於他們自己的聲音。不依賴於系統隨機性,也不依賴於其他人所說的。如果他們了解您的雜湊函式實現並發送準備好的音頻模式,這也可能允許他們作弊。;-)

但除此之外,整個想法相當深奧。隨機數據是不可預測的,雜湊結果也是如此;除非您不希望它是隨機的,否則僅僅閱讀/dev/_u_random並且從不將任何內容寫回它並沒有太大意義。

引用自:https://unix.stackexchange.com/questions/549845