44、蒙哥马利乘法的泄漏问题解析

蒙哥马利乘法的泄漏问题解析

1. 蒙哥马利乘法在指数运算中的应用

指数运算算法通常由一系列乘法组成。为了使用蒙哥马利乘法(MonPro)进行模幂运算,需要调整额外的 $R$ 幂次,并确保一次使用 MonPro 的输出满足后续使用 MonPro 时输入的边界条件。

若在指数运算中正常计算模积时,有 $Z = X×Y \mod M$,那么使用 MonPro 进行相应乘法时,通常选择 $Z = MonPro(X,Y,M,r,n)$。通过比较 $R$ 的幂次可知,$MonPro(X,Y,M,r,n) \equiv X×Y×R^{-1} \equiv XR×YR×R^{-1} \equiv X×Y×R \equiv Z×R \equiv Z \mod M$。所以,若将输入调整为 $M$ 剩余类,输出再从 $M$ 剩余类调整回来,就可以使用 MonPro 正确完成整个指数运算。

以平方 - 乘指数运算法为例,为确保所有操作数中 $R$ 的幂次正确,计算 $S = T^N \mod M$ 需要进行预处理和后处理:
- 预处理 :将 $T$ 转换为其 $M$ 剩余类,$T = MonPro(T,R^2 \mod M,M,r,n)$。
- 后处理 :将结果从 $M$ 剩余类转换回来,$S = MonPro(S,1,M,r,n)$。

预处理引入了一个 $R$ 因子,而后处理则移除了该因子。当在整个指数运算中使用 $MonPro(M)$ 或 $MonPro(R)$ 代替 MonPro 时,相应的预处理和后处理步骤也能正确引入和消除 $R$ 因子,只需将 MonPro 替换为 $MonPro(M)$ 或 $MonPro(R)$ 即可。

对于公钥密码学中典型的大指数 $N$,这两个额外的模乘运算与更简单乘法算法带来的优势相比,成本可忽略不计。不过,$R(2) \equiv R^2 \mod M$ 需要预先计算并存储。由于 $M$ 通常在多次指数运算中保持不变,因此这部分时间开销通常可以在模数的使用周期内分摊。

使用蒙哥马利模乘进行指数运算的另一个主要要求是,一次乘法的输出要满足后续乘法输入的前置条件。若全程使用 $MonPro(R)$,输入和输出都受 $R$ 限制;若全程使用 $MonPro(M)$,则需满足 $M < R$ 以确保“B”输入足够小,此时所有输入和输出都受 $M$ 限制。

若在指数运算算法中使用 MonPro,为使 MonPro 的所有输入和输出达到一个共同的边界 $B$,需要满足 $M + B^2R^{-1} \leq B$,即二次方程 $B^2R^{-1} - B + M$ 有实根,也就是 $4M < R$。可以通过选择足够大的 $R$ 值(即足够大的 $n$,其中 $R = r^n$)来实现这一点。然后可以选择任何介于两个根之间的边界 $B$,例如 $B = 2M$、$B = \frac{1}{2}R$ 或加权平均值 $B = 2\lambda M + \frac{1 - \lambda}{2}R$(其中 $0 \leq \lambda \leq 1$)。

对于三种模乘算法,上述边界条件对于指数运算的加密输入 $T$ 是合理的。对于 $MonPro(B)$,当边界 $B = M$ 或 $B = R$ 时,初始条件 $T < B$ 和 $R(2) < R$ 确保 $T < B$,使 $T$ 适合在后续指数运算中使用。此后,$MonPro(B)$ 的每个输入都受 $B$ 限制,其输出也受 $B$ 限制。对于 MonPro,初始条件 $T < M$ 和 $R(2) < R$ 确保对于可接受的边界 $B = 2M$ 有 $T < B$。因此,在三种情况下,预处理输入 $R(2)$ 都无需完全约简,$R$ 对其来说是足够的边界。

