證明與計算(2): Discrete logarithm
離散對數問題,英文是Discrete logarithm,有時候簡寫為Discrete log。為什麽要從離散對數問題說起?因為後面的內容中會反復使用到,因此我們希望用獨立的一節分析來消除理解上的不確定性。
0x01 背景
對數\(\log_{b}(a)\)是由John Napier發明的符號([1],[2.a],[2.b]),選擇不同的基底,就有不同的對數,例如:
- 以10為底數的對數是\(\log_{10}(x)\),也叫做常用對數(Common logarithm [5]),常用對數是由Henry Briggs([3])在Napier之後提出的,因此也叫Briggs對數。
- 以自然對數(Natural logarithm [6])e為底數的對數是\(\log_{e}(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首先計算的常用對數表。在電子計算機出現之前,數學上的很多難的計算都依賴於某種數學表,例如把計算乘法轉換成計算加減以及查表([8])。顯然查表求值也只是一種限定精度的近似值,計算自然對數和二進制對數,可以通過自然對數和二進制對數與常用對數之間的轉換公式來進行:
如果給定整數k,b,則計算\(b^k=a\)是容易的。但是,反過來知道整數a,要精確計算出整數\(k=log_{b}(a)\)則是難的,只有少數一些特殊的情況下有辦法計算(例如,計算\(9=\log_{3}3^9\)是容易的),沒有通用的算法做此類計算。如果整數k,a,b使得\(b^k=a\)。則此時\(k=log_{b}(a)\)稱為離散對數(Discrete logarithm, [9])。
0x02 難度
離散對數的計算有多“難”呢?我們知道在確定性圖靈機上存在多項式時間復雜度算法的問題是P(Polynomial)問題;而另一類問題,它的解(Solution)能被確定性圖靈機上在多項式時間復雜度內驗證,它的解能被非確定性圖靈機計算出來,稱為NP問題([10])。另一方面P和NP問題,都是屬於決策問題(Decision Prlblem),它們等價於對應的形式語言的集合,參考上一篇:證明與計算(1):Decision Prlblem, Formal Language L, P and NP。顯然有,\(P \subseteq NP\)
資料[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]),我們沒必要把所有的分類都記住,只要知道決策問題的不同難度,構成了不範圍不同的集合,這些集合之間有對應的包含關系。
0x03 定義
在嘗試了幾個不同的方式之後,我們決定直接給出下面一組預備知識:
- 歐拉函數\(\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)
有了這些準備,給出密碼學裏使用的離散對數的定義:
- 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)\)是困難的,難度是NP-intermediate。
小節註釋:
- 群:如果一個集合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])
- 可交換:G中任意元素a,b,有a·b=b·a
- 循環群:如果一個群G={\(g^0,g^1,...g^k,...\)},則G是由g生成的循環群。
0x04 參考
[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
--end--
證明與計算(2): Discrete logarithm