Flash型单片机的加密与解密

发布者:boyhxz最新更新时间:2012-07-04 来源: 电子产品世界 关键字:Flash型单片机  加密  解密  密码 手机看文章 扫描二维码
随时随地手机看文章

引言
    厂商利用单片机进行产品开发时,都会关心其代码和数据的保密性。考虑到用户在编写和调试代码时所付出的时间和精力,代码的成本是不言而喻的。
    早期的单片机,代码是交给芯片制造商制成掩膜ROM。有两种加密的机制,一是彻底破坏读取代码的功能,无论是开发者还是使用者都永远无法读取其中的内容。从安全上来说,这种方式很彻底,但是已经无法检查ROM中的代码了。另一种方法是不公开读取方法,厂商仍可以读取代码。这种方式留有检查代码的可能性,但是并不能算是一种真正的“加密”,被破解的可能性是存在的。
    客观地讲,一方面希望加密很彻底,而另外一方面又希望留有检查代码的可能,这是相互矛盾的要求。
    自Flash技术得到广泛应用以来,各类单片机制造商纷纷采用了多种不同的芯片加密方法,对比掩膜ROM芯片来说,Flash ROM在线可编程特性使得芯片的加密和解密方式变得更加灵活和可靠。在Flash型单片机中,芯片的加密和解密工作都是通过对Flash ROM的编程来完成的,由于用户程序可以在线地改写ROM的内容,可以编写一套加密和解密的小程序,随用户程序下载到芯片中,通过运行该程序,在线修改Flash ROM的内容,对芯片进行加密和解密,使整个的加解密过程更为简单灵活。
    Freescale公司的HCS12单片机采用的加解密思路有一定的典型性,我们对此作了一些研究,现以MC9S12DP256单片机为例,介绍Flash型单片机的加密解密方法。

BDM程序调试接口
    Freescale公司的很多单片机都借用一种被称为后台调试模式(Background Debug Mode,BDM)作为下载和调试程序的接口。
    BDM是一种单线调试模式,芯片通过一个引脚与编程器进行通信。在HCS12系列单片机中,内部都置有标准的BDM调试模块。
该模块的有三种作用:
1) 对内部存储器的读写。将用户程序下载到目标芯片中或是将存储器中的数据读出。
2) 对单片机工作方式和资源进行配置。部分涉及到单片机工作方式和资源配置的寄存器只能在特殊模式下由编程器发送BDM命令来修改。
3) 程序调试。利用BDM模块可以读写内存和CPU内部寄存器,调试程序。
    在HCS12单片机未加密的状态下,使用BDM硬件命令可以将Flash ROM中的程序读出或将新的程序写入。BDM命令可以由独立的硬件系统来送出,我们一般称此类系统为BDM编程器。
    BDM编程器的时序协议是公开的,任何人都可以根据协议设计硬件、编写程序,实现BDM编程器的功能。使用BDM接口,编程器可以很容易的访问到目标系统的存储器,这给程序调试和烧写带来了很大的方便,然而,便利的对外接口也给盗用者留下了可乘之机。
    在带有BDM模块的单片机中引入数据保密机制并非HCS12系列的首创,先前的HC12系列单片机的D家族中,就已经引入了屏蔽Lockout BDM读写的机制,可惜,该机制在单片机的扩展工作模式下存在着漏洞。相比之下,HCS12系列单片机中的保密机制更加完善,无论在BDM模式下或是扩展模式下,都可以屏蔽外部对Flash ROM的读写。

两种加密解密方法
    在HCS12系列单片机中,加密可以分成两种方法:完全加密和使用密码的加密。这两种加密的方法根据用户的需求,使用的场合也有所不同。
