博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
加密芯片那些事儿
阅读量:4955 次
发布时间:2019-06-12

本文共 3531 字,大约阅读时间需要 11 分钟。

一个好的安全加密芯片不但要有安全可靠,不可被破解的物理硬件,还要有可灵活设计的软件。二者缺一不可,否则再好的硬件,会因为软件设计的限制,被破解。再好的软件设计方案,也会因为,硬件安全程度不够,被侵入者全盘复制。

 

加密芯片那些事儿

 

作者:武者

目录

一、         为什么要用加密芯片... 2

二、         加密芯片安全性考虑要素... 3

三、         加密芯片的硬件安全性... 3

四、         加密芯片的软件安全性... 5

1.      真值点判断工作模式... 5

2.      数据加解密工作模式... 6

3.      功能运算工作模式... 8

五、         结束语... 9

 

 

 

一、        为什么要用加密芯片

原因很简单:MCU很容易被破解! 图一为本人定期收到一家芯片解密公司的广告。不断有新的芯片被解密成功。破解一颗芯片,便宜的几百元,贵的几万元。记得15年前Cypress的一款USB芯片Cy63001,号称不可被破解,当时我也问过市面上各家芯片破解公司,都说无法破解。后来我兴致勃勃地把它开发出来,并快活的收取着licese费用。没想到好景不长,只过了2年,这颗芯片就可以被破解,破解费5万元。这后又过1年,这颗芯片的破解费迅速降到500元!下降速度超过中国股市……

 

图1:定期收到芯片解密广告

 

这些芯片破解公司可以非常容易的破解MCU,提取芯片里面的二进制代码,还可以将代码进行反汇编,进行跟踪、调试。

如果在设计方案上加一颗加密芯片,并让主控MCU在工作的时候,跟这颗加密芯片有交互。这样即使主控MCU被破解,整套方案,没有了这颗加密芯片也是运转不起来的。

那么问题来了,这颗加密芯片是否安全可靠,是否能够不被破解?这就下面要讲的内容。

 

二、        加密芯片安全性考虑要素

加密芯片承载着整套方案的安全重任,其本身是否安全可靠,至关重要。衡量一颗加密芯片是否足够安全,主要考虑2方面:硬件、软件。

市面上的加密芯片五花八门,种类繁多,让我们看的眼花缭乱。一个加密芯片是否足够安全,加密芯片本身的硬件结构,至关重要。如果加密芯片自身能够像主控MCU一样被破解,那么整套方案就毫无安全可言。

在加密芯片硬件可靠的基础上,使用的是哪种软件方案也同样重要。有一些加密芯片硬件安全度很高,不可被破解,但使用的软件方案不好,这样也会被搞芯片破解的人,轻而易举的改动主控芯片的二进制码,跳过加密芯片运行,或者在功能上模拟出一样的加密芯片,从而破解整套方案。

一个好的安全加密芯片不但要有安全可靠,不可被破解的物理硬件,还要有可灵活设计的软件。二者缺一不可,否则再好的硬件,会因为软件设计的限制,被破解。再好的软件设计方案,也会因为,硬件安全程度不够,被侵入者全盘复制。

 

三、        加密芯片的硬件安全性

 上世纪70年代初期,嵌入式系统是由分离部件如:CPU、ROM、RAM、I/O缓存、串口和其他通信与控制接口组成的。我们可通过早期的单板机,清楚地看到,如图:

 

 

图2:早期单板机

    有一些加密芯片,使用比较偏门的MCU实现(甚至一些MCU订制厂商,同时也在卖加密芯片)。这些加密芯片,再偏门,也能够被芯片破解者通过侵入式或非侵入式攻击,轻松得到加密芯片的内部代码,然后破解者从加密芯片厂商购买同样加密芯片,自行烧录,从实现整套方案破解。

     目前智能卡芯片内核的加密芯片,最为安全可靠。其他的内核芯片,都有可能被破解。智能卡内核之所以最安全,是因为其使用了存储器总线加密技术,顶层金属网络设计,混合逻辑设计等,并且智能卡芯片提供了很多的防止攻击保护,如:防止电源噪声攻击,时钟噪声攻击等等。有兴趣的可以搜索一篇《MCU芯片加密历程》的文章。

 

图3:智能卡存储器总线加密技术,存储器中的数据都是密文存储,

即使被入侵者得到,也无法使用。

目前银行卡、电信SIM卡,社保卡等涉及到钱的安全领域,基本上都是使用智能卡芯片,并且各自都有其行业规范。就是因为智能卡芯片的安全程度最高,物理上被攻击的可能性极小。

如何判断加密芯片是否为智能卡内核的加密芯片?

由于智能卡的高安全性,不排除一些加密芯片供应商,会说自己的芯片使用的是智能卡内核。判断其真伪,很简单,只要问他们加密芯片是否能提供智能卡通信接口(即:ISO7816接口),如果提供,则买一个智能卡读写器,操作一下即可。如果不提供ISO7816接口,则肯定不是智能卡内核的。另外还有个判断依据,问其加密芯片内部,是否提供硬件的DES算法寄存器,DES算法硬件支持,是银行卡,社保卡等智能卡的标配。我所了解的智能卡内核的加密芯片有:中巨的SMEC98SC、凌科芯安的LKT4100F、ATMEL的AT88SC、Infineon的SLE 77CF1200S等等。

 