对于边界 $B = M$ 或 $R$ 的 $MonPro(B)$,以及边界 $B = 2M$ 或 $\frac{1}{2}R$ 的 MonPro,后处理模乘 1 的循环生成的输出 $S$ 满足 $S < M + BR^{-1} < M + 1$。因此,除了可能出现 $S = M$ 的情况外,三种算法都不需要进行最终减法来获得完全约简的输出。

然而,循环输出 $S = M$ 几乎不可能出现。对于 $MonPro(M)$,这与 $0 < S < M$ 和 $S \equiv 0 \mod M$ 的明显性质矛盾。当 $M$ 是无平方因子时,$S \equiv 0 \mod M$ 意味着 $T \equiv 0 \mod M$。在这种情况下,$0 \leq T < M$ 的前置条件迫使 $T = 0$。那么每个模乘的输出都是 0,确保 $S = 0$,因此不会出现 $S = M$ 的情况。所以,使用 MonPro 进行指数运算时,甚至不需要进行一次减法来获得完全约简的输出。否则,在非无平方因子的情况下使用 $MonPro(R)$ 或 MonPro 时,可能需要进行一次减法来获得完全约简的输出。

2. 空间和时间比较

比较使用三种模乘算法的指数运算方法的时间和空间要求:标准的 $MonPro(B)$(带有条件减法,边界 $B = M$ 或 $R$)和 MonPro(无减法,边界 $B = 2M$ 或 $\frac{1}{2}R$)。

数字表示的基数为 $r = 2^k$,其中 $k$ 是执行模乘运算的处理器中字的原生位长。典型的字长是 2 的小幂次,如 8 位、16 位、32 位和 64 位。RSA 的标准密钥长度通常是这些字长的倍数,如 1024 位、1536 位和 2048 位。椭圆曲线密码学中使用的许多标准素域 $F_p$ 也是如此。因此,为了以最小成本实现 $MonPro(B)$ 所需的 $M < R$ 性质,通常也满足 $R < 2M$,即 $R$ 是大于 $M$ 的最小 2 的幂次。所以,放弃最终减法并使用 MonPro 进行指数运算而不是 $MonPro(B)$,最初需要增加迭代次数 $n$(可能仅增加 1),以确保 $4M < R = r^n$。

在标准密钥和字长以及 $n$ 的最小选择下,$MonPro(B)$ 中包含 $C$ 的寄存器需要比 $M$ 多一位或一个字,因为循环输出值的大小可能达到 $M + B$(其中 $B = M$ 或 $R$)。将 $n$ 增加 1 以使 $4M < R$,并使用边界 $B = 2M$ 或 $\frac{1}{2}R$,生成的中间值也小于 $M + B$,但仍低于 $R$。所以,MonPro 指数运算在中间计算中不需要额外的字。实际上,它只需要比 $M$ 多两位来存储 $C$。因此,在完全基于字的实现中,MonPro 和 $MonPro(B)$ 指数运算的模乘循环具有相同的计算空间要求,并且当最高位字被缩减为只包含所需的位位置时,MonPro 只多使用一个寄存器位。

由于两者操作的字数相同,MonPro 和 $MonPro(B)$ 的单循环迭代之间不太可能存在时间差异。最高位的不完整字或等效的单个位不能比完整字处理得更快,因为时钟速度是根据最慢的字操作设置的。

所以,主要的时间和空间差异在于使用 $MonPro(B)$ 进行指数运算时的最终条件减法和使用 MonPro 时的额外循环迭代。抗泄漏的 $MonPro(B)$ 指数运算实现总是会执行减法,但需要一个额外的寄存器来保存减法前的 $C$ 值(被减数)以及减法后的 $C$ 值。另一方面,MonPro 的额外迭代比减法更复杂,可能需要更多时间。考虑到它们的相对复杂度,循环迭代最有可能花费与减法相同的时间或两倍的时间,因为时钟频率可能会被选择为使字级乘法累加和减法操作花费相同的时间。从理论上讲,减法本身可能相当于大约半个额外的循环迭代,而选择减法结果或其被减数相当于另半个循环迭代。这将使 MonPro 和 $MonPro(B)$ 花费的时间基本相同。

