Pseudo-Random-Generator

加密安全的偽隨機生成器是否需要安全種子?

  • April 2, 2020

對於任何加密安全的偽隨機生成器,我們是否需要一個安全的隨機種子?如果種子是可預測的,那麼由於算法的確定性,一切都會被破壞。

實際上,您的第二句話本身就是答案。偽隨機數生成器(加密安全與否)是一種確定性算法,可生成隨機數。每次您提供相同的種子時,它都會產生相同的隨機數字。現在,如果您的種子值是可預測的並且算法是公開的,那麼確定性算法的輸出也是可預測的。因此,密碼安全的偽隨機數生成器的種子必須是秘密的,這樣您得到的輸出是不可預測的。

是的,CSPRNG 確實需要一個秘密的隨機種子。

牢記加密要求 作業系統開發人員提供了多種來源,用於從高熵來源中獲取足夠好的種子,並且它們可能以 API 的形式提供。例如arc4random()BSD 類型作業系統中的函式族。如果 API 不可用,那麼我們自己必須實現驅動程序/軟體來擷取隨機性,將使用者本身視為來源(滑鼠移動、感測器脈衝(如果是智能手機)),儘管這可能不可靠*。然後可以將該數據饋送到某種散列函式(如 SHA-2 / SHA-3)以生成所需的偽隨機輸出。arc4random 使用 ChaCha20 從原始數據生成偽隨機性,這非常好,因為 ChaCha20 在內部使用遞增的 64 位計數器可以輸出 1 Zettabyte 的偽隨機數據,具有良好的擴散性。我之所以提到這些算法,是因為它們經受住了時間的考驗,並且廣泛地受到線性和差分密碼分析的影響。

附帶說明:當使用其他算法時,您必須小心,因為 CSPRNG 因其自身被後門而臭名昭著,例如,Dual_EC_DRBG 的盜竊後門(這會危及所使用的隨機種子的安全性)成為頭條新聞。

但是,如果需要隨機性是為了生成 SSL 證書並且這樣認為,那麼最好依賴自然的熵源,如放射性衰變。您還可以使用簡單的東西,例如熔岩燈 大軍https://youtu.be/1cUUfMeOijg

在對您的問題進行進一步研究時,我發現這很有趣:

特別是,非常隨機的數據總是具有高熵,但具有高熵的數據不一定是非常隨機的。 https://www.google.com/amp/s/techbeacon.com/security/how-really-random-numbers-will-bolster-your-encryption%3famp

*在 Linux 中,我們有/dev/urandom/dev/random. 但是不建議每次都讀取它(比如讀取文件),因為作業系統可能會耗盡熵,因此會影響應用程序的性能。

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