RNG 何時是 CSPRNG、CSRNG 或 TRNG?
在最近對一個關於 CSPRNG 的問題的回答中,有人說……
- 沒有此類要求的非確定性算法,理想情況下可以由真正的隨機生成器代替。範例:作業系統隨機生成器,其中實際的解決方案是用物理雜訊源組成確定性偽隨機生成器,以產生非確定性和偽隨機的輸出。
這讓我想到,由於使用的術語,這可能會導致進一步的混亂,所以我決定把它包裝成一個問題,以便有一個地方可以讓人們指向……
- 依賴於其他事物的 RNG 是否
a non-deterministic physical noise source
仍可稱為*“偽”*隨機?- 如果,我們在哪裡劃定 CSPRNG 和 CSRNG 之間的界限?
- 我們在這張圖片中的哪裡放置一個 TRNG?或者 CSRNG 是否始終是 TRNG,反之亦然,即使非確定性物理源是 RNG 的一部分,也使每個其他(加密安全的)RNG 成為 CSPRNG?
編輯
如果您的答案將包含一些指向強調您的解釋的引用的指針,那就太好了。畢竟,一個值得信賴的參考可以代替一千個意見和相關討論。
這裡似乎有很多令人困惑的術語。讓我盡我所知來定義一切。
- RNG:一些產生隨機數的機制。
- CSRNG:一種可安全用於加密的 RNG。
- PRNG:一個 RNG,它是一種基於種子的確定性算法。
- TRNG:基於一些不可預測的物理過程的 RNG。
- CSPRNG:一種可安全用於加密的 PRNG。(假設種子採摘正確)
我從未聽說過 CSTRNG 這個詞,但我可以想像它的意思是加密安全的 TRNG。在一般對話中,這是多餘的,因為無論如何都假定 TRNG 是加密安全的。即使它沒有以這種方式明確定義。
一個依賴於 - 除其他外 - 一個
non-deterministic physical noise source
仍然被稱為*“偽”*隨機的 RNG 可以嗎?取決於如何使用雜訊源。如果源被用作 PRNG 的種子,那麼它實際上是偽的,因為大部分隨機性是由算法“彌補”的。
如果每一位輸出都受到不同位輸入的影響,則可以將其視為 TRNG。
如果,我們在哪裡劃定 CSPRNG 和 CSRNG 之間的界限?
據我了解,CSPRNG 是 CSRNG 的一個子集。
CSRNG 表示加密安全隨機數生成器。它可能是偽隨機的,也可能不是。唯一的要求是它對於加密使用是安全的。
CSPRNG 表示加密安全偽隨機數生成器。這與 CSRNG 具有相同的要求(因此它是一個子集),另外要求它是某種接受種子的確定性算法。
我們在這張圖片中的哪裡放置一個 TRNG?
我聽過的關於 TRNG 的最佳描述是基於物理雜訊的 RNG,它具有數學基礎,說明每個比特如何基於所述物理雜訊的不同部分。(釋義)
或者 CSRNG 始終是 TRNG,反之亦然
我可以通過錄製我的聲音並將錄音中的字節用作隨機性而不進行任何處理來輕鬆製作 TRNG。這不是加密安全的,使其成為 TRNG 但不是 CSRNG。這並不常見,因為不適合密碼學的 TRNG 在很大程度上是浪費金錢。
但是,有些 CSRNG是TRNG(請參閱:random.org)。
它們是具有不同要求的不同類別。它們確實重疊,但它們並不相互依賴。
即使非確定性物理源是 RNG 的一部分,也讓所有其他 RNG 成為 CSPRNG?
帶有從 TRNG 派生的種子的 PRNG 仍然是 PRNG。這實際上就是快速生成大量隨機熵的方式。使用物理源生成數兆字節的熵效率不高。(你有沒有嘗試過使用 /dev/random 生成公鑰/私鑰對?這很苛刻)通常是通過使用物理資源來播種 CSPRNG 來完成的,這可以完成繁重的工作。
此外,還有很多不是 CSPRNG 的 RNG。Xorshift、LFSR、ARC4Random(當它基於 RC4 時)和 Mersenne Twister 等等。這些算法存在偏差或其他問題,使其不適合加密使用。但是,它們仍然輸出肉眼看起來隨機的數字。