减法器本身可能需要大量额外的专用硬件,相关的数据操作可能需要额外的时间。此外,由于需要包含减法指令,代码大小会增加。如前文所述,MonPro 指数运算不需要最终减法,因此可能不需要额外的硬件和代码,尽管芯片上的其他加密操作可能需要它们。

虽然具体成本取决于实现方式,但上述讨论表明,使用带有条件减法的 $MonPro(B)$ 进行指数运算在硬件上比使用 MonPro 更昂贵,而时间要求基本相同。总之,使用 $4M < R$ 且无最终减法的 MonPro 进行指数运算是解决条件减法侧信道泄漏问题的一种经济高效且直接的解决方案。

3. 侧信道分析

20 世纪 90 年代,许多智能卡制造商面临的一个重大尴尬是,公开发现蒙哥马利算法的简单实现可能导致大量侧信道泄漏,使得在使用密钥不到 100 次的情况下就可以恢复私钥。主要问题源于 $MonPro(M)$ 和 $MonPro(R)$ 中的条件减法,由于密钥长度较长,该减法需要大量时钟周期才能完成,因此在任何电磁辐射(EMR)或功率轨迹中都非常明显。

如今,有许多有效的对策来防止此类泄漏,其中之一是使用 MonPro 进行指数运算,而不是 $MonPro(M)$ 或 $MonPro(R)$。另一种对策是稍微修改 $MonPro(M)$ 和 $MonPro(R)$,使减法始终执行。然后保留原始循环输出值 $C$,并根据新值的符号选择新值或旧值。通过这种方式,泄漏会大大减少。其他对策将在其他章节讨论,这里我们主要关注测量 $MonPro(M)$ 和 $MonPro(R)$ 的泄漏情况,并通过改变参数 $R$ 来尽量减少泄漏。

假设使用公共模数和私有指数的指数运算实现受到攻击,并且所有条件减法事件都可以通过侧信道清晰观察到。
- 第一种攻击情况 :当一次模乘中发生条件减法,而另一次中未发生时,这两次乘法的参数必然不同。假设攻击者可以选择目标设备上使用秘密密钥进行指数运算的输入,并且能够观察到各个条件减法。结合对公共模数和指数运算算法的了解,攻击者可以编写一个指数运算的软件模拟程序。当该程序使用相同的输入和正确猜测的秘密密钥时,将生成相同的条件减法序列。攻击者按照算法消耗密钥位的顺序猜测密钥位。每当侧信道泄漏中的条件减法与模拟程序中的不同时,攻击者就知道此时两次指数运算的操作数不同,从而知道自己猜测错误,需要回溯更改最近的猜测,可能需要调整几个先前的位。只要减法发生的概率不太接近 0 或 1,攻击者就有很大机会以这种方式恢复整个私钥。这种攻击利用了单次指数运算的泄漏,可应用于 RSA、ECC 以及其他基于指数运算的协议。明显的对策是在指数运算前对输入文本 $T$ 进行盲化处理。
- 第二种攻击情况 :在椭圆曲线密码学中,点加法和点加倍的经典公式差异很大,因此在侧信道轨迹中很容易区分它们。使用像平方 - 乘这样的算法时,很容易读取加法和加倍的模式并推断出秘密密钥。一种对策是使用“统一”公式进行加倍和加法,使两种情况下执行相同的域操作序列。然而,对于点加倍,某些操作对的参数相同,而对于点加法则不同。当使用 $MonPro(M)$ 或 $MonPro(R)$ 实现相关模运算时,条件减法行为的差异明确表示点加法,而相同的行为则更可能表示点加倍。由于 ECC 中的密钥较短,攻击者只需在较小的可能密钥搜索空间中进行计算,通常在计算上是可行的。这种攻击不需要攻击者能够选择指数运算的输入,但可能需要多次使用密钥,直到出现足够有利的指数运算。
- 第三种攻击情况 :一些侧信道攻击依赖于记录指数运算算法中不同点的条件减法频率,通过多次使用不同数据和相同未盲化(秘密)指数执行指数运算来实现。特别是,平方和乘法的减法频率不同。因此,多次使用 $MonPro(R)$(图 16.5)或 $MonPro(M)$ 的平方 - 乘算法、相同的秘密指数和随机输入数据 $T$,就可以推断出平方和乘法的序列,从而获得秘密密钥的位。

