Random-Number-Generator

這個偽隨機函式有什麼好的和/或原創的嗎?

  • June 7, 2022

我設計了這個接受 auint64並返回 a 的偽隨機函式算法uint64。我想知道它是否有任何好處,如果是的話,如果它是原創的?如果不是原創,誰最先提出來的?

首先,您從 65 個常量 random 開始uint64。讓我們打電話給他們 $ P_0 $ 直通 $ P_{64} $

對於輸入 uint64 X,你可以一起 XOR $ P_0 $ 並且每個 $ P_i $ 第 i 位在哪裡X。這個 XOR 的結果是輸出Y

uint64_t P[65];

void init() {
  for (int i = 0; i < 65; i++) P[i] = /* random number */;
}

uint64_t generate(uint64_t X) {
   uint64_t Y = P[64];
   for (int i = 0; i < 64; i++)
       if (X & (uint64_t(1) << i))
           Y ^= P[i];
   return Y;
}

你怎麼看?

問題中的程式碼實現了任何一個 $ 2^{65\times64}\approx2^{(2^{12.02})} $ “仿射”函式來自 $ {0,1}^{64} $ 對自身,即具有屬性的函式$$ \forall u,v,w\in{0,1}^{64},\ f(u\oplus v\oplus w)=f(u)\oplus f(v)\oplus f(w) $$

該仿射屬性使函式對於生成加密質量的偽隨機性無用(至少,按原樣)。特別是,使用選定的輸入進行 65 個查詢,例如 $ 0 $ 和 $ 2^i $ 為了 $ i\in[0,64) $ ,或獲得更多隨機輸入/輸出值,足以完全重構函式。

換個角度來看,眾所周知的函式類是 $ 2^{2\times64}=2^{(2^7)} $ 函式來自 $ {0,1}^{64} $ 對自身來說,可以說是一個循環冗餘校驗。但它是 $ 2^{(2^{64}\times64)}=2^{(2^{70})} $ 函式來自 $ {0,1}^{64} $ 對自己。

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