Encryption 嵌入式固件的代码签名:固件加密时,CRC是否足够?
我正在为嵌入式系统(微控制器)编写固件。固件可以由引导加载程序更新(也由我编写)。 现在需要采取措施防止固件被操纵,因此系统必须仅在下载的固件具有某种有效签名的情况下执行该固件。 固件文件是加密的。它由引导加载程序(在微控制器中)解密,然后编程到闪存中。 由于固件是加密的,我认为对flash内容进行简单的CRC检查就足以证明固件的有效性。但我不是网络安全专家,所以。。。我需要更多吗? 我认为加密足够强大,闪存无法读取 由于固件是加密的,在我看来,一个简单的CRC检查 闪存上的内容应足以证明固件 有效性但我不是网络安全专家,所以。。。我还需要更多吗 如果您选择了可靠的加密方法,并正确保护加密密钥,并且您还保证固件在传输后无法读取,并且引导加载程序拒绝固件(如果无法成功解密),则您已经保证固件的有效性。除非违反上述假设之一,否则只有拥有加密固件密钥的人才能生成引导加载程序将接受的固件 正如其他人所指出的,CRC不用于防止故意修改,因为您可以将垃圾数据附加到任何文件中以生成所需的CRC。但是,我仍然建议在固件升级过程的至少两个阶段使用CRC:Encryption 嵌入式固件的代码签名:固件加密时,CRC是否足够?,encryption,embedded,code-signing,firmware,Encryption,Embedded,Code Signing,Firmware,我正在为嵌入式系统(微控制器)编写固件。固件可以由引导加载程序更新(也由我编写)。 现在需要采取措施防止固件被操纵,因此系统必须仅在下载的固件具有某种有效签名的情况下执行该固件。 固件文件是加密的。它由引导加载程序(在微控制器中)解密,然后编程到闪存中。 由于固件是加密的,我认为对flash内容进行简单的CRC检查就足以证明固件的有效性。但我不是网络安全专家,所以。。。我需要更多吗? 我认为加密足够强大,闪存无法读取 由于固件是加密的,在我看来,一个简单的CRC检查 闪存上的内容应足以证明固件
- CRC在传输过程中加密数据,最好是在每个传输的数据包上,这样您就可以在不重新启动整个过程的情况下重新传输单个数据包(即,加密数据的256字节块上的CRC)
- 在固件(减去引导加载程序)占用的闪存区域上,根据成功解密后引导加载程序生成的已解密固件的CRC(或静态固定CRC,某些µC-IDE支持此内置CRC)进行第二次加密,以确保未发生闪存写入错误。通常的做法是将该CRC值安全地保存到不属于CRC的某个闪存区域,以便引导加载程序可以在每次设备重置时验证应用程序的完整性