2009-05-03 19 views
2

爲了某些目的,能夠繞過任何算法生成的隨機數字,以支持自然輸入 - 比如說擲骰子,這將會很棒。例如,加密密鑰生成讓我覺得這是一種需要足夠少的隨機數據的情況,並且要求數據真正具有足夠的隨機性,這可能是一種可行和理想的事情。是否存在用於從用戶輸入構建熵池的任何軟件?

所以我想知道的是,在我離開之前弄髒我的手之前,是否有任何軟件可以直接從隨機數字輸入中構建熵池?請注意,僅僅將事情從基數r轉換爲基數2是不夠的;例如,因爲3和2是相對的素數,所以在保持原始輸入中的最大熵的同時將基數-3(或基數-6)數字轉換爲二進制數字並不是完全簡單。

回答

4

設備/dev/random在Linux上完全實現了這一點 - 也許值得看看源代碼?

編輯:

作爲joeytwiddle說,如果有足夠的隨機性是不可用的,/dev/random將阻塞,通過監控外部設備(例如鼠標,磁盤驅動器)等熵爲「建立」。這可能是也可能不是你想要的。如果您不希望等待並且對可能的質量較低的隨機性感到滿意,請使用/dev/urandom代替 - 它是一個非阻塞的僞隨機數生成器,它在/dev/random可用時會注入隨機性,使其隨機性高於普通確定性PRNG。 (有關更多詳細信息,請參見man /dev/urandom。)

+1

/dev/random從用戶交互(鼠標/鍵盤)和磁盤訪問速度中獲取一些輸入,這些都自然影響現象。沒有這些輸入,/ dev/random會緩慢輸出(等待真正的隨機數據)! – joeytwiddle 2009-05-03 09:31:59

+0

/dev/random從用戶交互(鼠標/鍵盤)和磁盤訪問速度中獲取一些輸入,這兩種情況都是自然影響的現象。沒有這些輸入,/ dev/random會緩慢輸出(等待真正的隨機數據)! – joeytwiddle 2009-05-03 09:32:29

+0

@joey:但是IIRC根可以向池中貢獻熵並提供它自己的估計值。所以一個合適的setuid程序可以接受來自可信用戶的骰子卷,並將它們送入/ dev/random,然後輸出與用戶擲骰子一樣快(即仍然非常緩慢......) – 2009-05-03 10:08:28

2

這個paper建議了各種方法,包含UN * X和Windows的實現思路。

2

我不確定你在問什麼。 「熵池」只是「一些隨機數字」的一個詞,所以你當然可以使用骰子滾動;簡單地將它們用作具有所需特徵的僞隨機數生成器。

您可以從LavarndHotbits在線獲得物理生成的隨機數。

0

請注意,池中的熵數量不一定必須是整數。這應該主要處理你的主要因素 - 其他問題。

即使您最終使用的是需要整數估計的實現,您也需要相當多的骰子來生成加密密鑰。所以你可以只是要求他們一束。如果用戶給出了10個d6卷的結果,並且你估計熵爲25位,那麼每個擲骰子只丟失0.08位。記住要圓下來;-)

順便說一句,我會認爲要求用戶的TRNG數據,而不是從硬件來源/ dev /隨機做,是一個有趣的玩具,而不是一個改進。專家很難生成隨機數字 - 你不想讓一般用戶處於他們自己的業餘主義的控制之下。 「隨機數的產生太重要了,以至於沒有機會」--Robert Coveyou。

另一方面,BSD的作者認爲,由於對PC硬件實際來源的熵估計並不是很好理解(作爲一個物理問題,而不是數學問題),所以使用PRNG實際上並不是壞的選項,只要根據Schneier/Kelsey/Ferguson的Yarrow設計進行良好的重新設計。你的骰子想法至少比典型的熵源/ dev/random更有優勢,只要用戶可以信任找到合適的骰子並正確地滾動它們,就可以自信地將熵放在下限。它有一個缺點,那就是有一副雙筒望遠鏡和/或在他們的鍵盤上竊聽手段的觀察者(例如,通過其E/M發射)可以打破整個方案,所以真的取決於你的威脅模型。

相關問題