怎样破解芯片,芯片解密方法介绍
不需要对芯片进行初始化,解密时时把芯片放在测试电路中分析。这种芯片解密方法容易操作,学习成本较低。但通常需要很多时间和精力来寻找对特定芯片的非侵入式攻击破解方法,包括反汇编软件和理解硬件版图。
非侵入式攻击芯片解密包括被动和主动两种方式。
被动攻击观察它的信号和电磁辐射,如功耗分析和时钟攻击,不会对被攻击芯片发生作用。
主动攻击有穷举攻击和噪声攻击,特点是将信号加到芯片上,用示波器或逻辑分析仪,捕捉所有信号。然后可以通过分析波形并回复独有的命令。
时序攻击属于侧信道攻击/旁路攻击,侧信道攻击是指利用信道外的信息,比如加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。
时序攻击破解芯片包括执行适时跳过需要的分支和操作条件;使用缓存;不固定时间处理指令如倍频和分频;还有大量的其他原因。
解密飞思卡尔的68HC08微控制器的内部存储器载入模块在输入正确的八字节密码后可以访问内部闪存。为达到正确和错误的密码都处理相同的时间,程序中增加了额外的空操作指令。这对时序攻击提供了很好的保护。一些微控制器有内部阻容振荡器,那样处理器的工作频率与电压和芯片的温度相关。这使得时序分析很困难,攻击时需要稳定元器件的温度并减少电源线上的噪声和电压波动。一些智能卡有内部随机时钟信号使得攻击时测量时间延迟无效。
穷举攻击是对系统尝试数量众多的密钥。通常是使用高速计算机来寻找匹配的密钥。例如对MCU单片机中的密码保护设置,密码本身长度为32字节(256位),抵挡暴力攻击已经足够了。但密码分配在与处理器中断矢量相同的存储器地址。那么,首先减少存储器内矢量一直指向的区域。然后当软件被更新时,只有小部分的密码被修改,因为大部分中断子程序指向的矢量是相同的地址。芯片破解知道早前密码中的一个,就很容易做系统的搜索,在合理的时间内找到正确的密码。穷举攻击也可用在ASIC或CPLD的芯片解密。使用所有可能的逻辑组合到元器件可能的输入端并观察所有输出。
穷举攻击破解芯片也称为黑箱分析,因为破解者不知道被测试元器件的情况。通过所有可能的信号组合,尝试获得元器件的功能。这种破解方法对相对小的芯片很有效。
另一个问题是破解者使用的ASIC或CPLD有触发器,故输出将可能是当前状态或输入的状态。但如果预先检查并分析信号,搜索的范围可以显著减少。例如,时钟输入,数据总线和一些控制信号是很容易认出的。
穷举攻击破解芯片对很多半导体芯片有效,是将外部高压信号(通常是两倍于电源电压)加到芯片引脚上,来试图进入工厂测试或编程模式。这些引脚用数字万用表很容易发现,因为它们没有保护二极管到电源脚。一旦发现对高压敏感的引脚,破解者就可以尝试可能的逻辑信号组合来加到别的引脚上,找出用于进入工厂测试或编程模式的部分。破解者也可用元器件的通信协议来找出设计者嵌入在软件中的测试和更新用得隐藏功能。
芯片运行的功耗取决于它当前的状态。依照CMOS晶体管的原理,各部分动态时的功耗比静态的要大。当输入电压加到反向器上,会引起一个晶体管短路,这个晶体管电流的增加比静态消耗的寄生漏电要大得多。在电源线上加个10-20欧的电阻,就可以测量电流的波动。为达到更好的效果,需要使用至少12位精度和50MHz采样速度的模数转换器。
这些获得的参数在解密芯片时可以用来区别芯片的不同指令并估计总线上同时翻转的位数。通过平均多次重复同样操作的电流,即使是没有通过总线的很小信号也能区别开。有些信号如移位状态特别有用,因为很多密码的密钥产生算法使用移位操作来逐一移出单个密钥倒进位标志。即使状态位的变化不能直接测量,它们通常会改变指令次序或微码的执行,这会导致功耗的明显变化。
不同指令导致不同级别的指令解码和运算单元的活动,可被清晰地区别开,故运算部分能被推测出。处理器的不同单元在时钟沿相关的不同时间里有独有的开关状态,能被高频仪器分离出来。
有多种不同的功耗分析技术用在破解芯片算法上。整个分析过程是相对简单的,只需要标准的现有的廉价仪器设备。功耗分析技术主要有两种:简单功耗分析和差分功耗分析。
简单功耗分析解密是在密码或别的安全相关操作时直接观察功耗,可以得知设备运行时的信息如密钥资料。如果破解者知道密码算法,很容易通过观察处理器指令次序,特别是移位条件转移,找到一些位的信息。如果算法或逻辑运算的结果很容易被看出,如进位状态,零或负标志,就可以获得更多的信息。
差分功耗分析解密是种更有效的技术,因为破解者不需要知道芯片加密算法是如何执行的。它使用静态分析和已知密码运算的大量功耗迹线来获取隐藏信息。用统计方法鉴别功耗的微小区别,可用来恢复密钥中的单个的位信息。 功耗特性当然包括噪声部分。额外的噪声可以通过减少获取信号的探针长度并小心使用测量仪器来降低它。测量接在地线上的电阻的功耗有一些优势。首先,减少了噪声电平。其次,可以用示波器的探头直接测量信号,因为大部分探针站有公共的地线与外部电源地相连。为了增加信噪比,可以通过提高平均采样数来获得。
有源探头能降低输入电容,增加对输入信号的带宽。一种方法是用高速低噪声的运放来构建相对简单的探头,另一种是用很短的同轴电缆直连到示波器的输入端。在这些情况下,探头的输入电容显著减少。
噪声攻击是快速改变输入到芯片的信号,以影响它的正常运行。通常噪声是叠加在电源上或时钟信号上,但噪声也可以是外加的短暂电场或电磁脉冲。在离芯片表面数百微米处放置两根金属针,然后加上少于1微秒的数百伏电压的窄脉冲,晶圆衬底会感应出一个电场,使得邻近晶体管的阈值电压发生变化。最近出现一种改进的方法:使用几百圈金属线绕在微探针的针尖构成一个小型电感。当电流进入线圈会产生磁场,针尖将集中磁力线。
单片机的每个晶体管和与它相连的线路构成有时延特性的RC电路。处理器的最大可用时钟频率取决于该电路的最大延迟。同样的,每个触发器在接收输入电压和由此引致的输出电压之间有个特征时间窗口。这个窗口由给定的电压和温度来确定。如果用时钟噪声(比正常的时钟脉冲要短得多)或电源噪声(电源电压的快速波动)将会影响芯片里的某些晶体管,导致一个或多个触发器进入错误状态。通过改变参数,处理器会被导致执行许多完全不同的错误指令,有时甚至是不被微码支持的。尽管我们不会预先知道何种噪声会导致何种芯片的何种错误,但它能相当简单地进行系统的搜索。
1、时钟噪声攻击
时钟信号的噪声攻击在目前是最简单的,且相当实用的芯片解密方法。实际应用中的噪声通常用来取代跳转条件并试验先前的测试指令。可以在安全密码问询处理时创建一个攻击窗口,简单预防执行这些指令。指令噪声也能用来扩大循环的时间。如串口子程序在输出缓冲后再读更多的内容;或在密钥操作时减少循环次数来传一个弱的密码。
为获得噪声,时钟需要临时增加一个或大于半个周期,有些触发器在到达新状态之前就获得输入。时钟噪声通常针对处理器的指令流。对硬件执行安全保护的微控制器没有什么效果。实际中,仅使用时钟噪声来攻击微控制器或智能卡的软件程序接口。
这类保护的破解是相对容易的。如处理器在循环里只执行一个指令,攻击时可用不同的时钟噪声导致处理器误操作。不需要小心地与时钟信号同步,只需要随机制造噪声就可在数次攻击内成功。插入噪声是相对容易的,无需使用外部发生器,瞬间短路晶振即可。当谐振器在不同的泛音上产生震荡会发出很多噪声。大部分情况下需要在确定的时钟周期内获得所需结果,在这种情况下用信号发生器更好。
使用时钟噪声来攻击某些微控制器也许是很困难的。例如德仪的MPS430微控制器在内部RC震荡器工作的启动模块。很难与内部时钟同步,攻击时很难估计精确的时间。一些智能卡在处理器指令流里会随机插入延迟,使得攻击更为困难。使用功耗分析会有帮助,但要求非常昂贵的设备来实时获得参考信号。
2、电源噪声攻击
电源供应电压的波动会导致晶体管阈值电平的漂移。结果就是一些触发器在不同的时间里采样它们的输入,或读出错误的安全熔丝的状态。通常用瞬间增加电源电压或电压跌落来制造噪声,一般在10个时钟周期内。电源噪声通常用在微控制器的程序接口上,能影响处理器运行或硬件安全电路。一般地,弱点比时钟噪声更难找到并利用,因为对于时域参数,振幅,上升/下降时间都是变量。
一个例子是上例提到的攻击MC68C05B6.如果在执行AND $0100指令时电源电压减少50-70%,处理器从EEPROM中取出的值是FFh而不是实际的值。这会对应熔丝未加密状态。窍门是小心计算执行时间来减少电源电压,否则处理器会停止运行或进入复位状态。这种任务并不难,复位后目标指令在第一个一百周期内被执行。破解者可以使用矢量发生器或构建一个自己的噪声源。
另一个是微芯的老旧的PIC16F84。芯片的擦除操作会解除安全保护。但同时会芯片上程序和数据存储器中的内容。安全保护电路在硬件设计上是在安全熔丝复位之前擦掉存储器。但我们发现在芯片擦除操作时电源电压几微秒内增加到大约10V,会中断存储器擦除操作,但安全熔丝正常完成复位,这使得有可能读出存储器里的内容。如此高压需要谨慎使用,如果时间过长会损伤芯片。新版本的PIC16F84A增加了防欠压和过压攻击的能力。如果电源电压低于3V或6V,通过编程接口的任意修改存储器的操作会被立即中断。
不是一直需要电源噪声超过电源电压范围的规格。例如,PIC18F84A微控制器,保护机制可以阻止在芯片擦除操作开始后使用大于50mV的噪声。那会导致中止程序存储器的擦除操作但不会擦掉熔丝。
上述例子表明噪声攻击时无需特殊工具就有很好的效果。智能卡里有时钟监控电路但极少微控制器有。
芯片密钥存储于静态RAM里,在破解某些芯片时RAM内容丢失,从而保护密钥不被窃取。很多芯片使用密钥或类似的方法进行加密和别的安全相关的计算,需要不能被读出或改变。最普遍的解决方法是把安全密钥放在带篡改传感器的易失存储器中。一旦检测到发生篡改,易失传感器会掉电或短路到地。但如果数据保留时间大于破解者打开元器件并对存储器上电的时间,那保护机制就被摧毁了。
在早期芯片解密者发现低温能将SRAM的数据保存时间增加到几秒甚至几分钟。对于那个时候的元器件,发现零下20度就可以增加数据保存时间,并且会随着温度的降低而增加保持的时间。有些就增加了温度传感器,温度低于零下20度就触发篡改事件,立即清零存储器。本次试验是重复这个工作,察看2000年后的产品是否也有此特性。
另一个需要关注的是即使部分内容已被破坏,安全信息也能被复原。假设破解者获得了n=128位密钥中的m=115位,也就是90%的信息。他可以通过搜索n!/(m!(n-m)!=128!/(115!13!)=2.12*1017~258个可能的密钥。通过1万台电脑,每台每秒进行10亿次搜索密钥的操作,破解者只需6个小时就能搜遍所有密钥。如果只有80%的信息,也就是知道128位密钥中的103位,那就有2.51*1026~288种可能。几乎增大了一百倍,破解者要花百万年来搜索密钥,故认为均匀的128位密钥不能被恢复。
软件攻击是使用处理器通信接口,利用协议、加密算法或这些算法中的安全漏洞来进行攻击的。软件攻击取得成功的一个典型事例是对早期ATMEL AT89C 系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。目前在其他加密方法的基础上,可以研究出一些设备,配合一定的软件,来做软件攻击。
该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的要数电压冲击和时钟冲击,低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作,而时钟瞬态跳变会复位保护电路同时不破坏受保护信息,电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。
该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。
以上芯片解密技术可以分成两大类,一类是侵入型攻击需要破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成,所有的微探针技术都属于侵入型攻击;类是非侵入型攻击,被攻击的单片机不会被物理损坏。
Atmel | Feeling | Freescale | Fujitsu | Hitachi |
Holtek | Hynix | Infineon | Intel | Lattice |
Macronix | Maxim | Microchip | Mitsubishi | Motorola |
Myson | NEC | NTK | Nuvoton | NXP |
Philips | Rohm | Renesas | Samsung | Silicon |
SST | ST | STC | Syncmos | TI |
PIC | 51 | AVR | CPLD | Winbond |