毛刺感知的掩码硬件形式化验证

存在毛刺时掩码硬件实现的形式化验证

1 引言

安全关键嵌入式系统依赖于对敏感信息泄露的防护。虽然通过传统通信信道传输的敏感信息可以通过强加密技术进行保护,但针对无意产生的旁道(如功耗 [28]或电磁辐射[33],)泄露则需要额外的对抗措施。

由于在许多应用中侧信道分析(SCA)的风险不可避免,过去已提出了多种对抗措施。其中,掩码是研究最为充分且最有效的抗SCA对抗措施之一。多年来已引入了多种不同的掩码方案。然而,掩码的发展史也是一部失败与学习的历史。一些早期的掩码方案在实际实现中被证明是不安全的,因为在形式化模型中未考虑组合逻辑中的毛刺(由驱动信号的传播时间差异引起的临时逻辑状态)。尼科娃等人提出的阈值实现(TI)方案是首个具有对毛刺内在抗性的可证明安全的掩码方案。近年来,比尔金等人进一步扩展了TI方案,同时其他方案也被提出,例如雷帕拉兹等人提出的统一掩码方案(CMS),以及格罗斯等人提出的域导向掩码方案(DOM)和低随机性变体UMA。

即使所使用的掩码方案是安全的,依赖该方案的实现也不一定自动具备安全性。因此,一个仍然存在的问题是掩码实现的验证。在实践中,用于验证抵抗侧信道分析能力的方法主要有两种:形式化验证和实证泄漏评估。目前,对掩码硬件实现进行验证的主要方法仍是通过统计显著性检验 [21] 或使用最先进的旁道分析技术对设备发起攻击来进行实证泄漏评估。然而,这类实际评估永远无法做到完全充分,也就是说,如果没有发现缺陷,仍无法确定该实现是否可能在更优的测量设置或更多泄露轨迹的情况下被攻破。

最近,针对掩码软件实现的形式化验证已取得一些实质性进展[3,7,17]。然而,这些验证方法专为软件设计,并未考虑毛刺的影响,因此无法直接应用于硬件实现。在硬件实现的非经验性验证方面,目前已存在一些工具,可通过在软件中对电路进行建模[34],或通过假设特定功耗模型来模拟可能的泄露[9],以检测泄露情况。据我们所知,目前尚无能够考虑毛刺影响并直接在其网表上证明掩码硬件实现安全性的形式化工具。

我们的贡献

在本研究中,我们提出了一种方法,用于在存在毛刺的情况下对掩码硬件实现的安全性进行形式化证明。与现有的针对硬件设计的形式化或非经验性验证方法相比,所提出的方法无需对电路或泄露源进行任何额外的建模,而是直接在电路上证明其安全性

其网表。与基于泄露轨迹统计分析的经验验证方法相比,我们的形式化方法能够直接定位检测到的缺陷,并提供独立于设备或测量特定条件以及收集的泄露信息量的确定性的安全声明。

我们的方法基于Ishai等人提出的探测模型[26] ,并考虑了毛刺的影响。

我们引入了一种电路验证方法,用于对攻击者通过探测不同门和导线所能获取的数据进行保守估计。该验证方法直接作用于电路的门级表示。它利用所计算函数的傅里叶展开(或沃尔什展开),并利用如下事实:若某个变量的线性组合存在非零傅里叶系数,则表明该函数与这些变量之间存在相关性(参见[10])。

当与包含秘密但不包含均匀分布掩码变量的变量线性组合存在相关性时,即对应信息泄漏。通过仅记录系数是否为零,我们避免了对电路中所有门所计算函数进行完整傅里叶表示所带来的复杂性,但代价是精度损失,可能导致误报。

系数是否为零的信息可编码为一个命题逻辑公式,其大小与电路规模呈线性关系,且可通过SAT求解器高效地计算漏洞。

为了展示该方法的实用性,我们检查了来自不同掩码方案的各种掩码电路。

我们重点关注无环(无反馈)的流水线掩码电路,例如对称原语中的S盒,这些通常是电路中最难在实践中进行保护的部分,因此最容易存在缺陷。另一方面,线性电路部分的安全性在实践中更容易建立和验证,例如通过确保每个线性电路部分中仅使用一个变量的一个掩码值或掩码 [24]。出于同样的原因,只要确保非线性部分的掩码输出始终是独立且新鲜地掩码(大多数掩码方案都满足此条件),多个加密轮次和S盒查找可以分别进行分析。

我们在一组示例电路上运行了我们的工具,包括Keccak、Fides和AES的 S盒。我们的验证器效率足够高,能够形式化证明完整的一阶掩码AES S盒的安全性。由于AES S盒的电路大小约占整个AES面积的40% [24],,并行化评估大约需要10小时。我们还证明了Keccak S盒达到三阶,以及DOM的 GF(2)乘法器达到四阶。此外,我们展示了我们的方法能够正确检测在毛刺存在下已知存在缺陷的掩码电路,例如 [26,37]。我们工具的实现和一些示例电路可在 GitHub上获取 [27]。

本文组织如下。在第2节中,我们简要概述现有的验证方法,并讨论与我们方法的差异。在第3节中,我们介绍所使用的符号表示和傅里叶展开。我们在第4节中介绍掩码电路和探测模型,并展示如何利用傅里叶展开来测试探测安全性。我们在第5节开始介绍我们的验证方法,最初不考虑

信号时序的影响。在第7节完成我们通用验证方法的描述之前,我们首先在第6
节讨论如何建模时序效应,即毛刺。随后在第8节中引入基于SAT求解器的具体实例化验证方法。第9节讨论了对各种掩码电路的评估结果。我们在第10节总结本工作。

2 相关工作

近年来,针对掩码实现的自动化验证被广泛研究,最近许多相关工作相继发表 [1,6,7,9,16–18,30]。然而,大多数现有研究针对的是基于软件的掩码,未包含毛刺的影响。

验证掩码软件

在高效验证掩码软件实现方面,最具突破性的工作之一是巴尔特等人[3]的研究。该工作没有一次性证明整个实现的安全性,而是引入了强非干扰(SNI)概念。SNI是对[2]中提出的更一般的非干扰(NI)概念的扩展。SNI概念允许从可组合性的角度证明较小编码序列(称为小工具)的安全性。满足SNI概念的小工具可以与其他小工具自由组合,而不会影响其侧信道攻击抗性。

满足这一概念的算法验证比其他方法具有更好的可扩展性,但另一方面,并非所有安全的掩码算法都可直接组合。事实上,贝莱德等人[7,8],、巴尔特等人[4],以及格罗斯等人[23],所提出的在随机性方面最高效的软件掩码算法,例如,就无法直接达到SNI。