四、        加密芯片的软件安全性

在加密芯片硬件不可破解的基础上,我们再谈谈加密芯片的软件方案。加密芯片物理硬件不可破解后,并不是就万事大吉了,软件设计的好坏,同样会影响到整套方案的安全。加密芯片的软件工作原理,我分为三个类型:1. 真值点判断类型;  2. 数据加解密类型; 3. 功能运算类型。下面列举一些简单的例子,解释其软件工作原理。

 

1.     真值点判断工作模式

主控MCU在工作时,判断一下外部的加密芯片是否合法,然后决定自身是否要正常工作,我把这一类加密芯片工作方式,统称为真值点判断类型。

这类判断加密芯片是否合法的方式有:PIN码验证,对称算法运算(AES,DES等),非对称算法运算(RSA,ECC等),散列算法(HMAC-MD5, HMAC-SHA,HMAC-SM3等),挑战码方式(如ATMEL的AT88SC系列芯片)……

真值点判断方式,操作简单,对主控芯片原有代码改动较小。加密芯片提供者甚至可以提供简单配置一下密钥,就能工作起来。但这类方式有个致命弱点,如果侵入者将主控MCU的代码,反汇编,并作改动就可以绕过加密芯片,实现破解。如下面的反汇编代码中,将C:0x0420地址代码,改成直接挑砖指令:SJMP 0x042C,将完美绕过加密芯片。

所有这类型工作方式,都存在被破解的可能性,破解难度取决于找到对应真值点的位置,一旦找到,整套方案就被破解了。

 

图4:加密芯片工作在真值点判断模式下的原代码

 

将此处代码直接改成:

SJMP C:042C

将直接跳过加密芯片,正常工作!

图5:加密芯片工作在真值点判断模式下的反汇编

将C:0x0420地址代码,改成直接挑砖指令:SJMP 0x042C,将完美绕过加密芯片

 

 

2.     数据加解密工作模式

将一部分数据密文存放在加密芯片中,当主控MCU工作时,从加密芯片密文读出,然后在主控芯片中再解成明文使用,这一类统称为数据加解密类型。常见的加解密算法有对称算法(AES,DES等),非对称算法运算(RSA,ECC)等等。

这类工作模式,同样有漏洞,要求入侵者能够调试反汇编的代码。如图7,在C:0x01C0处打断点,将变量bDecryptData中的明文数据得到,也将成功破解整套方案。

 

图6:加密芯片工作在数据加解密模式下的原代码

 

 

 

在此处打断点,可获取解密后数据!

图7:加密芯片工作在数据加解密模式下的反汇编

将C:0x01C0地址打断点,并把对应地址变量内容读出,

 然后替换汇编代码,也将成功破解

 

3.     功能运算工作模式

将主控芯片的一部关键代码放在加密芯片中,当主控MCU工作时,传入参数,请求加密芯片执行运算,并获取计算结果。这一类工作方式,统称为功能运算类型。

这类工作模式,是将一部分代码放入加密芯片中运行,例如图8中,计算圆周长的代码在加密芯片中,主控芯片只需要传给加密芯片圆的半径,就能够得到圆的周长。即使入侵者把主控MCU的反汇编代码,每一行都理解透,在不知道“圆周长”计算公式下,他们就算有通天的本事,也无法解密整套方案。

 

图8:加密芯片工作在功能运算模式下的原代码

 

 

图9:加密芯片工作在功能运算模式下的反汇编

 

五、        结束语

一个好的加密方案,即少不了安全可靠的物理硬件的支持,也少不了灵活可变的软件支持。一些加密芯片厂商,一味的强调自己的硬件多么强大,支持算法种类多么的多,算法密钥长度多么的长,然而没有提供很好的软件开发支持,只能够配置密钥数据等,再强大的硬件,也可被轻松软件破解;另外一些加密芯片厂商,一味的强调自己的软件开发,多么灵活多变,速度多么的快,然而其硬件只是普通较偏门的MCU,不是智能卡内核芯片,这样再完善的软件算法,也无法挡住入侵者直接破解其硬件,将整个加密芯片的二进制码全盘复制,并采购其一样的加密芯片,实现整个方案的破解。

转载于:https://www.cnblogs.com/walta99/p/8484445.html

你可能感兴趣的文章
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
2.2 标识符
查看>>
孤荷凌寒自学python第五天初识python的列表
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
ORACLE 数据库概述
查看>>
php PDO (转载)
查看>>
保险折扣统计
查看>>
贝叶斯
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
关于使用“状态模式”做工作流概要。
查看>>
谈谈:程序集加载和反射
查看>>
mysql主从复制(超简单)
查看>>
scanf和gets
查看>>
highcharts 图表实例
查看>>