证明与计算(2): 离散对数问题(Discrete logarithm Problem, DLP)
本文链接,随时更新请不要转载以免过期:https://www.cnblogs.com/math/p/discrete-log.html
离散对数问题,英文是Discrete logarithm Problem,有时候简写为Discrete log,该问题是十几个开放数学问题(Open Problems in Mathematics, [0.a], [0.b])中的一个。为什么要从离散对数问题说起?因为后面的内容中会反复使用到,因此我们希望用独立的一节分析来消除理解上的不确定性。
0x01 背景
对数
- 以10为底数的对数是
,也叫做常用对数(Common logarithm [5]),常用对数是由Henry Briggs([3])在Napier之后提出的,因此也叫Briggs对数。 - 以自然对数(Natural logarithm [6])e为底数的对数是
,也记做 ; - 以2为底数的二进制对数(Binary logarithm [7])是
,也记做 。
对数
如果给定整数k,b,则计算
如果整数k,a,b使得
两个相对容易计算的例子是:
和 上关于乘法操作构成的群。 关于加法操作构成的群,也就是在这个群里 里的 实际上是k个b相加,此时问题变成
下面的情况则是难的离散对数问题(也就是经典的离散对数问题):
- 取素数p,则
关于乘法操作构成的群。
0x02 经典离散对数问题的定义
我们直接给出下面一组预备知识:
- 欧拉函数
表示1到n之间和n互素的整数的个数([15.d]),特别是对于素数p来说, 。 - 小于n且与n互素的集合是G={1,....,
},例如当n=7,G={1,2,3,4,5,6}。 - 集合{… , a − 2n, a − n, a, a + n, a + 2n, …}构成了a对n的同余类(Congruence class, [15.c])
- G的元素对n的同余类全体构成了一个新的集合M,把M记做:
。 是一个阿贝尓群,直接从阿贝尓群的四个性质入手证明。 是一个循环群,当且仅当n=1,2,4, 或者 (k>0)
例如,对于n=7,
怎样求出构成
由于14的质因子是{1, 3, 5, 9, 11, 13},从而
再看一个例子,取n=15,质因子是{1, 2, 4, 7, 8, 11, 13, 14},则
15的每个质因子构成的循环群,阶数都不是
有了这些准备,给出密码学里使用的离散对数的定义:
- p是一个素数,
构成了一个循环群,生成元是g。 - 任意取一个整数k,
属于 ,计算 ,容易知道a也属于 。 - 反之,已知a,要计算
,称之为离散对数问题。
根据上面的难度讨论,显然:
- 计算
是容易的。 - 计算
是困难的。
0x03 算法复杂度
在厘清了离散对数问题的背景、难度以及我们关心的定义之后,我们实际看几个该问题的算法,并且具体考察算法的时间复杂度。通用的算法有Trial multiplication算法,Baby-step Giant-step算法,以及Index Calculus Method算法([18.b], [20])。本节我们只给出Trial multiplication算法和Baby-step Giant-step算法用以达到理解具体的算法及其时间复杂度的目的。
首先,离散对数问题的计算没有有效的通用算法,一种朴素的计算方式叫做Trial multiplication([18.b],[18.c]),简单说就是暴力破解(brute-force),把所有的可能值都算出来比对。
算法2.1: Trial multiplication。给定素数p导出的有限循环群{
- 计算
, ,... - 如果
,结束。 - 时间复杂度是p/2
其次,在暴力破解的基础上还有很多其他的算法,例如Baby-step Giant-step算法([18.a], [18.b])加速了Trial multiplication算法,Baby-step Giant-step算法也被认为是最优的(可以找到和它复杂度一样的算法,但是没有更好的)。这里有个对O(p)的误解,密码学里算输入数据的大小的时候,不是算素数P的自然数大小,而是输入数据的Bit大小,如果P= 2^n
,那么素数p的离散对数问题对应的Bit复杂度大小是O( 2^x
)。
算法2.2: Baby-step Giant-step。给定素数p导出的有限循环群{
- 令
,令 ,其中i, j {0,1,...,m-1}. - 由于
, 从而 . - 遍历所有可能的i,j,找到符合
,则有 . - 如何计算?
- Giant steps:对所有i
{1,2,...,m-1},计算 ,保存到表格。 - Baby steps:查表,并对所有j
{1,2,...,m-1},计算 ,直到符合条件。 - 时间复杂度:
个步骤计算表格, 个步骤寻找j,一共是 个步骤。
- Giant steps:对所有i
暴力破解的时间复杂度是O(p),而Baby-step Giant-step的时间复杂度是O(
0x04 计算难度
离散对数的计算有多“难”呢?我们知道在确定性图灵机上存在多项式时间复杂度算法的问题是P(Polynomial)问题;而另一类问题,它的解(Solution)能被确定性图灵机上在多项式时间复杂度内验证,它的解能被非确定性图灵机计算出来,称为NP问题([10])。另一方面P和NP问题,都是属于决策问题(Decision Problem),它们等价于对应的形式语言的集合,参考上一篇的内容。显然有,
资料[10]里面提到,如果P!=NP,那么Discrete logarithm被认为是介于P和NP-complete(NPC)之间的NP问题,也称为NP-intermediate问题。
It was shown by Ladner that if P ≠ NP then there exist prlblems in NP that are neither in P nor NP-complete.[1] Such prlblems are called NP-intermediate prlblems. The graph isomorphism prlblem, the discrete logarithm prlblem and the integer factorization prlblem are examples of prlblems believed to be NP-intermediate. They are some of the very few NP prlblems not known to be in P or to be NP-complete.
这充分说明了离散对数问题符合了两个重要的特征:
- 如果已经知道k,则计算
是容易的。 - 如果知道a,则计算
是难的,有多难呢?在P!=NP的情况下,被认为是介于P和NPC之间的NP-intermediate难度。实际上,在资料[11]里,更具体的指出Discrete logarithm问题应该属于NP、Co-NP、BQP三个集合的交集问题。
索引[12]定义了Co-NP问题,它是由NP问题的补问题(i.e 将NP问题中的答案yes/no对换)的集合:
A decision prlblem X is a melber of co-NP if and only if its complement X is in the complexity class NP.
索引[13]定义了BQP问题,它是量子计算机下可以在多项式时间计算出来的决策问题的集合。
BQP (bounded-error quantum polynomial time) is the class of decision prlblems solvlble by a quantum computer in polynomial time, with an error prlblbility of at most 1/3 for all instances.
不同难度的问题细分下去属于计算复杂性理论(Computational complexity theory, [14]),我们没必要把所有的分类都记住,只要知道决策问题的不同难度,构成了范围不同的集合,这些集合之间有对应的包含关系。
0x05 注释:
什么是群(Group)
- 群:如果一个集合G的元素在某个操作·下满足下面几个代数性质,那么集合G构成了一个群(Group, [15.a]):
- 封闭性(Closure): G中的任意两个元素a,以及操作·,有a·b也属于G
- 结合性(Associativity):G中的三个元素a,b,c,以及操作·,有(a·b)·c = a·(b·c)
- 单位元(Identity):如果存在e,使得G中任何元素a,有e·a=a·e=a
- 逆元(Inverse):G中任意元素a,存在元素b,使得a·b=b·a=e
- 阿贝尔群:如果一个集合G构成了一个群,并且还满足交换性质,则G构成了一个阿贝尔群(Abelian group, [15.b])
- 可交换(Commutativity):G中任意元素a,b,有a·b=b·a
- 有限循环群:如果一个群G={
},则G是由g生成的阶(order)为n的有限循环群。
群(Group)有什么用?
群(Group)这个数学概念是解决什么问题的呢?简单地说,在物理、化学、生物方面,无数的结构都是对称结构的,在对称结构上的操作往往就满足群的性质,因而群(Group)的作用至少有:
- 通过把问题用群来建模,可以通过计算群的性质来解决对应的问题(参考[22])
- 例如伽罗瓦([23,[24]])把代数方程求根问题转成群的问题
- 例如
空间上正多边形(多面体)个数的问题,就是对应 上在旋转操作下的有限群个数。 - 例如有不同个数的正多边形(多面体)能没有缝隙的填满不同定义下、不同维度的空间(参考[22]),它们刻画了这些空间的性质,于是那些不能直观绘制出来的空间,人们可以通过刻画这些空间上群的性质,来区分它们。
- 还可以通过群可以利用集合在某个操作下的对称性,来大幅度减化问题。(参考:[21])
- 例如经典的魔方方块群(Rubik's Cube group,参考[25])
- 例如利用克莱因四元素群(Klein 4 Group,参考[26])来大幅度减化对孔明棋(Solitaire puzzles,参考:[28])的研究。
而在密码学里,往往利用特定群上面操作的“单向”性:从一边计算过去很容易,反过来运算很难(一般是NP问题),从而来保证密码系统的安全,如果不是限定在特定群上,计算难度上的“单向”可能无法获得满足:
- 例如椭圆曲线加密,就是建立在椭圆曲线上几何操作定义的有限素数群上的DLP问题,简称ECDLP(Elliptic Curve Discrete logarithm Problem)。
0x06 参考
[0.a]: Open Problems in Mathematics(OPM)
[0.b]: OPM:The Discrete Logarithm Problem
[1]: History of logarithms
[2.a]: John Napier
[2.b]: Napierian logarithm
[3]: Henry Briggs
[4.a] William Oughtred
[4.b] Slide rule
[4.c]: Logarithm
[5]: Common logarithm
[6]: Natural logarithm
[7]: Binary logarithm
[8]:Quarter square multiplication
[9]: Discrete logarithm
[10]: P versus NP prlblem
[11]:How hard is fiding the discrete logarithm
[12]:Co-NP
[13]:BQP (bounded-error quantum polynomial time)
[14]: Computational complexity theory
[15.a]:Group
[15.b]: Abelian group
[15.c]:Congruence class
[15.d]:Euler's totient function
[16]: Multiplicative group of integers modulo n
[17] wolfram: Discrete Logarithm
[18.a] Baby-step giant-step
[18.b] Trial multiplication, Baby-step giant-step, Index calculus
[18.c] Trial multiplication is not optimal but...
[18.d] Baby-Step Giant-Step Algorithms for the Symmetric Group
[19] Solving Discrete Logarithms in Smooth-Order Groups with CUDA
[20] Algorithms for Computing Discrete Logarithms
[21] Power Groups
[22] Why is group theory important?
[23] wiki:Évariste Galois
[24] wiki-zh-cn:Évariste Galois
[25] Rubik's Cube group
[26] Klein 4 Group
[27] Group Theory and Puzzles
[28] wiki:Solitaire puzzles
--end--
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 当职场成战场:降职、阴谋与一场硬碰硬的抗争
· ShadowSql之.net sql拼写神器
· 无需WebView,Vue也能开发跨平台桌面应用
· 使用MCP C# SDK开发MCP Server + Client