与巴尔特等人关于SNI [3], 的工作相比,我们的方法不检查可组合性,因此对可证明的电路和掩码方案限制更少(类似于巴尔特等人提出的NI方法 [2])。

由于巴尔特等人的工作旨在验证掩码软件实现,因此未涵盖毛刺问题。在本研究中,我们引入了用于掩码电路验证所必需的形式化基础,特别是毛刺的传播。

我们的方法不仅限于我们的SAT实现,还可兼容巴尔特等人开发的现有工具如 EasyCrypt [5]。

最近,科隆等人提出了一种新的形式化验证方法[14],该方法基于巴尔特等人的工作。这项工作主要讨论了两种方法。第一种方法基本上与[2]中的方法相同,但使用通用Lisp语言编写。第二种方法则完全不同,它通过使用基本变换,使目标程序能够利用NI和SNI属性进行验证。科隆的工作再次仅针对基于软件的掩码,未考虑毛刺的影响。

埃尔迪卜等人 [17]提出了一种验证掩码软件实现的方法。与我们的方法类似,该方法将验证问题编码为SMT,并通过检查程序内部各个节点(操作)的约束来完成验证。该方法能够对易受攻击的代码部分进行直接定位。

然而,他们的方法针对软件,因此不涵盖毛刺。此外,他们的方法生成的 SMT公式在秘密变量数量上呈指数级增长,而我们方法生成的公式仅呈线性。

Bhasin等人 [10]还使用傅里叶变换来估计电路的侧信道攻击抵抗力。他们的方法利用SAT求解器构造具有特定抵抗阶数的低权重函数。他们尚未使用该方法评估现有密码函数实现,且未考虑毛刺行为。

掩码硬件的验证

与我们的方法类似,Bertoni等人[9]研究了存在毛刺情况下的掩码硬件实现的验证。该工作考虑了电路输入端所有可能的瞬态,并对门电路中可能出现的所有毛刺进行了建模。然而,该方法仅关注纯组合逻辑的一阶掩码,并采用了一种较为简单的功耗模型来衡量影响(从0到1的转换与从1到0的转换具有相同的功耗)。我们注意到,仅关注组合逻辑会遗漏大多数现有的基于硬件的掩码方案,例如[23,24,31,35]。Bertoni等人在一个基于已知在存在毛刺时是不安全的掩码方案的Keccak掩码实现上展示了他们的方法。

与Bertoni等人的工作相比,我们的方法不仅考虑了组合逻辑和时序门(寄存器),还涵盖了高阶泄露,并且不限于仅具有单个输出位的电路。

在Reparaz的工作中,提出了一种泄露评估方法,该方法通过在软件中模拟目标硬件实现的泄露来工作。首先,创建一个硬件实现的高层级模型,然后通过使用不同的输入对模型进行仿真并提取泄露轨迹来进行验证。通过将统计显著性检验(t检验)应用于模拟得到的泄露轨迹来收集验证结果。与我们的方法相比,Reparaz的泄露检测方法并未执行形式化验证,而是进行实证泄漏评估。此外,该验证并非直接在目标硬件实现上进行,而是需要在软件中建模其 (泄露)行为。

最近,Faust等人发表了一篇论文[19],提出了所谓的鲁棒探测模型,作为针对毛刺问题对原始探测模型的扩展。他们基于巴尔特等人的工作[3],在其扩展探测模型中针对SNI概念的验证展开研究。与Faust等人的方法不同,我们的形式化验证方法并不追求对SNI概念的验证,而是以更高的随机性和实现成本换取更快的验证。此外,据我们所知,目前尚无将其验证方法实现为工具以检查实际硬件电路的方案。

3 预备知识

接下来,我们将广泛使用常见的集合符号表示法,其中 S T=S\ T ∪ T\ S表示 S与 T的对称差;对于两组集合 S和 T,我们定义
S T={S T | S ∈ S, T ∈ T}为所有元素的逐点集合差。我们将 B={
true,false}写成布尔值的集合。对于一组布尔变量 X,我们将赋值 f: X→ B与满足 f(x) =true的变量集合 x等同起来。对于一个布尔函数 f(X, Y)以及一个赋值 x ⊆ X,我们用 f|x表示函数 f|x(y) = f(x, y)。

布尔函数的傅里叶展开

统计依赖性与布尔函数的傅里叶展开之间存在密切联系。首先我们形式化地定义统计独立性。

定义1 (统计独立性) 。 设 X、 Y和 Z为布尔变量的集合,并设 f: 2X × 2Y → 2Z。我们称f关于X是统计独立的,如果对于所有 z,存在一个 c,使得对于所有 x都有 |{y | f(x, y)= z}| = c。

引理2 。 设 F: BX × BY → BZ。函数F与 X统计独立,当且仅当对于所有函数 f: BZ→ B, f ◦ F与 X统计独立。

证明请参见附录A。为了定义傅里叶展开,我们采用[32]的方法,并将真 对应为 −1,将假 对应为 1。然后,我们可以将一个布尔函数表示为有理数上的多线性多项式。

定义3 (傅里叶展开) 。一个布尔函数 f:{−1, 1}n →{−1, 1}可以被唯一地表示为关于 n-元组变量 X=(x1, x2,…, xn)的多线性多项式,其中 xi ∈{±1},
即f的多线性多项式是形如 χT(X)= ∏xi∈T xi的单项式的线性组合,这些单项式称为傅里叶特征,对应于每个子集 T ⊆ X。 χT ∈ Q ̂的系数称为子集T的傅里叶系数 f(T)。因此我们得到f的傅里叶表示:
f(X)= ∑
T⊆X
f̂(T)χT(X)= ∑
T⊆X
f̂(T)∏
x i∈ T
xi.

傅里叶特征 χT: {−1, 1}n→{−1, 1} 构成了 f: {−1, 1}n →{−1, 1} 中函数向量空间的标准正交基。傅里叶系数由函数在其基上的投影给出,即对于
̂f : {−1, 1}n→{−1, 1} 和 T ⊆ X=(x1, x2,…, xn),系数 f(T) = 1/2n ·∑X ∈{± 1} n(f(X) · χT(X)) 给出。为了避免有理数上的乘法与加法和布尔值上的合取与异或之间的混淆,我们用 · 和 + 表示前者,用 ∧ 和 ⊕ 表示后者。

例如, x ∧ y的傅里叶展开是
1/2+ 1/2 · x+ 1/2 · y −1/2 · x · y. (1)

例如,如果 x=假 = 1和 y=真 = −1,则该多项式求值结果为 1/2+ 1/2 −1/2+ 1/2= 1=假,符合与函数的预期。

