One-Way-Function
來自 Rabin 函式的偽隨機生成器 (PRG)
我正在嘗試使用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 導致一個短週期。