首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确保嵌入式系统在第一次启动时就有足够的熵?

如何确保嵌入式系统在第一次启动时就有足够的熵?
EN

Security用户
提问于 2013-07-24 21:01:33
回答 2查看 3.2K关注 0票数 27

我正在开发一个嵌入式系统,它将在系统第一次启动时生成SSL密钥。我想避免Heninger等人和Lenstra等人发现的问题。其中,具有低熵的嵌入式系统有生成相同密钥的倾向。我的理解是Linux从以下来源(图19)获得它的熵:

  • 硬件RNG
  • 键盘
  • 鼠标
  • 圆盘旋转

我正在使用的嵌入式硬件将不会有任何上述的熵源。

在这种情况下,获得良好熵的最佳实践是什么?我对在生产中可以信赖的解决方案感兴趣(我不是在寻找科学实验)。

EN

回答 2

Security用户

发布于 2013-07-24 21:27:46

堆栈过流上提出并回答了一个类似的问题。产生熵的一些方法:

  • 找出网络数据包之间的时间;
  • 使用福图纳
  • 检查大多数不可预测的内核变量(snmp、w、last、uptime、iostats、vmstats等);
  • 读取设备上的温度传感器或其他传感器。

IBM还有一个最佳实践指南这里。它建议:

  • 在生成密钥之前评估可用内核熵的数量。评估在生成密钥之前可用的内核熵的数量有助于确保随机性。
  • 确保制造程序不复制密钥或熵源。
  • 防止或限制网络访问。如果可能的话,通过防止互联网访问或限制网络访问来提高安全性。
  • 种子,或初始化,内核熵池与节点特定的数据,以提高键强度.
  • 通过增加设备事件时间不确定性来增加内核熵池。如果您构建自己的内核设备,则可以通过添加设备事件时间不确定性来增加内核熵池,从而增加熵。
  • 在需要密钥之前生成密钥(而不是在第一次引导期间)。
票数 10
EN

Security用户

发布于 2013-07-24 21:46:06

硬件RNG

如果你有它,你绝对应该使用它,如果你有任何选择,你可以使用它,如果你可以选择使用哪一个硬件,你应该使用它。硬件RNG不一定是昂贵的-- Raspberry Pi有一个,每一张智能卡都有。

请注意,大多数硬件RNGs是基于振荡器,这需要一段时间后,成为随机的电源被应用。您可能需要等待,或绘制一定数量的字节,才能使熵变得足够。

熵注入在

制造中的应用

如果您的平台上没有RNG,但是除了ROM之外,您至少有一点持久存储,那么您可以在生产过程中注入一些熵。

如果设备的存储是内部的,这意味着您需要在生产过程中打开它一次,并与其通信几百字节。准备好设备上的代码映像,这样它就可以在第一次启动时接受熵注入。生产链上的任何个人电脑都可以生产。

如果设备的存储是单独制造的,则可以将熵注入存储初始化的代码或数据映像中。

如果您的容量很小,无论是由于通信带宽,还是由于存储限制,熵源可以作为私有密钥或秘密密钥加倍。任何对设备来说都是独一无二的秘密都可以。

网络

熵注入

如果无法在制造阶段注入熵,但设备在投入生产时具有网络访问权,则可以在第一次启动时从可信服务器注入熵--设备请求熵。然而,这个过程很容易受到主动或被动的中间人攻击.该设备可以对熵服务器进行身份验证(硬编码为公钥),但是无法保护通信不被窃听,因为窃听者可以在设备上复制所有的计算。

因此,如果无法在制造阶段注入熵,则在设备用户部署设备时,需要让设备用户参与熵注入。例如,您可能需要将设备连接到受信任的PC上,用户将运行您提供的软件来注入熵(无论是从PC生成的还是从您的服务器获得的,这都无关紧要)。在此之后,设备只会像产生熵的PC那样可靠。

票数 6
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/39512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档