让我们注意一些简单的事实。(1)傅里叶展开使用变量的异或作为基: x⊕ y= x· y。(2) f2= 1对于任意布尔函数f[32]的傅里叶展开。(3)两个变量的线性函数有两个:f= x · y(异或)和 f= −(x · y)(同或)。所有其他函数f都是非线性的,对于它们,每个 f(∅)、 f({x})、 f({y})以及 f({x, y})都不为零。(我们忽略常数函数和一元函数。)(4)函数的统计依赖可以直接从傅里叶展开中读出:合取具有常数偏置,与 x和 y正相关,与其x ⊕ y负相关。最后这一事实可以推广为以下引理。

引理4(肖‐马西 [39]) 。布尔函数 f: {−1, 1}n→{−1, 1}与变量集 X′ ⊆ X统计独立,当且仅当 ∀T ⊆ X′成立时,若 T= ∅,则 f(T)= 0。

4 掩码与探测模型

掩码的目的是通过使侧信道信息与底层的安全敏感信息相互独立,从而增强对侧信道分析攻击(如差分功率分析或电磁辐射分析)的防护能力。这种独立性是通过在电路内部对安全敏感变量的表示进行随机化来实现的。为此,在执行安全关键计算之前,会预先将随机生成且均匀分布的掩码通过异或操作添加到安全敏感变量上。所使用的掩码数量取决于所采用的掩码方案,并且是安全阶数的函数。

作为一个简单的例子,我们考虑由均匀随机掩码 ms保护的安全敏感的1比特变量s在公式2中,得到掩码表示 sm。
sm= s⊕ ms. (2)

掩码值 sm 仍然是均匀分布的,并且与s 统计独立,即无论 s 的取值如何,其为 0 或 1 的概率相同。任何仅在 sm上执行的操作都与s统计独立,因此所产生的侧信道信息也是如此。由于掩码 ms是随机生成的,对掩码进行的操作是无风险的。然而,对 sm和 ms上的侧信道信息进行组合可能会泄露关于 s 的信息。因此,通过掩码实现的独立性仅在一定程度上成立(该程度由用于掩码 s 的新掩码数量决定),在整个电路中确保这种程度的独立性至关重要。这一独立性程度通常被称为防护阶数d。

掩码电路

在本文的其余部分,让我们固定一个输入变量的有序集合
X={x0,…, xn}。我们将输入变量 X分为三类:

– S={s1,… s j} 是敏感变量,例如密钥材料和密码算法的中间值,这些变量必须通过掩码来防止攻击者攻击。

– M={m1,… mk}是用于打破秘密S与导线和门上传递的信息之间统计依赖性的掩码。假设掩码是具有均匀分布且与其他电路变量无任何统计依赖性的新鲜随机变量。

– P={p1,… pl}是所有其他变量,包括公开已知常量、控制信号等。与秘密变量不同,这些信号无需用掩码保护,也不适合用于保护秘密变量。

我们定义一个电路 C=(G,W, R, f,I),其中(G,W)是一个有向无环图,其顶点为 G(门)和边为 W ⊆ G × G(导线)。入度为零的门称为输入 I,出度为零的门称为输出 O。此外, R ⊆ G是一组寄存器,f是一个函数,它将任意入度为 k的门 g ∈ G\ I与一个函数 f(g) : Bk→ B相关联,而 I: I→(2X→ B)将每个输入关联到一个在 X上的外部计算的布尔函数。我们要求寄存器的入度为一,且其关联函数为恒等函数。下文中,不失一般性地假设除输入和寄存器外的所有门均有入度2,并将这些门划分为一组线性门 L(异或、同或)和一组非线性门 N(与门、与非门、或门、或非门、两个蕴含门及其否定)。同时要求对于任意门g,从某个输入到g的任何路径都经过相同数量的寄存器。



⊕ ⊕

示意图0

f的直观含义是由门计算出的局部函数。例如,如果g是一个与门,则 f(g)(x, y) = x ∧ y。我们为每个门关联另一个函数 F(g) : 2X → B,该函数定义了以电路输入表示的门输出所计算出的函数。函数 F(g)由前驱门的函数和 f(g)以显然的方式定义。给定一个门序列(g1,…, gd),我们将F逐点扩展为 F(g1,…, gd) : 2 X→ B d:F(g1, …, gd)(x) =(g1(x)…, gd(x))。我们通常将门与其功能等同起来。

例如,考虑图1中的电路图(对应于图2中所示的电路)。我们有 f(g3)(a, b) = a⊕ b和 F(g3)=(sm⊕m1) ⊕(ms ∧p1)。

对于电路 C,门序列 G=(g1,…, gn),以及满足 fi ∈ B2→ B 的函数序列 F=(f1, …, fn),我们将 C[G
→ F] 记作电路 C,其中门 gi 被替换为具有布尔函数 fi 的门。

掩码电路的安全性

各种掩码方案的安全性通常在所谓的探测模型中进行分析,该模型由Ishai等人[26]提出。Faust等人[20]和Rivain等人[36]证明,探测模型确实适用于建模侧信道攻击,并描述实现相对于防护阶数d的抗攻击能力。

Chari等人[13],的研究表明,d与利用侧信道信息所需的泄露轨迹数量之间存在指数关系。

在探测模型中,攻击者受限于d个探测针,这些探测针可以自由放置在任意电路门(或导线)上。探测针永久地放置在这些门上,并从电路复位开始监控被探测电路门上的所有信号状态和信号转换。因此,一个探测针会记录在所有时间实例上被探测的信号。探测模型通过攻击者提取任何秘密信息所需的最小探测针数量来量化电路的侧信道抗性水平。更具体地说,在探测模型中,如果攻击者无法将来自d个探测点在所有时间点收集到的信息通过任意函数F组合起来,使得F在统计上依赖于S中的任何秘密变量,则该电路是安全的。我们将探测点建模为读取被探测门或其关联导线产生的布尔函数的能力。由于我们假设掩码变量是均匀分布的,且公共变量是已知的,因此无论公共变量取何值,当且仅当F在统计上依赖于S时,电路才会泄露信息。

定义5 (安全函数) 。如果对于公共变量的任何赋值 p ⊆ P, f|p与 S统计独立,则函数 f: 2X→ B d是安全的。

定义6(d探测安全性 [26]) 。一个电路 C=(G,W, f,I)是d阶探测安全的,当且仅当对于任意门g1,…, gd ∈ G, F(g1,…, gd)是安全的。

使用傅里叶展开的验证示例