从这些攻击情况的总结可以看出,蒙哥马利模乘或约简的任何实现都不应允许最终条件减法的执行时间不恒定。唯一的例外是减法极其罕见的情况,这可能在某些参数选择下实际发生。否则,$MonPro(M)$ 和 $MonPro(R)$ 应始终执行减法,并根据情况选择原始值或更新后的值。

4. 条件减法频率分析

考虑一组使用公共模数 $M$ 执行 $MonPro(M)$ 的操作集合 $S$,目的是估计该集合可能产生的主要方式下条件减法的预期频率。然后可以利用条件减法的侧信道泄漏来推断集合 $S$ 最可能的产生原因。该集合可能代表使用相同未盲化密钥的多个不同指数运算中的相应操作,目标可能是确定这些操作是全为乘法还是全为平方。对于 $MonPro(R)$ 也可以得到类似结果,但由于其输入和输出具有非均匀分布,情况会复杂得多,因为输入和输出的范围大于 $M$,所以模 $M$ 的某些剩余类有多个代表。

例如,考虑 $M = 7$ 和 $R = 8$ 时所有 $MonPro(M)$ 乘法 $A×B \mod M$ 的集合。由于 $R^{-1} \equiv 1 \mod M$,输出 $C$ 满足 $C \equiv AB \mod M$。以 $ABR^{-1}$ 为下界,$MonPro$ 循环的输出如表 1 所示。条件减法的总体频率为 $\frac{5}{49}$。然而,对于平方 $A×A \mod M$,减法频率变为 $\frac{1}{7}$,略高一些。如果输入 $A$ 固定为 $A = 5$,则对于随机 $B$ 的减法概率上升到 $\frac{2}{7}$。不同的固定 $A$ 值会导致其他截然不同的概率。

需要考虑的集合 $S$ 主要有三种类型:
- 平方产生的集合 :例如 $A×A \mod M$ 形式的操作。
- 两个参数可独立取任意值的乘法产生的集合 :即 $A$ 和 $B$ 都可以独立地取模 $M$ 内的任意值。
- 一个参数在整个集合中保持相同值的乘法产生的集合 :例如固定 $A$ 值,$B$ 随机取值的 $A×B \mod M$ 操作。

还有其他感兴趣的集合未在此讨论。例如,单次 $m$ 元或滑动窗口从左到右指数运算中的所有乘法集合(除非 $m = 2$)与上述任何一种情况都不匹配,因为其中一个输入(如 $A$)取自仅包含 $\log_2 m$ 个不同乘数的集合,它既不是常数也不是均匀分布的。

