Randomness

尋找可以在硬體中實現的安全 PRNG

  • December 12, 2014

我正在嘗試在硬體中實現一個(某種)簡單的 PRNG 以獲得樂趣。我的想法是允許使用者使用鍵盤(或一些可以設置和隱藏的 DIP 開關設置)輸入密鑰,並使用照片、陀螺儀和音頻感測器回饋獲取種子。

我知道我可能必須在硬體中實現某種形式的模運算。然而,我想出了一個硬體簡單的算法,只需要使用 XOR 門。您對此有何看法?

key = k bits taken from keypad entry
seed = k bits taken from environment sensors
while (true):
   seed << seed[3]             // rotate the seed if seed[3] is 1
   newSeed <- key XOR seed     // the new seed is XORed with the key
   output <- lsb(newSeed)      // output the lsb of the seed
   seed <- newSeed

它輸出新計算的種子的 lsb。我在算法設計方面沒有經驗,所以我確信這充滿了攻擊。如果以上對於 PRNG 來說還不夠,我應該使用哪個?有沒有一種對於低位硬體來說更簡單的方法?

首先,您不應該編寫自己的 CSPRNG - 您可以從中挑選很多經過嚴格審查的 CSPRNG。

其次,您的文本和虛擬碼不匹配(旋轉密鑰或旋轉種子)。

第三,據我了解,這種算法甚至沒有提供良好的隨機性。例如:

Main> let seed = `0x82398eeaf74239 : [64]
Main> let key =  `0x8732754279249  : [64]
Main> let out = take `{256} (prng key seed)
Main> out
0x5555555555555555555555555555555555555555555555555555555555555555

引用自:https://crypto.stackexchange.com/questions/20801