根据引理4,我们可以通过计算电路中所有门的傅里叶展开,并检查是否存在一个系数仅包含无掩码的秘密变量(可包含或不包含公开̂变量),从而判断电路所计算的值是否安全。形式化地,我们检查是否存在 ∅= S′ ⊆ S ∪ P使得 F(g)(S′)= 0。因此,可以通过探测模型来验证电路的一阶安全性。

计算整个电路的傅里叶展开。例如,考虑图2中电路的傅里叶展开,其对应的表达式为:
F(g1)= sm · m1,
F(g2)= 1/2+ 1/2 · ms+ 1/2 · p1 −1/2 · msp1, and F(g3)= F(g1) · F(g2)
= 1/2 · smm1+ 1/2 · mssmm1+ 1/2 · p1smm1 −1/2 · msp1smm1.

假设sm= s ⊕ ms并利用傅里叶展开的性质,这意味着
F(g3)= 1/2 · smsm1+ 1/2 · sm1+ 1/2 · sp1msm1 −1/2 · sp1m1. (3)

对于图2中的示例电路,如果 s是秘密信息,且 m1是均匀分布的随机掩码,则 g3在公式3中计算的函数不会泄露任何秘密信息。这是因为,在 F(g3) 中,仅存在包含 s和至少一个掩码值的项的(非零)傅里叶系数。

由于精确计算傅里叶系数的开销非常大,且扩展到高阶探测安全性并非易事,因此在下文中,我们开发了一种方法来估计每个门的傅里叶系数,并验证其高阶安全性。

5 针对稳定信号的验证方法

在本节中,我们提出了一种针对数字电路稳态下(d‐)探测安全性的可靠验证方法。假设电路输入处的信号已固定为某个值,并且各门处的中间信号以及电路输出均已达到其最终(稳定)状态。该方法随后将在第6和7节中扩展,以涵盖瞬态信号和毛刺。

由于掩码电路安全性阶数的形式化验证在实践中已被证明是一个非平凡的问题,因此电路验证器的直观思路是采用一种能够正确分类大量实际相关且安全掩码的电路,同时拒绝所有不安全电路的方法。任何根据定义6判定为不安全的电路都将被拒绝。我们的验证方法可分为三个部分:(1)标签,(2)传播规则,和(3)实际验证。

5.1 标签

为了检查电路的安全性,我们引入了对输入变量集的标签系统 X用于稳定信号 S: G → 22 X该系统为每个门关联一组变量集合。此标签系统基于布尔函数的傅里叶表示(见第3节),直观上,一个标签包含

̂至少是那些集合 X′ ⊆ X,其中 f(X′) = 0(与布尔函数相关的集合)。

初始标签由 I推导得出。对于一个由函数̂fg= I(g)驱动的输入g,我们有
S(g) ={X′ ⊂ X | fg(X′) = 0}。在实际中,电路的初始标签很容易确定,因为输入通常要么是单个变量 m,要么是被掩码保护的秘密值 x⊕m。图2(蓝色部分)展示了一个示例电路的标签标注。包含安全性敏感变量的输入包含一个集合,列出所有与该敏感变量相关的安全敏感变量及其保护该敏感变量的掩码。例如,对于被掩码的信号 sm= s ⊕ ms,其初始标签为 S(sm) ={{s, ms}}。

该标签的含义是:攻击者通过探测此输入无法获得关于s的任何信息。要获取有关s的任何信息,必须将 ms的某些信息与此线路结合,这种结合可能由电路自身完成(这将构成一阶缺陷),或由攻击者通过探测相应的线路实现。如果假设攻击者仅受限于单个探测针(d= 1),则信号 sm对一阶攻击是安全的。最后, 图2中的被掩码输入 ms和 m1仅包含掩码变量。形式上,对于具有函数 I(g) = f(X)的输入 g ∈ I,我们设 S(g)={X′|X′= X}。

5.2 传播规则

为了估计攻击者通过探测门的输出所能获取的信息,我们通过电路传播输入标签。在验证过程中,我们保守地估计傅里叶表示中哪些系数不同于零并与变量相关。我们在本节末尾证明,我们的估计足以指出所有与安全性相关的信息。

非线性门

为了生成电路中每个门输出的标签,我们引入了非线性门规则。非线性门规则对应于信号具体傅里叶谱的最坏情况估计,并且可以简单地捕捉所有缺陷。对于具有输入 ga和 gb的非线性门g ∈ N,其输出的标签为:
S(g)={∅}∪S(ga)∪S(gb)∪S(ga) S(gb).

参见 门 g2图 2中计算 ms∧p1的与门的简单示例。所得标签表示通过探测该门可获得的信息,可能是 ms或 p1单独地,或同时获取。该标签反映了与门的傅里叶谱(见公式1)。具体而言,该标签显示了傅里叶多项式中所有系数非零的项,因此具有统计相关性。

线性门规则

通过遵循定义3中的傅里叶展开,我们还可以对具有比非线性门更简化频谱的线性门进行建模。我们通过引入一个新的标签规则来对具有输入 ga和 gb的线性门 g ∈ L进行建模:
S(g)= S(ga) S(gb) .

综合示例

为了说明传播步骤在实际中的工作方式,我们将传播规则(总结于表1)应用于一个示例电路。结果如图2所示。与门 g2是一个非线性门,然后将传播规则迭代地应用于门 g1至 g3。输出标签 g1表明,此处安全性关键变量 s不仅受到 ms的保护,还受到掩码 m1的保护。将公开信号 p1与掩码 ms在非线性门中结合,产生了一个非均匀输出信号,这由{∅}标签在 g2输出端表示。在计算 g3的标签时,使用线性规则处理 g1和 g2的输出标签,其结果表明,在最坏情况下,s仍然受到 ms或m1或两者的保护。

Table 1.连接到与门 ga和或门 gb的稳定集 S(g)的传播规则

| 门g的类型 | 稳定集规则 || 稳定集规则 || |
| — | — | — |
| 输入 I(g)= f(X) | S(g)={X ′|X′= X} | |
| 非线性门 | S(g) ={∅}∪ S(ga) ∪ S(gb) ∪ S(ga) S(gb) | S(g) ={∅}∪ S(ga) ∪ S(gb) ∪ S(ga) S(gb) |
| 线性门 | S(g) = S(ga) S(gb) | S(g) = S(ga) S(gb) |
| 寄存器 | S(g) = S(ga) | S(g) = S(ga) |

5.3 验证

在验证步骤中,对于一阶情况,电路验证器会检查传播步骤中创建的任何子标签是否包含一个或多个秘密变量而没有任何掩码变量(公共变量被忽略,因为他们无法掩蔽秘密数据)。如果存在这种情况,则验证器拒绝该电路。在图2所示的示例电路中,所有包含s的标签也都包含 m1或 ms,因此该电路被验证器接受。

