Randomness
尋找可以在硬體中實現的安全 PRNG
我正在嘗試在硬體中實現一個(某種)簡單的 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