详解芯片UID加密方案

出处:电子产品世界 发布于:2018-07-25 14:42:07

  嵌入式系统产品的加密和解密永远是一对矛盾的统一体。为了保护产品研发人员的技术成果,研究新型加密技术是非常有必要的。这里我们聊聊使用芯片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、上位机

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

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

  加密算法编写完成后,编译将生成一个名为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编程”一章的相关内容。

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

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

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

关键词:芯片

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!