首页 > 编程语言 >Pohlig-Hellman算法

Pohlig-Hellman算法

时间:2024-12-04 22:32:39浏览次数:5  
标签:Hellman log cdot bmod sqrt Pohlig 算法 对数

Pohlig-Hellman算法——用中国剩余定理考虑离散对数问题

除了作为定理和算法外,建议读者将中国剩余定理看作一种思维方式。如果 $ m = m_1 \cdot m_2 \cdot \cdots \cdot m_t $ 是一组两两互质的整数的乘积,那么中国剩余定理告诉我们,求解关于 $ m $ 的方程实际上等价于分别求解关于 $ m_i $ 的方程,然后将这些解结合起来得到关于 $ m $ 的解。

在离散对数问题(DLP)中,我们需要求解方程

\[g^x \equiv h \pmod{p}. \]

在这个问题中,模数 $ p $ 是素数,中国剩余定理似乎与问题无关。然而,回想一下,解 $ x $ 仅在模 $ p-1 $ 下确定,因此我们可以将解看作是位于 $ \mathbb{Z}/(p-1)\mathbb{Z} $ 中。这暗示着 $ p-1 $ 的质因数分解可能在确定离散对数问题在 $ \mathbb{F}_p^* $ 中的难度上起到作用。

比如,如果 \(p-1\) 的质因数分解为不同素数的一次幂的乘积,这个时候利用中国剩余定理可以把求解 \(x(\bmod p-1)\) 转化为去求解一个模数均为素数的一次模同余方程组。解一次模同余方程自然是要比解高次模同余方程简单。

更一般地说,如果 $ G $ 是一个群,且 $ g \in G $ 是一个阶为 $ N $ 的元素,那么方程 $ g^x = h $ 在 $ G $ 中的解仅在模 $ N $ 下确定,因此从中国剩余定理的观点看, $ N $ 的质因数分解会影响离散对数问题求解的难度。这个想法正是Pohlig-Hellman算法的核心。

我们将对于任意群 $ G $ 进行陈述和证明。但是,如果你更习惯于处理模 $ p $ 下的整数问题,你可以直接将 $ G $ 替换为 $ \mathbb{F}_p^* $。

引理 1 使用扩展欧几里得算法求解 \(gcd(a,b)(a>b\geq 1)\) 的时间复杂度为 \(O(\log b)\)

证明 (若 \(a<b\) 我们只需多做一次模运算, 若 \(b=0\) 或 \(a=b\) 模运算的次数分别为 \(0\) 和 \(1\) ), 构造数列 \(\left\{u_n\right\}: u_0=a, u_1=b, u_k=u_{k-2} \bmod u_{k-1}(k\geq2)\), 显然, 若算法在第 \(n\) 次模运算时终止, 则有 \(u_n=\operatorname{gcd}(a, b), u_{n+1}=0\). 我们比较数列 \(\left\{u_n\right\}\) 和菲波那契数列 \(\left\{F_n\right\}, F_0=1\leq u_n, F_1=1\leq u_{n-1}\), 又因为由 \(u_k \bmod u_{k+1}=u_{k+2}\), 可得 \(u_k\geq u_{k+1}+u_{k+2}\), 则 \(F_2=F_0+F_1\leq u_n+u_{n-1}\leq u_{n-2}\)由数学归纳法容易得到 \(F_{k}\leq u_{n-k}(\forall 0\leq k \leq n)\), 于是得到 \(a=u_0 \geq F_n, b=u_1 \geq F_{n-1}\). 也就是说如果欧几里得算法需要做 \(n\) 次模运算, 则 \(b\) 不小于 \(\mathrm{F}_{n-1}\). 换句话说, 若 \(b<F_{n-1}\), 则算法所需模运算的次数必定小于 \(n\). 所以模运算的次数为 \(O(\log b)\).

注:\(F_n=\frac{1}{\sqrt{5}}\left(\phi^n-(1-\phi)^n\right) \approx \frac{\phi^n}{\sqrt{5}}\) 其中: \(\phi=\frac{1+\sqrt{5}}{2}\) 是黄金分割率(约为 1.61803)。

换句话说,把扩展欧几里得算法的每一步结果从 \(\gcd (a,b)\) 开始倒过来看,增长速度大于斐波那契数列。

推论:使用扩展欧几里得算法实现中国剩余定理的求解的时间复杂度为 \(O(\log N)\),其中 \(N\) 为所有两两互素的模数的乘积。

定理 2(Pohlig–Hellman 算法)

设 $ G $ 是一个群,假设我们有一个算法可以解决 $ G $ 中任何阶为素数的幂次的元素的离散对数问题。具体来说,若 $ g \in G $ 的阶为 $ q^e $,我们假设能够在 $ O(S_{q^e}) $ 步内求解 $ g^x = h $ 的离散对数问题,其中 $ S_{q^e} $ 是与 $ q^e $ 相关的某个函数。

