几种常用的单片机加密方法
单片机程序固件加密的另一种思路

0引言:MCU 的发展过程和固件加密重要性随着大规模集成电路的出现和发展,单片机(MCU )将原有计算机上的CPU 、RAM 、ROM 、定时计数器和多种I/O 接口集成到一个芯片,从而形成芯片级的计算机。
这也是TI 工程师的Gary Boone 和Michael Cochran 发明的全球第一颗微控制器(MCU )———TMS 1000系列(图1)的雏形。
之后,日本电子厂商开始生产汽车用微控制器,包括用于车内娱乐、自动雨刷、电子锁和仪表盘的4位MCU ,以及用于发动机控制的8位MCU 。
时至今日,单片机除了传统的玩具市场、工业控制、汽车电子、白家电等,在物联网以及智能化浪潮来临以后,单片机更加成为产品设备的核心部件,一方面设备需要进行实时性高效智能的信息,另一方面还要能与其他设备进行信息互换,这些需求都需要由单片机来完成。
而中国拥有最为广泛的消费群体和应用场景,单片机在国内的发展优势也更为明显。
从图2所示,预计到2022年,中国MCU 市场规模将突破300亿元大关,预计达到319亿元!可以说,单片机因应用而生,除了芯片本身硬件性能,与应用相关的程序固件越发显得重要,固件安全的需求也就越来越受到关注!1单片机的信息安全首先,广义上的“安全”,也可视作为“信息安全”,它具有三个重要的特点:1)保密性:需要确保信息不为其它未授权的个人或团体所获得。
2)完整性:维持和确保信息的完整,不被未授权的篡改。
3)可行性:被授权访问信息的主体,在需要信单片机程序固件加密的另一种思路丘宁冰创芯工坊科技(深圳)有限公司图1TI 的TMS 1000系列MCU图2中国MCU 市场规模增长与预测息的时候能及时访问并获取。
保密性Confidentiality,Integrity完整性和可行性Availability,简称:CIA。
从以上特征描述,引申出处理信息安全的三种常用工具:标识、认证以及授权,也简称为:IAA。
1)标识:Identity首先,信息访问者标明主体身份,但是不确定该主体确实可访问该信息?所以,得验证其真假;2)认证:Authentication身份认证也就是核实主体声称的内容是否属实?以便在主体身份核实后,进行更细化的动作3)授权:Authorization作为更精细的信息处理,需要解决的问题包括:确保哪些信息可被授权人查看?被查看的信息是否保持完整,未被未授权的修改?以及被授权人可以随时方便的访问可查看的信息。
浅谈单片机应用系统的加密方法

经与非门逻辑运算后接到 8 3 的 P . , D 仍接 01 05 把 4
到 P.; 0 4 ④把 地址总 线 中的 A1 A 和 2对 调 } 把地 ⑤
址 总线中 的 A6 求反 ; @把 P . 2 3和 P . 或非 门 24经
一
过 线孔 。
() 最 简单的也 是最 常用 的 加密方 法 ( 1把 即对 单
片机的地址总线、 数据总线中的某些线进行交叉换
位, 或把某 些线 路通过 逻辑 电路 , 变原信 号间的逻 改 辑关 系 , 用 户仿真 时 读 出的 程 序存 储 器 中的数 据 使 变成一个 随机 数 , 而失去反 汇编 的意 义) 从 有机 地结 台 起 来 , 可 实现硬 件 的加 密 , 图 1 即 如 。其 中 : 把 ① DO和 D7对 调 , 换 了数 据 总 线 中 的 某 些位 ; 把 交 ② 数 据 总线 D6 求反 ; 把 26 ③ 74的两 根 数据 线 D5D ,4
o ir - Co p t i fM c o- m u erUnt
F n S u y o, ta a h n a e l
(ol eo Clg e f
r a i n l tclegneig C i nvri nn  ̄T cnlg Xuh u2 1 0 ) m t nad ee r a n ier . hn U iesyo Mii o ci n a t f g eh oo y・ zo 2 08
、
维普资讯
1 期
樊舜尧 苷 一 浅谈单片机 应用 系统的加密方 法
为 了防 止 新产 品 的核 心 技术 被窃 , 要 对其 硬 需 件 电路和软 件进 行 加密 。加密方法 的基 本思路 是对 硬 件 电路和 软件 程 序均采取 一切 可用的 方法增 加其 读 出难 度 , 防止 硬 件 电路原 理 被 人测 试和 软 件被 破
单片机数据加密算法

