分享好友 智能输送新闻首页 频道列表

图说智能化:致远电子:芯片UID加密方案

2017-10-26 23:283610
 转自中国智能化网(http://www.zgznh.com/

嵌入式系统产品的加密和解密永远是一对矛盾的统一体。为了保护产品研发人员的技术成果,研究新型加密技术是非常有必要的。这里我们聊聊使用芯片UID加密的方案。

首先需要明确的是,没有一种加密是“绝对”可靠的,但是加密手段可以增加非法使用者的解密成本,借此来防止技术被“轻易”盗取。本次以LPC1000的UID加密方案为例进行介绍。

一、LPC1000系列的加密方案

通过分析得出,基于CortexM0或CortexM3内核的LPC1000系列MCU通过软件加密的方法有两种:

1、使用代码读保护机制,限制用户访问片内Flash;

2、通过芯片UID并添加加密算法使每片MCU内的程序具有唯一性。

代码读保护机制是通过使能系统中的不同安全级别,以便限制访问片内Flash,本次不做重点介绍。

二、UID加密

UID是唯一标识符(unique identifier),在LPC1000系列微控制器的每一颗芯片都具有全球唯一的标识符,该标识符为128位二进制序列。因此我们可以利用芯片UID的唯一性对程序进行加密,使每一个产品中的程序也具有唯一性,即使非法使用者获取了MCU中的程序复制到其他芯片中也是不能正常运行的,从而达到保护开发者的知识产权不被侵犯和盗用的目的。

三、LPC1000的UID加密方案

基本思路是使用上位机软件通过编程器读取芯片的UID,经加密算法运算后生成密钥,下载程序的同时向MCU的Flash中某个地址写入密钥;MCU上电后,首先读取芯片的UID,再通过与上位机相同的加密算法运算后计算出密钥,并与之前写入Flash中的密钥比较,若相同则继续执行用户程序,否则跳入死循环或执行程序开发者指定的代码。

 
图1  LPC1000 UID加密方案流程图

实现此方案需要准备的资源如

硬件资源:

LPC1766FBD100芯片;

SmartPRO 5000U-PLUS编程器;

QFP100-NXP适配座;

SmartCortex M3-1700开发板(测试用,非必需)。

软件资源:

SmartPRO 2008 2.0.56.exe上位机软件;

Programmer.rar编程器上位机UID加密补丁;

Uid.rar编程器上位机UID加密算法;

LPC1766在Keil4下的工程模板;

Keil4开发环境;

Microsoft Visual C++ 6.0。

1、下位机

下位机(即LPC1766芯片)上电并初始化后,首先读取芯片的UID,解析密钥并与Flash中的密钥比较判断后,再继续执行用户代码。这里我们举例采用的加密算法是将UID的补码作为密钥,加密方法比较简单,用户可自行对加密算法进行修改,写出复杂的加密算法。

读取芯片UID的方法是通过调用芯片内部的IAP函数实现,如图所示。

 
图2  读取UID

2、上位机

在下位机LPC1766的程序编写完成并生成hex或bin文件后,按照以下步骤对MCU进行加密:

首先,在Microsoft Visual C++ 6.0下编写加密算法,这里我们已经编写完成,仅需解压uid.rar并打开其中的VC工程。用户需要在uid.cpp中的UidAlgorithm函数中添加自定义算法,如图。

 

图3  加密算法工程

加密算法编写完成后,编译将生成一个名为uid.dll的算法文件。

第二步,安装SmartPRO 2008软件,我们默认安装在C:\Program Files路径下;

第三步,安装SmartPRO 2800加密补丁,方法是将Programmer.rar解压到C:\Programd Files\SmartPRO 2008\Programmer路径下,覆盖原来的文件;

第四步,将加密算法生成的uid.dll文件复制到C:\Programd Files\SmartPRO 2008\Programmer下,SmartPRO 2008启动后将会自动调用uid.dll;

第五步,连接硬件,将LPC1766芯片放入适配座ZY503D中,连接USB通信电缆和电源;

第六步,烧写文件,启动SmartPRO 2008软件,选择芯片“LPC1766@LQFP100”,打开烧录文件(在Keil编写下位机程序时生成的hex或bin文件 )。此时会出现一个如图4的特殊提示,这是因为Keil编译器在编译时没有将Flash中前8个字单元的内容进行代码有效校验和的填充而产生该警告,点击“确定”即可,编译器在下载过程中会调用校验算法自动添加校验。关于代码有效校验和填充的相关内容请参考LPC1766用户手册中“Flash编程”一章的相关内容。

 
图4  用户代码无效提示

第七步,开始下载,点击“组合”即可,默认执行的是擦除、编程、校验三个步骤的结合。

成功编程后,如果重新读取Flash,打开缓冲区,定位到0x00002000处,可以看到已经写入的密钥。如图5所示,与此前设计的加密算法和加密预期效果一致。 

图5  缓冲区查看密钥

验证方法:取下适配座中的芯片,焊接到TinyARMT17核心板上,查到SmartCortex M3-1700开发板底板上,连接P0.11到BEEP插针,如所示。开发板上电后即可听到蜂鸣器的鸣叫。以此验证芯片计算出的密钥与Flash中写入的密钥校验一致,芯片程序正常运行。

 
图6  开发板验证

经此方法向芯片下载程序后,若有产品盗版者试图将程序读出然后复制到其他芯片上使用,程序将停留在判断密钥是否匹配语句,导致程序不再向下执行,从而防止软件程序被非法使用者盗用。

反对 0
举报 0
收藏 0
打赏 0
评论 0
致远电子:示波器测量高速信号时的注意事项
随着电子技术的快速发展,通信信号频率越来越高,信号质量要求也越来越严。测量这些高速信号是不是只要选一个昂贵的示波器就行了

0评论2018-12-07446

图说智能化:致远电子谈电压暂降的危害及治理方案
转自中国智能化网(http://www.zgznh.com/)随着经济快速发展,工业制造与居民用电的多样化,导致电网的电能质量问题更加复杂化

0评论2018-08-23360

图说智能化:致远电子:ARM平台数据为何会莫名其妙丢失
转自中国智能化网(http://www.zgznh.com/)广州致远电子有限公司Nand-Flash/eMMC(带有Flash控制器的Nand-Flash)作为一种非线

0评论2018-08-06422

图说智能化:致远电子:CAN特殊波特率如何计算
转自中国智能化网(http://www.zgznh.com/)CAN总线采用的是异步串行通信,也就是没有单独的时钟线来保证各个收发器之间时钟的一

0评论2018-05-04502

图说智能化:致远电子:如何用您的手机控制CAN总线
转自中国智能化网(http://www.zgznh.com/)传统的CAN通信仅局限于PC机与电气导线连接的现场应用,面对当今移动设备大规模占据生

0评论2017-12-07358

图说智能化:致远电子:如何快速定位与排除电源模块故障
转自中国智能化网(http://www.zgznh.com/)电源模块凭借其模块化的设计,让用户能够最大程度的缩减产品的设计开发周期,其用法

0评论2017-12-07239

图说智能化:致远电子:数据采集仪到底采集什么数据
转自中国智能化网(http://www.zgznh.com/)苏轼在《赤壁赋》中说到江上之清风,与山间之明月,耳得之而为声,目遇之而成,耳朵和眼

0评论2017-10-18358

图说智能化:致远电子:路边停车纠纷如何破?
转自中国智能化网(http://www.zgznh.com/)近年来,随着路边停车位使用率的上升,路边停车纠纷不断,如:就停路边打了个电话也

0评论2017-08-16308

图说智能化:致远电子:功率分析仪现场干扰排查的实例
转自中国智能化网(http://www.zgznh.com/)在工程师们的日常测试中,故障干扰排查可谓是家常便饭,而高级工程师往往能快速定位

0评论2017-08-16322

图说智能化:致远电子:ARM平台数据为何会莫名其妙丢失
转自中国智能化网(http://www.zgznh.com/)广州致远电子有限公司Nand-Flash/eMMC(带有Flash控制器的Nand-Flash)作为一种非线

0评论2017-08-07437