为了推导集合 $S$ 中减法的频率,做出了几个合理的简化假设。这些假设在理论上往往很难证明,但其中一些与相关密码学所依赖的扩散特性密切相关:
- 假设 $\varphi(M) \approx M$ :“欧拉 phi”函数值接近 $M$ 意味着 $M$ 是少数几个大素数(不一定不同)的乘积,如 RSA 和 $F_p$ 的情况。$\varphi(M) \approx M$ 表明几乎每个数都与 $M$ 互质。假设 $MonPro$ 的输入 $A$ 与 $M$ 互质,则 $A$ 在模 $M$ 下有逆元。因此,如果另一个参数 $B$ 在模 $M$ 下均匀分布,那么输出 $C$ 也将均匀分布。所以,只要至少有一个输入均匀分布,就可以很好地近似认为输出也是均匀分布的。如果初始输入均匀分布,这种均匀性将通过指数运算中的每个 $MonPro$ 实例从输入传播到输出。由于格式和构造限制,指数运算的输入在实际中可能不均匀,但在指数运算过程中扩散非常迅速,因此除了可能的前一两个乘法操作外,可以假设输入是均匀分布的。
- 假设 $A$、$B$ 和 $Z$ 都独立且均匀分布 :设 $A$、$B$ 和 $Z$ 分别是对应于两个 $MonPro(M)$ 输入以及 $MonPro$ 循环输出 $C$ 在区间 $[ABr^{-n},M + ABr^{-n})$ 内变化的离散随机变量。设 $\pi_{mu}$ 是最终减法发生的概率,则 $\pi_{mu} = pr(Z + ABR^{-1} \geq M) = \frac{1}{M^3} \sum_{Z = 0}^{M - 1} \sum_{A = 0}^{M - 1} \sum_{B = 0}^{M - 1} (Z + ABR^{-1} \geq M) \approx \frac{1}{M^3} \sum_{A = 0}^{M - 1} \sum_{B = 0}^{M - 1} ABR^{-1} \approx \frac{1}{M^3} \int_{0}^{M} \int_{0}^{M} ABR^{-1} dA dB$(其中 $Z + ABR^{-1} \geq M$ 根据不等式的真假取值 0 或 1)。这些近似是由于使用实数代替整数,对于密码学大小的模数非常准确。所以,$\pi_{mu} \approx \frac{1}{4MR^{-1}}$。这是在上述假设下集合 $S$ 中乘法的减法概率。假设一组指数运算中的第 $i$ 个操作始终是乘法,并且指数运算的输入在模 $M$ 下均匀分布,那么当 $S$ 是对应的 $MonPro(M)$ 实例集合时,$\pi_{mu}$ 就是减法的概率。

现在设 $\pi_{sq}$ 是使用 $MonPro(M)$ 对均匀分布的输入进行平方时最终减法发生的概率。对于与上述相同的定义,假设……(原文此处未给出后续内容)

表 1:模乘表($M = 7$,$R = 8$ 时 $MonPro(A,B)$ 的未约简输出,加粗的五个条目需要约简)
| | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| — | — | — | — | — | — | — | — |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 2 | 4 | 6 | 1 | 3 | 5 |
| 2 | 0 | 3 | 6 | 2 | 5 | 8 | 4 |
| 3 | 0 | 4 | 1 | 5 | 2 | 6 | 3 |
| 4 | 0 | 5 | 3 | 8 | 6 | 4 | 9 |
| 5 | 0 | 6 | 5 | 4 | 3 | 9 | 8 |
| 6 | | | | | | | |

蒙哥马利乘法的泄漏问题解析

5. 条件减法频率的深入分析

前面提到了在一些假设下集合 $S$ 中乘法的减法概率 $\pi_{mu} \approx \frac{1}{4MR^{-1}}$ 。现在继续深入探讨使用 $MonPro(M)$ 对均匀分布的输入进行平方时最终减法发生的概率 $\pi_{sq}$ 。

设 $A$ 是均匀分布在 $[0,M - 1]$ 上的随机变量,当进行平方运算 $A\times A$ 时,$MonPro(M)$ 循环输出 $C$ 满足一定的范围。根据之前对 $A$、$B$ 和 $Z$ 独立且均匀分布的假设,以及 $\varphi(M) \approx M$ 的假设来推导 $\pi_{sq}$ 。

虽然具体推导过程会比乘法情况更复杂一些,但同样基于对输出范围和边界条件的分析。在平方运算中,由于输入具有自相关性(即两个输入都是 $A$ ),使得输出的分布情况有所不同。

假设 $C$ 是 $MonPro(M)$ 平方运算的输出,我们要确定 $C$ 满足 $C\geq M$ 的概率。通过对随机变量 $A$ 的取值分析,利用积分(在近似处理时)或者求和(精确计算时)的方法来得到 $\pi_{sq}$ 的表达式。

与乘法情况不同,平方运算中输出的分布更集中于某些区域,这会影响到减法发生的概率。一般来说,$\pi_{sq}$ 的值会与 $\pi_{mu}$ 有所不同。例如在前面 $M = 7$,$R = 8$ 的例子中,乘法的减法频率为 $\frac{5}{49}$ ,而平方的减法频率为 $\frac{1}{7}$ ,这体现了两者之间的差异。

6. 不同类型集合对条件减法频率的影响

