您的位置 首页 嵌入式

芯片UID加密计划

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

  嵌入式体系产品的加密和解密永远是一对对立的统一体。为了维护产品研制人员的技能成果,研讨新式加密技能对错常有必要的。这儿咱们聊聊运用芯片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 开发板验证

  经此办法向芯片下载程序后,若有产品盗版者企图将程序读出然后复制到其他芯片上运用,程序将停留在判别密钥是否匹配句子,导致程序不再向下履行,然后避免软件程序被不合法运用者盗用。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/167114.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部