·完全加密
    所谓完全加密,就是将芯片彻底的保护起来,屏蔽对芯片的所有读操作。在MC9S12DP256单片机中,加密是通过对某一Flash单元($FF0F)编程来实现的。加密后的芯片,BDM编程器对Flash的读操作就被禁止了。
    采用完全加密,读取ROM代码的可能性就不存在了,这是一种最为“安全”的加密方法。如果用户想修改ROM的内容,唯一的办法就是将Flash的内容全部擦除,这一操作可以通过BDM编程器来完成。
    使用BDM编程器擦除Flash ROM和EEPROM的过程与在普通模式下对片内的Flash ROM擦除操作过程基本一样,区别是对寄存器或是存储单元的读写要改由BDM命令来实现。通过BDM编程器将一连串完整的擦除指令序列送给单片机,就可将Flash ROM和EEPROM的内容全部擦除了。
    在全擦除操作完成后,BDM编程器将系统复位,系统会自动检查全擦除操作是否成功。如果成功,BDM状态寄存器的UNSEC位会自动置“1”,系统进入解密状态。
    由于系统靠检查Flash ROM和EEPROM是否清空来决定系统是否保持加密状态,所以,如果用户程序偶然将Flash ROM和EEPROM的内容全部擦除,那么系统也将自动解密。
·使用密码的加密
    为了留有读取ROM代码的可能,用户可以采用一种带有密码的加密方式。解密时,用户只要给出正确的密码(称为“后门密码”),就可以读写ROM,而不破坏其内容了。
使用这种方法,用户需要在加密之前,设定4个字长的密码,并将其存放在Flash中,MC9S12DP256存放密码的Flash地址是从$FF00到$FF07。设定的密码可以随用户程序一起下载到芯片中。
    解密时,接受用户输入的密码并验证的工作只能由一个用户接口程序来完成的,不能使用BDM编程器。接口的方式没有限制,如SCI、SPI、IIC、MSCAN等等,只要用户能够将正确的密码输入,任何一种接口方式都是可以的,最为典型的接口是串口。
假设接收的密码存在变量KEY0-KEY7中,验证密码的程序如下:
;******************
;*  TEST KEYS 
;******************
TESTKEYS
     BSET  FCNFG,$20             ;置KEYACC为1
     LDD   KEY0
     STD   $FF00
     LDD   KEY2
     STD   $FF02
     LDD   KEY4
     STD   $FF04
     LDD   KEY6
     STD   $FF06                  ;验证KEY0-KEY7
     BCLR  FCNFG,$20     ;清KEYACC为0 
  LDAA  FSEC
ANDA  #$03
CMPA  #$02 
BNE   FAIL                   ; 是否验证成功?
SUCCESS          ; 密码验证成功
LDAA  FSTAT      ; 清除Flash状态寄存器
     ORAA  #%00110000
     STAA  FSTAT
     LDAA  #0
     STAA  FCNFG
     BRCLR FSTAT,$80,*
     LDD   #$FFFE
     STD   $FF0E                  ; 改写加密状态,复位后系统不再加密
     LDAA  #$20
     STAA  FCMD                 
     BSET  FSTAT,#$80             ; 开始执行
     BRCLR FSTAT,$40,*    
     RTS                          ; 返回
     FAIL RTS[page]
    程序返回后,如果用户输入的密码和原值符合,系统将会把保密寄存器FSEC的最后两
位SEC[1:0]改写到未加密的状态,系统自动解密。如果验证没有通过,系统将保持加密状态。
    需要注意,不管使用哪种方式将系统解密,解密后的系统虽然可以暂时读取Flash,但是由于单元$FF0F中的最后两位仍处于加密状态(全擦除后,“11”的组合仍为加密状态),系统在下次复位后,仍会回到加密的状态,所以为了彻底解密系统,必须改写这两位为“10”。
整个程序的流程如图1所示。


图1 解密用户接口程序流程图

灵活使用带密码的加密解密方法
    通过研究我们发现,使用带有密码的加密方式,看似给破解代码留有了可能性,但因为接受和验证密码都需要由用户程序完成,只要用户程序设计的可靠,这种可能性是很小的。
    为了增强用户接口程序的可靠性和灵活性,我们提出以下几种可能的设计思路:
    针对穷举密码的对策。MC9S12DP256的密码长达8个字节,如果不将密码限定在ASCII码的范围内,那么可以选择的密码数量将达到1.8*1019 种。为了防患破解者穷举密码,用户可以设定允许输入错误密码的次数,如果出错超过一定次数,接口程序就不再接收新的密码了。允许出错的次数可以根据安全需要和使用方便综合考虑。
    灵活的对外接口。使用密码加解密时,用户程序使用的对外接口是没有任何限制的。本文中的串口程序只是一例,MC9S12DP256片内集成了众多的接口模块,如SCI、SPI、IIC、MSCAN、J1850等等。使用哪一个接口,用户可以根据方便和安全考虑自己选择,这样也会使破解者难以入手。
    用户程序级密码验证。用户还可以给接口程序增设一级密码验证的步骤。只有通过该密码验证,才能进一步输入解密的密码。因为加密后,Flash ROM就无法读写了,用户程序可以将增设的密码也保存到Flash中,留待验证。另外,如果某一个模块既要作为接受密码的接口,又有其他的用途,也应该留有一个交互界面,在使用前让用户选择该模块的用途。
    远程加解密。在很多场合,用户对于单片机的控制是通过以太网等介质远程实现的,只要有相应的接口程序,能够远程对单片机进行加解密,这无疑会给用户的工作带来很大的方便。