单片机数据加密算法
1. 对称加密算法,对称加密算法使用相同的密钥来加密和解密数据。
常见的对称加密算法包括AES(高级加密标准)、DES(数据加密标准)和3DES。
这些算法在单片机上通常具有较高的执行效率和较小的存储需求。
2. 非对称加密算法,非对称加密算法使用公钥和私钥来加密和解密数据。
常见的非对称加密算法包括RSA、ECC(椭圆曲线加密)和DSA(数字签名算法)。
这些算法通常比对称加密算法更复杂,因此在单片机上的实现可能需要更多的计算资源。
3. 哈希函数,哈希函数用于将任意长度的数据映射为固定长度的哈希值。
常见的哈希函数包括SHA-1、SHA-256和MD5。
在单片机上,哈希函数通常用于验证数据的完整性和生成消息摘要。
4. 随机数生成器,随机数生成器用于生成加密过程中需要的随机数。
在单片机上,通常使用伪随机数生成器来产生随机数序列。
在选择单片机数据加密算法时,需要综合考虑安全性、执行效率和存储需求。
合适的加密算法可以保护数据安全,同时不会对单
片机的性能造成过大的影响。
同时,还需要注意算法的实现细节,以防止可能的侧信道攻击和其他安全风险。
最终选择的加密算法应该能够满足具体应用场景的安全需求。
常用的单片机加密手段(二)

常用的单片机加密手段(二)昨天写了一种常用的单片机加密手段,受到很多电子同行的反响,也引起来很多此类话题讨论,是我没想到的。
由于现在的公众号还没开通原创功能,没办法针对同学们的提问进行解答,而且内容也比较复杂,所以我单独再开一章来讲解关于单片机加密方面,大家普遍比较关心的问题。
第一:昨天的那种常用方法,有部分同学担心量产效率问题。
效率肯定是影响的,既要保证安全性,必然要牺牲少许效率,但是影响远远比同学们想象的影响低。
其实就是烧写两次程序,首先,写一个读取芯片ID,然后根据我们设计的算法计算出来数据,并且写入到EEPROM里数据的这样一个程序1,我们的功能程序作为程序2。
那烧写程序时,我们先烧写程序1进入单片机,固话好我们的数据后,再然后烧写程序2到单片机;或者采用流水线式工作,工作人员甲专门烧写程序1来一遍,工作人员乙烧写程序2来一遍。
程序1的功能其实非常简单,因此烧写起来肯定很快,不管如何影响到一定的效率,但是影响是非常小的。
第二:昨天的那种方法,就可以确保万无一失了么?当然不是。
这个世界上就不存在绝对安全的东西,就看付出多大的代价。
据称STM32的某些型号内部的96位的ID是烧写在system区域,而破解者找到了原厂的调试工具,可以直接烧录改变这个ID。
在利益面前,总是会有人去做这种事情,甚至说这种原厂调试工具的泄露,不排除是他们自己人做的。
那我们电子工程师的劳动成果就这么白白窃取,我们无能为力么?当然不是了。
安全和攻击一直在较量着,我们只需要多方面增强我们产品的安全性,让破解着花费的代价,超过了重新开发出来花费的代价,那就可以让破解着直接望而却步了。
我们一个产品可以采用多层加密的手段来做,这样就可以尽可能的加大破解者的难度,提高我们产品的安全性能。
------------------------------------------------------------------下面我给大家介绍几种安全加密方面的方法,由于部分方法详细讲解比较复杂,我只是简单给大家介绍一下原理,先让各位同学涨一下见识,让你知道有这么回事。
51单片机的加密与解密 - 单片机

