使用NEC单片机保护您的设计
扫描二维码
随时随地手机看文章
破解单片机程序的方法
对单片机内的程序窃取主要有两种方法:侵入式和非侵入式。侵入式的方法是破坏芯片的封装,并利用半导体测试设备、显微镜和微定位器等仪器找到芯片内保护熔丝的位置并将其擦除,使其变成未经加密的芯片,然后用编程器将程序读出,或者直接将探针放在芯片内部总线上读出存储器中的程序。非侵入式的方法是利用芯片设计或芯片编程时序中的某些漏洞对芯片进行解密,例如针对早期的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:使用加密的目标文件进行现场升级。
产品现场升级时的程序保密
如果单片机程序设计者使用了BootLoader功能,则可以在产品售出后方便地通过串口等通讯口对单片机程序进行升级,但是这也给窃密者留下了可乘之机,新版本的应用程序目标文件有可能被泄露。解决办法是设计者将应用程序的目标文件按自定义的某种算法进行加密,并将解密算法放在BootLoader程序中。升级的时候BootLoader程序对目标文件进行解密,然后写入目标FLASH区。这可以避免原始的目标文件泄露出去。
防止芯片程序被意外擦除或改写
除了上面谈到的防止程序被泄露或破解的措施外,78K系列单片机还采取了多项措施来保证程序不会被意外擦除或者改写。78K系列单片机可以在编程时通过编程软件对FLASH进行如下安全设置:
1. 禁止全片擦除操作。
2. 禁止块擦除操作。
3. 禁止写操作。
4. 禁止改写boot cluster0区。
这些设置可以禁止通过编程器对芯片进行擦除和写入操作,但是芯片内的用户程序仍然可以对FLASH区进行擦除和写入操作。一旦设置了“禁止全片擦除操作”后,芯片内的程序将不可再被擦除和改写,此设置也无法再被取消。
各项安全设置与操作命令的关系见表1。
表1: 各项安全设置与操作命令的关系。
结语
NEC的78K系列单片机从多个方面采取措施使得单片机程序的保密性得到加强,尤其它没有READ命令,无法将程序数据读出到片外的特点使得其破解成本大大提高,有效地保护设计者的知识产权。