结语
    Flash在线编程技术的出现给单片机中的加密机制带来了很大的改变。通过对HCS12系列单片机加解密方法的分析,我们认为这种加解密的机制具有足够的安全性,以及灵活的加解密方式。
    另外,使用密码解密的可靠性很高,实现的过程依赖于用户程序,只要精心设计接口程序,用户完全可以将这种风险降至最低。

参考文献:
1. 邵贝贝,‘单片机嵌入式应用的在线开发方法’,清华大学出版社,2004.
2.  \'MC9S12DP256B Device User Guide\', V02.14, 9S12DP256BDGV2/D Motorola Inc.

关键字:Flash型单片机  加密  解密  密码 引用地址:Flash型单片机的加密与解密

上一篇:利用汇编语言实现DES加密算法
下一篇:单片机抗干扰技术及应用

推荐阅读最新更新时间:2024-03-16 13:02

解密基于MBSE的整车电子设计解决方案
以5G、物联网、人工智能、大数据为代表的技术正在引领新一轮的产业革新。在全球数字化浪潮的重塑下,汽车产业正朝向网联化、智能化和电动化方向发展。 在这一发展趋势之下,作为汽车支撑力量的电子产品在近年来得到了持续快速发展,行业市场规模增速保持在10%以上。据估算,电子系统的成本已经占据新车成本的40%;而随着新能源车、无人驾驶、车载信息系统技术日渐成熟,最新预测表明,到2030年,电子产品将占据新车价值的50%左右。 整车电子化程度的大幅增加,将使设计的难度成倍增长。 汽车数字化时代的挑战 挑战来自多个方面。首先,随着汽车电子化程度越来越高,汽车电子软件的开发量增长惊人。目前先进的智能汽车的代码量已突破2亿行,超越IT史上任何一款产品
[手机便携]
<font color='red'>解密</font>基于MBSE的整车电子设计解决方案
2017年最弱密码公布:“123456”依然稳坐第一
    美国密码管理应用公司Splashdata每年都会公布一份“年度最弱密码”榜单。   今年的榜单上,“123456”依旧稳坐榜单第一位,它在2013年-2016年间都是第一位。连续四年卫冕亚军的,是“密码本人”的“password”。 (图自 Giphy)   此外,“123456”和“password”这两个密码还有 6 种相关变体,合计占了排行榜前25名中的8位。   除了以上两个密码的变体,能进入排行榜前十的还有基于键盘键位的“qwerty”、情景感十足的“letmein(让我进去)”、以及“football”和“iloveyou”。   值得一提的是,“starwars”首次上榜,排位第16 ,也许是出于《星战:最后