51单片机的加密与解密 - 单片机51 单片机的加密与解密单片机在当今的电子技术领域,单片机的应用无处不在。
51 单片机作为一种经典的单片机类型,因其简单易用、性价比高而被广泛采用。
然而,随着其应用的普及,51 单片机的加密与解密问题也逐渐引起了人们的关注。
首先,我们来了解一下为什么要对 51 单片机进行加密。
在许多实际应用中,单片机内部运行的程序往往包含了开发者的核心技术、商业机密或者独特的算法。
如果这些程序被未经授权的人员读取和复制,可能会导致知识产权的侵犯、商业竞争的不公平,甚至可能对产品的安全性和稳定性造成威胁。
因此,为了保护开发者的权益和产品的安全性,对 51 单片机进行加密是非常必要的。
那么,常见的 51 单片机加密方法有哪些呢?一种常见的方法是代码混淆。
通过对程序代码进行复杂的变换和重组,使得代码难以理解和分析。
比如,将关键的变量名、函数名进行重命名,使用复杂的控制流结构等。
这样,即使攻击者获取了代码,也很难理清程序的逻辑和功能。
另一种方法是使用硬件加密模块。
一些 51 单片机芯片本身就提供了硬件加密的功能,例如加密锁、加密密钥存储等。
通过在程序中使用这些硬件加密模块,可以增加破解的难度。
还有一种加密方式是对程序进行加密存储。
将程序在存储时进行加密,只有在单片机运行时通过特定的解密算法进行解密后才能执行。
这样,即使存储介质被读取,攻击者得到的也是加密后的乱码。
然而,尽管有了这些加密手段,51 单片机的解密仍然是可能的。
解密的动机通常是为了获取他人的技术成果用于非法复制或者破解产品限制。
常见的 51 单片机解密方法主要包括以下几种。
逆向工程是一种常见的解密手段。
攻击者通过对单片机的硬件进行分析,包括芯片的引脚、内部电路等,尝试推断出程序的运行方式和存储结构。
此外,通过软件分析也是一种方法。
利用专业的工具对单片机的运行状态进行监测和分析,尝试找出加密算法的漏洞或者获取解密的关键信息。
还有一种比较暴力的方法是通过物理手段破解。
单片机代码加密防破解方法

单片机代码加密防破解方法摘要:一、单片机代码加密的必要性二、单片机代码加密方法1.编写时加密2.运行时解密3.加密算法选择三、加密技术的局限性及应对策略四、案例分享五、总结与建议正文:一、单片机代码加密的必要性随着科技的不断发展,单片机应用范围越来越广泛,其在工业控制、智能家居、物联网等领域发挥着重要作用。
然而,单片机程序的安全性越来越受到威胁,加密单片机代码以防止被破解成为必要手段。
一旦单片机程序被破解,可能导致设备失控、数据泄露等严重后果。
因此,加密单片机代码具有显著的现实意义。
二、单片机代码加密方法1.编写时加密:在将代码写入单片机之前,可以使用加密算法对代码进行加密。
这种方法在编写时较为麻烦,但能有效防止代码在存储和传输过程中的泄露。
常见的加密算法有AES、DES等。
2.运行时解密:在单片机运行时,可以根据特定条件对加密代码进行解密。
这种方法可以在保证代码安全性的同时,降低加密和解密过程中的执行速度影响。
解密条件可以设置为特定时间段、特定操作等。
3.加密算法选择:选择合适的加密算法是提高代码安全性的关键。
常用的加密算法有对称加密算法(如AES)、非对称加密算法(如RSA)和哈希算法等。
在选择加密算法时,需综合考虑算法的安全性、执行速度和资源占用等因素。
三、加密技术的局限性及应对策略虽然加密技术能有效提高单片机代码的安全性,但仍存在一定局限性。
首先,加密和解密过程会消耗部分计算资源,可能导致程序执行速度降低。
其次,加密算法可能被破解,尤其是弱加密算法。
此外,硬件保护措施(如FPGA)容易被攻击者绕过。
为应对这些局限性,可以采取以下策略:1.采用多层加密:对代码进行多层加密,增加破解难度。
2.动态加密:根据程序运行状态,动态生成加密代码。
3.选择强加密算法:使用安全性较高的加密算法,如AES。
4.结合其他安全措施:如硬件保护、防火墙等。
四、案例分享在实际应用中,有许多方法可以应用于单片机代码加密。
MCU常见的加密手段

