论文部分内容阅读
随着集成电路的工艺尺寸越来越小,越来越多的问题也在逐渐暴露出来。例如,在芯片的制作过程中,由于工艺上存在各种各样的不确定性,导致生产出来的芯片存在不同程度的缺陷,因此需要对制造完成后的芯片进行测试。可测试性设计就是被广泛应用于芯片测试领域的方案,它在提高芯片测试效率的同时还具有很高的可靠性。基于扫描的可测性设计因其简单且能得到很高的故障覆盖率而最为常用。扫描链的引入解决了可测性设计中的可控性和可观察性的问题,但同时也为攻击者提供了访问芯片内部的途径,扫描链中的寄存器信息可被观察与分析,从而引入了许多潜在的安全问题。对于密码芯片而言,攻击者可以通过扫描链访问芯片内部状态从而获取密钥。由此可见,芯片可测试性与安全性之间存在着天然的矛盾。一方面为了提高芯片测试的故障覆盖率,必须提高芯片可测试性;另一方面为了提高芯片安全性,要降低可控制性和可观察性,以阻止攻击者的攻击。大部分现有的扫描测试结构虽然能够提供很高的可测试性,但是也给加密芯片带来了安全问题,显然已经不能满足安全测试需求。因此,如何设计安全有效的扫描电路,既能提供足够高的可测试性,又能保障加密密钥不被攻击,是加密芯片可测试性设计技术迫切需要解决的问题。旁路攻击的基本思路是在芯片的工作过程中,观测一些相关的物理特征,并且使用这个“旁路”来推导出更多关于密文处理的信息。因此,除了某些特殊的应用,通常都是被动的、非侵入式的攻击。目前,许多基于扫描链的旁路攻击方法被提出用来破解加密信息。其中,模式切换攻击是最早提出的扫描旁路攻击方法,仅需通过切换加密芯片的工作模式即可完成对加密芯片的攻击。模式切换攻击可以完成对加密芯片的破解﹐但是这种攻击方法使用场景有限,并且模式复位对策可以应对模式切换攻击的威胁﹐因此仅测试模式攻击方法被提出,该方法只需要在测试模式下即可完成对加密芯片的攻击,成为目前扫描旁路攻击的主流攻击方法。此外,还有扫描签名攻击,它不需要任何扫描链的顺序信息就可以进行签名攻击,是一种非常有效的攻击手段。以上这些攻击方法都是借助了扫描链可控制可观察这一特性进行的。可见,扫描链的插入在提高可测试性的同时确实带来了不少的安全问题。面对基于扫描链的各种旁路攻击手段,许多相对应的安全扫描对策已经被提出。这些对策主要分为两种:第一种是对加密密钥进行阻塞,即只有在涉及加密操作的情况下,加密结果才能用于检索加密密钥,例如模式复位、密钥隔离等方法。当认为加密操作不安全时,将密钥与加密模块隔离,避免泄露敏感信息。第二种是对扫描输出结果进行混淆。例如插入反相器、异或门等混淆逻辑。当扫描链进行向量移位操作时,从扫描链移入或移出的数据经过未知逻辑运算后,能防止攻击者完全控制或观察扫描链的数据。这样可以防止攻击者将特定的测试数据输入到扫描链中,并通过移出扫描链中存储的中间加密结果来获取敏感信息。这其中,基于数据混淆的安全扫描设计是一种非常有效的方法,它能够将扫描链的输出值进行混淆,即使用户得到了扫描输出,其结果也可能是经过混淆后的数据,而不是原始的正确数据。但是,经过研究发现,如果混淆后的数据不是单向、不可逆的话,这种数据混淆的安全设计方案就不是完全安全可靠的。例如,攻击者可以通过扫描签名攻击的方法来破解一些混淆数据的安全设计,或者是通过机器学习的方式来从大量的扫描输出结果中获取想要的信息。这些攻击方法都使得原有的基于扫描数据混淆的安全设计变得不再安全。为了防止攻击者从扫描输出结果中获取有用的信息,本文提出了一种混淆数据的安全扫描设计方案。通过之前的介绍,可以知道,如果经过混淆后的数据并不是单向、不可逆的话,那么攻击者能够经过大量的扫描数据进行攻击,从而获取电路中的关键信息。所以,在本方案中,提出了利用忆阻器所生成的随机数来进行扫描数据混淆的方法。忆阻器是除电阻、电容和电感之外的第四个基本电路元件。忆阻器是一类有记忆能力的非线性电路元件,具有非易失、纳米尺度、能耗低以及阻值转换速度快等特性,这些特性是电阻、电容和电感这三个基本电路元件所不具备的。尤其重要的是,忆阻器可以记忆流经它的电荷量的多少。外界可以通过改变激励信号(电压或电流)来改变忆阻器的阻值,而且在电流中断后可以继续保持其忆阻值不变,这种特性使得忆阻器成为一种非挥发性存储器。通过对忆阻器的理论模型的研究,进行建模仿真,可以发现忆阻器还具有阻值连续变化的特性。即通过对忆阻器施加激励,其电阻会持续变大或变小,体现出来就是电流的持续变化。在对忆阻器进行读写的过程中,忆阻器的阻值应该是连续平滑变化的,但是在实际测试所制作的忆阻器时发现,忆阻器的阻值在外加激励作用下变化的时候还带有微小的随机涨落,这些波动的大小及方向都是随机的。于是,本文设计了一个差分放大电路将忆阻器的这种阻值的微小变化提取出来,并通过模数转换器(ADC)采样模块将电压的变化值记录成二进制的数。通过比较电路将前后两次的采样值进行对比,判断后一次的采样值相对于前一次采样值来说是增加的还是减少的,以此来相对应的输出‘1’和‘0’。根据所设定的方案,通过设定合适的采样间隔与采样总时间,对所制作的忆阻器进行连续的读写操作,在接收端就能够接收到一连串的随机数并存入缓存中供后续设计使用。利用美国国家标准与技术研究院(NIST)所提供的用于测试随机性的统计软件包对得到的100组128 bit的随机数进行随机性测试。其中包含16个测试标准,用于判断随机或伪随机数发生器的软硬件产生的任何长二进制序列的随机性。选择其中8个可用于测试128-bit二进制序列的标准来测试此方案所产生的随机数。随机性测试结果表明,超过96%的随机数序列通过了NIST测试,表明该方案具有良好的随机性。也就是说,此方案采用较小的资源开销实现了产生大量的随机数,而且还具有良好的数据随机性。本文所提出的安全扫描方案利用忆阻器所产生的随机数来实现。扫描输出的结果经过硬件逻辑混淆之后,其输出的数据可能并不是单向、不可逆的,攻击者可以通过输入大量的特定的测试向量并分析相对应的输出响应,以此来获取想要的信息。其中,问题的关键就在于混淆后的扫描输出结果中,经过混淆的部分并不是完全不可逆的,而是可能存在某种规律,通过大量的数据分析,这些规律就可能被攻击者掌握以此来攻击电路。所以,本设计通过利用忆阻器所产生的随机数,达到了混淆数据的目的。通过修改扫描链中的某些扫描单元的结构,使得用户在输入错误密钥的情况下,扫描链中的这些经过修改的扫描单元去捕获先前忆阻器所产生的并存放于缓存中的随机数,而不是像正常捕获阶段中去捕获待测电路中的值,从而使得扫描链的输出结果被这些由忆阻器所产生的随机数所混淆。由于混淆后的数据中具有与电路信息无关的随机数,所以即使攻击者能获取扫描输出结果,也无法通过数据分析来获取电路中的全部信息来达到攻击的目的。所以,此方案能够抵抗模式切换攻击和仅测试模式攻击等攻击方法,具有较高的安全性。同时,原电路的可测试性也不会受到影响,只要用户输入的密钥正确,就能够进行正常的测试。本文介绍了目前已有的基于扫描的旁路攻击方案和相对应的安全扫描设计方案,并对各种方案的优缺点进行了对比。如果混淆后的扫描输出结果不是单向、不可逆的话,那么攻击者就可以进行攻击。本文通过利用忆阻器所产生的随机数据,提出了一种可以抵抗这种攻击方法的安全扫描设计方案。本文中提出的安全扫描方案可以有效的抵抗现有的基于扫描结构的攻击,同时还不会对电路的可测试性造成影响。以后的研究将会针对如何安全地提取PUF响应以及降低设计的开销展开。