由定理 \(5\),\(S_{q^e}\) 可以取到 \(O(q^{e/2}\log q^e)\approx O(q^{e/2})\)

现在,设 $ g \in G $ 是阶为 $ N $ 的元素,并假设 $ N $ 可以分解为素数幂的积形式:

\[N = q_1^{e_1} \cdot q_2^{e_2} \cdot \cdots \cdot q_t^{e_t}. \]

那么,离散对数问题 $ g^x = h $ 可以在

\[O\left( \sum_{i=1}^{t} S_{q_i^{e_i}} + \log N \right) \text{ 步内解决。} \]

证明
由中国剩余定理,

\[x(\bmod N)\Leftrightarrow \begin{cases} x(\bmod q_1^{e_1})\\ x(\bmod q_2^{e_2})\\ \cdots ~\cdots\\ x(\bmod q_t^{e_t})\\ \end{cases} \]

现在的问题是

\[x(\bmod N)\Leftrightarrow \begin{cases} x\equiv (?)(\bmod q_1^{e_1})\\ x\equiv (?)(\bmod q_2^{e_2})\\ \cdots ~\cdots\\ x\equiv (?)(\bmod q_t^{e_t})\\ \end{cases} \]

我们要在 \(()\) 中填入一些具体的元素,使得我们可以再次使用中国剩余定理对右边的方程组进行具体的求解。
这时需要利用定理所给的条件————“假设我们有一个算法可以解决 $ G $ 中任何阶为素数的幂次的元素的离散对数问题”来构造 \(()\) 中的具体的元素。

设 \(x\equiv y_i(\bmod q_i^{e_i})\),令 \(g_i=g^{N/q_i^{e_i}}\),\(h_i=h^{N/q_i^{e_i}}\),现考虑离散对数问题 \(g_i^y=h_i\) 的解,记作 \(y_i\)。

则易知 \(y_i\) 是模 \(q_i^{e_i}\) 定义的,而恰好 \(x(\bmod q_i^{e_i})\) 也是模 \(q_i^{e_i}\) 定义的。将 \(x\) 代入方程 \(g_i^y=h_i(\forall 1\leq i\leq t)\) 发现 \(x\) 确实是解。于是 \(x \equiv y_i(\bmod q_i^{e_i})\).
因此

\[x(\bmod N)\Leftrightarrow \begin{cases} x\equiv y_1(\bmod q_1^{e_1})\\ x\equiv y_2(\bmod q_2^{e_2})\\ \cdots ~\cdots\\ x\equiv y_t(\bmod q_t^{e_t})\\ \end{cases} \]

此时再对右边使用中国剩余定理即可求得 \(x(\bmod N)\).

对上述进行归纳可得算法步骤:

  1. 对于每个 $ 1 \leq i \leq t $,计算 $ g_i $ 和 $ h_i $:

    \[g_i = g^{N/q_i^{e_i}} \quad \text{和} \quad h_i = h^{N/q_i^{e_i}}. \]

    注意到 $ g_i $ 的阶为 $ q_i^{e_i} $,因此我们可以使用给定的算法求解离散对数问题:

    \[g_i^{y} = h_i. \]

    令 $ y_i $ 为该方程的解。

  2. 使用中国剩余定理解以下同余方程组:

    \[x \equiv y_1 \pmod{q_1^{e_1}}, \quad x \equiv y_2 \pmod{q_2^{e_2}}, \quad \dots, \quad x \equiv y_t \pmod{q_t^{e_t}}. \quad (2.15) \]

该过程的运行时间是显而易见的。步骤 \(1\) 对每个 $ i $ 需要 $ O(S_{q_i^{e_i}}) $ 步,步骤 \(2\) 使用中国剩余定理需要 $ O(\log N) $ 步。在实际应用中,中国余数定理的计算通常与离散对数计算相比可以忽略不计。\(\square\)

引理 3(模运算的复杂度)

模运算(取模运算)的时间复杂度取决于我们如何执行该操作以及操作数的大小。模运算的基本形式是:

\[a \mod m \]