高阶验证

对于推广到d阶验证,很自然会想到通过允许攻击者从任意门选取多个标签并以任意方式组合,来建模攻击者的能力。然而,我们注意到标签化并未反映所探测信息之间的相互关系,因此无法准确近似当多个门被探测时可能获取的信息。举一个简单的例子,考虑一个电路计算 q=(a ∧ b) ⊕ c,其中所有输入均为均匀分布。在传播步骤后,输出q的标签包含{c}、{a, c}、{b, c}和 {a, b, c},攻击者探测q确实能观察到相关性。如果一个受限于两次探测的攻击者第一次探测了q,那么她第二次再探测q显然不会获得更多信息。换句话说, 如果我们通过组合多个标签的能力来建模高阶攻击者,则她可以将标签{c}与 q的任何其他标签(例如{a, b, c})组合,从而获取关于a或b的信息,而实际上这是不可能的。

我们不是通过直接组合标签来建模高阶验证,而是检查任意d个门的非线性组合。因此,攻击者可以选择最多d个门,并通过任意函数对它们进行组合。然后我们需要验证,即使是对这些门的最坏情况下的函数,也不可能包含未被掩码保护的秘密变量。这会导致明显的组合爆炸。在第8节中,我们展示了如何利用SAT求解器来应对这一问题。附录B中提供了无毛刺情况下验证正确性的证明。

在接下来的两节中,我们将扩展验证器以涵盖毛刺,这表明示例电路实际上是不安全的。

6 建模瞬态时序效应

到目前为止,我们仅考虑了电路的稳定信号。现在我们讨论一个时钟周期内的信号时序效应,即毛刺,并形式化如何在探测模型中对毛刺进行建模。随后,我们将讨论如何对来自多个时钟周期的信息进行建模。

6.1 毛刺

当未考虑信号传播时间的差异时,可能会出现问题,以下是一个示例 [29],请参见图3中的电路。如[26]中引入的原始探测模型所述,该电路是安全的。

异或门输出上的信息是(sm= s⊕ ms):
g1= sm ⊕ m1= s⊕ ms ⊕ m1 and
g3= sm ⊕ m1 ⊕ ms= s⊕ m1.

由于其他电路门(输入端被建模为门)仅携带关于掩码值sm或掩码 ms和 m1的信息,因此在电路任意部分的单个探测点均不会泄露s,该电路在原始探测模型下是一阶安全的。

然而,如果我们假设在后续的时钟周期(图4中的第2时钟周期)中处理了不同的秘密 s′,则电路输入相应地从 sm、 ms和 m1分别变为 s′ m、 m′ s和 m′ 1。

图4展示了一个示例,说明这些变化如何在电路中传播。由于物理因素(如导线长度不同或晶体管驱动强度不同)引起的信号时序变化,会产生所谓的毛刺。

由于这种时序变化, m1比其他输入(t1)更晚改变其值(t2),从而产生临时信息泄漏(毛刺)。攻击者若在 g3的输出端放置一个探测点,会首先观察到原始值 s⊕ m1(在时间 t0),然后观察到 s′ ⊕ m1(在t1和 t2之间)。通过结合这些信息,攻击者获得了信息(s⊕ m1)⊕(s′ ⊕ m1),这等价于 s⊕ s′。因此,她得知了两个秘密比特之间的关系。这一信息无法通过组合两个时钟周期中的稳定信号获得。实际上,该泄露严重依赖于电路中毛刺所提供的临时信息。为了在存在毛刺的探测模型下验证电路的安全性,必须考虑由于信号传播延迟可能产生的所有信号组合。

6.2 带毛刺的探测安全性形式化

为了在一阶情况下形式化带毛刺的探测模型,攻击者的能力扩展如下:攻击者可以首先将任意数量的门(寄存器除外)替换为一个从该门原始输入计算任意布尔函数的新门,并且随后可以在任意连线上放置一个探测点,条件是任何被替换的门与该探测点之间不存在寄存器。

对于阶数 d> 1的高阶攻击,形式化过程稍微复杂一些。直观上,攻击者应该能够修改任意门的行为,但当信号通过寄存器时,这种影响应当消失。我们通过复制电路的组合部分并允许

攻击者可以更改副本中的门电路,而原始的未修改信号则由未修改的门电路传播。图5展示了毛刺建模的一个示例。攻击者可能修改的复制的门电路用蓝色表示。特别注意,门 g7连接到寄存器 g8,但其副本g′ 7成为一个新的主输出。

形式上,给定一个电路 C=(G,W, R, f,I),我们进行如下操作。

(1) 我们定义一个电路 C′=(G′,W′, R, f′,I)。我们复制除输入和寄存器外的所有门电路: G′= G ∪{g′ | g ∈ G\ R\ I}。我们引入从输入和寄存器到复制的门电路的导线,并在复制的门电路之间引入导线: W′= W ∪{(g, h′) | (g, h) ∈ W, g ∈ I ∪ R}∪{(g′, h′) | (g, h) ∈W, g∈/ I ∪R, h∈/ R}。最后,复制的门电路的功能与原始门电路相同: f′(g′) = f(g) 对于 g ∈ G′\ G。

(2) 攻击者可以用计算任意布尔函数的门来替换任何门副本 g′ 。我们通过为攻击者可能修改的任何门集合定义一组电路来对此进行建模:
Cg
litch(C)={C

[(g

1,…, g
′ n) →(f1,…, fn)] | (g1,…, gn) ∈ Gn, ∀i.fi: B 2→ B}.

定义7(d阶探测安全性与毛刺) 。 一个电路 C在存在毛刺的情况下是d阶探测安全的,当且仅当对于任意 Cg litch=(G′,W′, R, f ′,I) ∈ C g litch以及任意门 g1,…, gd ∈ G′, F(g1, …, gd)是安全的。

6.3 多个时钟周期的信息建模

高阶探测安全性的验证需要对在不同时钟周期中获取和组合的信息进行建模。

在我们的验证方法中,我们考虑变量之间的依赖关系,而非这些变量的具体实例化。我们对毛刺的建模方式允许攻击者利用两个寄存器级之间变量的最坏情况下的依赖关系。我们现在提出对掩码电路的假设,以确保每个时钟周期内的最坏情况依赖关系相同。

