一个好的安全加密芯片不但要有安全可靠,不可被破解的物理硬件,还要有可灵活设计的软件。二者缺一不可,否则再好的硬件,会因为软件设计的限制,被破解。再好的软件设计方案,也会因为,硬件安全程度不够,被侵入者全盘复制。
加密芯片那些事儿
作者:武者
目录
一、 为什么要用加密芯片... 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,不是智能卡内核芯片,这样再完善的软件算法,也无法挡住入侵者直接破解其硬件,将整个加密芯片的二进制码全盘复制,并采购其一样的加密芯片,实现整个方案的破解。