請注意,池中的熵數量不一定必須是整數。這應該主要處理你的主要因素 - 其他問題。
即使您最終使用的是需要整數估計的實現,您也需要相當多的骰子來生成加密密鑰。所以你可以只是要求他們一束。如果用戶給出了10個d6卷的結果,並且你估計熵爲25位,那麼每個擲骰子只丟失0.08位。記住要圓下來;-)
順便說一句,我會認爲要求用戶的TRNG數據,而不是從硬件來源/ dev /隨機做,是一個有趣的玩具,而不是一個改進。專家很難生成隨機數字 - 你不想讓一般用戶處於他們自己的業餘主義的控制之下。 「隨機數的產生太重要了,以至於沒有機會」--Robert Coveyou。
另一方面,BSD的作者認爲,由於對PC硬件實際來源的熵估計並不是很好理解(作爲一個物理問題,而不是數學問題),所以使用PRNG實際上並不是壞的選項,只要根據Schneier/Kelsey/Ferguson的Yarrow設計進行良好的重新設計。你的骰子想法至少比典型的熵源/ dev/random更有優勢,只要用戶可以信任找到合適的骰子並正確地滾動它們,就可以自信地將熵放在下限。它有一個缺點,那就是有一副雙筒望遠鏡和/或在他們的鍵盤上竊聽手段的觀察者(例如,通過其E/M發射)可以打破整個方案,所以真的取決於你的威脅模型。
/dev/random從用戶交互(鼠標/鍵盤)和磁盤訪問速度中獲取一些輸入,這些都自然影響現象。沒有這些輸入,/ dev/random會緩慢輸出(等待真正的隨機數據)! – joeytwiddle 2009-05-03 09:31:59
/dev/random從用戶交互(鼠標/鍵盤)和磁盤訪問速度中獲取一些輸入,這兩種情況都是自然影響的現象。沒有這些輸入,/ dev/random會緩慢輸出(等待真正的隨機數據)! – joeytwiddle 2009-05-03 09:32:29
@joey:但是IIRC根可以向池中貢獻熵並提供它自己的估計值。所以一個合適的setuid程序可以接受來自可信用戶的骰子卷,並將它們送入/ dev/random,然後輸出與用戶擲骰子一樣快(即仍然非常緩慢......) – 2009-05-03 10:08:28