数字电路中的串扰撩一把SI. 数字电路中的串扰,是个庞大艰深的话题,Signal Integrity (SI) 分析是STA 中重要且复杂的部分。数字电路是01 的世界,用『攻受』来理解数字电路的串扰很合适。在数字电路中,任何两条相邻的线之间都可能『私通』,私通的通道是『耦合电容』。如果用基佬世界的『攻受』来对应,那任何一条net 都是0.5 只要『时间窗口』对,都进可攻退可受,如东方不败一般, 通常,在STA 中将**被分析的net 称为"victim" 此处对应为"受"**,把跟被分析net 私通的所有其他net 称为"Attacker/ Aggressor"此处对应为"攻"。 不是有了私通通道,攻就可以攻击到受,还需要看: • 攻的强弱:Strength of attacker. • 受的强弱:Strength of Victim. • 私通通道的多少: the amount of cross-coupled capacitance; • 时间窗口:relative time and the transition rate of the sinal transitions. • 翻转方向:the switching directions. • 攻的联合:the combination of effects from multiple attacker. 理想数字电路跟理想世界一样,只有纯粹的01 要消除一切0.5. 但串扰不同于基佬,基佬可以使世界变得更美好,串扰却总是具有破坏性。串扰的破坏性根据『受』所处的『动静』状态体现于两方面: • Delta delay. • Glitch. Delta Delay• 体现『受』翻转时,『攻』对其进行的骚扰, • 『攻』与『受』同向翻转时,『攻』会加快『受』的翻转,使得『受』的延时变短。 •『攻』与『受』异向翻转时,『攻』会减缓『受』的翻转,使得『受』的延时变长。 攻受的翻转方向是随机的,在当前STA 分析中,保险起见,对于同一条net 如果是计算early delay 则认为攻受同向,如果是计算late delay 则认为攻受异向。 Glitch体现『受』静止时,『攻』对其进行的骚扰,这个骚扰如果严重会引起逻辑功能失效。根据『受』所处的电平不同,『攻』对其造成的影响可被分为如下四类:• VHO:『受』处于高电平,『攻』正向翻转; • VH: 『受』处于高电平,『攻』反向翻转; • VLU: 『受』处于低电平,『攻』反向翻转; • VL: 『受』处于低电平,『攻』正向翻转; Delta Delay 跟Glitch 是对串扰的两种表征,都属于STA 范畴,分析时大部分计算过程一致,只是最后衡量的方式不同。 glitch ~glitch ~glitchGlitch 在数字电路实现中,• 其一是指由于不同信号到达组合逻辑单元输入端的时间差引起的组合逻辑输出端的无效翻转; • 其二是指由于耦合电容导致的串扰引起的glitch, 关于这种glitch前面刚刚简单说了一下。 组合逻辑无效翻转Glitch这种Glitch (下文称为逻辑glitch)是由于组合逻辑单元输入信号到达时间不同而产生的虚假翻转,这些翻转不是逻辑运算所需要的。理想情况,在每个时钟周期内,组合逻辑的输出信号最多翻转一次,但实际中,组合逻辑的输出信号在每个时钟周期内都不止翻转一次,这些不必要的翻会导致额外的功耗,这类功耗就是所谓的『Glitch power』, 据统计在16nm 以下的工艺中,Glitch power 占总动态功耗的20%~30% 是非常可观的; 而且这些无效翻转,会导致意外峰值电流,这些峰值电流发生在很短的时间内会导致很大的IR-Drop, 从而影响电路的性能和可靠性。 逻辑 Glitch 因为有百害而无一利,所以一直是研究热点,到目前为止C 家综合工具跟P&R 工具在读入activity 文件做Dynamic power 优化时都会尽量去优化Glitch power, 但到目前为止也没有什么办法完全消除Glitch power. 一些文献里提出了若干方法,有兴趣的可以自行查阅: • Delay balancing: In this method the inputs are made to arrive at the same time by inserting extra delay buffers on selected paths[2]. • Hazard filtering: In this method the gate delay is made greater than the differential delay at the inputs of the gate to filter the glitch[3]. • Gate sizing: In this method every gate is assumed to be an equivalent inverter[4]. • Transistor sizing: This method treats every transistor’s size as a variable and tries to find glitch-free design[5]. • Linear programming: In this method the gate delays are treated as variables and optimum delays are found by solving a linear program (LP)[6,7] which is implemented using AMPL programming method[8]. • Variable input delay method: Raja in[1] proposed variable input delay method which involves insertion of “permanently on” series transistor at the input of logic gate for glitch free digital circuits. 解决峰值瞬态IR-Drop 最常用的方法是在芯片中撒入去耦电容 ( Decap cell ), 这些Decap 充当局部电荷储存器,从而减少峰值IR-Drop 对临近电路的影响。 然而,从90nm 开始,Decap cell 会造成显著的栅极隧穿漏电流,对于90nm 之后的工艺由于栅氧进一步变薄,Decap cell 造成的栅极隧穿漏电流会更大,至于Decap 对FinFet 工艺的作用与影响,待老驴研读后再搬来, Glitch对电路的安全性影响?黑客利用Glitch来触发特定的响应或攻击:• 干扰信号传递:黑客可以利用Glitch干扰信号的传递,使得信号在传输过程中出现错误或丢失,从而触发特定的响应或攻击。例如,在通信系统中,黑客可以通过引入Glitch干扰信号的传输,使得接收器无法正确解调信号,从而获取敏感信息。 • 破坏电路元件:黑客可以利用Glitch破坏电路元件,使得电路无法正常工作或出现故障,从而触发特定的响应或攻击。例如,黑客可以通过引入Glitch烧毁电路中的某些元件,使得系统无法正常启动或运行,从而获取敏感信息。 • 利用系统漏洞:黑客可以利用Glitch触发系统漏洞,从而获取敏感信息或进行攻击。例如,黑客可以通过引入Glitch绕过系统的安全检查或授权验证,从而获取未经授权的访问权限。 • 操控硬件设备:黑客可以利用Glitch操控硬件设备,例如篡改设备的配置参数或控制设备的动作,从而进行攻击或破坏。例如,黑客可以通过引入Glitch篡改路由器的配置参数,使得受害者无法正常访问特定网站或资源。 Glitch的产生原因• 硬件故障:硬件设备中的电路或元件不良、电源供电不稳定、内存损坏、硬盘故障等问题都可能导致Glitch的产生。 • 软件错误:软件中的编码错误、逻辑错误或算法错误可能导致Glitch的产生。例如,程序员在编写代码时可能会出现语法错误、边界条件错误或错误的数据处理,从而导致系统出现故障。 • 数据传输错误:数据在传输过程中出现错误或丢失也可能导致Glitch的产生。例如,网络传输过程中数据包丢失、数据传输错误或输入错误的数据都可能导致系统故障。 • 电磁干扰:电磁干扰(EMI)可能导致Glitch的产生。这种干扰可能来自周围的电子设备或其他电磁源,如雷电、高压电线等。 • 电源干扰:电源干扰也可能导致Glitch的产生。这种干扰可能来自电源波动、电源开关的切换或其他电源相关的问题。 • 编码错误:在信号处理过程中,如果编码出现错误或不良,也可能导致Glitch的产生。例如,音频或视频信号的编码错误可能导致音频或视频的质量下降或出现异常。 Glitch攻击bootROM案例:Glitching the SwitchNVIDIA Tegra X1芯片的bootROM攻击是一个非常经典的Glitch攻击例子,它利用了bootROM作为整个信任链的根基,拥有最高的执行权限的特点。 在NVIDIA Tegra X1芯片中,bootROM是固化在芯片内部的,它是设备的第一个加载程序,负责启动和验证其他程序。由于bootROM的特殊地位,它拥有最高的执行权限,任何在它之后加载的程序都必须信任它。 Nintendo Switch 使用的是 NVIDIA 的 Tegra X1 芯片,这款芯片的 bootROM 是不可读的,原理是在 bootROM 即将跳转到 FSBL 的时候,会通过一个专门的寄存器,改变 bootROM 的可读区间,使得大部分的 bootROM 代码变得不可读。这个不论是开发设备还是消费产品都是如此。 所以他们攻击 bootROM 的第一步就是要 dump 出来 bootROM 的代码。他们用了一种 Glitching 的手段来做到这一步。 Glitching 的硬件原理在前面有详细介绍,简单来说就是通过在非常精确的时间点,执行微秒级的电压骤变使得 bootROM 在写那个可视性寄存器的时候出现错误,导致 bootROM 没有被不可视化,进而他们可以在一块开发板上用自己写的 FSBL 读取 bootROM 代码。 拿到 bootROM 之后他们根据芯片的数据手册和自己的实验,分析出各种寄存器的用途,然后对 bootROM 的 USB 层进行逆向分析。最后他们发现了在一个叫做 RCM 的 USB 模式下,可以通过栈溢出拿到 bootROM 的执行权限。 拿到 bootROM 权限之后,他们就可以禁用掉 FSBL 的签名验证,相似的,Secure Boot 接下来的所有环节的签名验证都可以被禁用掉,那基本上就是想干什么都可以了。 一旦攻击者成功地获取了bootROM的代码或绕过了它的保护措施,他们就可以进一步攻击整个系统。通过获取敏感信息、控制设备或进行其他恶意操作,攻击者可以造成严重的安全威胁和损失。 |