證明與計算(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 背景

對數\(\log_{b}(a)\)是由John Napier發明(1614)的符號([1],[2.a],[2.b]),選擇不同的基底,就有不同的對數,例如:

  • 以10為底數的對數是\(\log_{10}(x)\),也叫做常用對數(Common logarithm [5]),常用對數是由Henry Briggs([3])在Napier之后提出的,因此也叫Briggs對數。
  • 以自然對數(Natural logarithm [6])e為底數的對數是\(\log_{e}(x)\),也記做\(\ln(x)\)
  • 以2為底數的二進制對數(Binary logarithm [7])是\(\log_{2}(x)\),也記做\(lb(x)\)

對數\(x=\log_{b}(a)\)等價於\(b^x=a\),給定一個已知的實數x,計算\(b^x\)是容易的,但是反之給定a和b,計算對數\(x=\log_{b}(a)\)則比較麻煩。William Oughtred([4.a])在Napier之后發明了滑尺(Slide rule,[4.b])計算常用對數的方法。在電子計算機出現之前,計算對數依賴於Briggs首先計算的常用對數表(1616)。在電子計算機出現之前,數學上的很多計算都依賴於某種數學表,例如把計算乘法轉換成計算加減以及查表([8])。顯然查表求值也只是一種限定精度的近似值,計算自然對數和二進制對數,可以通過自然對數和二進制對數與常用對數之間的轉換公式來進行:

\[\log_{10} = \frac{\ln(x)}{\ln(10)}, \log_{10} = \frac{lb(x)}{lb(10)} \]

如果給定整數k,b,則計算\(b^k=a\)是容易的。但是,反過來知道整數a,要精確計算出整數\(k=log_{b}(a)\)則比較麻煩,只有少數一些特殊的情況下有辦法精確計算(例如,計算\(9=\log_{3}3^9\)是容易的),沒有有效的通用的算法做此類計算(Baby-step giant-step, [18])。

如果整數k,a,b使得\(b^k=a\)。則此時\(k=log_{b}(a)\)稱為離散對數(Discrete logarithm, [9])。離散對數問題是定義在一個群上的,對於不同的群,難度不同。

兩個相對容易計算的例子是:

  • \(R^*\)\(C^*\)上關於乘法操作構成的群。
  • \(Z/nZ\)關於加法操作構成的群,也就是在這個群里\(b^k\)里的\(b^k\)實際上是k個b相加,此時問題變成 \(kb\equiv a(mod\ n)\)

下面的情況則是難的離散對數問題(也就是經典的離散對數問題):

  • 取素數p,則\(Z/pZ\)關於乘法操作構成的群。

0x02 經典離散對數問題的定義

我們直接給出下面一組預備知識:

  • 歐拉函數\(\varphi(n)\)表示1到n之間和n互素的整數的個數([15.d]),特別是對於素數p來說,\(\varphi(p)=p-1\)
  • 小於n且與n互素的集合是G={1,....,\(P_{\varphi(n)}\)},例如當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記做:\(Z/nZ\)
  • \(Z/nZ\)是一個阿貝尓群,直接從阿貝尓群的四個性質入手證明。
  • \(Z/nZ\)是一個循環群,當且僅當n=1,2,4,\(p^k\)或者\(2p^k\)(k>0)

例如,對於n=7,\(Z/7Z\)是由\(3^k\)構成的循環群,階數是\(\varphi(7)=7-1=6\),下面的每步推導都用到了上一步的模等結果,其中3是模7的原根(Primitive root):

怎樣求出構成\(Z/nZ\)的循環群的原根呢?簡單的方式,通過窮舉n的質因子構成的每個循環群,例如對於\(n=14=2\times7^1\)(符合2p^k形式):

由於14的質因子是{1, 3, 5, 9, 11, 13},從而\(\varphi(14)=6\)。從而,根據上面的枚舉,3和5是14的兩個原根。

再看一個例子,取n=15,質因子是{1, 2, 4, 7, 8, 11, 13, 14},則\(\varphi(15)=8\),但是

15的每個質因子構成的循環群,階數都不是\(\varphi(15)=8\),從而15沒有原根。

有了這些准備,給出密碼學里使用的離散對數的定義:

  • p是一個素數,\(Z/pZ\)構成了一個循環群,生成元是g。
  • 任意取一個整數k,\(g^k\)屬於\(Z/pZ\),計算\(a=g^k(mod\ p)\),容易知道a也屬於\(Z/pZ\)
  • 反之,已知a,要計算\(k=log_{g}(a)\),稱之為離散對數問題。

根據上面的難度討論,顯然:

  • 計算\(a=g^k\)是容易的。
  • 計算\(k=log_{g}(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導出的有限循環群{\(g^0\),\(g^1\),...,\(g^{q}\)},已知\(a=g^k(mod\ p)\),求k。


1. 計算$g^2(mod\ p)$,$g^3(mod\ p)$,... 2. 如果$g^k(mod\ p)=a$,結束。 3. 時間復雜度是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導出的有限循環群{\(g^0\),\(g^1\),...,\(g^q\)},已知\(a=g^k(mod\ p)\),求k。


1. 令$m=\sqrt{p-1}$,令$k=im+j$,其中i, j $\in$ {0,1,...,m-1}. 2. 由於$a=g^k(mod\ p)=g^{im+j}(mod\ p)$, 從而$g^j(mod\ p)=ag^{-im}(mod\ p)$. 3. 遍歷所有可能的i,j,找到符合$g^j(mod\ p)=ag^{-im}(mod\ p)$,則有$k=im+j$. 4. 如何計算? * **Giant steps**:對所有i$\in${1,2,...,m-1},計算$ag^{-im}(mod\ p)$,保存到表格。 * **Baby steps**:查表,並對所有j$\in${1,2,...,m-1},計算$g^j(mod\ p)$,直到符合條件。 * 時間復雜度: $\sqrt{p}$個步驟計算表格,$\sqrt{p}/2$個步驟尋找j,一共是$1.5\sqrt{p}$個步驟。

暴力破解的時間復雜度是O(p),而Baby-step Giant-step的時間復雜度是O(\(\sqrt{p})\)。實際上,在計算離散對數問題的通用算法中,Baby-step, Giant-step算法是最優的([20])。如果限定在\(Z/pZ\)上,則最好的算法是general number field sieve([20])算法,時間復雜度可以達到\(2^{O(n^{1/3}\ \ (log\ (n))^{2/3}\ \ )}\),其中n是素數p的二進制長度,因為\(p=2^n\),所以\(n=log(p)/log(2)\)。注意我們說多項式時間復雜度,是指復雜度是關於n的多項式,而不是關於p的。在加密算法里面,那些特別構造的橢圓曲線群里面,階數是素數的群上目前並沒有找到非通用的計算離散對數的算法。這意味着在素數階循環群上的離散對數問題的時間復雜度至少是指數增長的。

0x04 計算難度

離散對數的計算有多“難”呢?我們知道在確定性圖靈機上存在多項式時間復雜度算法的問題是P(Polynomial)問題;而另一類問題,它的解(Solution)能被確定性圖靈機上在多項式時間復雜度內驗證,它的解能被非確定性圖靈機計算出來,稱為NP問題([10])。另一方面P和NP問題,都是屬於決策問題(Decision Problem),它們等價於對應的形式語言的集合,參考上一篇的內容。顯然有,\(P \subseteq NP\)。NP語言里最難的那組問題互相等價,統稱為NP-complete(NPC)問題。

資料[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,則計算\(b^k\)是容易的。
  • 如果知道a,則計算\(k=\log_{b}(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^0,g^1,...g^k,...g^n\)},則G是由g生成的階(order)為n的有限循環群。

群(Group)有什么用?

群(Group)這個數學概念是解決什么問題的呢?簡單地說,在物理、化學、生物方面,無數的結構都是對稱結構的,在對稱結構上的操作往往就滿足群的性質,因而群(Group)的作用至少有:

  • 通過把問題用群來建模,可以通過計算群的性質來解決對應的問題(參考[22])
    • 例如伽羅瓦([23,[24]])把代數方程求根問題轉成群的問題
    • 例如\(R^n\)空間上正多邊形(多面體)個數的問題,就是對應\(R^n\)上在旋轉操作下的有限群個數。
    • 例如有不同個數的正多邊形(多面體)能沒有縫隙的填滿不同定義下、不同維度的空間(參考[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--


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM