我可以在 FPGA 中实现(弱)熵源吗?

物联网 安全 硬件
2021-06-10 00:12:36

我正在使用 FPGA 中的物联网平台进行评估和原型设计。我需要为 TLS 提供支持,为此我需要一个熵源。

我知道真正的随机噪声源在 FPGA 中非常专业(如果甚至实用),因为设备性能通常非常好(并且很难找到任何极端情况参数),但是我可以在没有任何情况下实现伪随机序列生成器问题。

我只有一些标准的 I/O 通道(uart、I2C 等),没有什么看起来可以为 PRBS 提供更多的种子 - 除了音频 ADC 输入。是否有任何可靠的技巧可以在我应该考虑的 FPGA 中生成熵?

假设我使用 PRBS,我可能会附加一个外部噪声源,我当然可以将其用作种子。我很想知道这实际上会给我的 TLS 实现增加多少。这会可靠和安全,还是只比使用固定的伪随机序列好一点?我是否需要继续轮询外部噪声源以获得更多熵?

如果我最终得到的熵源不是正确的加密安全(因为这仅用于原型设计),那也没关系,但我想了解成本与质量的权衡。

1个回答

你需要吗?如果你有两个东西,你可以实现一个加密安全的随机生成器:一些可重写的安全存储和一个初始种子。也就是说,对 RNG 进行一次播种就足够了,然后保存其状态并处理保存的状态。这并不理想,最好定期混合熵,但没关系,尤其是对于开发原型。

您确实需要具有可重写的安全存储。如果设备只有 ROM 和非安全存储,那么这种方法是不可能的。必须有一个位置可以存储 RNG 状态,这样您的对手既不能读取也不能修改它。

它的工作方式是,当设备启动时,它会加载当前的 RNG 状态,并使用它来生成一些足够多的随机字节,大小是 RNG 状态的两倍。将前半部分写为新保存的RNG 状态,将后半部分作为当前会话的初始RNG 状态。对于任何加密安全的 PRNG,这都会产生一个加密安全的 PRNG。请注意,不要重复使用已存储的 RNG 状态至关重要,这就是为什么您必须在开始使用 RNG 之前编写新的独立 RNG 状态的原因。

初始熵注入可能发生在制造过程中,也可能发生在设置设备时。通常这些事情发生在连接到 PC 时,PC 可以代表设备生成熵。