MCU常见的加密⼿段现在的MCU程序可能别⼈花⼏百块钱就能破解,为了防⽌⼤家的程序不被剽窃,今天给⼤家分享点加密的内容。
⼀、常见加密⽅法本节不讲加密具体实现算法,只讲常见加密⽅法。
1.程序写保护这种⽅法是最常见,也是最简单的⼀种。
现在的MUC基本都有写保护功能,但是这种容易被⼈破解。
2.烧断数据总线这个⽅法听起来不错,但有损坏的风险,同样也能破解。
3.软件加密是⼀些防⽌别⼈读懂程序的⽅法,单⼀的这种⽅法不能防⽌别⼈全盘复制,须配合其他的加密算法。
4.添加外部硬件电路的加密⽅法这个⽅法效果看起来⽐较好,但会增加成本。
5.芯⽚打磨改型这个⽅法改了型号能误导,但同时也增加成本,解密者⼀般也能分析出来。
6.通过通过联⽹加序列号加密通过连接⽹络,在你的MCU中⽣成⼀个唯⼀的随机长序列号,并加⼊复杂的特种算法,或加⼊你们重新编码的企业信息在⾥⾯,每个芯⽚内不同,复制者只能复制到⼀个序列号。
7.通过MCU唯⼀的标识加密以前很多MCU没有唯⼀标识码,现在的很多MCU都具有唯⼀标识码了。
这个⽅法⽐较好,简单省事,能很好的防⽌复制。
⼆、读保护 + 唯⼀ID加密使⽤读保护 + 唯⼀ID的加密是最常⽤的⼀种⽅法,也是推荐⼤家使⽤的⼀种⽅法。
1.唯⼀ID现在正规的芯⽚,每颗出⼚的时候都带了⼀个唯⼀标识码,这个号码是唯⼀不重复的,⽐如STM32的就使⽤96位作为唯⼀ID。
和我们每个⼈的⾝份证号码⼀样,现在刚出⽣的婴⼉,上户的时候就给他⼀个⾝份证号,那么每个芯⽚⼀⽣产出来,也就具备了这个⾝份证号。
2.加密原理读保护就不⽤说了,增加被破解难度。
使⽤唯⼀ID加密的⽅法很多,这⾥说⼀种简单的⽅法:出⼚时程序读取唯⼀ID并保存在⼀个位置,以后程序执⾏之前,要读取并匹配这个唯⼀ID,⼀致才执⾏程序。
当然,这种⽅法是最基础的原理,但也存在被破解的风险。
所以,存储的数据,以及读取验证这两个地⽅需要进⼀步添加⼀些算法。
这样操作之后,即使别⼈读取了你的程序,也是⽆法正常执⾏。
51单片机的加密与解密