[手机便携]
三星Galaxy S21最新渲染图解密:超窄边框曲面屏,配S Pen
有关三星 Galaxy S21 系列手机的消息逐渐增多,近日消息人士 @Guidingdroid 也放出了一组 Galaxy S21 的最新渲染图。 从图片来看,Galaxy S21 整体设计与 S20 类似,正面采用超窄边框加持的 Infinity-O 曲面屏,背部为后置四摄模组,其中有一枚摄像头位于闪光灯下方。值得注意的是 Galaxy S21 还配有 S Pen。   IT之家了解到,此前有消息称三星电子计划在明年上半年在 Galaxy S21 系列的顶级机型上加入 S Pen,同时 Galaxy S21 系列共有 3 款机型,分别为 M1、N2、O3,而顶级型号 O3 将配备 S Pen,三
[手机便携]
51 汇编语言编程--输入密码
;某些触屏手机上,有个滑动开锁的操作。 ;笔记本电脑,一般都是用键盘输入密码。 ;也有人把密码设置成:ASDFGHJKL;'Enter,当开机时,只需用手指在键盘上划一下,即可。 ;单片机,也可以设置这样形式的密码,依次按下某些键,即可成功进入下一步的操作。 ;下图电路,就是依次按键,进行输入开机密码的: ;P1.0 到 P1.5 是密码键,P1.7 是确认键, ;P2.1 到 P2.6 对应 5 个密码键,平常点亮,--原文如此,应该是6个 ;按下对应的密码后对应的LED熄灭,松开再次点亮, ;P2.7 上的蓝色 LED 对应的是确认键。 ;密码顺序是依次按 P1.0 到 P1.5, ;密码数值
[单片机]
51 汇编语言编程--输入<font color='red'>密码</font>
单片机实现SRAM工艺FPGA的加密应用
摘要:首先对采用SRAM工艺的FPGA的保密性和加密方法进行原理分析,然后提出一种实用的采用单片机产生长伪随机码实现加密的方法,并详细介绍具体的电路和程序。 关键词:静态随机存储器(SRAM) 现场可编程门阵列(FPGA) 加密 在现代电子系统设计中,由于可编程逻辑器件的卓越性能、灵活方便的可升级特性,而得到了广泛的应用。由于大规模高密度可编程逻辑器件多采用SRAM工艺,要求每次上电,对FPGA器件进行重配置,这就使得可以通过监视配置的位数据流,进行克隆设计。因此,在关键、核心设备中,必须采用加密技术保护设计者的知识产权。 1 基于SRAM工艺FPGA的保密性问题 通常,采用SRAM工艺的FPGA芯片的的配置方法主要
[单片机]
IC解密单片机算术运算指令
  单片机算术运算指令汇总,不带进位位的单片机加法指令   ADD A,#DATA ;例:ADD A,#10H   ADD A,direct ;例:ADD A,10H   ADD A,Rn ;例:ADD A,R7   ADD A,@Ri ;例:ADD A,@R0   用途:将A中的值与其后面的值相加,最终结果否是回到A中。   例:MOV A,#30H   ADD A,#10H   则执行完本条指令后,A中的值为40H。   下面的题目自行练习   MOV 34H,#10H   MOV R0,#13H   MOV A,34H   ADD A,R0   MOV R1,#34H   ADD A,@R1
[单片机]
凌科芯安嵌入式加密芯片占防抄板领域达75%
    随着电子产品行业竞争日益激烈,如何保护自己的产品设计方案以维护品牌形象,扩大产品的市场占有率,如何在产品技术转让时有一个理想的、可以量化的计量标准已经成为很多公司和产品设计者日益关切的问题。 作为目前嵌入式数据安全的领导厂商之一,凌科芯安公司的LKT系列加密芯片已经在国内的智能卡平台高端加密芯片领域,占有率达到了75%左右的市场份额,已经在工业控制与自动化,数字电视,安防监控,游戏,消费类电子、汽车电子、移动支付等多个行业得到广泛的应用。凌科芯安公司的LKT系列加密芯片,全部采用专用智能卡芯片平台,具有全球唯一序列号,芯片防篡改设计,具有防止SEMA/DEMA 、 SPA/DPA、 DFA和时序攻击的措施,数据安全存储
[手机便携]
珠海炬力1月29日发布Q4财报
  据国外媒体报道,珠海炬力宣布,该公司将于美国东部时间1月28日(北京时间1月29日)美国股市收盘后发布截至12月31日的2007年第四季度财报及2007年年报。   财报发布后,珠海炬力将于美国东部时间1月28日17:30(北京时间1月29日6:30)召开电话会议。珠海炬力管理层将出席电话会议,解读财报要点,并回答分析师和投资者的提问。要收听珠海炬力电话会议,投资者可拨打电话800-901-5241或617-786-2963,密码为“89508448”。   美国东部时间2月4日之前,投资者可以拨打电话888-286-8010或617-801-6888收听珠海炬力电话会议录音,密码为“62798013”。此外,投资者还可以
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved