“加密前行”-加密芯片在软件License中的应用

news/2024/11/29 0:48:21/

“ 在上篇文章中,我们介绍了在汽车应用中,软硬件加密技术在保护车辆数据和通信方面发挥着关键作用。

JokerEye,公众号:ADAS之眼
ADAS-“加密前行”:软硬件技术在汽车安全中的应用"

今天,我们将以实际的加密芯片案例来讲解加密芯片在消费电子、汽车电子等的应用。”

01

为什么需要加密芯片?

硬件加密是指使用待加密的电子产品之外的硬件电路与待加密的电子产品进行通讯,让产品内部程序通过通讯数据来判断自己是否应该继续执行程序。

软件加密是在程序启动前对license做认证来决定程序是否启动或者在数据交互时先调用信息安全模块对信息进行加密,然后接收方使用相应的解密软件进行解密并还原。

首先我们看一段简单的c demo,如下:

int main (int argc, char** argv)
{if (argc <= 1) {printf("sorry input argc nums error\r\n");return 0xee;}printf("log success!!\r\n");return 0;
}

假定我们这里程序判断入参个数就是我们软件做license认证的手段,我们把exe打包给客户,但客户对程序反编译得到主函数符号如下:

0000000000001149 <main>:
1149: f3 0f 1e fa            endbr64 
114d: 55                     push   %rbp
114e: 48 89 e5               mov    %rsp,%rbp
1151: 48 83 ec 10            sub    $0x10,%rsp
1155: 89 7d fc               mov    %edi,-0x4(%rbp)
1158: 48 89 75 f0            mov    %rsi,-0x10(%rbp)
115c: 83 7d fc 01            cmpl   $0x1,-0x4(%rbp)
1160: 7f 13                  jg     1175 <main+0x2c>
1162: 48 8d 3d 9b 0e 00 00   lea    0xe9b(%rip),%rdi        # 2004 <_IO_stdin_used+0x4>
1169: e8 e2 fe ff ff         callq  1050 <puts@plt>
116e: b8 ee 00 00 00         mov    $0xee,%eax
1173: eb 11                  jmp    1186 <main+0x3d>
1175: 48 8d 3d a5 0e 00 00   lea    0xea5(%rip),%rdi        # 2021 <_IO_stdin_used+0x21>
117c: e8 cf fe ff ff         callq  1050 <puts@plt>
1181: b8 00 00 00 00         mov    $0x0,%eax
1186: c9                     leaveq 
1187: c3                     retq   
1188: 0f 1f 84 00 00 00 00   nopl   0x0(%rax,%rax,1)
118f: 00

从上面汇编代码可以看出:

(1)程序在地址偏移0x115c处和入参个数进行对比(指令cmpl);

(2)若判断成功,把0xee放入eax寄存器(保存程序返回值的寄存器),然后jp跳转到地址偏移0x1186处,完成程序返回 0xee,程序停止;

(3)若判断失败,则继续在地址偏移为0x1175处运行,并打印log sucess;

(4)返回0,程序停止;

此时,黑客从上面汇编代码发现了漏洞,聪明的读者也能看出,假如我把地址偏移为0x1173的指令替换如下:

1173 eb 11 nop #空转

此时软件再重新运行时,即使license判断失败,也不耽误后续软件的正常运行,而这也就是目前一部分软件的破解方式。当然,目前有很多对软件保护的方案如软件套壳、程序逻辑设计、防止反汇编等手段可以防止上述问题。

假设现在软件做了防止反汇编、软件套壳等防护手段,然后现在思考一个软件加密无法解决一个问题:“当出售的软件是可以离线运作时,那么一个license可以在多台电脑上运行,此时我怎么才能解决按照license收费问题呢?”。

答案是:“使用加密芯片,通过硬件加密技术来解决”。

02

加密芯片应用

回到上一章的问题,假设现在软件已经做过反编译以及软件套壳等加密手段,如何采用硬件加密手段来进行license的一对一唯一验证呢?
在上一篇文章我们提到的数字签名技术。基于数字签名技术,很直接的一个答案已经出来:在软件以及硬件中存放着相同的密钥以及设备的唯一标识数据(可以使用mac地址或者sn)。在软件启动时,软件产生一个随机数然后发送给加密芯片,加密芯片以及软件使用相同的数据以及密钥进行SHA256或者其他算法进行计算。计算结束后,软件对二者结果进行对比,若相同,则程序继续往下执行,否则程序结束退出。
以MCU搭配某国产加密芯片为例,其典型的应用流程如下:
在这里插入图片描述

