| 标准编号 | GM/T 0083-2020 (GM/T0083-2020) | | 中文名称 | 密码模块非入侵式攻击缓解技术指南 | | 英文名称 | Guideline for the mitigation of non-invasive attacks against cryptographic modules | | 行业 | Chinese Industry Standard (推荐) | | 中标分类 | L80 | | 字数估计 | 22,283 | | 发布日期 | 2020-12-28 | | 实施日期 | 2021-07-01 | | 标准依据 | 国家密码管理局公告第41号 | | 发布机构 | 国家密码管理局 |
GM/T 0083-2020: 密码模块非入侵式攻击缓解技术指南
GM/T 0083-2020 英文名称: Guideline for the mitigation of non-invasive attacks against cryptographic modules
中华人民共和国密码行业标准
密码模块非入侵式攻击缓解技术指南
国家密码管理局 发 布
1 范围
本文件给出了密码模块非入侵式攻击方法、缓解技术以及测试方法。
本文件适用于指导密码模块中部署非入侵式攻击缓解技术,指导技术人员在密码模块开发和使用
过程中,根据具体的密码算法特点、密码模块特性、具体部署的实际场景,选择缓解技术来抵抗非入侵式
攻击威胁。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文
件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于
本文件。
GB/T 25069 信息安全技术 术语
GB/T 32905 信息安全技术 SM3密码杂凑算法
GB/T 32907 信息安全技术 SM4分组密码算法
GB/T 32918(所有部分) 信息安全技术 SM2椭圆曲线公钥密码算法
GB/T 37092-2018 信息安全技术 密码模块安全要求
GM/T 0001(所有部分) 祖冲之序列密码算法
GM/T 0044(所有部分) SM9标识密码算法
6 非入侵式攻击缓解技术
6.1 概述
本文件针对计时分析攻击、能量分析攻击以及电磁分析攻击,分别提出相应的缓解技术以减轻上述
攻击可能给密码模块带来的安全威胁。应根据具体的密码算法特点、密码模块特性、具体部署的实际场
景,选择有针对性的缓解技术来抵抗已知的非入侵式攻击威胁。
计时分析攻击主要利用与密钥相关的指令操作间存在的时间差异来展开攻击。本文件列举了几种
通用缓解技术,包括平衡指令分支技术、随机延时插入技术、盲化操作技术等。
能量分析攻击主要分为简单能量攻击和差分能量攻击两大类。前者需要直接(例如通过视觉)分析
密码模块在执行过程中出现的与关键安全参数相关的指令能量消耗模式,而后者则通过使用统计方法
(例如均值差、相关系数)对收集到的大量能量消耗进行统计分析,以获取关键安全参数。为了抵抗此类
攻击进而有效引导密码算法实现人员在其实现的密码算法中添加相应的能量分析抵抗力,本文件列举
了一些常见的能量分析攻击缓解技术(主要分为隐藏技术和掩码/盲化技术两大类),以及一些在最新的
研究成果中提出的其他缓解技术。
电磁分析攻击主要利用密码模块在运行过程中产生的电磁辐射能量消耗来恢复密码模块在运算过
程中使用的关键安全参数。与能量分析攻击中主要对密码模块的整体能量消耗值进行测量不同,电磁
分析攻击能更精确的探测密码模块中局部模块产生的电磁辐射消耗,拥有更高的攻击精度。由于电磁
辐射泄露的主要来源是密码模块中与指令操作和数据操作相关的电流波动,本章涉及的针对能量分析
攻击的缓解技术也有助于缓解电磁分析攻击,此外,针对电磁分析攻击的特有缓解技术见6.4。
附录A列举了几种针对SM2/SM9和SM4密码算法的非入侵式攻击缓解技术。
6.2 计时分析攻击缓解技术
6.2.1 平衡指令分支技术
平衡指令分支技术通过检查密码模块中出现的所有与关键安全参数相关的指令分支,在密码模块
特性允许的情况下尽可能的降低不同分支的指令执行总时间方差,从而平衡指令分支,利用固定时间的
指令执行特性来对抗计时分析攻击。
6.2.3 盲化技术
盲化技术通过将密码运算所需的时间完全随机化,使得计算过程中产生的计算中间值不可预测,以
抵抗计时分析攻击。该技术主要用在签名过程中。在每次签名开始之前,利用随机数发生器(RNG)生
成两个随机数(vi,vf),此后随机数vi与待签明文消息进行结合,使得后续的签名过程中所有操作均无
法预测。为最终获得正确的签名结果,vf可由vi推导得到,对由盲化消息产生的签名结果进行补偿,得
到正确的明文消息签名结果。
6.3 能量分析攻击缓解技术
6.3.1 隐藏技术
常见的隐藏技术分为时间维度的隐藏技术和振幅维度的隐藏技术两种。时间维度的隐藏技术主要
针对差分能量分析攻击需要收集能量曲线上固定时刻点的能量消耗来进行统计分析。若该条件不能满
足,则攻击难度大幅提高。振幅维度的隐藏技术中,可通过使用双轨预充电逻辑以及引入额外噪声等方
式来产生恒定电压幅值或随机化测量电压幅值,进而隐藏包含关键安全参数的中间值的能量消耗。
a) 时间维度隐藏技术
1) 随机插入伪指令技术
随机插入伪指令技术通过随机插入空指令或一些无效指令来改变密码算法指令序
列,降低由敏感中间值产生的真实能量消耗在固定时刻点的出现概率,增加能量分析攻击
的难度。该技术易于在密码模块部署,且不会增加额外计算开销。但是,该技术存在指令
模式易被识别、算法加密总时间不一致等问题,使得该缓解技术仍会被一些常见的攻击技
术破解,如简单能量分析。随机插入伪指令的缓解技术宜作为最低安全级别的缓解技术
来使用。
2) 伪轮运算技术
伪轮运算技术主要通过在密码算法轮函数的各模块之间随机插入伪轮运算来随机化
算法执行流程。伪轮运算可采用同时插入正向与逆向轮函数对的方式实现,而伪轮函数
对的轮密钥为固定值,与密码算法自身设置的密钥相互独立,且正向加密轮运算和逆向解
密轮运算的轮密钥相同,轮顺序相反。攻击者难以确定算法内部运算数据与电路运行功
耗时间点之间的对应关系,继而有效隐藏与关键安全参数相关的能量消耗。
3) 时钟随机化技术
时钟随机化技术主要在硬件电路层面而非算法逻辑层面实现。该技术通过对电
路时钟频率的随机改变(例如多种时间频率间的随机切换)来扰乱硬件电路的能量功
耗,使攻击者无法准确同步时钟信号和能量功耗曲线,进而隐藏密码算法内部信息。
4) 乱序操作技术
乱序操作技术通过随机化密码算法的指令执行序列来缓解能量分析攻击。为保
证密码算法安全实现的同时避免过大的额外性能开销,乱序操作所针对的指令对象
应根据密码模块期望达到的安全等级有针对性的部署。以SM4密码算法为例,为抵
抗攻击者仅通过穷举8比特的子密钥空间可开展的统计分析,在实际的乱序操作中,
应对首轮F函数中的每个S盒非线性变换进行乱序保护。为达到更高级别的安全
性,如抵抗攻击者通过穷举32比特的子密钥空间所开展的统计分析攻击(如选择
SM4第一轮加密中的F函数输出值作为攻击中间值),算法中所有包含少于32比特
密钥值的中间值操作指令都应采用乱序防御方案进行保护。
b) 振幅维度隐藏技术
1) 双轨预充电逻辑技术
当密码模块采用硬件方式(如ASIC和FPGA)实现时,可采用双轨预充电逻辑技术
来抵抗能量分析攻击。其中,双轨电路是指在正向的逻辑运算电路的基础上另外添加一
条传输反向信号的逻辑电路,如图2所示。理论上,该技术可使整个逻辑电路在运行过程
中各个时刻的汉明重量能量消耗保持恒定。在实际部署中,逻辑电路的布线方式对密码
模块的整体能量消耗存在影响,双轨电路中所有导线的布线方式应以一种平衡的方式进
行,以保证正向和反向逻辑电路之间产生的能量消耗总和保持恒定。
预充电机制应与双轨逻辑同时使用,以补偿另一种常见的电路能量消耗模式,即汉明
距离泄露。汉明距离能量消耗对应于数字逻辑电路中逻辑元件的输出值在相邻的时钟周
期上产生变化的比特位数总和,预充电机制为了保证各元件在每个时钟周期上的汉明距
离值保持恒定,将整个电路的工作模式分为计算阶段和预充电阶段。在计算阶段中,各互
补元件对产生完全相反的输出信号,而在预充电阶段中,所有元件的输出值被设置为预充
电值,全0或者全1。整个电路在计算阶段和预充电阶段之间切换,以保证任意阶段中各
互补元件对之间产生的汉明距离能量消耗均保持恒定。
由于预充电阶段的存在,与组合逻辑元件输出端相连的时序元件部分需要进行特殊
处理。以寄存器为例,为保证存储正反电路逻辑信号的互补寄存器对之间的值在预充电
阶段之后依然有效,互补寄存器对应由前后共两级的寄存器组所替代。当第一级寄存器
组R1、R2处在预充电阶段时,第二级寄存器组R3、R4与其后相连的逻辑电路处于计算
阶段。而当第二级寄存器组处于预充电阶段时,第一级寄存器组则保存了与其输入端相
连的逻辑电路在上一个计算阶段中产生的电路正确运行中间值。双轨预充电逻辑寄存器
组R1、R2、R3、R4时序图见图3。通过这种方式,整个双轨预充电逻辑可保证计算电路的
计算逻辑与单轨情况下完全相同,在抵抗能量分析攻击的同时确保输出正确的电路运算
结果。
2) 信号滤波与噪声叠加技术
能量分析攻击主要利用密码模块能量消耗中的信号分量进行统计分析,可通过降低
信噪比的方式隐藏实际的信号分量。其中,降低信号噪声的方法包括引入恒流电源、使用
双电容进行周期性切换供电,或在电源或接地端引脚插入滤波器等方式;增加噪声分量的
方法包括但不限于将随机数发生器与大电容构成的网络相连,以进行随机充放电操作,从
而增加噪声分量等。
3) 低功耗设计技术
集成电路的低功耗设计主要通过动态电压调节,并行结构设计,低功耗单元库启用以
及低功耗状态即编码等方式来有效降低电路的总体能量消耗,进而相对应的大幅降低整
体电路的信噪比,达到有效隐藏与关键安全参数相关联的能量消耗的目的。
6.3.3 其他缓解技术
为了在密码模块中部署更高安全性的缓解技术,同时兼顾密码模块的资源开销,宜使用混合防御缓
解技术。
混合防御缓解技术采用低阶掩码方案加上指令乱序的混合缓解技术,可有效提高能量分析攻击的
门槛,为密码模块提供高安全性保护。以一阶掩码为例,尽管一阶掩码方案可抵抗常见的统计分析技
术,但容易遭受二阶攻击的威胁。例如,由于一阶掩码将敏感中间值划分为两个随机变量 M0=X M1
和 M1,若攻击者可在能量迹中的特定时刻提取出与这两个随机变量相对应的能量消耗,则这两部分能
量消耗的联合能量消耗将再次与敏感中间值X之间存在相关性。为避免此类能量分析攻击的威胁,可
进一步采用指令乱序技术,将由敏感中间值划分出的两个随机变量的出现位置进行随机化处理。这种
乱序处理使得攻击者不能轻易在能量曲线上定位出被划分中间值中各个子部分的计算位置,提高了将
相关位置的能量消耗进行联合处理的难度,进而为密码模块提供更高安全性的保护。
6.4 电磁分析攻击缓解技术
6.4.1 低功耗技术
低功耗技术通过降低密码模块的能量消耗来抑制可利用的密码模块电磁辐射。
6.4.2 屏蔽套件技术
屏蔽套件技术通过在所有可能产生关键安全参数相关的电磁泄露的组件外部安装电磁屏蔽套件
(如法拉第笼),抑制或者有效减少可利用的电磁辐射,从根源上消除电磁分析攻击,即消除密码模块在
操作密码运算中间值时产生的电磁辐射。
6.4.3 扩展频谱时钟技术
扩展频谱时钟技术主要利用低频调制信号对周期性窄带时钟进行频率调制,将其扩展为宽带时钟
信号。该方法可有效减小所有由该调制时钟驱动的数字信号的基频以及谐波的振幅,将信号的能量均
匀的扩散在整个频带内,获得较大的电磁辐射衰减。这种采用扩展频谱时钟来降低峰值辐射能量的方
法在电磁兼容领域较为常见。
6.4.4 交错的双轨逻辑技术
交错的双轨逻辑技术是双轨预充电逻辑技术(见6.3.1)的一种改进的布局布线形式,即交错原始逻
辑电路和补偿逻辑电路的一种布线实现方式。该缓解技术首先将包含关键安全参数运算的电路部分与
无需保护的逻辑电路部分进行合理划分,同时在敏感电路上实现双轨预充电逻辑电路,并且在最大限度
上将局部的真实电路和补偿电路布局在邻近的空间位置。该缓解可将双轨逻辑电路任意局部的电磁能
量消耗保持恒定,有效隐藏电路实际运行中操作中间值时产生的能量消耗,抵抗后续采用统计分析方法
进行密钥恢复的电磁分析攻击。
6.4.5 分布式电路架构技术
分布式电路架构技术通过将与关键安全参数计算相关的模块拆分成并行化的分布式计算子模块,
使得针对单一探测位置的电磁分析攻击无法收集到完整的泄露信息,进而有效缓解依赖于电磁探头对
目标计算模块准确定位的电磁分析攻击威胁。
7 非入侵式攻击测试方法
7.1 概述
本章针对第5章中指定的非入侵式攻击方法给出对应的测试方法。
7.2 测试策略
非入侵式攻击测试目标是评估使用了非入侵式攻击缓解技术的密码模块能否提供抵抗非入侵式攻
击的能力。测试程序不能保证密码模块可完全抵抗攻击,但有效的测试可表明密码模块中充分考虑了
非入侵式攻击缓解技术的设计和实现。
非入侵式攻击测试的基本原理是首先以非入侵的方法从密码模块中或密码模块周围提取物理量,
随后利用隐藏在物理量中的有偏性展开攻击。这种有偏性来源于或者依赖于攻击者作为目标的秘密信
息。在本文件中,这种依赖于秘密信息的有偏量被称为泄露。若实验结果表明泄露的信息超过了允许
的泄露阈值,则认为密码模块不能通过非入侵式攻击测试。相反,若未观察到该泄露,攻击将会失效,则
认为密码模块通过了非入侵式攻击测试。这种测试泄露存在与否的方法在本文件中被称为泄露分析。
非入侵式攻击测试流程是在一定的测试限制下,搜集和分析测量数据,并确定关键安全参数的信息
泄露程度,而这些测试限制条件包括数据搜集的最大上限,使用的测试时间。
7.3 测试框架
测试人员应检查密码模块的安全性,包括抵抗计时分析攻击,简单能量/电磁分析攻击,差分能量/
电磁分析攻击的能力,非入侵式攻击测试框架如图5所示。测试人员应遵循图5中的操作顺序。例如,
通过计时分析攻击测试之后才需要进行简单能量/电磁分析测试。
本文件中非入侵式攻击测试方法不需要提取密码模块中的完整密钥。只要在测试过程中出现了明
显的敏感信息泄露则认为密码模块没有通过测试。
图5 非入侵式攻击测试框架
7.4 测试流程
7.4.1 核心测试流程
针对具体的计时分析、能量泄露、电磁泄露测试,本文件给出了通用的核心测试流程。整个核心测
试的流程如图6所示。针对计时分析攻击、简单能量/电磁分析、差分能量/电磁分析的泄露分析流程分
别见图7、图8以及图9。
核心测试流程如图6所示:
a) 核对指定的关键安全参数的厂商文档;
b) 确定测量物理特征的可行性,若经过测试后未测到相关物理特征,则测试结果为通过;
c) 将测试实验室确定的一套关键安全参数配置到密码模块中;
d) 执行一次安全功能的泄......
|