首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式固件的代码签名:当固件被加密时,CRC是否足够?

嵌入式固件的代码签名:当固件被加密时,CRC是否足够?
EN

Stack Overflow用户
提问于 2019-06-13 10:21:45
回答 1查看 1.2K关注 0票数 3

我正在为嵌入式系统(微控制器)编写固件。固件可以由引导加载程序更新(也是由我编写的)。

现在有一个要求采取措施,以防止操纵固件,所以系统必须执行下载的固件,如果它有某种有效的签名。

固件文件加密了。它被引导加载器解密(在微控制器中),然后被编程到闪存中。

由于固件是加密的,在我看来,一个简单的CRC检查闪存内容应该足以证明固件的有效性。但我不是网络安全专家所以..。我需要更多吗?

我假设加密足够强,闪存无法读出。

EN

回答 1

Stack Overflow用户

发布于 2019-06-13 14:23:55

由于固件是加密的,在我看来,一个简单的CRC检查闪存内容应该足以证明固件的有效性。但我不是网络安全专家所以..。我需要更多吗?

如果您选择了一种健全的加密方法,并且正确地保护您的加密密钥,并且您还保证固件在传输之后不能被读取,并且引导加载器拒绝固件,如果它不能成功地解密它,那么您已经保证了固件的有效性。除非违反上述假设之一,否则只有拥有加密固件的密钥的人才能生成将被引导加载程序接受的固件。

正如其他人所指出的,CRC不是用来防止故意修改的,因为您只需将垃圾数据附加到任何文件中以生成所需的CRC。但是,我仍然建议至少在固件升级过程的两个阶段设置一个CRC:

  • CRC在传输过程中加密的数据,最好是在每个传输的数据包上,这样您就可以在不重新启动整个过程的情况下重新发送单个数据包(即超过256字节的加密数据块)。
  • 第二,在固件占用的闪存区域(负引导加载程序)上,在成功解密后由引导加载器生成的解密固件的CRC (或静态的、固定的CRC,一些C-IDE支持此内置的)上,以确保不发生闪存写入错误。通常的做法是将这个CRC值安全到某个不属于CRC的闪存区域,这样引导加载程序就可以在每次设备重置时验证应用程序的完整性。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56578405

复制
相关文章

相似问题

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