没有隐藏状态,是否有“好”的PRNG生成值?

时间:2010-05-20 08:36:51

标签: algorithm prng bijection

我需要一些好的伪随机数生成器,它可以像以前的输出中的纯函数一样计算,而不会隐藏任何状态。在“好”下我的意思是:

  1. 我必须能够以这样的方式对生成器进行参数化:使用任何参数(或其中一些大的子集)运行2^n次迭代时,应覆盖{{1}之间的所有或几乎所有值}和0,其中2^n - 1是输出值中的位数。

  2. n位的组合发生器输出必须涵盖n + p0之间的所有或几乎所有值,如果我针对每种可能的组合运行2^(n + p) - 1次迭代其参数,2^n是参数中的位数。

  3. 例如,LCG可以像纯函数一样计算,它可以满足第一个条件,但不能满足第二个条件。比方说,我们有32位LCG,p并且它是常数,我们的m = 2^32(两个32位参数p = 64a),c,所以我们必须从输出中查看三个数据以满足第二个条件。不幸的是,由于输出中奇数和偶数整数的严格交替顺序,条件不能满足。为了克服这个问题,必须引入隐藏状态,但这会使函数变得不纯净并破坏第一个条件(长隐藏期)。

    编辑:严格来说,我希望函数族由n + p = 96位参数化并具有完整状态p位,每个都生成所有可能的二进制字符串{{1以独特的“随机”方式的位,而不仅仅是连续递增n - 位int。选择这种独特方式所需的参数化。

    我想要太多了吗?

2 个答案:

答案 0 :(得分:2)

您可以使用任何分组密码和固定密钥。要生成下一个号码,请解密当前号码,增加它并重新加密。因为分组密码是1:1,所以它们必须在重复之前迭代输出域中的每个数字。

答案 1 :(得分:1)

尝试LFSR
您只需要原始多项式列表 以这种方式生成有限域的周期,生成大小为2 ^ n-1的字段。但是你可以推广这个过程来生成k ^ n-1的任何白色周期。

我还没有看到这个实现,但你要实现的只是将数字换成小数s> n其中gcd(s,2 ^ n-1)== 1. gcd代表最大公约数