Pseudo-Random-Generator

短的偽隨機中方序列是否存在問題?

  • December 5, 2019

為了改進從 128 位真正隨機種子生成一百萬個偽隨機 128 位數字的“中間平方偽隨機數生成”,我將中間平方與原始 128 位種子的異或在每次迭代中(異或的結果是該迭代的隨機 128 位輸出)。或者,我可能會使用前一次迭代的輸出而不是原始種子。

生成的隨機數最大的問題是什麼?由於我只需要一百萬個隨機數,我懷疑我什至不需要這個異或……所以,我擔心我做的弊大於利!

另外,如果所有一百萬個隨機數都被確認不包含循環,那麼如果僅使用原始種子呢?我懷疑導致這種情況的壞種子很少見,如果它們的總數低於“十億分之一”的機率,他們願意簡單地忽略任何像這樣的非隨機序列。

此外,顯然,這裡的一個潛在問題是任何人都可以根據目前數字計算出未來的數字。但是,如果這讓您感到困擾,假設在開始時還提供了第二個 128 位種子,可見輸出實際上是內部輸出和第二個種子的異或。

最簡單的密碼命題是:

  • 生成兩個真正的 128 位隨機種子 $ R_0 $ 和 $ E $

  • 產生一百萬 $ Y_j $ 通過重複(對於 $ 1\le j<1000000 $ )

    • $ X_j=\lfloor{R_{j-1}}^2/2^{64}\rfloor\bmod2^{128} $
    • $ R_j=X_j\oplus R_0 $
    • $ Y_j=R_j\oplus E $

挑戰: 原始碼和輸出(作為範例,以防我有錯誤和挑戰)都在這裡。這個隨機數生成器只顯示每個隨機 Yj 的中間 4 個字節(否則它與上面的命題相同)。對於挑戰,任何人都可以推斷出下一個隨機數嗎?據說,這只有 33 位的蠻力安全性,所以應該很容易破解和很好的學生練習……或者它可能比人們想像的更安全。

我了解您問題的初始版本

為了改進從 128 位真正隨機種子生成一百萬個偽隨機 128 位數字的“中間平方偽隨機數生成”,我將中間平方與原始 128 位種子的異或在每次迭代中(異或的結果是該迭代的隨機 128 位輸出)。或者,我可能會使用前一次迭代的輸出而不是原始種子。

生成的隨機數最大的問題是什麼?由於我只需要一百萬個隨機數,我懷疑我什至不需要這個異或……所以,我擔心我做的弊大於利!

另外,如果所有一百萬個隨機數都被確認不包含循環,那麼如果僅使用原始種子呢?我懷疑導致這種情況的壞種子很少見,如果它們的總數低於“十億分之一”的機率,他們願意簡單地忽略任何像這樣的非隨機序列。

此外,顯然,這裡的一個潛在問題是任何人都可以根據目前數字計算出未來的數字。但是,如果這讓您感到困擾,假設在開始時還提供了第二個 128 位種子,可見輸出實際上是內部輸出和第二個種子的異或。

(此答案適用)為:

  • 生成真正的 128 位隨機種子 $ S_0 $

  • 產生一百萬 $ R_j $ 通過重複(對於 $ 1\le j<1000000 $ )

    • $ S_j=\lfloor{S_{j-1}}^2/2^{64}\rfloor\bmod2^{128} $
    • $ R_j=S_j\oplus S_0 $

那是注定的。問題包括:

  • 我猜想一個簡單的區分器是可能的。例如,這似乎是合理的 $ R_{j+1}\oplus R_j $ 具有相當可辨識的特徵(它只是微弱地依賴於 $ S_0 $ ,其特徵來自於使用遞歸的過於規則的中間平方函式)。
  • 沒有什麼可以支持這一發現 $ S_0 $ 知道 $ R_j $ 到一定程度是一個難題;這將允許有效地計算另一個 $ R_j $ .
  • 使用的遞歸 $ S_j $ 有可能進入一個短週期,然後將適用於 $ R_j $ . Donald Knuth 在《電腦程式的藝術》(第 3 章,第 2 卷開頭)中批評 Jon von Neumann 的中間平方方法時指出了這種趨勢,他在其中著名地指出:

不應使用隨機選擇的方法生成隨機數。


有許多簡單、便宜、可靠、幾乎與生成所需內容一樣快的方法。 $ S_j=\operatorname{HMAC-SHA-256}(S_0,j) $ (和 $ S_0 $ 鑰匙, $ j $ 上 $ \ge3 $ 字節消息,並且 HMAC 結果被截斷為 16 個字節)有效,並且具有任何優點 $ S_j $ 可以在不計算前面其他的情況下計算。

我知道這是如何工作的。答案是完全錯誤的。128 位剛好可以修復 middquare,q 是 2↑32 重複機率是 2↑63。xor 不能解決這個問題。如果大量 xoring 置於不可逆的相同級別,則 128 位可能具有 60 位或更高的 cripto 級別。建議的修復是一個完整的 cripto 功能,但提問者需要最少的硬體。

middquare 的分析是: 1. Square 比 product 差,如果第 1 位或最後 n 位為 0,則結果有 2n 個 0。xor 不能解決這個問題,它只會讓你感到困惑 2. 結果的最佳位是中間位,但產品的第一個和最後一個位是一半好.. 你希望所有位都一樣好。相反,將上半部分和下半部分進行異或運算 3. A×B=C 對於任何 C 可以有許多可能的合法大小 AB 對,表明熵損失表明未知的不安全性,因此略低於 cripto 所需的 4 次異或以使乘積去四邊形化為避免未知的攻擊。5 來自產品的所有資訊都應該使用 6 高精度 × 不會是一個硬體乘法。

所以 64 位 A × 64 位 B 到 C,D. Xor D 到 C. Xor 結果 D 旋轉 C X 或結果 CD 到 AB 以得到新的 AB .. 浮點等價物使用 4 次乘法更難。

非加擾輸入的嚴格理論:將非常高精度的輸入乘以諸如 π 之類的隨機常數,以將輸入的每一位加擾到 2 個 64 位輸出的所有位作為乘積的中間,然後是上述算法。

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