详解NXP?Cortex-M3加密设置

加密芯片是对内部集成了各类对称与非对称算法,自身具有极高安全等级,可以保证内部储存的密钥和信息数据不被非法读取与篡改的一类安全芯片的通称。使用到安全加密芯片的产品:银行加密U盾、刻录机、加密硬盘、PC锁、手机、智能门锁、公交地铁等。在使用到安全加密芯片这些产品中,储存在安全芯片里面的数据会进行高可靠性加密处理,使得这些数据很难被非法窃取。

如天嵌i.MX6UL核心板,CPU自带安全启动防窃取机制,可以使客户面向高度安全的应用进行设计,适用于交易类设备。embedsky.com下面说说NXP芯片的加密方式有哪些:

NXP LPC系列

LPC系列MCU大多采用配置字加密方式,即CRP(Code Read Protection)加密。将配置字(CRP Key)写入特定的Flash地址中。芯片上电启动后内部boot会根据配置选择禁用相应的功能。

CRP是一种允许用户在系统中启用不同级别的安全性的机制,从而可以限制对片上闪存的访问和ISP的使用。当需要时,通过在0x0002FC中闪存位置编程特定模式来调用CRP。IAP命令不受代码读取保护的影响。

以LPC824位例,在启动文件(*.s)中找到CRP Key根据需要进行修改,如图

注:切记在产品最终固件中才可使用CRP3,否则芯片将被锁死不能再被解锁。

NXP Kineits Cortex-M系列

Kineits Cortex-M系列的加密同样使用配置字的方式写入Flash特定区域,但它比LPC系列相对复杂一些功能也更加强大。Kineits Cortex-M系列的加密包含在FlashConfig区域,FlashConfig包含一些用于芯片内部Boot的配置信息,比如使能或禁能NMI引脚中断。

使用keil工具可以快速使用UI配置,如图所示:

GD32系列

GD32系列加密与和STM32系列加密方式类似。GD32内部包含一个FMC外设。FMC提供了一个安全保护功能来阻止非法读取闪存。此功能可以很好地保护软件和固件免受非法的用户操作。embedsky.com

FMC包含一个OB_RDPT字节与其补字节:

  • 当将OB_RDPT字节和它的补字节被设置为0x5AA5,系统复位以后,闪存将处于非安全保护状态;
  • 当设置OB_RDPT字节和它的补字节值为任何除0x5AA5外的值,系统复位以后,安全保护状态生效;
  • 在安全保护状态下,主存储闪存块仅能被用户代码访问且前4KB的闪存自动处于页擦除/编程保护状态下。在调试模式下,或从SRAM中启动时,以及从boot loader区启动时,这些模式下对主存储块的操作都被禁止;
  • 如果将OB_RDPT字节和它的补字节设置为0x5AA5,安全保护功能将失效,并自动触发一次整片擦除操作。

GD官方提供加密工具GigaDevice_MCU_ISP_Programmer或者使用FlyMCU等工具,操作界面如图所示:

i.MX RT系列

i.MX RT系列是NXP公司发布的跨界处理器,MPU的处理性能、MCU的开发方式。该系列不包含用户可用的内部Flash,所有代码都要存储在外部存储介质中。它使用FSL独有的HAB安全机制,能够达到比前面更安全的加密机制。

i.MX RT的加密是将程序固件完全通过工具转换为密文,不能够被反编译,同时i.MX RT内部包含OTP区域,用于编程密钥信息和启动信息,加密后不可读取。

  • 芯片使用QSPI或HypeFlash时,可以实现边运行边解密,不占用额外的RAM空间,同时硬件解密配合内核中32KB ICache和32KB DCache使得程序运行不会受到固件加密的影响;embedsky.com
  • 芯片还支持Boot时完全解密程序到内部RAM或外部SDRAM,这种方式代码的启动速度略微变慢,但是能够支持更多的启动方式:SD卡、MMC、Nand Flash等。

NXP提供加密工具CSF和密钥烧写工具FlashLoader,用于程序固件的加密和烧写。如有任何疑问可联系我们的FAE获得支持

原文地址:https://www.cnblogs.com/zhangbing12304/p/10353253.html

时间: 2024-11-06 15:08:26

详解NXP?Cortex-M3加密设置的相关文章

Linux quota命令参数及用法详解---Linux磁盘配额限制设置和查看命令

