关联阅读:One&Done:针对OpenSSL的恒定时间盲RSA的基于单解密EM的攻击(上)
3提出的攻击方法
3.4滑动窗口实现中的指数位恢复大整数幂(图2)的滑动窗口实现有三个Montgomery乘法被称为:我们在第26行标记为S的窗口内的平方,在第29行标记为lU的结果的更新,以及在第7行标记为Z的零值窗口的平方。这些控制流的可能性包括从平方到另一个平方(我们称之为S—S)。这个转变非常简短(它只涉及到第25行的循环)。其他转换是S-U,它消耗更多的时间,因为它执行CT[WVAL]计算;U-Z,它涉及执行第31行、第3行、第4行(其中检查了一些指数),最后在第7行输入蒙哥马利乘法;U-S,包括执行第31行、第3行、第4行、第11行和第12行,以及在第14-23行、第25行和最后在第26行进入蒙哥马利乘法的整个窗口扫描循环;Z-Z,在第7行之后,执行再次进行到第8行、第9行、第3行、第4行和第7行;Z-S,在第7行之后,执行进行到第8、9、3、4行,然后到第11和12行,循环在第14-23行,然后是第25行,最后是第26行;U-X,在第29行的蒙哥马利乘法之后,执行进行到第31行,然后在第3行退出循环;最后是S-X,在第7行的蒙哥马利乘法之后,执行进行到第8行和第9行,然后在第3行退出循环。就像在固定窗口实现中一样,我们对秘密指数的恢复开始于确定哪些片段属于这些控制流可能性中的哪些。虽然在第3.3节中,这只是为了纠正丢失的片段,但是在滑动窗口实现中,窗口大小根据在指数中遇到的位值而变化,因此,区分控制流的可能性对于正确地将恢复的比特分配到指数中的比特位置至关重要,即使没有丢失片段。此外,许多指数位可以完全基于这些控制流可能性的序列来恢复。我们区别控制流可能性的总体方法与第3.3节相似,只是这里有更多的控制流可能性,并且U-S和Z-S粗粒度的可能性在片段中都具有多个控制流的可能性:对于窗口考虑的每个位,行19确定是否执行行20和21。然而,在U-S可能发生的序列中,唯一的选择是U-Z,它短得多,因此很容易区分。类似地,Z-S的唯一替代是ZZ的短得多,所以它们也容易区分开来。通过对代码片段进行分类,根据它们属于哪个控制低可能性(其中U-S和U-Z都被当作一种可能性),并且通过知道它们必须遵循的规则,我们可以从丢失的代码片段中恢复,更重要的是,使用类似于[10]中的规则来恢复秘密指数中的许多位。然而,与(10)中的工作相比,只能区分平方(线7)或线26,即,序列符号中的S或Z)以及使用每个Montgomery乘法内的内存访问模式(实现平方和更新)的更新(序列符号中的line29,U),我们的方法使用这些蒙哥马利乘法之间的信号片段来恢复更详细的信息,例如,对于每个平方,我们恢复的序列指示它是S还是Z,这简化了恢复指数位的规则,并且允许我们从中提取更多。具体地,在计算窗口值wval的U-S或Z-S之后,可以通过计算在遇到S-U之前发生的S-S事件来获得窗口中的位数。例如,考虑序列U-S、S-S、S-U、U-Z、Z-Z、Z-Z、Z-S。然后,S-S的两次出现表示该窗口的两个额外平方,S-U表示仅执行这三个平方,因此窗口只有3位。然后Z-Z的两次出现表示另外两个0值位(我们已经推导出其中的一个),最后Z-S表示新的非零窗口开始,即下一位是1。总的来说,在这个序列中检查的七位中,六是完全基于序列恢复的。注意,其中的两个位(窗口之后的两个零)被冗余地恢复,并且这个冗余帮助我们纠正错误,例如丢失片段或未分类片段。一般来说,这种基于序列的分析恢复了窗口和两个窗口之间的所有零。在我们的实验中,当单独使用wmax=5时,该分析平均回收秘密指数位的68%,并且使用wmax=6(另一个常用的wmax值),单独使用该分析平均回收指数位的55%。这些恢复速率比方更新序列单独启用的[10]稍高,但是请记住,在我们的方法中,序列恢复只是为我们分析单个信号片段内指数位相关的变化做准备。由于尚未恢复的唯一位是每个窗口的“内部”(不是第一个也不是最后一个)位,并且由于U-S和Z-S片段是检查这些内部位的唯一片段,因此我们进一步的分析仅