为什么这个伪随机数发生器(LFSR)的输出是如此可预测的?

时间:2013-02-10 17:02:09

标签: hardware verilog fpga hdl

最近我在这里问到,如何在硬件中生成随机数并被告知要使用LFSR。它将是随机的,但会在某个值后开始重复。

问题是生成的随机数是如此可预测,以至于可以很容易地猜到下一个值。例如,检查下面的模拟:

enter image description here

下一个“随机”数字可以通过将前一个数字与其自身+1相加来猜测。有人可以验证这是否正常并且是预期的。

以下是我用于LFSR的代码:

    module LFSR(
    input clock,
    input reset,
     output [12:0] rnd 
    );

wire feedback = rnd[12] ^ rnd[3] ^ rnd[2] ^ rnd[0]; 

reg [12:0] random;

always @ (posedge clock or posedge reset)
begin
    if (reset)
        random <= 13'hF; //An LFSR cannot have an all 0 state, thus reset to FF
    else
        random <= {random[11:0], feedback}; //shift left the xor'd every posedge clock
end

assign rnd = random;

endmodule

从这里获取XOR位的位置:The table page 5

1 个答案:

答案 0 :(得分:-1)

LFSR绝对不是任何真正意义上的“随机”。引用冯·诺伊曼的话“任何考虑产生随机数字的算术方法的人当然都处于罪恶状态。”我没有查看你选择的反馈术语是否是最大的,这意味着他们将提供一个长度等于你的LFSR中的位数的序列,但这是你能做的最好的。

所以是的,LFSR中的下一个值是非常可预测的。如果你需要更安全“随机”的东西,你需要研究加密方法,这些方法当然取决于秘密密钥,并且比LFSR计算密集程度更高。你得到的是你为此付出的代价。

顺便提一下,一个可以获得可预测的“随机”数字的系统本身就非常有用。通常用于模拟目的。