从部分信息中恢复加密密钥(通过一些例子)(Recovering cryptographic keys from partial information, by example)
0 写在前面
0.1 综述
针对密码学的侧信道攻击可能仅泄露有关密钥的部分或间接信息。 本篇文献中有多种技术可用于从部分信息中恢复密钥。 在本文中,我们研究了RSA,(EC)DSA 和 (EC)Diffie-Hellman(当今常用的公钥密码系统)的几个主要部分密钥恢复算法家族。 我们根据攻击者收集到的信息结构对已知的攻击方式进行分类,并为每种攻击方式提供简化示例以说明其背后思想。
0.2 译者想说的
这篇paper目前在国内还没有翻译文本,我自己在翻译之前大致看了一遍这篇paper,感觉和上次翻译的二十年内RSA攻击综述类型相同,都是一篇文章汇总了很多的攻击方式,其中一些攻击方式在最近的CTF比赛中也有出现过,所以就打算翻译这篇paper。当然由于本人能力有限,翻译水平不高,借鉴了一部分机翻,也会在原文的基础上写上一点点自己的看法什么的,各位师傅在阅读的时候如有疑惑或感觉不妥的地方,还请批评教正。原文链接:1506.pdf (iacr.org)
1 引入
- You are dangling in a rope sling hung from the ceiling of a data center in an undisclosed location, high above the laser tripwires crisscrossing the floor. You hold an antenna over the target’s computer, watching the bits of their private key appear one by one on your smartwatch display. Suddenly you hear a scuffling at the door, the soft beep of keypad presses. You’d better get out of there! You pull your emergency release cable and retreat back to the safety of the ventilation 2 duct. Drat! You didn’t have time to get all the bits! Mr. Bond is going to be very disappointed in you. Whatever are you going to do?
(上面是一个很幽默的场景描述,写了一个特工去数据中心窃取私钥时的突发状况,这里翻译了就没内味儿了)
在侧信道攻击中,攻击者利用计算或存储的副作用来窃取表面上的秘密信息。 许多侧信道攻击源于计算机是现实世界中的物理对象这一事实,因此计算可能需要不同的时间 [Koc96],导致功耗变化 [KJJ99],产生电磁辐射 [QS01],或 产生声音 [GST14]、光线 [FH08] 或温度 [HS14] 波动。 泄露信息的具体特征取决于算法的顶层和底层的实现细节,通常还取决于计算机硬件本身:分支条件、错误条件、内存缓存收回行为或电容器放电的具体情况。
已发表文献中关于侧信道攻击的第一项工作并未直接针对密码学 [EL85],但自从 Kocher 在 90 年代开展时序和功率分析方面的工作 [Koc96, KJJ99] 以来,密码学已成为侧信道工作的热门对象。然而,攻击者很少能通过侧信道简单地读取完整的密码密钥。 许多侧信道攻击所揭示的信息通常是间接的或不完整的,甚至可能包含错误。
因此,为了充分了解给定漏洞的性质,侧信道分析师通常需要使用额外的密码分析技术。在这种情况下,密码分析者的主要目标通常是:“我获得了以下类型的关于密钥的不完整信息,它能不能让我可以高效地恢复剩下的密钥?” 不幸的是,没有一个万能的答案:它取决于所使用的特定算法,以及已得到信息的性质。
这项工作的目标是在一个地方收集该领域中一些最有用的技术,并为实践中最常见的场景提供一个合理全面的分类。 也就是说,这是一个非详尽的研究和一个带有引导性例子的具体教程。 该领域的许多算法论文都给出了完全通用的结构,这有时会模糊读者对方法为何有效的直觉。 在这里,我们的目标是提供最少的工作示例来说明每种算法用于简单但不平凡的情况。 我们将重点放在公钥密码学上,特别是目前广泛使用的算法(因此也是最流行的攻击目标):RSA,(EC)DSA 和 (EC)Diffie-Hellman。
在整篇文章中,我们将用如下方式表示已知信息:
本次研究的分类情况见表1。
- Table 1: 公钥加密系统密钥恢复方法的可视化目录
2 动机
虽然本教程主要是在更高的数学抽象层次上操作,而不是我们预想的侧通道攻击,但我们将给出一些示例来说明攻击者如何得到有关密钥的剩余部分信息。
模幂运算。我们讨论的所有公钥密码算法都涉及对值进行模幂运算或者椭圆曲线标量加法运算。对于RSA签名,受害者需要计算
朴素的模幂运算算法,如平方和乘法,对指数的位进行逐位运算:每次迭代将执行一次平方运算,如果指数的该位为 1,则将执行一次乘法运算。 更复杂的模幂运算算法使用非相邻形式(non-adjacent form) (NAF)、窗口非相邻形式(windowed non-adjacent form) (wNAF) [Möl03]、滑动窗口(sliding windows)或Booth recoding [Boo51]进行预先计算,然后对预计算的数字表示进行操作。 [Gor98]。
对模幂的缓存攻击。缓存定时攻击是学术文献 [Pag02, TTMH02, TSS 03, Per05, Ber05, OST06] 中最常被利用的侧信道攻击家族之一。这些攻击有许多变体,但它们都有一个共同点,即攻击者能够在与受害进程位于同一位置并共享 CPU 缓存上的执行代码。当受害者代码执行时,攻击者测量从缓存中的地址加载信息所需的时间,从而推断出受害进程在执行期间,加载到这些缓存地址的数据的信息。在上面讨论的模幂运算或标量加法算法的语境下,如果攻击者可以检测到执行乘法指令的代码是否已加载到其中,那么对易受攻击的实现发起缓存攻击,就可能会反应乘法运算是否在特定比特位置执行缓存。或者,对于一个数的预计算数字表示,攻击者可能用缓存攻击来观察被访问的数字值 [ASK07, AS08, BvSY14]。
对模幂的其他攻击。现在还有一些其他侧信道攻击家族已经用于分析易受攻击的模幂实现,其中就包括功率分析和差分功率分析攻击 [KJJ99, KJJR11]、电磁辐射 [QS01]、声发射 [GST14]、原始时序 [Koc96]、光子发射 [ FH08] 和温度 [HS14]。 这些攻击同样利用代码或电路,其执行因密钥而异。
冷启动和内存攻击。一种完全不同类别的侧信道攻击(可以针对密钥泄露部分信息)包括可能泄露内存内容的攻击。 这其中包括冷启动攻击 [HSH 08]、DMA (Direct Memory Access)(直接内存访问)、Heartbleed 和 Spectre/Meltdown [LSG+18,KHF+19]。 虽然这些攻击可能会泄露不完整的信息,因此可以作为我们讨论的某些算法的理论动机,但这类攻击中的大多数漏洞都可以简单地用于读取任意内存(以几乎完美的精度),并且很少需要密码分析算法。
依赖于长度的攻击。最后一个漏洞类是实现的行为取决于密钥的长度,因此行为的变化可能会泄露有关密钥中高位零的数量信息。 一个简单的例子是将密钥复制到缓冲区中,以显示密钥的位长度。 在另一个例子中,Raccoon 攻击观察到 TLS 版本 1.2 及以下版本在应用密钥派生函数之前从Diffie-Hellman共享密钥中去除高位零,从而导致时间差异取决于密钥长度所需的哈希输入块的数量。 [MBA 20]
3 数学背景
格和格规约算法。我们提出的几种算法都使用格和格算法。我们将陈述一些关于格的事实,但尽量避免过于正式。
出于本文的目的,我们将通过给出一个基矩阵
在几何上,格类似于n维空间中的离散的、可能倾斜的点网格。 这种离散性确保了格中存在最短的向量:格中的向量有一个非无穷小的最小长度,并且至少有一个向量
任意格中的最短向量要想精确计算是 NP困难的,但是 LLL 算法 [LLL82] 能在多项式时间内计算这个最短向量的指数近似值:在最坏的情况下,它将返回一个向量
为了计算比 LLL 更接近最短向量的近似值,可以使用 BKZ 算法 [Sch87, SE94]。 该算法在块大小中按时间指数运行,这是确定近似因子质量的算法参数。 该算法的理论依据难以表达; 就我们的目的而言,我们只需要知道对于维度低于 100 左右的格,我们可以很容易地计算出,使用 BKZ 算法的启发式随机格中的最短向量,并且通常可以找到最短向量,或者通过使用较小的块大小,“足够好”的近似值。 理论上,LLL 算法等价于使用块大小为 2 的 BKZ。
4 对于RSA的密钥恢复方法
4.1 RSA初步
参数生成。要生成 RSA 密钥对,实现通常从选择公钥指数
下一步,实现生成两个随机素数
公钥对为
加密和签名。在教科书里的 RSA 中,Alice 通过计算
为了生成数字签名,Bob 首先使用 PKCS#1v1.5 签名填充(最常见)或 PSS(不太常见)等填充方案对他希望签名的消息进行哈希和填充;令
由于加密和签名验证只使用公钥,解密和签名生成过程就成为侧信道攻击的典型目标。
RSA-CRT。为了加速解密过程,避免直接计算
为了在解密中使用CRT,Alice 将计算
这个式子被称为加纳公式(Garner’s formula)[Gar59]。
RSA密钥元素之间的关系。 为了密钥的恢复,我们通常假设攻击者知道公钥。
RSA 密钥具有许多数学结构,我们可以将公钥和私钥的不同组成部分联系在一起,用于密钥恢复算法。 RSA 公钥和私钥是相互关联的:
这个模等式可以通过引入新变量
我们知道
对于针对CRT系数的
暴力破解两个独立的 16 位值可能会很麻烦,但我们可以将
相乘得到 (原paper这里几个式子的符号有误)
对上式模
因此,给定
乘数 k 也与这些值也有很好的关系。将等式 1 中的关系相乘,我们有
用
当公钥
从
乘数
当
当
通过
4.2 已知连续位的 RSA 密钥恢复
本节将介绍在已知密钥的大部分连续位时恢复 RSA 私钥的方法。 在这种情况下使用的主要方法是格基规约。
对于本节中的密钥恢复问题,我们通常可以恢复未知密钥值(
在涉及噪声测量的侧信道中,不太可能出现密钥的大量连续部分信息。但在从内存中读取密钥,并在可识别区域损坏的情况下,可能会出现这类情况。 如果为恢复已知位付出了巨大代价,它们还可以帮助提高攻击效率。
4.2.1 热身:对具有不良填充的低指数 RSA 的格攻击
用于连续位 RSA 密钥恢复的主要算法是通过找到整数模多项式的小根来描述问题,然后使用格基规约来解决这个问题。
为了介绍使用格基规约来求多项式根的主要工具,我们将从一个说明性示例开始,以说明使用已知填充攻击小指数 RSA 的具体应用。 在后面的部分中,我们将说明如何优化这种方法,以涵盖不同的 RSA 密钥恢复场景。
这个问题的最初表述是由 Coppersmith [Cop96] 提出的。 Howgrave-Graham [HG97] 给出了一种我们发现更容易阐释并更容易实现的方法。 May 的研究 [May10] 包含了对 Coppersmith/Howgrave-Graham 算法的详细描述。
为了解决这个问题,我们假设有一个整数
问题设定。 对于我们的简单示例,我们将使用96位RSA模数
令
现在假设我们得到了一个密文
我们希望恢复未知消息
-
图1:低指数 RSA 消息恢复攻击条件的图示。 攻击者在加密之前知道模数
、密文 和填充在未知消息 之前的填充 。 攻击者希望恢复 。
将问题转换为找到多项式的根。 令
为已知的填充字符串(偏移到正确的字节位置)。我们也知道消息的长度;在这种情况下,
(这里已经对所有系数模
构造格。 令
然后我们将 LLL 算法应用于矩阵。 规约基的最短向量是
从格中提取多项式并找到它的根。 然后我们构造多项式
多项式
这种特定的 4 × 4 格结构可以找到最大为
更详细的阐释。 为什么能解出结果? 该矩阵的行对应于多项式的系数向量
我们已经构造了格子,因此我们从中提取的每个多项式
如果格子构造正确,此方法始终有效。 也就是说,我们需要确保简化的基将包含一个长度小于
例如,我们有
这个条件可以被扩展为
4.2.2 已知 的连续位进行因式分解。
在本节中,我们将说明:如果已知一个因数的大部分连续位(不失一般性
-
图 2:已知
的连续高位,对 进行因式分解。
Coppersmith 在 [Cop96] 中解决了这个问题,但我们发现 Howgrave-Graham 将其重新表述为“近似整数公约数”[HG01]后,更易于应用,我们将在此处给出构造。
问题设定。 令
假设
我们知道
构造格。 我们可以构造格基如下
然后对格基
从格中提取多项式并找到它的根。 我们构造多项式
我们可以计算
这个 3 × 3 格子适用于任何
更详细的阐释。 该矩阵的行对应于多项式的系数向量
如果我们可以在格中找到一个长度小于
我们计算格的行列式,来验证它是否包含这样小的向量。对于本例,
该方法通过增加格的维度,在极限处达到
4.2.3 从 的最低有效位恢复 RSA 密钥
采用上面的方法,来处理
-
图3:已知
的最低有效位,对 进行因式分解。
4.2.4 从 的中间位恢复 RSA 密钥
从
-
图4:已知
的中间连续位,对 进行因式分解。
问题设定。 假设我们知道
具体例子,令
是一个326位的RSA模数,令
是因数
将问题转换为寻找多项式的解。 在之前的例子中,我们只需要求解一个变量,现在我们有两个变量,所以我们需要使用一个二元多项式。写出如下多项式
在我们具体的例子里,
构造格。 和前面一样,我们将使用输入多项式
如前所述,每列对应于多项式中出现的一个单项式,每行对应于一个多项式,该多项式在我们的解中计算为
我们使用 LLL 算法对这个矩阵进行规约,并重写与规约基的每一行相对应的二元多项式。 不幸的是,它们太庞大而无法写页面上(作者偷懒)。
求解多项式组以找到公共根。 我们希望只需要两个足够短的向量,然后计算相应多项式的结果或使用 Gröbner 基来找到公共根,但在我们的例子中,两个最短向量不是代数独立的。 在这种情况下,使用前三个向量就足够了。 具体而言,我们在具有整数系数的二元多项式环上构造一个理想,其基是与上述
在这个例子中,九个最短向量都在所需的解中为0,因此我们可以从这些短向量的其他子集,构建我们的 Gröbner 基。
更详细的阐释。 我们构造的格的行列式为
因此,成功的理想条件是
对于我们的例子,
[BCC 13] 中应用了这种攻击,来恢复由错误的随机数生成器生成的 RSA 密钥,该生成器生成具有可预测位序列的素数。
4.2.5 从 的多个位块中恢复 RSA 密钥
上面的想法可以扩展到处理更多
-
图5:已知
的多个位块,对 进行因式分解。
4.2.6 开放问题:从 的许多不连续位中恢复 RSA 密钥
上述方法随着已知位块的数量而难以扩展。如果只知道(比如)
-
图 6:给定许多
的位块且没有关于 的其他信息的情况下,分解 是一个开放问题。
4.2.7 RSA 的部分恢复
可以使用 4.2.2、4.2.3 和 4.2.4 节中给出的方法从大量连续位恢复 CRT 系数
-
给定
大量连续位恢复 RSA 系数 。
问题设定。 令
是240比特的RSA模数,我们使用公钥指数
在这个问题中,我们有
将问题转换为寻找多项式的解。 我们从等式
整数
我们将等式 4 重写,计算
记
对于我们的例子来说,
构造格。 由于问题的形式与上一节相同,我们使用相同的格构造:
对这组基应用 LLL 算法,并且取规约基的最短向量,对于我们的例子,其为
得到其对应多项式
计算多项式
在极限情况下,通过增加具有更高次多项式和更高根重数的格的维数,该方法可以使用到
4.2.8 从最高有效位部分恢复 RSA 的 是不可能的
-
图 7:对于小指数
, 的最高有效位不允许完整密钥恢复。
考虑 RSA 等式,一步步对其变形
由于
从积极的方面来看,如果攻击者真的知道
4.2.9 从最低有效位部分恢复 RSA 的
对于低指数RSA,如果攻击者知道
-
图 8:在给定
的连续最低有效位的情况下恢复 RSA 的 。
假设攻击者知道
设
然后对于每个
的解。
令
当然,存在涉及不同的权衡的、更复杂的格算法,但对于非常小的
4.3 已知冗余的非连续位
本节介绍,在已知或需要恢复许多非连续位密钥的情况下的密钥恢复。上一节中介绍的格方法可以用于恢复未知关键位的多个块,但代价很高:格维数会随着块的数量增加而增加,并且当要恢复大量位时,运行时间是块数量的指数倍。
在本节中,我们将探讨一种允许不同权衡的方法。 在这种情况下,攻击者知道许多不连续的密钥值位,并且知道密钥的多个值。 例如,攻击者可能已经知道了
4.3.1 已知 和 的随机位
-
图9:已知
和 的随机位,分解 。
我们先从一个现实中不太可能发生的情况开始分析,即擦除
这些情况主要采用的方法是剪枝算法。 剪枝算法背后的思想是写下密钥和公钥中元素之间的整数关系,并从最低有效位开始逐步求解密钥的未知位。 这会产生一棵解的树:每个分支对应特定解的一个或多个未知位的猜想,如果猜想导致它与公钥的关系不正确,则修剪分支。
该算法在 [HS09] 中有介绍和分析。
问题设定。 令
确定整数关系。 在这个例子中,我们使用的整数关系是
迭代求解每一位。 该算法的主要思想是,从最低有效位开始,迭代求解未知量
对于最低有效位,对于
-
图10:例子的剪枝树。该算法表示:从最低有效位的右侧节点开始,向最高有效位移动,迭代地对连续位进行剪枝和猜测。
该算法之所以有效,是因为对任意正整数
当获知
Paterson、Polychroniadou和Sibborn[PPS12]对不同场景下所需的信息进行了分析,并观察到深度优先搜索比广度优先搜索在内存上更高效。
4.3.2 已知中国剩余定理系数 的随机比特
可以用于 4.3.1 节中相同的方法,对 4.3.1 节中的描述进行扩充,就可以恢复中国剩余定理的指数
-
给定
的非连续位,分解 。
问题设定。 令
我们希望通过恢复
确定整数关系。 我们知道
我们没有关于
我们还知道
在我们的例子中,我们有
迭代求解每一位。 有了整数关系,我们就可以从最低有效位开始,使用它们,迭代求解未知数
由于到第 i 位的
对于
-
图11:从树右侧的最低有效位开始,我们给出一个样本分支并修剪树来从已知位恢复
和 。对于每个位, 到第 位的值,由 到第 位的猜测唯一确定;而 到第 位的值,由 到第 位的猜测唯一确定。 红色 X 标记通过验证等式 修剪分支。
4.3.3 从间接信息中恢复 RSA 密钥
对于这种类型的密钥恢复算法,并不总是需要直接知道密钥值的比特值。 即使只知道关于秘密值的“隐含”信息,仍然可以应用剪枝算法来恢复密钥(只要该隐含信息可以从最低有效位开始猜测,通过检验来选择或修剪候选值)。 文献中的例子包括 [BBG 17],它计算猜测的候选值的部分滑动窗口快速幂序列,并将它们与实际值进行比较;还有 [MVH 20],它将二进制GCD算法实现中的程序分支序列与实际值进行比较。
4.3.4 开放问题:无冗余的随机已知位
如第4.2.6节所述,当需要恢复许多非连续的比特块时,恢复RSA密钥是一个开放问题(已知的比特只来自一个密钥字段,没有来自其他值的额外信息)。将本节中讨论的剪枝方法应用于单个密钥值,例如已知
5 DSA 和 ECDSA 的密钥恢复方法
5.1 DSA 和 ECDSA 初步
从部分密钥恢复的角度来看,DSA 和 ECDSA 非常相似,所以我们将一起介绍。 我们将使用稍微不标准的符号来描述每个签名方案,使它们尽可能接近,以便我们可以使用相同的符号同时描述攻击。
5.1.1 DSA
数字签名算法 [NIS13] (DSA) 是对 ElGamal 签名方案 [EG85] 的改进,它通过使用 Schnorr 群 [Sch90] 减少了所需的计算量和生成的签名大小。
参数生成。 DSA 的公钥包括几个全局参数:给定定义一个在
为了生成一个长期的私有签名密钥,首先选择一个密钥
签名生成。 为了对消息
5.1.2 ECDSA
椭圆曲线数字签名算法 (ECDSA) 是对 DSA 的改编,使用椭圆曲线而不是 Schnorr 群。
参数生成。 ECDSA公钥包括指定有限域上椭圆曲线
为了生成长期私钥,首先选择一个密钥
签名生成。 为了对消息
5.1.3 随机参数恢复和 (EC)DSA 的安全性
(EC)DSA 的安全性极其依赖于签名随机数
从签名随机数中恢复密钥。 对于 DSA 或 ECDSA 密钥,如果用于单个签名的随机数
5.2 从随机数 的最高有效位恢复 (EC)DSA 密钥
从随机数 k 的最高有效位恢复 (EC)DSA 密钥主要有两种方法。两种方法都需要知道来自同一密钥的多个签名中,使用的随机数的信息。我们假设攻击者知道长期签名验证公钥,并且可以使用相应的签名密钥生成的多个签名。攻击者还需要知道签名对应的消息的哈希值。
-
图 12:已知随机数的最高有效位,恢复 (EC)DSA 密钥。
第一种方法是通过格。 通常认为其更容易实现,并且当我们知道更多的随机数位,且来自更少签名的信息可用时,其效果很好:我们需要从几十到数百个签名的随机数中,至少知道两个最高位。 我们将在下面介绍这种方法。
第二种方法是通过傅立叶分析。 这种方法可以处理签名随机数中至少已知一个最高有效位的情况,但从经验上看,它似乎需要比格的方法,多一个数量级甚至更多的签名。 最近的研究里有使用
5.2.1 格攻击
(EC)DSA 密钥恢复的格攻击背后的主要思想:是将 (EC)DSA 密钥恢复问题转化为 HNP(隐藏数问题),然后计算一个经特殊构造的格的最短向量,最终求解。
下面我们给出一个简单的例子,说明当随机数的许多最高有效位为零时,如何从少量签名中恢复密钥。然后我们将说明如何将攻击扩展到使用更多签名,而每个随机数的已知位更少,并涵盖已知随机数的任意位的情况。
问题设定。 令
我们有如下两个签名:
-
对于明文哈希值
-
对于明文哈希值
这些签名都使用 32 位随机数
将问题转换为方程组。 我们上面的签名满足等价于
令
我们希望解出
构造格。 我们构造出如下的格
向量
通过在
我们可以验证例子中的
更详细的阐释。 在我们的例子中,我们构造了一个包含目标向量的格。 为了让这个方法起作用,我们希望它是最短向量,或者接近格子中的最短向量,我们通过解格中的最短向量问题来找到它。
构造的向量
在我们的例子中,当
这里采用的方法可能会让读者想起 4.2.1 节中的方法。这里使用的特定格的构造是 4.2.1 节中构造的一种“对偶”,因为目标向量是我们方程组的所需解。然而,与第 4.2.1 节相比,虽然我们找到短向量,但不能保证找到我们想要的解,因为与预期的最短向量长度相比,我们的目标向量
HNP (The Hidden Number Problem) 我们用于解决这些问题的格算法,是基于 Boneh 和 Venkatesan [BV96] 提出的 HNP (隐数问题) 。他们通过这种方法说明 Diffie-Hellman 共享密钥中的最高有效位十分重要。 Nguyen 和 Shparlinski 说明了在已知随机数相关信息的条件下,如何使用这种方法攻击 DSA 和 ECDSA [NS02, NS03]。这种方法的延申可以解决已知每个签名的不同比特 [BvSY14] 或者 错误 [DDME+18] 。
还有一种使用傅里叶分析 [Ble98, DHMP13] 的算法可以解决这个问题,它最初由 Bleichenbacher 提出;它需要更多的样本,但可以处理更少的已知位。
扩展到更多签名,减少已知比特。 为了减少每个签名所需的位数,我们可以将更多签名放入格中。如果我们已知对面明文的哈希值
然后构造出格:
为了解决 SVP ,我们必须运行像块大小为
已知最高非零有效位。 如果
令
随机数再平衡。 签名随机数
于是我们有了一个关于
5.2.2 从随机数 的最低有效位恢复 (EC)DSA 密钥
上一节中描述的攻击,同样适用于 (EC)DSA 中已知随机数的最低有效位的情况。
-
图 13:已知随机数的最低有效位,恢复(EC)DSA 的签名密钥。
问题设定。 我们对明文的哈希值
其中
将上面的式子带入等式
对于这个问题我们有等价关系
5.2.3 从随机数 的中间位恢复 (EC)DSA 密钥
-
图 13:已知随机数的中间位,恢复(EC)DSA 的签名密钥。
从随机数
问题设定。 我们将使用与上面相同的椭圆曲线参数。令
我们有如下两个签名:
-
对于明文哈希值
-
对于明文哈希值
我们知道相应随机数的一些中间位。令
是第一个签名使用的随机数
是第二个签名使用的随机数
将问题转换为方程组。 同上,
其中
因为我们知道
其中
对等式
令
构造格。 构造如下格基
对上面的的格
其对应线性等式
对基中接下来的三个短向量做同样的事情,最终对四个未知数,我们有四个线性多项式。 解方程组,我们得到解
更详细的阐释。 格的行向量对应等式
我们例子中格的行列式为
行列式的界能保证我们找到一个短向量,但不能保证找到四个短向量。 为此,我们需要能让随机格的规约向量接近相同长度的启发式方法。
5.2.4 从随机数的许多位块中恢复 (EC)DSA 密钥
上述方法可以扩展到任意数量的变量的情况。
-
从已知随机数的多个位块中恢复 (EC)DSA 签名密钥。
这种扩展叫 Ex HNP(Extended Hidden Number problem)(扩展隐数问题),它可以解决已知随机数的多个位块时恢复 (EC)DSA 签名密钥的问题。每个签名的随机数的每个未知“块”都会引入一个新变量,因此生成的格的维数将比未知数的总数大一;如果有
6 Diffie-Hellman 密钥交换的密钥恢复方法
6.1 有限域和椭圆曲线 Diffie-Hellman 初步
Diffie-Hellman (DH) 密钥交换协议 [DH76] 允许两方以安全的方式创建一个公共密钥。 我们在有限域和椭圆曲线的背景下总结了协议。
有限域 Diffie-Hellman。 有限域 Diffie-Hellman 的参数由素数
- Alice 选择一个随机私钥
,满足 ,计算一个公钥 - Bob 选择一个随机私钥
,满足 ,计算一个公钥 - Alice 和 Bob 交换公钥
- Alice 计算
- Bob 计算
因为
椭圆曲线 Diffie-Hellman。 椭圆曲线 Diffie-Hellman (ECDH) 协议是 Diffie-Hellman 密钥交换协议的椭圆曲线对应。在 ECDH 中,Alice 和 Bob 共享有限域上的椭圆曲线
- Alice 选择一个随机私钥
,满足 ,计算一个公钥 - Bob 选择一个随机私钥
,满足 ,计算一个公钥 - Alice 和 Bob 交换公钥
- Alice 计算
- Bob 计算
共享密钥为
6.2 已知有限域 Diffie-Hellman 共享密钥的最高有效位
我们在上一节中,从关于 nonce 的信息中恢复 ECDSA 或 DSA 密钥,使用的 HNP 方法,也可以用于从最高有效位恢复 Diffie-Hellman 共享密钥。
-
从
的最高有效位恢复 Diffie-Hellman 共享密钥。
问题设定。 令
令
我们已知
因此
令
我们知道
将问题转换为方程组。 我们有两个等式
其中
我们现在有一个与我们在上一节中解决的 HNP 相同形式的线性方程。
构造格。 我们构造格基:
我们对
这与我们期望的解
更详细的阐释。 这种方法由 Boneh 和 Venkatesan [BV96] 提出,这种方法也是他们提出 HNP 的最初动机。Raccoon 攻击最近展示了在 TLS [MBA 20] 中使用这种方法的攻击场景。
该方法可以适用于多个样本,其所需的位数与对 ECDSA 的攻击所需位数相同。我们也不需要知道
6.3 已知 Diffie-Hellma 密钥指数连续位的离散对数攻击
本节讨论当已知部分信息是秘密指数的一部分或另一部分时,Diffie-Hellman密钥恢复的问题。我们在本节使用的方法是 Pollard’s kangaroo (也叫 lambda)算法。与前几节的方法不同,本节算法以指数时间运行:区间大小的平方根;前几节中的方法通常在攻击者对密钥的了解高于某个阈值时有效,而在攻击者对密钥的了解低于该阈值时无效或不可行。因此,与暴力破解相比,它有显著的优势,但在实际中,密钥恢复可能仅限于 80 位或更少,除非有相当大量的计算资源。
Pollard kangaroo 算法是一种通用的离散对数算法,旨在:当结果位于已知的小区间内时,计算离散对数。 它适用于椭圆曲线和有限域的离散对数。 我们将在示例中使用有限域离散对数,但算法在椭圆曲线中是相同的。
6.3.1 已知 Diffie-Hellman 密钥指数的最高有效位
问题设定。 使用与 6.1 节中相同的有限域表示法,令
-
图 15:已知密钥指数的最高有效位,恢复 Diffie-Hellman 共享密钥。
换句话说,令
具体例子,令
进行伪随机过程。 我们定义一个在模
这是为运行我们的简单示例计算,而生成的小样本伪随机过程。 伪随机过程中的每一步都由前一个值
我们运行两次随机过程,第一次叫“the tame kangaroo”,从要搜索的指数区间的中间开始,即
第二次随机过程叫 “wild kangaroo”。它从目标
如果某个时刻,“wild kangaroo” 和 “the tame kangaroo” 的路径相交,那么我们就完成了计算并且可以得到结果了。
计算离散对数。 我们知道对于 “the tame kangaroo” 的路径上的
在实例中,两条路线交汇于
更详细的阐述。 Pollard 在 [Pol78] 中给出了该算法的原始版本。 Teske 在 [Tes00] 中给出了另一种随机过程,理论上更有优势,但在实际中,似乎并没有表现出明显的优势。
我们希望算法在
为了将其扩展到更多位,需要进行一些修改。首先,使用具有更多细分的随机过程:32 是常用值。其次,van Oorschot 和 Wiener [OW99] 说明了如何使用区分点的方法,并行化 kangaroo 算法。这种方法背后的思想是:存储所有 “the tame kangaroo” 的路径需要太多内存。相反,存储某些具有特殊性质(例如以一定数量的零开头)的值的子集,效果更好。于是算法会运行许多 “the tame kangaroo” 和 “wild kangaroo” 的过程,将特殊点存储在数据库中。 当“the tame kangaroo” 和 “wild kangaroo” 到达同一特殊点时,算法结束。
椭圆曲线。 该算法同样适用于 ECDLP 。 椭圆曲线的反转性让算法复杂度提高
6.3.2 未知 Diffie-Hellman 密钥指数的最高有效位
-
图 16:已知密钥指数的最低有效位,恢复 Diffie-Hellman 共享密钥
扩展 kangaroo 方法来求解指数的未知最高有效位很简单。 和之前一样,我们已知
6.3.3 开放问题:未知 Diffie-Hellman 密钥指数的多个块
-
图 17:使用密钥指数的多个未知位块,恢复 Diffie-Hellman 共享密钥。
在实际中,使用多个未知块恢复 Diffie-Hellman 密钥,仍然是一个开放问题。 理论上,在这种特殊情况下,可以使用离散对数问题的多维变体寻找密钥。 后者将一个区间中的离散对数问题推广到多个区间的情况,更多细节参见 [Rup10, Chapter 6]。 在 [Rup10] 中,Ruprai 分析了小维度的多维离散对数问题。 当维度大于 5 时,这种方法似乎会遇到多维伪随机过程的边界问题,这说明这种方法可能不会扩展到恢复 Diffie-Hellman 指数的多个未知块的情况。
7 总结
这篇文章总结了流行的公钥密码算法 已知其部分信息的密钥恢复方法。我们重点研究了使用最广泛的非对称算法:RSA、(EC)DSA 和 Diffie-Hellman。这些算法来自于各种侧信道攻击。
虽然在某些情况下,密钥恢复算法的存在可能会导致某个特定漏洞被利用,但是需要注意的是,不应该把这些利用密钥恢复攻击的有效方法,应用于指导对策。相反,实现应该努力为所有加密步骤,提供完全恒定的时间,以防止侧信道攻击。
译者总结
这篇文章的大部分精力都放在了通过格来恢复密钥的方法,格构造基本都是 Coppersmith 方法及它的多元扩展,也详细介绍了通过两种算法恢复密钥的方法。文章涵盖内容可以说是相当全面了,基本总结了当下常见的格攻击方式,不论是对于CTF中密码学的进阶学习,还是单纯的密码研究,都有很大的启发性,我本人也从这篇文章学到了许多知识,获取了一些做题、出题的灵感。
8 致谢
Pierrick Gaudry、Daniel Genkin 和 Yuval Yarom 对这项工作的早期版本做出了重大贡献。 同时我们感谢 Akira Takahashi 的帮助。 这项工作由美国国家科学基金会资助,资助号为:1513671 ,1651344。
参考文献
[ANT+20] | Diego F. Aranha, Felipe Rodrigues Novaes, Akira Takahashi, Mehdi Tibouchi, and Yuval Yarom. LadderLeak: Breaking ECDSA with less than one bit of nonce leakage. In Jay Ligatti, Xinming Ou, Jonathan Katz, and Giovanni Vigna, editors, ACM CCS 20, pages 225–242. ACM Press, November 2020. |
[AS08] | Onur Acii¸cmez and Werner Schindler. A vulnerability in RSA implementations due to instruction cache analysis and its demonstration on OpenSSL. In Tal Malkin, editor, CT-RSA 2008, volume 4964 of LNCS, pages 256–273. Springer, Heidelberg, April 2008. |
[ASK07] | Onur Acii¸cmez, Werner Schindler, and C¸ etin Kaya Ko¸c. Cache based remote timing attack on the AES. In Masayuki Abe, editor, CT-RSA 2007, volume 4377 of LNCS, pages 271–286. Springer, Heidelberg, February 2007. |
[BBG+17] | Daniel J. Bernstein, Joachim Breitner, Daniel Genkin, Leon Groot Bruinderink, Nadia Heninger, Tanja Lange, Christine van Vredendaal, and Yuval Yarom. Sliding right into disaster: Leftto-right sliding windows leak. In Wieland Fischer and Naofumi Homma, editors, CHES 2017, volume 10529 of LNCS, pages 555– 576. Springer, Heidelberg, September 2017. |
[BCC+13] | Daniel J. Bernstein, Yun-An Chang, Chen-Mou Cheng, Li-Ping Chou, Nadia Heninger, Tanja Lange, and Nicko van Someren. Factoring RSA keys from certified smart cards: Coppersmith in the wild. In Kazue Sako and Palash Sarkar, editors, ASIACRYPT 2013, Part II, volume 8270 of LNCS, pages 341–360. Springer, Heidelberg, December 2013. |
[Ber05] | Daniel J. Bernstein. Cache-timing attacks on AES, 2005. |
[Ble98] | Daniel Bleichenbacher. Chosen ciphertext attacks against protocols based on the RSA encryption standard PKCS #1. In Hugo Krawczyk, editor, CRYPTO’98, volume 1462 of LNCS, pages 1– 12. Springer, Heidelberg, August 1998. |
[BM03] | Johannes Bl¨omer and Alexander May. New partial key exposure attacks on RSA. In Dan Boneh, editor, CRYPTO 2003, volume 2729 of LNCS, pages 27–43. Springer, Heidelberg, August 2003. |
[Bon98] | Dan Boneh. The decision Diffie-Hellman problem. In Third Algorithmic Number Theory Symposium (ANTS), volume 1423 of LNCS. Springer, Heidelberg, 1998. Invited paper. |
[Boo51] | Andrew D. Booth. A signed binary mutiplication technique. Q. J. Mech. Appl. Math., 4(2):236–240, January 1951. |
[BR95] | Mihir Bellare and Phillip Rogaway. Optimal asymmetric encryption. In Alfredo De Santis, editor, EUROCRYPT’94, volume 950 of LNCS, pages 92–111. Springer, Heidelberg, May 1995. |
[BV96] | Dan Boneh and Ramarathnam Venkatesan. Hardness of computing the most significant bits of secret keys in Diffie-Hellman and related schemes. In Neal Koblitz, editor, CRYPTO’96, volume 1109 of LNCS, pages 129–142. Springer, Heidelberg, August 1996. |
[BvSY14] | Naomi Benger, Joop van de Pol, Nigel P. Smart, and Yuval Yarom. “ooh aah... just a little bit”: A small amount of side channel can go a long way. In Lejla Batina and Matthew Robshaw, editors, CHES 2014, volume 8731 of LNCS, pages 75–92. Springer, Heidelberg, September 2014. |
[Cop96] | Don Coppersmith. Finding a small root of a bivariate integer equation; factoring with high bits known. In Ueli M. Maurer, editor, EUROCRYPT’96, volume 1070 of LNCS, pages 178–189. Springer, Heidelberg, May 1996. |
[DDME+18] | Fergus Dall, Gabrielle De Micheli, Thomas Eisenbarth, Daniel Genkin, Nadia Heninger, Ahmad Moghimi, and Yuval Yarom. Cachequote: Efficiently recovering long-term secrets of sgx epid via cache attacks. IACR Transactions on Cryptographic Hardware and Embedded Systems, 2018(2):171–191, May 2018. |
[DH76] | Whitfield Diffie and Martin E. Hellman. New directions in cryptography. IEEE Trans. Information Theory, 22(6):644–654, 1976. |
[DHMP13] | Elke De Mulder, Michael Hutter, Mark E. Marson, and Peter Pearson. Using Bleichenbacher’s solution to the hidden number problem to attack nonce leaks in 384-bit ECDSA. In Guido Bertoni and Jean-S´ebastien Coron, editors, CHES 2013, volume 8086 of LNCS, pages 435–452. Springer, Heidelberg, August 2013. |
[DPP20] | Gabrielle De Micheli, R´emi Piau, and C´ecile Pierrot. A tale of three signatures: Practical attack of ECDSA with wNAF. In Abderrahmane Nitaj and Amr M. Youssef, editors, AFRICACRYPT 20, volume 12174 of LNCS, pages 361–381. Springer, Heidelberg, July 2020. |
[EG85] | Taher El Gamal. A public key cryptosystem and a signature scheme based on discrete logarithms. IEEE Trans. Information Theory, 31(4):469–472, 1985. |
[EL85] | Wim Van Eck and Neher Laborato. Electromagnetic radiation from video display units: An eavesdropping risk? Computers and Security, 4:269–286, 1985. |
[FH08] | J. Ferrigno and M. Hlavac. When AES blinks: Introducing optical side channel. Information Security, IET, 2:94 – 98, 10 2008. |
[FWC16] | Shuqin Fan, Wenbo Wang, and Qingfeng Cheng. Attacking OpenSSL implementation of ECDSA with a few signatures. In Edgar R. Weippl, Stefan Katzenbeisser, Christopher Kruegel, Andrew C. Myers, and Shai Halevi, editors, ACM CCS 2016, pages 1505–1515. ACM Press, October 2016. |
[Gar59] | Harvey L. Garner. The residue number system. IRE Trans. Electron. Computers, EC-8(2):140–147, Jun 1959. |
[Gor98] | Daniel M. Gordon. A survey of fast exponentiation methods. J. Algorithms, 27(1):129–146, April 1998. |
[GST14] | Daniel Genkin, Adi Shamir, and Eran Tromer. RSA key extraction via low-bandwidth acoustic cryptanalysis. In Juan A. Garay and Rosario Gennaro, editors, CRYPTO 2014, Part I, volume 8616 of LNCS, pages 444–461. Springer, Heidelberg, August 2014. |
[HG] | Nicholas A Howgrave-Graham. Computational Mathematics Inspired by RSA. PhD thesis |
[HG97] | Nicholas Howgrave-Graham. Finding small roots of univariate modular equations revisited. In Michael Darnell, editor, Crytography and Coding, pages 131–142, Berlin, Heidelberg, 1997. Springer Berlin Heidelberg. |
[HG01] | Nick Howgrave-Graham. Approximate integer common divisors. pages 51–66, 2001. |
[HM08] | Mathias Herrmann and Alexander May. Solving linear equations modulo divisors: On factoring given any bits. In Josef Pieprzyk, editor, ASIACRYPT 2008, volume 5350 of LNCS, pages 406–424. Springer, Heidelberg, December 2008. |
[HR07] | Martin Hlav´ac and Tom´as Rosa. Extended hidden number problem and its cryptanalytic applications. In Eli Biham and Amr M. Youssef, editors, SAC 2006, volume 4356 of LNCS, pages 114–133. Springer, Heidelberg, August 2007. |
[HS09] | Nadia Heninger and Hovav Shacham. Reconstructing RSA private keys from random key bits. In Shai Halevi, editor, CRYPTO 2009, volume 5677 of LNCS, pages 1–17. Springer, Heidelberg, August 2009. |
[HS14] | Michael Hutter and J¨orn-Marc Schmidt. The temperature side channel and heating fault attacks. Cryptology ePrint Archive, Report 2014/190, 2014. |
[HSH+08] | J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino, Ariel J. Feldman, Jacob Appelbaum, and Edward W. Felten. Lest we remember: Cold boot attacks on encryption keys. In Paul C. van Oorschot, editor, USENIX Security 2008, pages 45–60. USENIX Association, July / August 2008. |
[IGA+15] | Mehmet Sinan Inci, Berk G¨ulmezoglu, Gorka Irazoqui Apecechea, Thomas Eisenbarth, and Berk Sunar. Seriously, get off my cloud! cross-vm rsa key recovery in a public cloud. IACR Cryptology ePrint Archive, 2015:898, 2015. |
[KHF+19] | Paul Kocher, Jann Horn, Anders Fogh, Daniel Genkin, Daniel Gruss, Werner Haas, Mike Hamburg, Moritz Lipp, Stefan Mangard, Thomas Prescher, Michael Schwarz, and Yuval Yarom. Spectre attacks: Exploiting speculative execution. In 2019 IEEE Symposium on Security and Privacy, pages 1–19. IEEE Computer Society Press, May 2019. |
[KJJ99] | Paul C. Kocher, Joshua Jaffe, and Benjamin Jun. Differential power analysis. In Michael J. Wiener, editor, CRYPTO’99, volume 1666 of LNCS, pages 388–397. Springer, Heidelberg, August 1999. |
[KJJR11] | Paul Kocher, Joshua Jaffe, Benjamin Jun, and Pankaj Rohatgi. Introduction to differential power analysis. Journal of Cryptographic Engineering, 1(1):5–27, Apr 2011. |
[Koc96] | Paul C. Kocher. Timing attacks on implementations of DiffieHellman, RSA, DSS, and other systems. In Neal Koblitz, editor, CRYPTO’96, volume 1109 of LNCS, pages 104–113. Springer, Heidelberg, August 1996. |
[LLL82] | Arjen Klaas Lenstra, Hendrik Willem Lenstra, and L´aszl´o Lov´asz. Factoring polynomials with rational coefficients. Mathematische Annalen, 261(4):515–534, 1982. |
[LSG+18] | Moritz Lipp, Michael Schwarz, Daniel Gruss, Thomas Prescher, Werner Haas, Anders Fogh, Jann Horn, Stefan Mangard, Paul Kocher, Daniel Genkin, Yuval Yarom, and Mike Hamburg. Meltdown: Reading kernel memory from user space. In William Enck and Adrienne Porter Felt, editors, USENIX Security 2018, pages 973–990. USENIX Association, August 2018. |
[May10] | Alexander May. Using LLL-reduction for solving RSA and factorization problems. ISC, pages 315–348. Springer, Heidelberg, 2010. |
[MBA+20] | Robert Merget, Marcus Brinkmann, Nimrod Aviram, Juraj Somorovsky, Johannes Mittmann, and J org Schwenk. Raccoon attack: Finding and exploiting most-significant-bit-oracles in tlsdh(e). 2020. |
[Möl03] | Bodo Möller. Improved techniques for fast exponentiation. In Pil Joong Lee and Chae Hoon Lim, editors, ICISC 02, volume 2587 of LNCS, pages 298–312. Springer, Heidelberg, November 2003. |
[MVH+20] | Daniel Moghimi, Jo Van Bulck, Nadia Heninger, Frank Piessens, and Berk Sunar. CopyCat: Controlled instruction-level attacks on enclaves. In Srdjan Capkun and Franziska Roesner, editors, USENIX Security 2020, pages 469–486. USENIX Association, August 2020. |
[NIS13] | National Institute of Standards and Technology. Digital Signature Standard (DSS), 2013. |
[NS02] | Phong Q. Nguyen and Igor E. Shparlinski. The insecurity of the Digital Signature Algorithm with partially known nonces. J. Cryptology, 15(3):151–176, 2002. |
[NS03] | Phong Q. Nguyen and Igor E. Shparlinski. The insecurity of the Elliptic Curve Digital Signature Algorithm with partially known nonces. Des. Codes Cryptography, 30(2):201–217, 2003. |
[NS06] | Phong Nguyen and Damien Stehl´e. LLL on the average. In Proceedings of the 7th International Conference on Algorithmic Number Theory, ANTS’06, pages 238–256, Berlin, Heidelberg, 2006. Springer-Verlag. |
[OST06] | Dag Arne Osvik, Adi Shamir, and Eran Tromer. Cache attacks and countermeasures: The case of AES. In David Pointcheval, editor, CT-RSA 2006, volume 3860 of LNCS, pages 1–20. Springer, Heidelberg, February 2006. |
[OW99] | Paul C. Oorschot and Michael J. Wiener. Parallel collision search with cryptanalytic applications. J. Cryptol., 12(1):1–28, January 1999. |
[Pag02] | D. Page. Theoretical use of cache memory as a cryptanalytic sidechannel. Cryptology ePrint Archive, Report 2002/169, 2002. |
[Per05] | Colin Percival. Cache missing for fun and profit. In BSDCon 2005, Ottawa, CA, 2005. |
[Pol78] | John M. Pollard. Monte Carlo methods for index computation mod p. Mathematics of Computation, 32:918–924, 1978. |
[PPS12] | Kenneth G. Paterson, Antigoni Polychroniadou, and Dale L. Sibborn. A coding-theoretic approach to recovering noisy RSA keys. In Xiaoyun Wang and Kazue Sako, editors, ASIACRYPT 2012, volume 7658 of LNCS, pages 386–403. Springer, Heidelberg, December 2012. |
[QS01] | Jean-Jacques Quisquater and David Samyde. Electromagnetic analysis (ema): Measures and counter-measures for smart cards. In Proceedings of the International Conference on Research in Smart Cards: Smart Card Programming and Security, E-SMART ’01, pages 200–210, London, UK, UK, 2001. Springer-Verlag. |
[Rup10] | Raminder Singh Ruprai. Improvements to the Gaudry-Schost Algorithm for Multidimensional discrete logarithm problems and Applications. PhD thesis, 2010. |
[Sch87] | Claus-Peter Schnorr. A hierarchy of polynomial time lattice basis reduction algorithms. Theoretical Computer Science, 53(2-3):201– 224, 1987. |
[Sch90] | Claus-Peter Schnorr. Efficient identification and signatures for smart cards. In Gilles Brassard, editor, CRYPTO’89, volume 435 of LNCS, pages 239–252. Springer, Heidelberg, August 1990. |
[SE94] | Claus-Peter Schnorr and M. Euchner. Lattice basis reduction: Improved practical algorithms and solving subset sum problems. Mathematical Programming, 66(2):181–199, 1994. |
[Tes00] | Edlyn Teske. On random walks for pollard’s rho method. Mathematics of Computation, 70:809–825, 2000. |
[TSS+03] | Yukiyasu Tsunoo, Teruo Saito, Tomoyasu Suzaki, Maki Shigeri, and Hiroshi Miyauchi. Cryptanalysis of DES implemented on computers with cache. In Colin D. Walter, C¸ etin Kaya Ko¸c, and Christof Paar, editors, CHES 2003, volume 2779 of LNCS, pages 62–76. Springer, Heidelberg, September 2003. |
[TTA18] | Akira Takahashi, Mehdi Tibouchi, and Masayuki Abe. New Bleichenbacher records: Fault attacks on qDSA signatures. IACR TCHES, 2018(3):331–371, 2018. |
[TTMH02] | Yukiyasu Tsunoo, Etsuko Tsujihara, Kazuhiko Minematsu, and Hiroshi Hiyauchi. Cryptanalysis of block ciphers implemented on computers with cache. In International Symposium on Information Theory and Its Applications, Xi’an, CN, October 2002. |
[YGH16] | Yuval Yarom, Daniel Genkin, and Nadia Heninger. CacheBleed: A timing attack on OpenSSL constant time RSA. In Benedikt Gierlichs and Axel Y. Poschmann, editors, CHES 2016, volume 9813 of LNCS, pages 346–367. Springer, Heidelberg, August 2016. |
Comments 2 条评论
博主 就爱要
First time here, wish you good!
博主 www.much.pw
This Domain Is Good!