使用NEC单片机保护您的设计
来源:互联网 发布:淘宝店铺一键复制 编辑:程序博客网 时间:2024/06/06 17:10
如今,一款新产品刚推出不久,市场上往往就会出现仿冒的产品,给先期研发的企业和个人造成知识产权的侵犯和经济利益的损害。作为工程师,在产品设计初期应该尽量考虑到产品被抄袭的可能,选择一款具有良好保密性的单片机并对单片机系统进行加密设计,防止竞争对手的抄袭。
破解单片机程序的方法
对单片机内的程序窃取主要有两种方法:侵入式和非侵入式。侵入式的方法是破坏芯片的封装,并利用半导体测试设备、显微镜和微定位器等仪器找到芯片内保护熔丝的位置并将其擦除,使其变成未经加密的芯片,然后用编程器将程序读出,或者直接将探针放在芯片内部总线上读出存储器中的程序。非侵入式的方法是利用芯片设计或芯片编程时序中的某些漏洞对芯片进行解密,例如针对早期的AT89C系列芯片在擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后停止下一步擦除片内程序存储器数据的操作,从而使加密的单片机变成没加密似的,然后利用普通编程器就可读出片内的程序了。
可以看到,使用侵入式的解密方法需要使用昂贵的设备,并且需要花费较长的时间,其解密成本较高;而使用非侵入式的解密方法需要的设备相对较廉价,只要能找出芯片设计中的漏洞就有可能实现解密,但是需要解密者有深厚的专业知识。
图1:NEC 78K系列单片机的保密功能。
NEC单片机的保密设计
理论上来说,单片机的程序不可能做到百分之百的保密,对单片机程序进行加密只是为了提高破解成本。当一个产品的破解成本高到和自主设计一个相同产品的成本相当的时候,便没人会有兴趣破解此产品。
产品设计中,为了避免增加外围硬件从而增加产品成本,产品软件的保密通常主要依靠所选用单片机的保密性来保证,因此选用一款保密性良好的单片机来提高抄袭者的破解成本就显得尤为重要。NEC(日电电子)在其FLASH型的78K系列单片机中设计了充足的保护措施来保证单片机程序代码的安全。
通常除了开发者的原因外,单片机程序目标文件的泄露无外乎三个原因:1.量产时程序烧写过程中目标文件被窃取;2.产品上市后被窃密者拿到,利用侵入式或非侵入式的方法获取单片机内的目标文件;3.使用BootLoader程序通过串口、CAN接口等进行产品现场升级时应用程序目标文件被窃取。
图2:量产编程器的加密设置。
量产编程时的程序保密
第三方为NEC设计的量产编程器FL-G03可以支持对8片芯片的同时烧写。开发工程师使用128位密钥将原始HEX文件加密,并将该密钥固化到编程中用于烧写时的解密,工程师还可在编程器上设置烧写芯片的数量限制,然后将编程器和加密过的HEX文件提供给程序烧写人员。这样避免了其它人员接触原始HEX文件,且最多只能烧写设定数量的芯片。
图3:即使保密位被破坏也无法读出程序。
防止侵入式和非侵入式的程序窃取
侵入式的破解方法可以将加密过的芯片变成非加密的芯片,然后用编程器读出程序,当然也可以用探针从芯片内部总线读取程序,但这样做的成本相当之高;非侵入式的破解方法最后一般都要通过编程器将程序读出。NEC的78K系列单片机没有PROGRAM READ功能,因此无法利用编程器将程序读出。(注:用编程器给芯片编程时的校验功能并不是将程序读出来进行校验,而是编程器将数据送给芯片,由芯片内核独立完成与存储区数据的比较,然后将比较结果返回给编程器)。
图4:使用加密的目标文件进行现场升级。
- 使用NEC单片机保护您的设计
- AVR单片机使用外部中断和定时器的NEC红外解码程序
- 使用NEC 78K0系列单片机扩展功能
- 使用NEC 78K0系列单片机扩展功能
- NEC单片机调试
- NEC单片机学习感悟
- NEC单片机C编译中SREG的应用
- Nec单片机EZ/EM-1的固件升级问题
- NEC单片机内存数据存储形式
- 芯片H8S/2117 (NEC) 16位单片机
- 51单片机NEC红外遥控器解码
- NEC单片机 0527系列编程解读
- NEC的红外编码!
- NEC
- NEC推出全球第一个基于C语言的FPGA专用版大规模集成电路设计工具
- 一道NEC的面试题
- NEC开发环境的使用方法
- NEC开发环境的使用方法
- 请贺老师帮我看看这个乱码问题【任务2】分别定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre
- /home 重新挂载
- ndk-build juniversalchardet的问题,解决std的问题的两种方法
- Servlet在session中共享链接
- 黑马程序员--多线程学习笔记
- 使用NEC单片机保护您的设计
- JAVAWeb开发之Servlet-18.Servlet共享变量与变量的作用域
- 需要谈谈的 游戏测试改良流程(一)
- DES加密模式详解
- 麻将智慧的反思
- 第12周实验报告2
- 黑马程序员:我对“动态代理”的初步理解
- 状态条SetPaneInfo 函数及 SetPaneText 函数
- [C++] new 和 malloc 的区别