其中 $ a $ 是被除数,$ m $ 是模数,要求计算 $ a $ 除以 $ m $ 的余数。

  1. 传统的除法方法:

    • 模运算本质上是计算整数除法后的余数: $ a \div m $ 然后取余。
    • 在计算机中,整数除法的时间复杂度通常是与被除数的位数(或大小)成正比的。
    • 对于 $ a $ 和 $ m $ 都是 $ k $ 位数的整数,传统除法方法的时间复杂度是 $ O(k^2) $,即 $ O(\log^2 a) $,其中 $ a $ 是被除数, $ k $ 是 $ a $ 和 $ m $ 的二进制位数。
  2. 高效的除法算法:

    • 对于大数模运算,某些优化算法如快速模乘法(Fast Modular Multiplication)可以将除法和模运算的复杂度降低到 $ O(k \log k) $。
    • 在现代计算中,许多情况下会使用更高效的数值算法,比如基于蒙哥马利算法(Montgomery multiplication)或卡拉比-卡拉法(Karatsuba)乘法的优化算法,这些算法能在多项式时间内高效计算大数的模。
  3. 模幂运算的时间复杂度:

对在许多加密算法(如RSA加密)中,常常需要计算模幂运算,即计算:

\[a^b \mod m \]

这种运算的时间复杂度与幂的大小和模数有关,通常使用快速幂算法来实现。

  • 快速幂算法的时间复杂度是 $ O(\log b) $,其中 $ b $ 是指数。因为快速幂算法通过二分法分解指数 $ b $,使得计算复杂度大大减少。每一轮操作都是对指数进行二分,最终使得运算次数为 $ \log b \(。 \)\square$

引理 4 (离散对数问题复杂度的平凡上界)

设 $ G $ 是一个群,$ g \in G $ 是阶为 $ N $ 的元素,那么离散对数问题

\[g^x = h \tag{2.2} \]

可以在 $ O(N) $ 步内解决。\(\square\)

如果我们在 $ F_p^* $ 中工作,那么每次计算 $ g^x \mod p $ 需要 $ O((\log p)^k) $ 次计算操作,其中常数 $ k $ 和隐含的大 $ O $ 常数依赖于计算机和用于模乘的算法。因此,总的计算步骤数,或称运行时间,是 $ O(N(\log p)^k) \(。通常,\) O((\log p)^k) $ 所贡献的因子可以忽略不计,因此我们将其省略,直接称运行时间为 $ O(N) $。

我们将介绍 Shanks 提出的离散对数算法,这是一个碰撞算法。碰撞算法的运行时间略大于 $ O(\sqrt{N}) $ 步,这在 $ N $ 较大时,相较于 $ O(N) $ 是一个巨大的节省。

碰撞算法(Collision Algorithm)是指在密码学中,试图找到两个不同的输入数据,它们经过某个哈希函数处理后产生相同的哈希值的算法。简单来说,碰撞就是两个不同的输入“碰撞”到同一个输出。

定理 5 (Shanks 的小步–大步算法):

设 $ G $ 是一个群,且 $ g \in G $ 是阶为 $ N \geq 2 $ 的元素。以下算法在 $ O(\sqrt{N} \cdot \log N) $ 步内解决离散对数问题 $ g^x = h $。

  1. 令 $ n = 1 + \lfloor \sqrt{N} \rfloor \(,特别地,\) n > \sqrt{N} $。
  2. 创建两个列表:
    • 列表 \(1\):$ e, g, g^2, g^3, \dots, g^n $
    • 列表 \(2\):$ h, h \cdot g^{-n}, h \cdot g^{-2n}, h \cdot g^{-3n}, \dots, h \cdot g{-n2} $
  3. 查找两个列表之间的匹配项,假设为 $ g^i = h \cdot g^{-jn} $。
  4. 则 $ x = i + jn $ 是 $ g^x = h $ 的解。

证明
我们首先做一些观察。首先,在创建列表 \(2\) 时,我们首先计算 $ u = g^{-n} $,然后通过计算 $ h, h \cdot u, h \cdot u^2, \dots, h \cdot u^n $ 来构建列表 \(2\)。所以,创建两个列表大约需要 $ 2n $ 次乘法运算。其次,假设存在匹配项,我们可以通过标准的查找算法,在 $ O(n\log n) $ 步内找到匹配项,因此第 3 步需要 $ O(n\log n) $ 步。因此,整个算法的总运行时间为 $ O(n \log n) = O(\sqrt{N} \log N) $。在这最后一步,我们使用了 $ n \approx \sqrt{N} $ 的事实,因此有

\[n \log n \approx \sqrt{N} \log \sqrt{N} = \frac{1}{2} \sqrt{N} \log N \]

为了证明该算法有效,我们必须证明列表 \(1\) 和列表 \(2\) 总是有一个匹配项。为此,假设 $ x $ 是离散对数问题 $ g^x = h $ 的解,并将 $ x $ 表示为

\[x = nq + r \quad \text{其中} \ 0 \leq r < n \]

我们知道 $ 1 \leq x < N $,因此

\[q = \frac{x - r}{n} < \frac{N}{n} < n \quad \text{因为} \ n > \sqrt{N} \]

因此我们可以将方程 $ g^x = h $ 重写为

