One-Way-Function

來自 Rabin 函式的偽隨機生成器 (PRG)

  • August 19, 2013

我正在嘗試使用Rabin 函式製作 PRG 。我為實現該功能而編寫的程式碼(Java)是:

poublic static int rabinFunction(int m, int publicKey) {
   return (int) Math.pow(m, 2) % publicKey;
}

一個簡單的用法(使用維基百科連結中的數字)是:

int m = 20;
int pq = 7 * 11;

// output will be 15
int output = rabinFunction(20, 77);

我正在使用這種單向函式來創建一個偽隨機生成器。基本上,我執行 Rabin 函式並使用函式輸出中的最低有效位作為偽隨機值的一部分。我使用上一次執行的返回值作為下一次執行的種子,並重複此過程,直到生成足夠的位來加密我的消息。我遇到的問題是 Rabin 函式在 4 次迭代後返回相同的值:

rabinFunction(20, 77); //==> 15
rabinFunction(15, 77); //==> 71
rabinFunction(71, 77); //==> 36
rabinFunction(36, 77); //==> 64
rabinFunction(64, 77); //==> 15! Back to where we started, etc

我假設使用之前執行 Rabin 函式的輸出作為新函式的種子是不正確的。有人可以解釋為什麼這是錯誤的嗎?提前致謝。

模數 77 導致一個短週期。

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