完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本文导读随着物联网和边缘计算的出现,五花八门的MCU也被应用其中,如何保证我们的程序安全和知识产权不受侵犯呢,本文我们将对主流MCU的程序加密进行讲解,希望能够帮助你选择最适合自己应用的微处理器。
1. MCU加密 通常所说的MCU加密是指将用户的程序固件保护起来,防止别人通过外部调试接口或者其他方法读取烧写在Flash中的程序。保护自家方案不轻易被别家抄袭,从硬件上保护自己的知识产权。MCU加密还指防止自家程序被恶意读取破解。 2. 常用MCU加密方式
2.1.1 原理 MCU厂商在设计芯片时在芯片中增加特定的非易失存储,该存储也可能是Flash的特定地址区域。用户可以通过外部工具或在程序的特定地址写入使能存储保护的值。 配置字加密在芯片完成上电时序后才会生效,一般包含以下功能:
2.1.2 应用场景 这种加密方式通常用在程序存储在芯片内部Flash的系统中。例如NXP LPC系列MCU、GD32系列MCU、NXP Kineits Cortex-M系列。 2.2 外接加密芯片 2.2.1 原理 加密芯片保护程序的方式,是通过程序与外部加密IC的交互来确认程序是否进一步执行。 利用芯片随机数外设或者其他能够产生随机数的机制,在每次上电后系统取得一个随机数,并将这个随机数通过类似IIC的协议传给外部的硬件加密IC。随后系统按先前约定的算法进行结果计算,等待外部IC接收到随机数并也算出结果后,外部IC会将计算结果传回给系统。如果系统的计算结果和外部IC的计算结果相同,则说明外部的加密IC存在。 2.2.2 应用场景 这种加密方式主要用在用户对代码中关键算法的加密,算法通常会以Lib的方式提供,只有购买了对应加密芯片(类似于产品密钥)的客户才能够使用算法程序。 2.3 UID检验加密 2.3.1 原理 UID加密一种用户主动加密的方式。当下几乎所有处理器内部都包含UID,可以通过直接寻址读取或者IAP指令获得。 UID加密通常分为二种方式:
其中第一种最容易被破解,第二种也存在潜在风险,为了增强第二种的安全性,可以将加密后的数据拆分后分别存放到Flash的不同位置,运行时再组合。 2.3.2 应用场景主要用在一些不需要太多保护的协议栈上,例如LoRa协议栈、文件系统、私有操作系统等。协议栈相对算法的价值会低一些,增加加密芯片的成本显得过高。 同时这种方式也可延伸为使用PID(每个型号的ID相同)来区分设备型号。 2.4 程序固件加密2.4.1 原理程序固件加密是指通过私有密钥将整个程序固件加密计算后生成密文,使得程序即使被其他人拿到后也不可能被反编译。这种加密方式通常需要有一段地址存储密钥和解密程序,他们可以是芯片内部Bootloader或用户自己的Bootloader。 2.4.2 应用场景 这种加密方式主要用于芯片没有内部Flash或Flash较小,以及需要给用户升级固件的产品上。例如:
例如i.MX RT1050系列芯片就是使用程序固件加密,程序被放置在外部Flash中,执行时边解密边执行. 3. 常用芯片的加密方式 3.1 NXP LPC系列 LPC系列MCU大多采用配置字加密方式,即CRP(Code Read Protection)加密。将配置字(CRP Key)写入特定的Flash地址中。芯片上电启动后内部boot会根据配置选择禁用相应的功能。 CRP是一种允许用户在系统中启用不同级别的安全性的机制,从而可以限制对片上闪存的访问和ISP的使用。当需要时,通过在0x0002FC中闪存位置编程特定模式来调用CRP。IAP命令不受代码读取保护的影响。 以LPC824位例,在启动文件(*.s)中找到CRP Key根据需要进行修改,如图3.1。 图3.1 CRP Key示例 注:切记在产品最终固件中才可使用CRP3,否则芯片将被锁死不能再被解锁。 3.2 NXP Kineits Cortex-M系列 Kineits Cortex-M系列的加密同样使用配置字的方式写入Flash特定区域,但它比LPC系列相对复杂一些功能也更加强大。更多学习交流可以加Q3472880374 Kineits Cortex-M系列的加密包含在FlashConfig区域,FlashConfig包含一些用于芯片内部Boot的配置信息,比如使能或禁能NMI引脚中断。 使用keil工具可以快速使用UI配置 3.3 GD32系列 GD32系列加密与和STM32系列加密方式类似。GD32内部包含一个FMC外设。FMC提供了一个安全保护功能来阻止非法读取闪存。此功能可以很好地保护软件和固件免受非法的用户操作。 FMC包含一个OB_RDPT字节与其补字节:
3.4 i.MX RT系列 i.MX RT系列是NXP公司发布的跨界处理器,MPU的处理性能、MCU的开发方式。该系列不包含用户可用的内部Flash,所有代码都要存储在外部存储介质中。它使用FSL独有的HAB安全机制,能够达到比前面更安全的加密机制。 i.MX RT的加密是将程序固件完全通过工具转换为密文,不能够被反编译,同时i.MX RT内部包含OTP区域,用于编程密钥信息和启动信息,加密后不可读取。
NXP提供加密工具CSF和密钥烧写工具FlashLoader,用于程序固件的加密和烧写。 |
|
相关推荐
1 个讨论
|
|
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
654 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2242 浏览 1 评论
771 浏览 0 评论
1530 浏览 1 评论
2276 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:48 , Processed in 2.795533 second(s), Total 40, Slave 32 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号