如何在嵌入式系统上生成一个范围内的256位随机数

How to generate 256-bit random number within a range on embedded system

我需要生成特定范围内 256 位长的加密安全随机数。我使用适合随机数生成器的微控制器(生产商吹嘘它是真正的随机数,基于热噪声)。 要生成的数字的上限以字节数组的形式给出。我的问题是:是否安全,逐字节获取随机数,并执行:

n[i] = rand[i] mod limit[i]

其中 n[i] 是我号码的第 i 个字节等

使用 RNG 中所有位的标准方法是:

number <- random()
while (number outside range)
  number <- random()
endwhile
return number

如果所需范围小于 RNG 输出大小的一半,则可以进行一些调整,但我认为此处情况并非如此:它会将输出大小减少一位或多位。鉴于此,那么 while 循环通常只会被输入一次或两次。

比较字节数组相当简单,如果您先比较最重要的字节,通常速度会很快。如果最高有效字节不同,则根本不需要比较次要字节。我们可以知道 7,###,###,### 大于 5,###,###,### 而不知道 # 代表什么数字。