功能说明:显示磁盘已使用的空间与限制. 语 法:quota [-quvV][用户名称...] 或 quota [-gqvV][群组名称...] 补充说明:执行quota指令,可查询磁盘空间的限制,并得知已使用多少空间. 参 数:  -g   列出群组的磁盘空间限制.  -q   简明列表,只列出超过限制的部分.  -u   列出用户的磁盘空间限制.  -v   显示该用户或群组,在所有挂入系统的存储设备的空间限制.  -V   显示版本信息. 在网络管理的工作中,由于硬盘的资源是有限的,常常需要

图文详解zabbix的安装以及设置邮件报警

简介:1.zabbix的介绍 2.zabbix的服务端安装 3.浏览器安装zabbix 4.zabbix的客户端安装 5.添加一个客户端 6.设置邮件报警 zabbix的介绍 zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题. zabbix由2部分构成,zabbix server与可选组件zabbix agent.

.NET DLL 保护措施详解(非混淆加密加壳)

为什么要保护DLL,我就不多说了,各人有各人的理由.总的来说,就是不想核心逻辑泄露及授权验证被破解两大方面的因素. 首先,我来介绍一下发布出去的DLL所面临的风险: 一.直接引用 二.反编译 三.反射 如果DLL一点措施都不做的话,上面任意一种都可以达到破解目的的. 然后,通常网上能搜到如下的保护方式,但真心的来说,用处不大,当然对小白破解者增加了难度. 一.混淆类的工具(如Dotfuscator,但是可以通过ILSpy.Reflector等反编译哦,直接COPY代码也能运行) 二.加密类的工具

GridControl详解(六)样式设置

表格样式:全局设置 例子: 例子: 列样式:只作用于当前的列 通用样式:外观设定 注意:样式设定都是相同的,Appearance前缀.

css网页中设置背景图片的方法详解

css网页中设置背景图片的方法详解 在css代码中设置背景图片的方法,包括背景图片.背景重复.背景固定.背景定位等 用css设置网页中的背景图片,主要有如下几个属性: 1,背景颜色 {background-color:数值}2,背景图片 {background-image: url(URL)|none}3,背景重复 {background-repeat:inherit|no-repeat|repeat|repeat-x|repeat-y}4,背景固定 {background-attachment

Android基础入门教程——8.3.4 Paint API之—— Xfermode与PorterDuff详解(一)

Android基础入门教程--8.3.4 Paint API之-- Xfermode与PorterDuff详解(一) 标签(空格分隔): Android基础入门教程 本节引言: 不知道标题这两个玩意你熟不熟悉啦,如果自己实现过圆角或者圆形图片,相信对这两个名词 并不模式,一时半伙没想起来?没关系,下面这个图你可曾见过? PS:网上都说在:\samples\android-XX\legacy\ApiDemos\src\com\example\android\apis\graphics 下能找到这个

详解PHP实现定时任务的五种方法

这几天需要用PHP写一个定时抓取网页的服务器应用. 在网上搜了一下解决办法, 找到几种解决办法,现总结如下. 定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等,现在的网站大多数都是采用PHP动态语言开发的,而对于PHP的实现决定了它没有Java和.Net这种AppServer的概念,而http协议是一个无状态的协议,PHP只能被用户触发,被调用,调用后会自动退出内存,没有常驻内存. 如果非要PHP去实现定时任务, 可以有以下几种解决方案: 一. 简单直接不

setAttribute()函数的用法详解

setAttribute()函数的用法详解:在动态创建元素设置元素的属性的时候setAttribute()函数用处很大,它可以动态的设置元素的属性,下面介绍一下它的用法.语法结构: setAttribute(name, value) 1).name表示要设置的属性.2).value表示属性值.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam

【转载】关于SetWindowOrgEx、SetViewportOrgEx、SetViewportExtEx 和SetWindowExtEx 详解

关于SetWindowOrgEx.SetViewportOrgEx.SetViewportExtEx 和SetWindowExtEx 详解 1.  SetWindowOrgEx是设置窗口的原点坐标. 例如: Ellipse(hdc,-100,-100,100,100); MoveToEx(hdc,-200,0,NULL); LineTo(hdc,200,0); MoveToEx(hdc,0,-200,NULL); LineTo(hdc,0,200); MoveToEx(hdc,0,0,NULL)