在工厂生产阶段或者程序首次启动阶段,软件可以将密钥(所有软件共享)、UID(唯一标识ID,如芯片的SN)以及自定义数据等写入安全芯片中进行保存。另一方面,这些数据在MCU软件中也可以通过一些方式获取到,注意绿色圈出来的8Bytes常量一般是加密芯片内部固化的。
在软件正式运行阶段,软件每次启动都会生成8Bytes的随机数发送给加密芯片,加密芯片结合密钥、UID、常量数据、以及自定义数据进行SHA256计算,计算后返回MAC2值给MCU。同样MCU也会从自己OTP内部把Key、UID等数据读出,结合随机数进行SHA256计算,生成结果MAC1,通过MAC1和MAC2对比是否相等便可以知道加密芯片是否有更换,决定程序是否启动,完成了MCU以及加密芯片的一对一的认证。假设有人更换了加密芯片,那么加密芯片内部存储的UID和MCU则是不同的,那么二者计算的MAC值也不同,最终的认证结果必然也是失败的。
通过上述流程我们完成了MCU以及加密芯片的一对一绑定,这样我们便可以通过出货加密芯片的的数量来判断软件使用量的多少。另外,加密芯片一般也会有看门狗复位功能,即主控芯片需要定时和加密芯片进行通信数据验证,注意验证是在加密芯片端做的,即主机发送一段数据以及结果给加密芯片,如果数据验证失败或者长时间未进行数据验证,那么加密芯片则会将主机硬件复位,保证了程序的安全。
联想工作中一些比较重要的工业软件,一部分是使用U盾来验证的,其工作原理和上述方案一致,都是通过硬件加密的方式保证一对一的license匹配,只不过内部实现略有不同,在此不再赘述。

03

结束语

在国内盗版软件横行的今天,软件破解以及盗版本质上都是对知识产权的不尊重,因此各个厂家在软件防破解方面下足了劲并使用各种方式进行防护。当然今天讲解了硬件加密方案只是众多防护措施的一种,讲述了硬件加密在软件license的认证作用,希望各位看官有所收获。


http://www.ppmy.cn/news/259497.html

相关文章

LED显示屏静电防护指南

LED显示屏是一种电子设备&#xff0c;对静电敏感。静电放电可能会对LED显示屏的电子元件造成损坏&#xff0c;因此需要采取静电防护措施。以下是LED显示屏静电防护的一些建议和指南&#xff1a; 环境控制&#xff1a;在LED显示屏周围创建适宜的环境条件。控制湿度和温度&#x…

100种思维模型之升维打击思维模型-73

升维打击思维模型&#xff0c; 即在同一个领域里&#xff0c;利用不在同一竞争层面、高于同行业竞争者的技术、标准、价值或模式创新对其进行不对称打击&#xff0c;从而更快地占领市场。 01、何谓升维打击思维模型 一、升维打击 升维打击是 相对于同维、降维打击而提出的一种…

嵌入式行业需要什么样的技术人才?

关注「嵌入式大杂烩」&#xff0c;选择「星标公众号」一起进步&#xff01; 来源 | 巧学模电数电单片机 嵌入式行业需要什么样的技术人才&#xff1f;仔细观察各种招聘的岗位要求吧&#xff0c;无非是两方面。 1&#xff09;通用要求 比如什么学历&#xff0c;多少年工作经验&a…

千方百剂2008升级到千方百计II 脚本执行错误 请检查第69行

解决方法&#xff1a; 《千方百剂II》ptype字段类型允许为空值&#xff1b;基本信息导入成功后,编辑保存死机&#xff0c;请删除索引重复键值。 先建立一个《千方百剂II》的帐套&#xff0c;然后把《千方百剂I》 的年结存完毕的帐套恢复到《千方百剂II》中去&#xff…

Mapbox表达式详细解读

初学mapbox 的小伙伴们一定会被表达式给弄的晕头转向的。明明条件判断或者回调函数能解决的问题。mapbox里非得让你用表达式。这确实比较ex。 不过我们既然遇到了,也不要怕,这篇文章我就带着大家一点一点的搞明白这个所谓的表达式。 首先从宏观上讲,要知道为什么使用表达式…

千方百计管理系统服务器地址,千方百计医药管理系统如何查库存

避税与反避税——成本调整法的运用 避税与反避税——成本调整法的运用 ①材料计算法的运用。 某一生产企业为保证其生产经营活动的正常进行&#xff0c;必须有可供一年生产用的库存材料。1999年&#xff0c;该企业共进货6次&#xff0c;在1999年底&#xff0c;该厂销售产品1000…

千方百剂医药管理系统对接第三方WMS系统(天力士物流)

现在医药行业中很多医药经销公司都将仓储物流环节甩出去&#xff0c;由第三个物流公司来支持&#xff0c;这样专业的事儿让专业的人来做&#xff0c;自己专心做好业务。那么就需要将自己的医药软件(诸如千方百剂、时空CCERP、药易通、黄药师等)与物流公司的WMS系统进行对接。 本…

python里random是什么意思_import random函数 python中random什么意思

python中random.randint(1,100)随机数中包不包括1在python中的random.randint(a,b)用于生成一个指定范围内的整数。其中参数a是下限&#xff0c;参数b是上限。 import random print random.random(0,100)小编知道小编自己演技很烂&#xff0c;但是小编不需要观众&#xff0c;更…