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


12

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

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

我只有一些标准的I / O通道(uart,I2C等),看起来没有什么可以提供更多种子PRBS的功能-也许还有音频ADC输入。我应该考虑在FPGA中产生熵的可靠技巧吗?

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

如果我最终得到的熵源没有正确地加密安全(因为这只是用于原型设计),那是可以的,但是我想了解成本质量的权衡。

Answers:


6

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

您确实需要具有可重写的安全存储。如果设备仅具有ROM和非安全存储,则这种方法是不可能的。必须存在一个位置,您可以在其中存储RNG状态,以使对手既无法读取也无法对其进行修改。

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

初始的熵注入可以在制造过程中或在安装设备时发生。通常,这些事情是通过与PC的连接而发生的,该PC可以代表设备生成熵。


好的,在这种情况下,考虑到使用模型不是消费产品,我认为存储甚至都不需要安全,可以假定任何攻击者都无法物理访问我的设备(尽管他们可能拥有相同的设备) 。所以我无法阻止克隆。
肖恩·霍利哈内
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.