基于 15 个种子的随机公式

Random formula based of 15 seeds

我正在攻读大学学位,但遇到了一个随机函数。 我正在使用没有配置时钟的微控制器。所以,我决定使用 ADC(模数转换)作为我的随机函数的种子。

所以我有 15 个两个字节的变量,其中存储了一些 'random' 值(转换并不总是相同的,区别在于 LSB(在我的例子中最后一位:例如现在的值adc 读取为 700,在 5 毫秒内为 701,然后返回 700,然后 702 等)。所以,我正在考虑使用最后 4 位构建一个随机函数让我们从这些变量中说出来。

我的问题是:你能给我一个好的随机公式的例子吗?

喜欢( Variable1 >> 4 ) ^ ( Variable2 << 4 )等等...

我希望能够在 1 个字节上获得一个相当随机的数字(这是最好的情况)。它将用于我已经实现的 RSA 算法(我用质数进行了大查找 table,我需要 table 中的 2 个随机数)。

如果您认为每个单词的 LS 位确实是随机的(这很可能),并且如果它们不相关,则将 8 个 LS 位打包为 1 个字节。剩余的 15 x 16 - 8 位没有用。

通常为此目的使用加密哈希函数,如 SHA 或 MD5。只要你的输入数据包含足够的熵,你就会得到一个随机的输出。参见 https://en.wikipedia.org/wiki/Entropy_(computing)

但是,对于您的用例来说,这可能有点太多了。如果只需要 8 位,则可以使用 8 位循环冗余码 (CRC)。它将具有类似的属性——因为任何 8 个输入位都可用于完全确定输出,只要至少 8 个输入位是随机的,输出就会是随机的。参见 http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html

这将满足您的要求...但请注意!听起来您正在编写一个完全不安全的 RSA 实现。在任何情况下,您都不能仅使用 8 位随机数来安全地生成 RSA 密钥。