【发布时间】:2014-07-02 02:55:47
【问题描述】:
在 m = 2^32+1 = 641*6700417 的情况下,mod 函数只不过是 32 位处理器上的一次减法。我不在乎复发Seed = Seed*a%m
不是一个好的随机数生成器。我希望在加密算法中将其用作 32 位宽的 sbox。如果“a”的试验值会导致重复访问所有 2^32 值,是否有一种算法会返回 true?
假设这样的算法存在,我怀疑如果 a*b%m = 1,那么使用“b”的递归将向后运行。我怀疑是真的。我会使用“b”来实现反向 sbox。
我可以使用 mod (2^16+1) 完成我要求的所有操作,但这个数字是素数。
【问题讨论】:
-
之所以有效,是因为这个数字是素数。梅森素数应该可以工作,否则可能有两个整数 m, n 使得 m*n 是模数的除数,并且将返回 sbox 和逆 sbox 的非唯一值。在您的情况下,使用 2^16 + 1 作为模数只会为您提供唯一值,并且允许 b 用于实现逆 sbox,但仅适用于梅森素数。
-
这是一道数论题,但答案是“不存在这样的值”,因为 |Zn˟| = (n-1) 仅适用于素数 n,并且仅对于某些 n 值是循环的 (details in this article)。你应该跟进math.stackexchange.com。