前面介绍了集合 $S$ 的三种主要类型,下面详细分析它们对条件减法频率的具体影响。

  • 平方产生的集合 :在平方运算中,由于输入的自相关性,输出的分布相对集中。例如,对于较小的 $A$ 值,$A\times A$ 的结果增长相对较慢,但当 $A$ 接近 $M$ 时,$A\times A$ 可能会快速超过 $M$ 。这就导致在某些情况下,平方运算的条件减法频率相对较高。如前面例子中,$M = 7$,$R = 8$ 时平方的减法频率为 $\frac{1}{7}$ ,高于整体乘法的 $\frac{5}{49}$ 。
  • 两个参数可独立取任意值的乘法产生的集合 :当 $A$ 和 $B$ 都独立地在 $[0,M - 1]$ 上取值时,输出的分布更加分散。因为 $A$ 和 $B$ 的组合情况更多,使得输出在整个范围 $[0,M + ABr^{-n})$ 内分布相对均匀。根据前面推导的 $\pi_{mu} \approx \frac{1}{4MR^{-1}}$ ,这种情况下减法频率相对较低且与 $M$ 和 $R$ 有关。
  • 一个参数在整个集合中保持相同值的乘法产生的集合 :当固定一个输入(如 $A$ ),另一个输入 $B$ 随机取值时,输出的分布取决于固定值 $A$ 的大小。如果 $A$ 较小,那么对于大多数 $B$ 值,$A\times B$ 的结果可能不会超过 $M$ ,减法频率较低;如果 $A$ 较大,那么 $A\times B$ 超过 $M$ 的可能性增加,减法频率升高。例如在 $M = 7$,$R = 8$ ,$A = 5$ 时,随机 $B$ 的减法概率上升到 $\frac{2}{7}$ 。
7. 侧信道攻击的应对策略总结

从前面的侧信道分析可知,蒙哥马利乘法的条件减法可能会导致严重的侧信道泄漏问题,从而威胁到私钥的安全。下面总结几种有效的应对策略:

  • 使用 MonPro 进行指数运算 :如前面空间和时间比较部分所述,使用 $4M < R$ 且无最终减法的 MonPro 进行指数运算是一种经济高效且直接的解决方案。它避免了条件减法带来的侧信道泄漏问题,同时在时间和空间上与 $MonPro(B)$ 相比具有一定优势。
  • 修改 $MonPro(M)$ 和 $MonPro(R)$ :将减法始终执行,然后根据新值的符号选择原始值或更新后的值。这样可以减少泄漏,因为无论最终是否需要减法,操作的时间和行为都保持一致,攻击者难以从侧信道中获取有用信息。
  • 输入盲化 :在指数运算前对输入文本 $T$ 进行盲化处理。通过引入随机因素,使得每次指数运算的输入看起来不同,即使攻击者能够观察到条件减法事件,也无法根据这些事件推断出私钥的信息。
  • 使用统一公式 :在椭圆曲线密码学中,使用“统一”公式进行点加倍和点加法,使两种情况下执行相同的域操作序列。这样可以减少因操作差异在侧信道轨迹中暴露的信息,增加攻击者推断秘密密钥的难度。
8. 不同模乘算法的综合比较

为了更清晰地展示三种模乘算法($MonPro(B)$、$MonPro(M)$、$MonPro(R)$ 和 MonPro)在不同方面的特点,下面以表格形式进行综合比较:

算法 条件减法 输入输出边界 空间要求 时间要求 侧信道泄漏风险
$MonPro(B)$($B = M$ 或 $R$) 输入输出受 $B$ 限制 可能需要比 $M$ 多一位或一个字存储 $C$ 与 MonPro 基本相同,但减法可能需额外硬件和时间 高,条件减法易被观察
$MonPro(M)$ 输入输出受 $M$ 限制 与 $MonPro(B)$ 类似 与 MonPro 基本相同,但减法有额外开销 高,条件减法易导致泄漏
$MonPro(R)$ 输入输出受 $R$ 限制 与 $MonPro(B)$ 类似 与 MonPro 基本相同,但减法有额外开销 高,条件减法易导致泄漏
MonPro($4M < R$ 且无最终减法) 输入输出可根据 $B$ 调整(如 $B = 2M$ 或 $\frac{1}{2}R$) 只比 $M$ 多两位存储 $C$ 与 $MonPro(B)$ 基本相同 低,避免了条件减法泄漏