关于掩码电路的假设 。为了不失对掩码电路的相关性,我们做出以下受实际掩码电路启发的假设:(1)假设输入端的值在整个时钟周期内保持不变,仅在新的时钟周期开始时切换一次(即寄存器输入)。(2)输入函数中所使用的变量类别以及函数本身不随时间改变。例如,对于图3中的电路,输入 sm始终包含一个变量 s ∈ S及其对应的掩码 ms ∈ M,尽管在每个时钟周期中这些变量可能会变化(例如从s变为s’)。(3)掩码变量在每个时钟周期都是全新的、随机且均匀分布的。(4)电路是无反馈和无循环的,除了寄存器固有的反馈回路之外。(5)每个参与门函数组合的变量所经过的寄存器深度(从电路输入开始计数的寄存器数量)相同。因此,除了由于延迟和毛刺可能暂时合并两个连续时钟周期的信息外,不会结合来自不同时钟周期的信息。这一假设的依据在于大多数掩码硬件设计(例如常见的S盒设计)均采用流水线方式设计。

根据这些假设可知,所有变量在每个时钟周期内都会发生变化(例如从s变为s’,依此类推),但变化的时间和顺序是任意的。变量类别和函数保持不变,因此根据假设4和5,可确保仅将输入到电路中的变量在同一个时钟周期或前一个时钟周期中组合。因此,只需考虑依赖关系的传播,而无需考虑变量的具体实例化。

7 将验证方法扩展到瞬态信号

在本节中,我们利用上一节对瞬态时序效应的建模来完善我们的验证方法。通过相应地扩展传播规则,我们将毛刺纳入考虑。另一方面,对来自不同时钟周期信息的建模则不需要对第5节中的验证方法进行任何修改。

表1中的非线性门规则通过将输入的标签以及这些标签的所有可能组合直接传播到输出端,已经内在地涵盖了毛刺。为了阻止毛刺的传播,电路设计人员使用寄存器,使其仅在特定时钟事件时才传递输入信号,从而在评估阶段将寄存器的输入与输出隔离。我们通过为每个门引入一个额外的瞬态标签集来建模电路的毛刺行为 T。因此,每个门都有两个关联的集合: S如前所述,表示电路稳定状态的信息,而瞬态集 T描述了仅在两个寄存器之间(或输入与寄存器之间,或寄存器与输出之间)对攻击者可访问的瞬态信息。在两个寄存器之间,我们也将非线性门规则应用于线性门,以确保涵盖毛刺的所有可能影响。

输入的稳定集和瞬态集在开始时是相等的,因为输入要么是电路输入,要么是寄存器的输出。当信号通过线性异或门传播时,瞬态集通过应用表2中的线性规则计算,而稳定集则使用表1中的线性规则计算。信号经过寄存器后,仅保留稳定信息,因此瞬态集携带的信息与稳定集相同。表2总结了创建瞬态集标签的规则T(g)。请注意,引入瞬态集和瞬态门规则对应于第6节中对毛刺的建模,如图 5(蓝色)所示,其中两个寄存器之间的门被复制,且攻击者可以任意方式更改其功能。在寄存器处用稳定标签替换瞬态标签,相当于将复制的门连接到电路输出,以阻止毛刺的传播。

除了引入瞬态集及相应的传播规则外,验证工作如第5节所述。电路输入最初根据其输入变量进行标签标注,其中稳定集和瞬态集具有相同的标签。然后针对最多d个门的所有可能组合,根据稳定和瞬态的传播规则进行标签传播。如果没有任何门的组合产生仅由秘密和公共变量组成的标签,则该电路是阶数‐ d探测安全的。

表2。 由门 ga和 gb驱动的瞬态集 T(g)的传播规则

门g的类型 瞬态集规则
输入 T(g) = S(g)
非线性门 T(g) ={∅}∪ T(ga) ∪ T(gb) ∪ T(ga) T(gb)
线性门 T(g) ={∅}∪ T(ga) ∪ T(gb) ∪ T(ga) T(gb)
寄存器 T(g) = S(ga)

示例。图2中电路的瞬态标签 T如图 7 所示(稳定集被省略,因为它们不包含额外信息)。根据瞬态集传播规则,图2中底层电路中的门 g1和g3(原本是线性门)的功能被替换为非线性门。从电路输出可以看出,在考虑毛刺的情况下进行验证会导致该电路被拒绝,因为变量 s(黑色标签)出现在输出标记中,而未被ms或 m1所掩码。

为了清楚地表明该电路确实是不安全的,我们假设 p1=为真,并且 sm和 ms的值分别变为 s′ m和 m′ s,但 m1和 p1的值暂时保持不变。此时, g1从 s⊕ ms ⊕ m1过渡到 s′ ⊕m ′ s⊕m1,从而导致 g3从 s⊕m1过渡到 s′ ⊕m1,因此泄露了s与 s′之间关系的信息。(参见图4)。该缺陷可通过在 g1后添加一个寄存器轻松修复,以确保 sm在与 ms于 g3中结合之前总是被重新掩码,如此一来,与图2中 g1相同的标签将被传播。

8 基于SAT的电路验证

在本节中,我们介绍基于SAT求解器的验证方法的一种具体实例化。此前各节中介绍的验证方法被编码为命题逻辑中的公式。我们首先讨论稳定集规则及其验证,然后再将编码扩展到瞬态集规则。

稳定信号的验证

基于SAT的验证工作如下:直观上,对于每个门 g,我们选择一个集合 X′ ⊆ S(g),即选择一个可能具有非零系数的傅里叶特征。然后我们对表2和 1中定义的线性门和非线性门的规则进行编码。为了检查高阶安全性,我们将一个异或门(检查门)连接到最多d个门的任意子集,并检查该门的标签是否不包含仅有秘密而无掩码的标签。

设 C=(G,W, R, f,I)为一个电路。对于每个门g,我们引入一组布尔变量 Xg={xg | x ∈ X}和一个布尔激活变量 ag。对于一个检查门 gc,我们引入一组布尔变量 Xgc。我们定义一个公式 Ψ来检查掩码方案是否安全。回顾一下, L和N分别是线性门和非线性门的集合。公式 Ψ由多个部分组成:
Ψ= Ψgates ∧ Ψunsafe, where
Ψ gates= ∧
g∈I
Ψinp(g)∧ ∧
g∈N
Ψnl(g)∧ ∧
g∈L
Ψlin(g)∧ ∧
g∈R
Ψreg(g).

