0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LPC1000的UID加密方案

AGk5_ZLG_zhiyua 来源:未知 作者:佚名 2017-10-20 14:46 次阅读

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

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

1、硬件资源:

  • LPC1766FBD100芯片;

  • SmartPRO 5000U-PLUS编程器;

  • QFP100-NXP适配座;

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

2、软件资源:

  • SmartPRO 2008 2.0.56.exe上位机软件;

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

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

  • LPC1766在Keil4下的工程模板;

  • Keil4开发环境;

  • Microsoft Visual C++ 6.0。

一、下位机

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

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

图2 读取UID

二、上位机

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

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

图3 加密算法工程

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

2、安装SmartPRO 2008软件,我们默认安装在C:Program Files路径下;

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

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

5、连接硬件,将LPC1766芯片放入适配座ZY503D中,连接USB通信电缆和电源

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

图4 用户代码无效提示

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

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

图5 缓冲区查看密钥

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

图6 开发板验证

总结

经此方法向芯片下载程序后,若有产品盗版者试图将程序读出然后复制到其他芯片上使用,程序将停留在判断密钥是否匹配语句,导致程序不再向下执行,从而防止软件程序被非法使用者盗用。ZLG致远电子在加密保护方面从未停止过脚步,为用户保驾护航不遗余力!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • LPC
    LPC
    +关注

    关注

    8

    文章

    136

    浏览量

    77602

原文标题:【秘籍】更安全的UID加密方案!

文章出处:【微信号:ZLG_zhiyuan,微信公众号:ZLG致远电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入剖析恩智浦LPC1000处理器

    LPC1000系列讲座第一讲:一、LPC1000概述:  基于ARM Cortex-M3/M0的恩智浦LPC1000系列,是NXP目前最新的ARM 微控制器产品,其高达100MHz运行速度、紧凑
    发表于 12-21 15:59

    MCU加密方法你知道多少?

    加密 通常所说的MCU加密是指将用户的程序固件保护起来,防止别人通过外部调试接口或者其他方法读取烧写在Flash中的程序。保护自家方案不轻易被别家抄袭,从硬件上保护自己的知识产权。MCU加密
    发表于 10-10 14:53

    在NuMicro™家族中支持UID,如果用户想使用唯一的ID加密芯片怎么操作?

    在NuMicro™家族中支持UID(唯一ID)的是什么系列)? 如果用户想使用唯一的ID加密芯片,该怎么办?
    发表于 12-21 06:45

    uid加密算法

    uid加密算法,1.STM32可以加密程序,不然可能有被窃取的可能JTAG 可以直接通过J-LINK-FLASH获取代码,首先新建工程,型号选好,read back即可save data fileUID
    发表于 07-19 08:23

    STM32F103C8T6是怎样读取加密芯片SMEC98SP的UID号的

    加密芯片SMEC98SP有何功能?STM32F103C8T6是怎样读取加密芯片SMEC98SP的UID号的?
    发表于 11-01 07:21

    如何使用STM32HAL库来读取UID唯一码加密

    如何使用STM32HAL库来读取UID唯一码加密
    发表于 11-26 07:39

    【野火 fireFlasher Mini 脱机烧录器】+ UID加密及下载次数限制

    ,下载第一次,蜂鸣器响两声,下载第二次同样如此,在下载第三次时蜂鸣器响4声,并且下载亮红灯,并退出下载模式,如下所示 UID加密 通过对 UID 使用特定算法加密,由于
    发表于 05-07 23:33

    【野火 fireFlasher Mini 脱机烧录器】UID加密测试

    移植算法 算法在:野火【fireFlasher Mini脱机下载器】模块资料\\\\UID加密代码资料\\\\对应单独加密代码\\\\YH_Enctyption.zip里 移植完成之后增加测试命令
    发表于 05-13 21:40

    利用LPC1100系列实现低功耗设计

    LPC1000系列ARM是以第二代Cortex-M3为内核的微控制器,用于处理要求高度集成和低功耗的嵌入式应用。采用3级流水线和哈佛结构,其运行速度高达100MHz,带独立的本地指令和数据总线
    发表于 07-23 15:31 20次下载

    NXP低功耗LPC1000系列六大突出优势

    NXP低功耗LPC1000系列六大突出优势 基于ARM Cortex-M3/M0的恩智浦LPC1000系列,是NXP目前最新的ARM 微控制器产品,其高达100MHz运行速度、紧凑的尺寸、高能效与高性能使它特别
    发表于 11-11 11:02 1259次阅读
    NXP低功耗<b class='flag-5'>LPC1000</b>系列六大突出优势

    NXP单片机选型指南(英文版)

    consumption in the smallest packages. A comprehensive portfolio of industryleadingperformers includes the latest 32-bit LPC3000 , LPC20
    发表于 08-08 14:42 0次下载
    NXP单片机选型指南(英文版)

    LPC1114基础手册未加密

    LPC1114基础手册未加密, 需要学习这款单片机的看看
    发表于 11-02 10:52 68次下载

    基于LPC1000系列微控制器的校验和自动填充实现方法

    基于LPC1000系列微控制器的校验和自动填充实现方法
    发表于 10-09 10:40 9次下载
    基于<b class='flag-5'>LPC1000</b>系列微控制器的校验和自动填充实现方法

    LPC546xx加密配置-ECRP详解

    LPC546xx加密配置-ECRP详解
    的头像 发表于 09-27 16:24 1164次阅读
    <b class='flag-5'>LPC</b>546xx<b class='flag-5'>加密</b>配置-ECRP详解

    UID加密安全启动原理分析

    本文导读 ZDP14x0系列芯片是内置开源GUI引擎的图像显示专用驱动芯片,在实际产品开发中需要加密保护,防止应用程序被读取和盗用,本文将介绍如何实现UID加密安全启动。 UID
    的头像 发表于 11-11 11:49 289次阅读
    <b class='flag-5'>UID</b><b class='flag-5'>加密</b>安全启动原理分析