180 likes | 282 Views
Cryptography and Network Security. Third Edition by William Stallings Lecture slides by Lawrie Brown. 第八章 — 數論介紹. 惡魔告訴丹尼爾 ( 希伯來先知 ) :「如果你能找出一個我解不出的難題,我就給你一個願望」 丹尼爾:「好,如果你能夠證明 a n + b n = c n ,當 n 大於 2 時沒有整數解」 他們彼此同意三天後回到同一個地方。
E N D
Cryptography and Network Security Third Edition by William Stallings Lecture slides by Lawrie Brown
第八章—數論介紹 惡魔告訴丹尼爾 (希伯來先知):「如果你能找出一個我解不出的難題,我就給你一個願望」 丹尼爾:「好,如果你能夠證明 an + bn = cn,當 n 大於 2 時沒有整數解」 他們彼此同意三天後回到同一個地方。 三天後,惡魔看起來相當地憔悴又有點神經質地咬著自己的嘴唇似乎在思索著甚麼。丹尼爾開口說話了:「現在你做得如何了呢?你證出來了嗎?」 「這個?還…沒,我還沒證出來」 「那現在我可以說出我的願望了嗎?金錢?權力?」 「甚麼?嗯!這—當然。但,聽著!如果我們能夠證明下面兩個輔助定理的話-」 —The Mathematical Magpie, Clifton Fadiman
質數 • 質數的因數只有 1 與自己 • 無法表示成其他數值的乘積 • 請注意: 1 是質數,但是我們多半對它不感興趣 • 例如,2,3,5,7 是質數, 4,6,8,9,10 則否 • 質數是數論的中心 • 以下是小於 200 的質數: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199
質數分解 • 分解一數n,就是將它表示成其他數的乘積: n=a × b × c • 請注意,分解一個數,比把一堆數乘起來要簡單許多 • 一個數 n 的質數分解,就是把它表示成一堆質數的乘積 • 例如 91=7×13 ; 3600=24×32×52
互質與 GCD • 當兩數a 與 b除了 1 之外沒有共同的因數,就稱他們互質 • 例如, 8 與 15 就是互質,因為 8 的因數是 1,2,4,8 且 15 的因數是 1,3,5,15,而 1 是他們唯一共同的因數 • 反之,我們可以比較其質因數分解來求出其最大公因數 (取出最小次方即可) • 例如, 300=21×31×52 18=21×32因此 GCD(18,300)=21×31×50=6
Fermat 定理 • ap-1 mod p = 1 • 此處 p是質數,且gcd(a,p)=1 • 也稱做 Fermat小定理 • 在公開鑰匙加密與質數測試上都很有用
Euler Totient 函數 ø(n) • 當我們取 n 的同餘時 • 餘數的完整集合為: 0,1,2,‥n-1 • 餘數的精簡集就是與 n 互質的餘數所組成的集合 • 例如 n=10 • 餘數的完整集合為 {0,1,2,3,4,5,6,7,8,9} • 餘數的精簡集為 {1,3,7,9} • 餘數的精簡集的元素個數就是Euler Totient 函數 ø(n)
Euler Totient 函數 ø(n) • 要計算 ø(n) 的話,必須求出要被去除的元素個數 • 通常需要質因數分解,但是 • for p (p prime) ø(p)=p-1 • for p‧q (p,q prime) ø(p‧q)=(p-1)(q-1) • 例如: • ø(37)=36 • ø(21)=(3–1)×(7–1)=2×6=2
Euler 定理 • Fermat 定理的延伸 • aø(n)mod n = 1 • 此處 gcd(a,n)=1 • 例如, • a=3;n=10; ø(10)=4; • 因此 34 = 81 = 1 mod 10 • a=2;n=11; ø(11)=10; • 因此 210 = 1024 = 1 mod 11
質數測試 • 需要找出大質數 • 傳統上用除法測試來篩選 • ie. 用小於或等於其開根號的質數來一個一個除看看 • 只對小一點的數值才適用 • 可以根據質數的特性,用統計上的質數測試法來代替 • 所有質數都必須符合這些特性 • 但是有一些稱作「假質數」的合成數也會符合這些特性
Miller-Rabin 演算法 • 以 Fermat定理為基礎的測試質數法 • 演算法如下: TEST (n) is: 1. 找出整數 k, q, k > 0, q 是奇數, 使得 (n–1)=2kq 2. 選取一個亂機整數 a, 1<a<n–1 3. if aqmod n = 1then return (“可能為質數"); 4. for j = 0 to k – 1 do 5. if (a2jqmod n = n-1) then return(“ 可能為質數 ") 6. return (“合成數")
機率上的考量 • 如果 Miller-Rabin 傳回 “合成數”,就一定不是質數 • 否則,可能是質數或是假質數 • 結果是假質數的機率 < ¼ • 因此,如果對t個不同的隨機整數 a 重複t 次測試,皆回傳“可能為質數”,則n 為質數的機率為: • Pr(經過 t 次測試後皆回傳n可能為質數,則n 為質數) = 1-4-t • 例如,當 t=10,此機率 > 0.99999
質數的分佈 • 質數理論指出,每 (ln n) 個整數就會出現一個質數 • 因為偶數與五的倍數可以立刻去除,我們實際上只需要測試 0.4 ln(n)個數就可以找到一個質數 • 請注意這只是平均值,質數的距離有時很近有時很遠
中國餘式定理 • 加速同餘計算 • 當模數為合成數時適用 • 例如, mod M = m1m2..mk • 中國餘式定理可以讓我們針對每個分量 mi 獨立計算 • 因為計算成本正比於數值大小,所以此法比直接針對 M 計算快很多
中國餘式定理 • 有許多方式可以實作 CRT • 欲計算 (A mod M),可以先分別計算所有的 (ai mod mi),然後以下列方式結合他們來求得答案::
原根 • Euler定理告訴我們aø(n)mod n=1 • 當am mod n=1, GCD(a,n)=1 • 必定存在 m= ø(n) 但可能更小 • 當次方到達 m時, 循環就會重複 • 如果最小的數就是 m= ø(n) 則a稱為原根 • 如果 p是質數, 則後續a個各個次方就「產生」p 的同餘群 • 原根很有用,但是不好找
離散對數或指數 • 指數的逆運算就是求 p 的同餘的離散對數 • 也就是說,求出 x ,此處ax = b mod p • 表示成x=loga b mod p 或x=inda,p(b) • 如果 a 是原根,則離散對數必定存在,反之則不一定 • x = log3 4 mod 13 (x 使得 3x = 4 mod 13) 無解 • x = log2 3 mod 13 = 4 可逐一測試不同次方 • 相對於指數運算的簡單,求離散對數是極困難的問題
總結 • 已知: • 質數 • Fermat與 Euler定理 • 質數測試 • 中國餘式定理 • 離散對數