输入的标记由 I决定。对于 X′ ⊆ X,我们定义
ψ g(X′)= ∧
x∈ X{ x g(X′) if x ∈ X ′, ¬xg(X′) if x∈/ X ′, and Ψinp(g)= ∨
X ′
⊆X: ̂ I(g)(X ′ )=0
ψ g(X′).

为了定义线性门和非线性门的行为,我们使用表1中的规则定义以下辅助公式,其中 T=(t1 ,…, t n),
U=(u1,…, un) 和 V=(v1,…, vn) 是有序的变量集合,并定义↔表示相等性。
Ψempty(T)= ∧
i
¬ti,
Ψcopy(T, U)= ∧
i
(ti↔ ui), and
Ψlin(T, U, V)= ∧
i
(ti↔(ui ⊕ vi)).

对于具有输入g′和 g′′的线性门g,我们使用公式
Ψlin(g)= Ψlin(Xg, Xg′, Xg′′),

对于一个具有输入 g′ 和 g′′ 的非线性门 g,我们使用以下公式
Ψnl(g)= Ψempty(Xg)∨Ψcopy(Xg, Xg′)∨Ψcopy(Xg, Xg′′)∨Ψlin(Xg, Xg′, Xg′′), and

对于一个输入为 g′ 的寄存器 g,我们简单地有 Ψreg(g) = Ψcopy(Xg, X ′ g)。同时,我们引入一个整数变量 asum,并将其与攻击阶数d 关联起来。
asum=∑
g
ite(ag, 1, 0)
asum ≤ d.

函数 Ite(ag,1,0)(如果‐那么‐否则)将布尔变量转换为整数。对于检查门,我们对相应的输入进行异或:
Ψ(gc)= ∧
x∈X
xgc↔⊕g∈Gag ∧ xg.

最后,对于检查门gc,我们定义一个约束来检查安全性是否被破坏,即是否存在包含秘密但不含掩码的非零傅里叶系数:
Ψunsafe(gc)= ∨
s∈S sg ∧ ∧
m∈M ¬mg .

Formu la Ψ 包含 |X| · |G| 个命题变量和 O(|X| · |G|) 个约束 .

SAT编码的一个示例见附录F,其正确性的证明见附录D。

对瞬态信号的扩展

瞬态规则的编码遵循第7节中的阐述,特别是表2中的规则。我们引入第二组变量X′ g ={x′ g | x ∈ X},用于表示定义7中“复制”门上的傅里叶特征。我们引入了一组略有修改的约束,其中我们用 Φ′ 表示一个公式 Φ,其中每个变量 xg 都已被替换为 x′ g。
Φ=Φgates ∧Φ ′unsafe, where
Φgates= ∧
g∈I
(Ψinp(g)∧ Ψi′np(g))∧ ∧
g∈N
(Ψnl(g)∧ Ψn′l(g))∧

g∈L
(Ψlin(g)∧ Ψ′ nl(g))∧ ∧
g∈R
Φreg(g),

其中,对于输入为 g′的寄存器g,我们仅复制原始(无毛刺)信号:
Φreg(g)= Ψcopy(Xg, Xg′)∧ Ψcopy(Xg, X′ g′).

注意对线性门的副本使用非线性门的约束,这对应于攻击者能够将此类门替换为 Cglitch(C) 中的任意其他门。最后,我们仅在门的副本上检查泄露情况:
Φ′ unsafe(gc)= ∨
s∈S
s′
gc ∧ ∧
m∈M
¬m′
gc
.

公式 Φ包含 2·|X|·|G| 个命题变量和 O(|X|·|G|)个约束。关于瞬态信号编码正确性的证明见附录 E。

9 实际结果

图8展示了所实现的验证流程,该流程用于收集本节中呈现的结果。首先,使用Yosys 0.7[38]开源综合套件解析电路描述。生成的电路树以JavaScript对象表示法(JSON)格式存储。然后,用户需要通过告知用Python编写的JSON解析器哪些信号是秘密(S)、掩码(M)或其他信号(P),以及电路需要测试的安全阶数(d),来提供电路的输入标签。SAT公式的构建由约1000行 Python代码完成,并由Z3定理Prover 4.5.1[15](初步尝试其他SAT求解器,包括Crypto‐Minisat 5.0.1,结果均不理想)。所有结果均在运行于64位Linux操作系统环境(Debian 9)的Intel Xeon E5‐2699v4 CPU上收集,该CPU主频为3.6 GHz,配备512 GB内存。

优化

我们采用了两种简单的优化方法来加速验证。首先,我们可以将输入处的公共变量视为常量。通过归纳法可以轻松证明,如果对于某个门g和 P′ ⊆ P、 S′ ⊆ S以及 M′ ⊆ M、 P′ ∪S′ ∪M′ ∈ S(q)成立,并且我们通过将公共变量视为常量来计算新的标签 S′,则S′ ∪ M′ ∈ S′(q)成立,因此如果 S(q)是不安全的,则 S′(q)也是不安全的。类似的论证也适用于 T以及信号组合。

其次,我们可以一次只处理一个秘密比特,而将其他秘密比特视为常量。这一论点与第一种优化方法类似:如果一个函数是不安全的,那么它必然存在一个包含至少一个秘密比特且不含掩码的标签。从该标签中移除任何其他秘密比特,并不会影响该标签是否被视为安全的判断。这种优化在较大示例上带来了显著的加速效果,因为它允许我们并行地对每个秘密比特执行检查。

表3. 掩码电路一阶验证结果概览

Name 门 线性 非线性 寄存器 秘 变量 密 掩码 公开 无毛刺 有毛刺
Name Time 结果 时间
特里基纳门 [37] 4 4 0 2 3 1 ≤1 s
ISW与 [26] 4 4 0 2 3 0 ≤1 s
TI AND [31] 6 9 0 2 4 0 ≤1 s
DOM AND[24] 4 4 2 2 3 1 ≤1 s
DOM Keccak S盒 [25] 30 20 144 2 10 08 8 5 10 1 ≤1 s
DOM AES S盒 [24] 392 26 1 1–8 ≤30 s
TI Fides‐160 S盒 [11] 128 4,035 3 60 , 046 0 5 15 0 1–4
TI Fides‐192 APN [11] 134 44 0 0 24 0 1
TI Fides‐192 APN [11] 649 314 0 6 24 0
TI Fides‐192 APN [11] 1, 697 1 , 098 0 6 24 0
TI Fides‐192 APN [11] 1, 186 1 , 086 0 6 24 0
TI Fides‐192 APN [11] 369 504 0 6 24 0

评估。实验概览见表3。该表列出了电路的线性门和非线性门的数量,以及被分类为秘密、掩码和公开的变量数量,分别列出。此外,分别给出了稳定集 (无毛刺)和瞬态集(有毛刺)模型下的验证结果。表中指明了电路在给定模型下是否安全(✓表示安全,✗表示不安全),以及检查和生成约束所需的时间。

所选的掩码电路涵盖了特里基纳门[37],和ISW方案[26],中不同的掩码 GF(2)乘法器结构(掩码与门)阈值实现(TI)方案[31],和域导向掩码方案(DOM)[24]。我们还检查了更大的电路,包括格罗斯等人使用域导向掩码(DOM)方案的AES S盒构造。[24]此外,我们验证了比尔金等人的FIDES S盒实现以及格罗斯等人的 Keccak S盒实现。[11],和一个由格罗斯等人实现的Keccak S盒。[25]。

9.1 一阶掩码实现的验证

Table3显示了一阶掩码硬件实现的验证结果。对于较大的电路,例如 AES S盒,我们分别检查了每个秘密比特。如果有多个 CPU 可用,这些验证可以同时运行,因此我们将验证拆分为多个部分。

掩码AND门 。我们验证的第一个掩码AND门是所谓的特里基纳门,它最初被设计用于抵抗一阶攻击。公式4展示了其底层逻辑函数。特里基纳门的设计未考虑毛刺的影响。因此,如果输入被正确且独立地掩码(am= a ⊕ ma和 bm= b ⊕ mb),则电路输出的稳定状态也被正确掩码。
q= am ∧ bm ⊕ am ∧ mb ⊕ ma ∧ bm ⊕ ma ∧ mb ⊕ mq (4)

然而,由于信号传播过程中存在时序差异,异或门中可能会产生毛刺。这使得设计变得脆弱,除非采取额外措施,我们的验证结果也表明了这一点。有趣的是,稳定验证的结果已经显示出特里基纳门的脆弱性。这是由于综合工具的时序优化改变了与门输出进行异或操作的顺序,这在掩码电路设计中是一个常见问题,且容易被忽视。

ISW方案中的掩码与门类似于特里基纳门,但可扩展到任意防护阶数。该门电路同样存在对毛刺的漏洞,导致原始提出的电路构造的任何直接实现都对一阶攻击不安全。此次在稳定集中并未检测到该缺陷,因为门电路的排列方式使得在电路的稳定分析中秘密始终被掩码。然而,该电路仍然易受毛刺影响,这一点在电路的瞬态分析中得以显现。

为了克服毛刺问题,阈值实现(TI)方案提出了一种针对每个敏感变量使用两个新掩码的掩码方法(例如 am=a⊕ ma0 ⊕ ma1)。通过确保在电路的任何部分都不会同时出现掩码值及其所有掩码,从而实现对毛刺的抵抗。

一种需要较少掩码的不同方法是由面向域的掩码与门提供的。为了确保该掩码与门的安全性,需要通过使用寄存器将各项组合,并引入一个新的随机掩码来分离这些项。验证器在稳定性和瞬态验证中也正确地标记DOM与门为安全。

对于所有掩码与门结构,毛刺检测耗时不到一秒,而带有毛刺的验证耗时不到三秒。

掩码S盒电路与置换的验证 。对于其余电路,我们使用了在线提供的源代码 [22]用于DOM Keccak S盒和DOM AES S盒,或者在Fides的情况下,从设计者处获得了电路设计。为了更高效地检查这些电路,我们采用了不同的优化方法。对于Fides‐160设计中的TI S盒,我们在固定秘密和掩码赋值的情况下并行检查各个S盒函数。所有Fides‐160 TI函数的结果在有无毛刺的情况下均在三秒内完成计算。对于Fides‐192的TI设计,不仅S盒,整个APN置换被拆分为五个函数。同样,我们假设固定的掩码方案,并分别检查这些函数,这使得第一个 TI函数的验证非常快(因为该部分不输入任何秘密)。对于其他电路部分,无毛刺情况下的验证耗时约20分钟,而有毛刺情况下的验证则耗时约2小时。请注意,Fides‐192不同部分验证时间的差异源于各部分门数量的不同。所有电路部分均被标记为安全。最后,我们还检查了一个DOM AES S盒设计,针对八个独立的秘密比特分别对整个电路进行了验证。稳定集验证耗时不到30秒,每个部分的瞬态集验证耗时在5到10小时之间。验证结果再次表明该电路是一个安全的一阶掩码保护电路。

9.2 高阶掩码实现的验证

为了评估我们的验证方法在高阶掩码电路中的性能,我们在通用掩码DOM与门 [24]和Keccak S盒[25]上运行了我们的工具。结果如表4所示,其中电路的防护阶数和验证顺序始终设置为相等,并在单列(阶数)中汇总。

二阶掩码DOM与门的验证耗时不到一秒。对于四阶防护与门,验证时间增加到约7分钟。不同验证顺序下防护阶数的影响如图9所示。我们对每个掩码 DOM与门从一阶开始,一直到其声明的防护阶数再加一阶进行了评估。该图强调了一个直观结论:发现缺陷所需的时间比确保电路无缺陷所需的时间更短。

对于Keccak S盒电路,我们再次将五个秘密的验证分为五个独立的验证运行。在不考虑毛刺的情况下,二阶验证每次运行大约需要10秒,而考虑毛刺时则需要约40秒。对于三阶验证,时间分别增加到4分钟和25分钟。

表4. 掩码电路概述及高阶验证结果

Name 阶数 门 线性 非线性 寄存器 秘密 变量 掩码 公开 时间 结果 无毛刺
时间
有毛刺 结果
DOM 与门 [24] 2 12 9 9 2 11 1 ≤1 s ≤1 s
DOM 与门 [24] 3 24 16 16 2 17 1 ≤4 s ≤20 s
DOM 与门 [24] 4 40 25 25 2 24 1 ≤2m ✓ ≤7 m
Keccak S盒a[25] 2 75 45 45 5 35 7 ≤10s ✓ ≤40 s
Keccak S盒a[25] 2 3 140 80 80 5 60 7 ≤4m ✓

a对于Keccak S盒,我们分别对五个秘密进行了验证。

10 结论

在本文中,我们提出了存在毛刺情况下掩码硬件实现验证的形式化基础。我们在Ishai等人的探测模型基础上,提出了一种方法,用于在最坏情况信号时序下保守估计电路在此模型下的安全性。我们的方法基于对电路计算的函数的非零傅里叶系数的估计,并提供了其正确性的证明。为了展示该方法的实用性,我们在Z3定理证明器的基础上实现了这一形式化方法,直接在门级网表上验证侧信道防护硬件实现的掩码属性。我们通过来自不同掩码方案和不同来源的实际例子,展示了该方法在验证掩码电路方面的适用性。

这种方法的优势显而易见。被判定为安全的电路在任何可能的信号时序下都不会泄露秘密信息,这包括毛刺对电路组合逻辑的影响,甚至对高阶攻击也是如此。如果一个电路被拒绝,我们可以准确定位导致潜在泄露的门,这使得检查和修复缺陷比传统方法容易得多。此外,验证器可以在掩码电路开发的不同阶段使用,或用于测试新的掩码方案。这使其在实际应用和研究目的方面都成为一种有用的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值