我正在开发一个嵌入式系统,它将在系统第一次启动时生成SSL密钥。我想避免Heninger等人和Lenstra等人发现的问题。其中,具有低熵的嵌入式系统有生成相同密钥的倾向。我的理解是Linux从以下来源(图19)获得它的熵:
我正在使用的嵌入式硬件将不会有任何上述的熵源。
在这种情况下,获得良好熵的最佳实践是什么?我对在生产中可以信赖的解决方案感兴趣(我不是在寻找科学实验)。
发布于 2013-07-24 21:27:46
在堆栈过流上提出并回答了一个类似的问题。产生熵的一些方法:
IBM还有一个最佳实践指南这里。它建议:
发布于 2013-07-24 21:46:06
如果你有它,你绝对应该使用它,如果你有任何选择,你可以使用它,如果你可以选择使用哪一个硬件,你应该使用它。硬件RNG不一定是昂贵的-- Raspberry Pi有一个,每一张智能卡都有。
请注意,大多数硬件RNGs是基于振荡器,这需要一段时间后,成为随机的电源被应用。您可能需要等待,或绘制一定数量的字节,才能使熵变得足够。
制造中的应用
如果您的平台上没有RNG,但是除了ROM之外,您至少有一点持久存储,那么您可以在生产过程中注入一些熵。
如果设备的存储是内部的,这意味着您需要在生产过程中打开它一次,并与其通信几百字节。准备好设备上的代码映像,这样它就可以在第一次启动时接受熵注入。生产链上的任何个人电脑都可以生产。
如果设备的存储是单独制造的,则可以将熵注入存储初始化的代码或数据映像中。
如果您的容量很小,无论是由于通信带宽,还是由于存储限制,熵源可以作为私有密钥或秘密密钥加倍。任何对设备来说都是独一无二的秘密都可以。
网络
如果无法在制造阶段注入熵,但设备在投入生产时具有网络访问权,则可以在第一次启动时从可信服务器注入熵--设备请求熵。然而,这个过程很容易受到主动或被动的中间人攻击.该设备可以对熵服务器进行身份验证(硬编码为公钥),但是无法保护通信不被窃听,因为窃听者可以在设备上复制所有的计算。
因此,如果无法在制造阶段注入熵,则在设备用户部署设备时,需要让设备用户参与熵注入。例如,您可能需要将设备连接到受信任的PC上,用户将运行您提供的软件来注入熵(无论是从PC生成的还是从您的服务器获得的,这都无关紧要)。在此之后,设备只会像产生熵的PC那样可靠。
https://security.stackexchange.com/questions/39512
复制相似问题