从这个表格可以看出,MonPro 在侧信道泄漏风险方面具有明显优势,同时在空间和时间要求上与其他算法相当。因此,在对安全性要求较高的场景中,MonPro 是一个更合适的选择。

9. 总结与展望

通过对蒙哥马利乘法在指数运算中的应用、空间和时间比较、侧信道分析以及条件减法频率的研究,我们深入了解了蒙哥马利乘法的特点和潜在的安全问题。

蒙哥马利乘法在密码学中具有重要地位,但条件减法带来的侧信道泄漏问题不容忽视。通过合理选择算法(如使用 MonPro)、采取有效的应对策略(如输入盲化、修改算法等),可以在保证计算效率的同时提高系统的安全性。

未来,随着密码学技术的不断发展,对于蒙哥马利乘法的研究可能会更加深入。例如,探索更优化的参数选择方法,进一步降低条件减法的频率;研究新的侧信道攻击方式和相应的防御策略,以应对日益复杂的安全威胁。同时,结合新的硬件技术和计算架构,提高蒙哥马利乘法的计算效率和安全性,使其在更多领域得到应用。

总之,蒙哥马利乘法的研究和应用是一个持续发展的过程,需要不断地探索和创新,以保障密码系统的安全和稳定。

下面是一个简单的 mermaid 流程图,展示使用 MonPro 进行指数运算的主要流程:

graph TD;
    A[输入 T, N, M, r, n, R(2)] --> B[预处理: T = MonPro(T, R^2 mod M, M, r, n)];
    B --> C[S = T];
    C --> D{i = k - 2 到 0 循环};
    D --> E[S = MonPro(S, S, M, r, n)];
    E --> F{ni = 1?};
    F -- 是 --> G[S = MonPro(S, T, M, r, n)];
    F -- 否 --> E;
    G --> D;
    D -- 循环结束 --> H[后处理: S = MonPro(S, 1, M, r, n)];
    H --> I[输出 S];

这个流程图清晰地展示了使用 MonPro 进行指数运算的步骤,包括预处理、循环计算和后处理,有助于理解整个过程。

源码地址: https://pan.quark.cn/s/d1f41682e390 miyoubiAuto 米游社每日米游币自动化Python脚本(务必使用Python3) 8更新:更换cookie的获取地址 注意:禁止在B站、贴吧、或各大论坛大肆传播! 作者已退游,项目不维护了。 如果有能力的可以pr修复。 小引一波 推荐关注几个非常可爱有趣的女孩! 欢迎B站搜索: @嘉然今天吃什么 @向晚大魔王 @乃琳Queen @贝拉kira 第三方库 食用方法 下载源码 在Global.py中设置米游社Cookie 运行myb.py 本地第一次运行时会自动生产一个文件储存cookie,请勿删除 当前仅支持单个账号! 获取Cookie方法 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 按刷新页面,按下图复制 Cookie: How to get mys cookie 当触发时,可尝试按关闭,然后再次刷新页面,最后复制 Cookie。 也可以使用另一种方法: 复制代码 浏览器无痕模式打开 http://user.mihoyo.com/ ,登录账号 按,打开,找到并点击 控制台粘贴代码并运行,获得类似的输出信息 部分即为所需复制的 Cookie,点击确定复制 部署方法--腾讯云函数版(推荐! ) 下载项目源码和压缩包 进入项目文件夹打开命令行执行以下命令 xxxxxxx为通过上面方式或取得米游社cookie 一定要用双引号包裹!! 例如: png 复制返回内容(包括括号) 例如: QQ截图20210505031552.png 登录腾讯云函数官网 选择函数服务-新建-自定义创建 函数名称随意-地区随意-运行环境Python3....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值