51单片机的加密与解密51类单片机在完成三级加密之后采用烧坏加密锁定位(把芯片内的硅片击穿),不破坏其它部分,不占用单片机任何资源。
加密锁定位被烧坏后不再具有擦除特性。
一旦用OTP模式加密后,单片机片内的加密位和程序存储器内的数据就不能被再次擦除。
经过OTP加密之后通过编程器读取测试的时候会提示:部分引脚接触不良-----断脚。
例如:烧断89C51的31脚EA脚,烧断89C51、89C2051的数据线以及烧断PIC系列芯片的数据时钟线等。
这种加密方式会对一些通过数据位单片机解密的方式,造成一定的困难。
ATMEL 89C系列51单片机特点:1.内部含Flash存储器因此在系统的开发过程中可以十分容易开展程序的修改,这就大大缩短了系统的开发周期。
同时,在系统工作过程中,能有效地保存一些数据信息,即使外界电源损坏也不影响到信息的保存。
2.和80C51插座兼容89C系列单片机的引脚是和80C51一样的,所以,当用89C系列单片机取代80C51时,可以直接开展代换。
这时,不管采用40引脚亦或44引脚的产品,只要用一样引脚的89C系列单片机取代80C51的单片机即可。
3.静态时钟方式89C系列单片机采用静态时钟方式,所以可以节省电能,这对于降低便携式产品的功耗十分有用。
4.错误编程亦无废品产生一般的OTP产品,一旦错误编程就成了废品。
而89C 系列单片机内部采用了Flash存储器,所以,错误编程之后仍可以重新编程,直到正确为止,故不存在废品。
5.可开展反复系统试验用89C系列单片机设计的系统,可以反复开展系统试验;每次试验可以编入不同的程序,这样可以保证用户的系统设计到达最优。
而且随用户的需要和发展,还可以开展修改,使系统不断能追随用户的最新要求。
解密方法:对于ATMEL 89C系列芯片根据其存储器的特点,简单的方法就是想方法把密码去掉,因为OTP形式存储不能用电擦除,但是可以用紫外光来擦除,那么只要能控制好了只把密码部分擦除掉,而保存了程序段,那么这样的芯片就是不加密的了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
几种常用的单片机加密方法
一、加密方法
1、烧断数据总线。
这个方法我想应不错,但应有损坏的风险,听说也能**。
2、芯片打磨改型,这个方法有一定作用,改了型号能误导,但同时也增加成本,解密者一般也能分析出来。
3、用不合格的单片机的的存储器:这个方法听起来不错,值得一试。
很多单片机有这种情况,有的是小容量改为大容量来用,**者应很难发现。
例:8031/8052 单片机就是8731/8752掩模产品中的不合格产品,内部可能有ROM。
可把8031/8052 当8751/8752 来用.但使用时要测试可靠。
4、其他还有添加外部硬件电路的加密方法。
但那样增加成本,效果不一定好。
5、软件加密,是一些防止别人读懂程序的方法,单一的这种方法不能防止别人全盘复制。
须配合其他的加密方法。
6、通过序列号加密,
这个方法当你的产品是连接PC时或网络,我想是一个比较理想的方法。
原理跟电话产品防伪标志相近。
就是在你的单片机中生成一个唯一的随机长序列号,并加入复杂的特种算法,或加入你们重新编码的企业信息在里面,每个芯片内不同,复制者只能复制到一个序列号。
这个方法不能防止复制,但能发现复制品,并可在升级或在网络状态控制它或让他自毁。
如果产品不联机或不可升级,则这个方法完全无效,只能是在上法院时可当作证据,因为内含特种算法破解者是无法知道的。
7、通过单片机唯一的特性标识(不可修改)进行加密
这个方法最好,能很好的防止复制。
但大多单片机没有唯一标识。
STC单片机里面含唯一标识,但本人没用过,下次一定要研究使用一下。
理论上只要含唯一标识是单片机都可实现,ATMEL AVR系列单片大部分型号有RC校正字节(几十个芯片才有一个相同,并且不可修改)能实现这个理想功能,可做到即使芯片内程序被读出也无法直接在另一个同型号的单片机上正常运行。
并且如果用这个唯一标识来生成含有加密算法的序列号,结合第6种方法,哪应是最理想的加密方法。
以上方法应都是一种加密的思路,各种方法可接合着用,6、7两种方法是本人认为比较合适,实现起来比较容易的方法。
后面将重点介绍两种加密方式的实现方法。
二、序列号加密实现方法
1、原理
就是在存储器某个区块放入一个唯一的序列号(长一点,无规律),每个芯片不同。
原理跟电话产品防伪标志相近
| PC机 | <------------>| 带自定义算法序列号单片机系统 |
控制方法:
1、PC根据传回来的序列号根据算法判断是否合法,合法就运行,不合法处理它。
当然,如果是**的序列号,可自毁。
2、单片机内部的序列号经加密算法处理,单片机系统同样要防止软件被更改,可在单片机内部加入CRC等数据校验。
一般情况下,序列号如果不合算法,单片机系统应让程序运行出错,这样**者一般不会去修改序列号,如果修改了也没关系,因为PC还能判断是否合法。
3、序列号传送时可采用双向加密算法认证,相当于银卡的数据交换方式。
传送过程:
PC发送随机SEED数据---->单片机系统跟据随机SEED算出加密的序列号----->PC根据算法判断序列号是否合法这样在序列号的传送过程中,数据每次不同,解密者无法看到序列号的明码。
这样PC软件他同样不容易更改。
注意:加密算法可以很简单理解一个为异或,当然算法由你自已随意定,反正目的不能上别人一看软件就懂。
**者只是**一个产品只能得到一个序列号,即使序列号是明码,他也只能知道是一个。
如他随便修改一个序列号一般情况就不符合算法,除非他看懂你的软件算法,我想这是一般解密者最不愿意做的事情。
单片机系统的量产:
产生这样的序列号,单片机系统如何生成?如果用手工一个个去计算调入,得重新编译是不可能的事情。
如果编写一个软件生成数据放入到HEX文件中,那样不说工作量好大,编程时还必须一次次装入HEX文件,量产同样无法完成。
这个可于
MiniPro TL866 编程器完成。
编程器的介绍可查看:/minipro
TL866编程器有个自动编号功能,可利用DLL动态库调用实现任意的序列号.如何使用DLL设定序列号,可参考编程器安装包内的DLL实例,内有详细说明。
后面讲的用单片机唯一的特性标识进行加密也用到DLL调用,基本大同小异。
经过这样的加密,达到一个目的,就是解密者必须修改你的软件后才能放心使用,但是每次升级同样会受你控制,好像微软随时可以黑你屏一样的道理,否则可能随时会被你宰了!!但这种方法只适合连接PC或网络的系统。
三、用单片机唯一的特征标识进行加密
加密原理:
单片机必须有唯一标志,单片机程序内只要判断是否是这个标志,就可防止程序直接复制使用。
理论上可以做到很难破解,本人认为是最有效又实用的方法。
达到目的:解密者最不愿意做的事让他必须做。
一般大部分搞单片机解密的都是暴力破解,因为这个最容易,只要牚握技巧,有设备,工艺熟练就可了,不用太强的专业知识。
如果复制后,程序无法运行,那就蒙了,因为这个时候就要去看汇编语言了,我想信有很多汇编高手,能很容易**。
但我也同时认为,怎么多型号的单片机,汇编指令差别好大,每一种单片机的汇编都很熟的人应不多了。
所以这会大大增加**难度。
如果一个加密设计好的软件,跟据单片机的唯一特征字来加密,有时他可能不得不看懂里面的加密算法。
这样加密目的就达到了。