我正在使用FPGA中的IoT平台进行评估和原型设计。我需要提供对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的连接发生的,可以代表设备生成熵。

评论


好的,在这种情况下,考虑到使用模型不是消费产品,我认为存储甚至都不需要安全,可以假定任何攻击者都无法物理访问我的设备(尽管他们可能拥有相同的设备) 。所以我无法阻止克隆。

– Sean Houlihane
17年2月11日在10:48