我如何使用数字签名来控制软件升级



我正在寻求一些具体的建议,以了解如何最好地预防嵌入式系统上(或至少降低)未经授权的软件升级。它不需要防弹,我们现在可以假设系统本身已经足够锁定了,因此没有人无法获得未经授权的访问。

我的计划基本上是要在系统上运行一个安装程序进程,该过程将从任何地方接收更新包,但可以确保这些软件包在尝试安装之前来自受信任的来源(即me)。

以简单的形式,更新软件包将具有实际的安装程序包,以及只能由我自己生成的匹配数字签名。此外,签名将纯粹是自我生成的,没有外部权威。

所以这些是我对可能过程的想法:

  1. 生成一个私有/公共密钥对,并将公共密钥与嵌入式系统本身一起分发。

  2. 创建软件安装软件包时,使用我们的私钥将软件包(或软件包的MD5)(或软件包的MD5)输送。

  3. 与该签名一起分发软件安装程序包。

  4. 让安装程序检查针对软件安装软件包的签名(使用它已经拥有的公共密钥),并且仅在有匹配时安装。

如果有人可以在此方案上找到任何问题,我将感谢这些详细信息,以及有关如何避免它们的任何具体建议。此外(尽管这不是问题的主要目的),但对生成密钥的工具的任何建议都将不胜感激。

我没有看到您的解决方案明显问题。我可以建议您可能已经考虑到的改进

如果嵌入式软件已足够锁定,则无需采取其他措施来保护与软件分配的公共密钥的完整性(例如,通过签署安装程序本身并混淆,这可能是头痛)

我已经考虑了TLS连接以下载更新,但实际上并不需要,因为软件包将受到数字签名的保护

我建议将公共密钥封装在X509证书中。这样,如果私钥已妥协,您可以控制有效期,甚至可能撤销。在这种情况下,您将需要一个层次证书授权,并带有签发签名证书的根证书。在安装人员的信托店里包含根证书的公共部分。然后在到期/撤销后使用其他签名证书将对安装程序透明。

根证书的持续时间很长,钥匙尺寸很大(应方便地固定),并且签名证书的持续时间较短,并且可以使用较小的钥匙。

使用此CA,如果需要一些其他服务,也可以生成TLS证书:例如检查可用的更新。在这种情况下,包括安装程序的信托店中的证书,以避免中间攻击(SSL限制)。

您可以签署完整的分发或哈希。它不会影响安全性(请参阅https://crypto.stackexchange.com/questions/6335/is-signing-a-hash-hash-hash-instead-of-the--full-data-consissised-secure),但不使用MD5广泛的漏洞。使用SHA-2功能。

要生成键,您可以在命令行中使用openSSL或使用GUI应用程序keystore-explorer

相关内容

  • 没有找到相关文章

最新更新