
前言
前几天参加了网鼎杯的比赛,第一道题就是简单粗暴的离散对数问题(DLP)。当时自己是用sagemath的discrete_log()函数的直接秒解的(另外第三题必须要用cmd打开flag才出来就很坑)。赛后发现这道离散对数题应该是用Pohlig–Hellman algorithm 做的,所以针对这次的题目学习了一遍该算法。
群
- 定义6.7:设 H H H是群 G G G的一个子集合,如果对于群 G G G的二元运算, H H H也构成一个群,就称 H H H为群 G G G的子群,记作 H ≤ G H ≤ G H≤G。
- 定义6.8: 若群 G G G包含的元素个数有限,则称 G G G为有限群,否则称为无限群。有限群 G G G所包含的元素个数称为 G G G的阶,记为 ∣ G ∣ | G | ∣G∣。
- 定义6.9 :设 a a a是群 G G G中的一个元素,若存在正整数 n n n使得 a n = e a^n = e an=e,则称 a a a为有限阶元素,满足 a n = e a^n = e an=e的最小正整数 n n n叫做 a a a的阶,记为 ∣ a ∣ | a | ∣a∣。若不存在正整数 n n n使得 a n = e a^n = e an=e,则称 a a a为无限阶元素。
- 定义6.10 设 G G G为群,若存在 G G G的一个元素 a a a,使得 G G G中的任意元素均由 a a a的幂组成,即
G = { a n ∣ n ∈ Z } G = \{ a^n | n ∈ Z\} G={ an∣n∈Z}
则称群 G G G为循环群,元素 a a a为循环群 G G G的生成元,记为 G = < a > G = < a > G=<a>。
后面的内容都是围绕循环群的子群以及群和元素的阶展开的。
Pohlig–Hellman algorithm
维基百科解释如下:
是一种特殊算法,在阶为光滑数的有限阿贝尔群上解决离散对数问题。
同时
先看普遍情况下的算法:

大致流程如下:
(假设阶为 ϕ ( m ) \phi(m) ϕ(m))
首先,要解决的问题是
g x ≡ h m o d m a n d n = ϕ ( m ) = ∏ i = 1 r p i e i g^x\equiv h \ mod\ m\ and\ n=\phi(m)=\prod_{i=1}^r p_i ^ {e_i} gx≡h mod m and n=ϕ(m)=i=1∏rpiei
等式两边同乘上一个指数 n p i e i \frac{n}{p_i ^ {e_i}} piein,可以得到:
{ ( g x 1 ) n p 1 e 1 ≡ h n p 1 e 1 m o d m ( g x 2 ) n p 2 e 2 ≡ h n p 2 e 2 m o d m ( g x 3 ) n p 3 e 3 ≡ h n p 3 e 3 m o d m . . . ( g x r ) n p r e r ≡ h n p r e r m o d m \begin{cases} (g^{x_1})^\frac{n}{p_1 ^ {e_1}}\equiv h^\frac{n}{p_1 ^ {e_1}} \ mod\ m\\ (g^{x_2})^\frac{n}{p_2 ^ {e_2}}\equiv h^\frac{n}{p_2 ^ {e_2}} \ mod\ m\\ (g^{x_3})^\frac{n}{p_3 ^ {e_3}}\equiv h^\frac{n}{p_3 ^ {e_3}} \ mod\ m\\ ...\\ (g^{x_r})^\frac{n}{p_r ^ {e_r}}\equiv h^\frac{n}{p_r ^ {e_r}} \ mod\ m\\ \end{cases} ⎩
⎨
⎧(gx1)p1e1n≡hp1e1

本文深入探讨Pohlig-Hellman算法在解决离散对数问题上的应用,特别是在阶为光滑数的有限阿贝尔群中。通过实例演示算法步骤,并分析其理论依据。
最低0.47元/天 解锁文章
429

被折叠的 条评论
为什么被折叠?