\[g^r = h \cdot g^{-qn} \quad \text{其中} \ 0 \leq r < n \text{ 且 } 0 \leq q < n \]

因此,$ g^r $ 在列表 \(1\) 中,且 $ h \cdot g^{-qn} $ 在列表 \(2\) 中,这表明列表 \(1\) 和列表 \(2\) 有一个共同元素。

标签:Hellman,log,cdot,bmod,sqrt,Pohlig,算法,对数
From: https://www.cnblogs.com/Pizixsir-Math/p/18577865

相关文章

  • [C#] 对24位图像进行水平翻转(FlipX)的跨平台SIMD硬件加速向量算法(使用YShuffleX3Kern
    在上一篇文章里,给大家讲解了32位图像水平翻转(FlipX)算法,于是本文来探讨更加复杂的24位图像水平翻转算法。本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在X86(Sse、Avx等指令集)及Arm(AdvSimd等指令集)等架构上运行,且均享有SIMD硬件加速。一、标......
  • [C#] 对24位图像进行水平翻转(FlipX)的跨平台SIMD硬件加速向量算法(使用YShuffleX3Kern
    在上一篇文章里,给大家讲解了32位图像水平翻转(FlipX)算法,于是本文来探讨更加复杂的24位图像水平翻转算法。本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在X86(Sse、Avx等指令集)及Arm(AdvSimd等指令集)等架构上运行,且均享有SIMD硬件加速。一、标......
  • [C#] 对24位图像进行水平翻转(FlipX)的跨平台SIMD硬件加速向量算法(使用YShuffleX3Kern
    在上一篇文章里,给大家讲解了32位图像水平翻转(FlipX)算法,于是本文来探讨更加复杂的24位图像水平翻转算法。本文除了会给出标量算法外,还会给出向量算法。且这些算法是跨平台的,同一份源代码,能在X86(Sse、Avx等指令集)及Arm(AdvSimd等指令集)等架构上运行,且均享有SIMD硬件加速。一、标......
  • 编程入门与进阶:从网页设计到C++算法,青少年编程的完美指南【文末推荐好书】
    文章目录一、编程入门:从网页设计开始1.1学习HTML:网页的骨架1.2学习CSS:网页的外观设计1.3学习JavaScript:网页的互动功能二、编程进阶:学习C++算法2.1学习C++基础:语法与数据结构2.2学习算法与数据结构2.3解决实际问题:编程竞赛与项目实践三、编程学习的心态与技巧3.1......
  • 每日一道算法题之岛屿数量-洪水填充
    classSolution{publicstaticvoidmain(String[]args){newSolution().numIslands(newchar[][]{{'1','0','1','1','0','1','1'}});}publicvoidf(inti,......
  • 基于遗传优化算法的TSP问题求解matlab仿真
    1.程序功能描述基于遗传优化算法的TSP问题求解,分别对四个不同的城市坐标进行路径搜索。2.测试软件版本以及运行结果展示MATLAB2022A版本运行  3.核心程序forij=1:Miters%计算当前迭代周期种群适应度%删除与交叉区域相同元素forj=1:Rcc......
  • 分类算法中的样本不平衡问题及其解决方案
    一、样本不平衡问题概述在机器学习的分类任务中,样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战,尤其在处理少数类样本时,模型可能难以有效学习其特征。以二分类为例,理想情况下正负样本数量应相对平衡,如各1000个样本时,模......
  • 每日算法练习
     小伙伴们大家好,好久没更新了,实在是没有空,不过从今天开始恢复更新了,今天给大家带来几道算法题目。题目一1.算法思想 这道题目是一道博弈题目,我们这样分析:对于小紫来说,自己交换的时机肯定是小红拿到的数越大越好,自己拿个小的跟她交换就行。 因此存在如下情况:如果小红......
  • 算法网关视频分析网关消防车通道占用识别助力消防通道畅通守护生命线
    随着城市化进程的加快,消防安全成为城市管理中的重要一环。消防车通道作为火灾发生时救援车辆的主要通道,其畅通无阻至关重要。然而,在实际生活中,消防车通道被占用或堵塞的现象屡见不鲜,给火灾救援工作带来了极大的阻碍。一、消防车通道占用识别算法的重要性消防车通道占用不仅影响......
  • 智慧车辆算法视频分析服务器渣土车偷拉乱倒识别算法:”智慧城市守卫者“
    随着城市化进程的加速,渣土车在建筑、道路等施工领域扮演着至关重要的角色。然而,由于管理和监控手段的不足,渣土车的偷拉乱倒现象日益严重,给城市环境造成了很大影响。针对这一问题,我们来探讨一下视频分析服务器在渣土车偷拉乱倒识别中的应用及相关算法。一、渣土车偷拉乱倒的现状......