Random-Number-Generator

使用 CSPRNG 返回所有數字的機會都一樣嗎?

  • November 19, 2022

給定一系列數字,例如

$$ 1, 2^256 $$,是否每個數字都有相同的機會被 CSPRNG 選中,即 2^256 中的 1? 我擔心的是真正的隨機數生成器確實具有此功能,但它在密碼學中並不總是安全的(我認為),因為 741 之類的數字在如此大的範圍內

$$ 1, 2^256 $$不安全。 如果那是真的,CSPRNG 會跳過某些子範圍嗎?比如,在我們的例子中

$$ 1, 2^32 $$,因為他們被認為是不安全的?如果那也是真的,這不是打敗空氣,因為現在攻擊者將知道跳過這些子範圍嗎?

如果那是真的,CSPRNG 會跳過某些子範圍嗎?

這不是真的。此外,即使在某些案例中它是正確的,CSPRNG 應該如何知道任何特定案例的弱值?相反,CSPRNG 僅提供隨機位,如果應用程序需要避免某些模式(例如,在 ECC 中用作乘數的全 0 值),應用程序可以對其進行測試並拒絕它。

所以,不,CSPRNG 不會跳過任何子範圍。

從統計學上講,機率,即從範圍內生成的真正隨機數

$$ 1, 2^256 $$將小於 2^32(如您的範例所示),為 2^(-224),因此可以忽略不計。 您可以將真正的隨機數生成器視為完美的硬幣,將硬幣擲 256 次,正面朝上時寫入 0,反面朝上時寫入 1,您將得到 256 位二進制數(然後可以將其轉換為十進制)。如果該數字小於 2^32,則意味著您必須連續至少出現 224 次正面朝上,而這“永遠不會”發生。

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