• 沒有找到結果。

在這一節, 我們介紹 Rabin 系統

N/A
N/A
Protected

Academic year: 2022

Share "在這一節, 我們介紹 Rabin 系統"

Copied!
4
0
0

加載中.... (立即查看全文)

全文

(1)

3. The Rabin System

前面提過到目前為止尚無法證明破解 RSA 系統和分解整數的質因數問題的難度相同.

在這一節, 我們介紹 Rabin 系統. 它和 RSA 相當類似, 而且我們是可以證明破解 Rabin 系 統等同於解決分解整數的質因數問題. 如同前一節, 我們先說明 Rabin 系統的執行步驟, 再 探討它是否為密碼系統, 最後說明它的效率性以及安全性.

3.1. 執行步驟. 和 RSA 系統一樣, 我們先挑選兩個很大的相異質數 p, q, 然後計算 n = pq.

不過這裡為了計算方便 (省去一些數學理論的探討), 我們假設 p≡ 3 (mod 4) 且 q ≡ 3 (mod 4). 這裡要公布的 public key 是 n, 而保持機密的 private key 是 p, q. 任何人知道 public key n 就可以將要加密的 plaintext m (需滿足 0≤ m < n), 使用 encryption function

En(m) = c≡ m2 (mod n), 0≤ c < n 加密. 收到 c 後就可以用 private key, p, q 來解密. 解密的方法如下:

(1) 先利用輾轉相除法, 解 px + qy = 1 的一組整數解, 令之為 x =λp, y =λq.

(2) 分別計算 c(p+1)/4 在 modulo p 以及 c(q+1)/4 在 modulo q 之下的取值, 令之為 rp, rq. (3) 計算 (−1)i(rp·λq· q) + (−1)j(rq·λp· p),i, j ∈ {0,1} 這四個數在 modulo n 之下的取

值, 其中一個會是原本的 plaintext m.

在 Rabin 系統中要將 plaintext 數字化, 可以利用前一節 RSA 系統中所介紹的方法, 這 裡就不多談了. 不過在步驟 (3) 中會得到 4 種可能的 m, 這可以在求得時檢查哪一個是最 可能的 m. 例如傳送的若是有意義的文字, 便能辨識出來. 不過有時傳輸的若是數字類的資 料 (例如密碼之類), 就很難辨識是哪一個了. 此時我們可以將 plaintext 用特殊的形式表示, 幫助辨認. 底下介紹 Rabin 系統的正確性時, 我們會用一個例子稍加解釋.

3.2. 正確性. 在 Rabin system 中的加密函數 En(m) = m2 在 modulo n 之下其實並不是一 對一的函數. 很容易看出當 m= n− m 時我們會有在 modulo n 之下 En(m) = (n− m)2 m2= En(m). 事實上若 m 滿足 m′2 ≡ m2 (mod n), 由於 n = pq, 我們有 p| m′2− m2, 以 及 q| m′2− m2. 又由於 p, q 是質數且 m′2− m2 = (m+ m)(m− m), 我們得 p | m+ m 或 p| m− m 以及 q | m+ m 或 q| m− m. 也就是說 m 須符合

m≡ ±m (mod p), m≡ ±m (mod q). (3.1) 反之, 若 m 滿足式子 (3.1), 則 m′2≡ m2 (mod n). 由中國剩餘定理 (Lemma 2.2), 在 0, n−1 之間共有四個整數 m 會符合式子 (3.1) (除非 p| m 或 q | m), 也因此我們知會有四個 m 滿 足 En(m) = En(m). 我們將以上的討論寫成以下的結論.

Lemma 3.1. 假設 p, q 為相異質數且令 n = pq. 若 c∈ Z 且 a,b 分別滿足 a2≡ c (mod p) 以及 b2 ≡ c (mod q), 則 r ∈ Z 滿足 r2≡ c (mod n) 若且唯若 r ≡ ±a (mod p) 且 r ≡ b (mod q).

由上知 En 不是一對一, 嚴格來講不是 encryption function. 不過最後解碼能求出正確的 m 即可. 有時現實生活上的問題用數學表示僅是方便而已, 我們就不拘泥於定義了.

12

(2)

13

至於解碼, 前面已知會有 4 種可能, 我們提到的解碼步驟就是要把這四種可能的 m 找出.

接下來我們就是要說明為何上述步驟可以解出所有可能的 m, 至於如何挑出真正正確的 m, 我們留在後面再說明.

首先我們收到的 ciphertext c 是由某個 plaintext m 而來, 它們滿足 c≡ m2 (mod n). 要 解出 m, 前面 3.1 的步驟 (2) 就是幫我們找到在 modulo p 和 modulo q 之下 m 的可能值.

事實上, 由 c≡ m2 (mod n), 我們知 c≡ m2 (mod p). 又因 p≡ 3 (mod 4), 所以 (p+1)/4 和 (p− 1)/2 皆為整數. 我們有

c(p+1)/4≡ m(p+1)/2= m(p−1)/2· m (mod p).

此時若 p| m, 我們自然有 p | c, 也因此得 c(p+1)/4≡ 0 ≡ m (mod p). 同理若 q | m, 則 c(q+1)/4≡ 0 ≡ m (mod q). 反之, 若 p 與 m 互質, 由 Lemma 2.1 我們知 mp−1≡ 1 (mod p).

因此若令 a = m(p−1)/2, 我們有 a2 = mp−1 ≡ 1 (mod p). 然而若 a2 ≡ 1 (mod p), 表示 p| a2− 1, 故由 p 是質數以及 a2− 1 = (a − 1)(a + 1), 我們得 p | a − 1 或 p | a + 1, 也就是

說 m(p−1)/2= a≡ ±1 (mod p). 因此知 c(p+1)/4≡ ±m (mod p). 同理若 q 與 m 互質, 則

c(q+1)/4≡ ±m (mod q). 因此, 若令 c(p+1)/4 在 modulo p 以及 c(q+1)/4 在 modulo q 之下的 取值分別為 rp, rq, 則由 r2p≡ m2≡ c (mod p) 以及 rq2≡ m2≡ c (mod q) 以及 Lemma 3.1, 我 們就可以用中國剩餘定理幫助我們找到在 modulo n 之下所有滿足 x2≡ c (mod n) 的解.

回顧一下, 由 3.1 步驟 (1), 我們有 λp· p ≡

{ 0 (mod p)

1 (mod q) ; λq· q ≡

{ 1 (mod p) 0 (mod q)

因此 3.1 的步驟 (3) 可幫我們找到在 modulo n 之下所有滿足 x2≡ c (mod n) 的解.

利用這些步驟找出的四種可能, 我們知道一定有一個是原來的 plaintext, 要如何認定是 哪一個呢? 這是 Rabin system 雖知道比 RSA 系統相對安全且計算速率較優但仍一直無 法被廣泛使用的原因. 要解決這樣的問題, 一般是限定 plaintext 的形式來處理. 這些方法 不外乎縮小了原來 encryption function 的定義域使得 encryption function 成為一對一的函 數, 因此最後能解出唯一的 plaintext. 不過要提醒的是, 這些方式某種程度上會破壞原本 Rabin system 的安全性. 簡單來說, 就是誰也不曉得限定特殊形式的 plaintext, 是否有人能 利用這些特殊性得到破解的方法.

這裡我們介紹一種採用特殊形式 plaintext 的方法 redundancy. 簡單來說就是重複 原來要傳送的數字, 例如原來要傳送的數字在二進位寫法是 0101, 我們就將之用二進 位的 01010101 加密送出. 這樣在解出的四個解中, 一般很少會有兩個以上的數字會有 redundancy 出現, 我們就可挑出原來的 plaintext 了. 我們看以下的例子.

Example 3.2. 為了計算方便以及容易了解, 我們考慮很小的 p = 7, q = 11 這種情形. 此 時 public key 為 n = 77. 由於 6 < log277 < 7 所以要考慮的數字若用二進位表示, 應為 6 位數 (若是 7 位數, 最大的可能是 27 = 128, 因此有可能會大於 77). 不過由於我們要用 redundancy 的方法確定 plaintext, 所以原來的數用二進位表示僅能是 3 位數 (即小於 8 的數). 例如原先要送出 5 用 3 位數的二進位表示應為 101, 此時用 redundancy 的方法故

(3)

14

plaintext m 用二進位表示應為 101101, 即 m = 45. 因此加密的 c 應為 452= 2025 除以 77 的餘數, 即 c = 23.

現在當我們收到 c = 23 如何解密呢? 在 3.1 的步驟 (1) 我們事先有計算好的 r7= (−3),r11 = 2 (因 (−3) × 7 + 2 × 11 = 1). 又 (p + 1)/4 = 2, (q + 1)/4 = 3, 所以在步驟 (2) 我們計算 c2= 259 除以 7 的餘數為 4, (可用 c = 23≡ 2 (mod 7) 方便計算) 以及 c3 除以 11 的餘數為 1. 最後步驟 (3) 我們計算 (−1)i× 4 × (2) × 11 + (−1)j× 1 × (−3) × 7 分別為 67,−67,−109,109, 它們除以 77 的餘數分別為 67,10,45,32. 可以驗證這四個數的平方除 以 77 的餘數皆為 c = 23. 接下來, 將 67, 10, 45, 32 用二進位表示, 分別為 1000011, 1010, 101101, 100000. 根據 redundancy 方法, 我們選 m 的二進位表示為 101101, 即 m = 54, 而 原來要傳的數字用二進位表示應為 101, 也就是 5. 這裡要注意的是, 其中一個解 67 不管是 否有用 redundancy 的方法處理 plaintext, 是不能選的. 因為已知當初加密的 m 用二進位 表示法應為 6 位數 (即小於 64), 而 67 的二進位表示是 7 位數, 故決不會是 m. 另外的一個 解 10 雖然用二進位表示為 1010, 看起來是將 10 重複寫兩次, 為什麼不選呢? 因為當初要 發送的數字用二進未來寫須為 3 位數, 這樣用 redundancy 來寫才會是 6 位數. 所以當初要 傳送的數字若二進位表示法是 10 (即 2), 那麼用 redundancy 的方法, m 的二進位表示法應 為 010010 (即 18), 而不是 001010.

3.3. 效率性. Rabin system 比起 RSA system 在執行效率上會比較快. 這是因為加密時 只要處理平方 (一次乘法), 而不像 RSA 至少要做 3 次方 (兩次乘法). 另外解密時 Rabin system 在 modulo p 和 modulo q 之下是固定分別升到 (p + 1)/4 和 (q + 1)/4 次方, 而 RSA 僅能確定在 modulo p 所升的次數可小於 p− 1, 而在 modulo p 所升的次數可小於 q − 1.

最後在求解時, 雖然 Rabin system 需求出四個解, 但多出的這些解僅是一些加減的運算, 這 個部分並不需多花太多時間.

3.4. 安全性. Rabin system 是公認比 RSA system 安全的編碼系統. 主要原因是可以證明 破解 Rabin system 就等同於可以將整數分解. 當然了, 若可以將 n 分解成 n = p· q, 我們就 可以用 3.1 的步驟解出 m 的四個可能值, 也因此破解了 Rabin system. 這裡我們要談論的 是如何從破解 Rabin system 推得 n 的分解.

所謂破解 Rabin system 表示給了 c, 可找到滿足 x2≡ c (mod n) 的四個解 m1, m2, m3, m4. 所以破解者可以隨機選一個整數 α ∈ {1,...,n}, 然後計算 gcd(α, n). 若 gcd(α, n)̸= 1, 由 n = p· q, 我們得 gcd(α, n) = p 或 gcd(α, n) = q, 也 因 此 分 解 了 n. 現 在 我 們 假 設 gcd(α, n) = 1. 此時考慮α2 除以 n 的餘數 c. 將此 c 置入破解系統解得 x2≡ c (mod n) 的 四個解 m1, m2, m3, m4. 由於已知 α 滿足 α2≡ c (mod n), 故得 α2≡ c (mod p) 以及 α2≡ c (mod q). 因此由 Lemma 3.1 我們可以假設

m1α (mod p), m1α (mod q) m2≡ −α (mod p), m2≡ −α (mod q)

m3α (mod p), m3≡ −α (mod q) m4≡ −α (mod p), m4α (mod q)

(4)

15

現考慮 m3α 和 n 的最大公因數. 首先我們有 p| m3α. 不過 q- m3α, 這是因為若 q| m3α, 則由 q| m3得 q| 2α, 又 q 為奇質數, 得到 q|α 之矛盾. 因此由 n = p· q, 得 gcd(m3α, n) = p, 也因此得到 n 的分解方式.

Question 3.1. 前面的說明中 gcd(m1α, n), gcd(m2α, n) 和 gcd(m4α, n) 分別為多少?

若我們將破解 Rabin system 的條件放鬆, 僅假設求得出 m1, m2, m3, m4 中任一個就視為 破解. 這樣從前面對 gcd(miα, n) 的探討知, 可以求出 n 的一個質因數的機率會是 1/2, 所 以這樣的情況來說, 選了 s 次的 α 仍得不到 n 的質因數的機率會是 1−(1/2)s. 因此我們也 可說這等同於找到分解 n 的一個有效的方法.

最後要注意的是, 如果我們要求 plaintext 符合某一特定形式, 以求解出唯一的 m, 此時 上述的方法就失效了. 簡單來說, 有可能選的 α 不符合規定, 那麼破解系統就得不到 α, 而 若 α 符合規定那麼破解系統仍解回α, 這樣就無法分解 n 了. 也因此當我們要求 plaintext 符合某一特定形式時, 破解 Rabin system 的難度就無法確認和分解整數的難度一致了.

3.5. 注意事項. Rabin system 可以視作是將 RSA system 推廣到取 e = 2 的情況 (注意在 RSA 中是不能取 e = 2 的). 所以在 RSA 系統中要注意的事項, 這裡也都會有同樣的情況 發生. 因此選 p, q 時仍要隨機的選取.

另外不要加密相同的 plaintext m 給兩個 Rabin system 的 public key 使用者, 以避免 lower-exponent attack. 萬一非得要傳輸相同的資訊, 可以考慮多加一些沒意義的幾碼在最 後, 使得兩個 plaintext 不相同.

當然了 Rabin system 也有可乘性 (multiplicativity) 所以也要注意 existential forgery 的 情形.

前面提過, 處理整數的開平方根問題 (即單純的求

a) 比處理 congruence equation 的開 平方根問題 (即解 x2≡ a (mod n)) 簡單. 今天若是要用 Rabin system 使用 public key n 加 密一份有意義的 plaintext m, 其中 m2< n, 則所得的 ciphertext c = m2 在 modulo n 之下 仍為一個完全平方. 也就是說一般人都可以解出 m 且知道其意義. 因此要注意避免這一情 況發生. 當然了有可能你要傳輸的 plaintext m 滿足 m2> n 但在 modulo n 之下 c 仍為完 全平方. 例如 n = 77, m = 27, 此時 c≡ 272≡ 36 (mod 77). 雖然我們可以知道 6,−6 ≡ 71 (mod 77) 是可能的 plaintext, 但若不知道 n = 7× 11, 是無法從這裡解出另外兩個解 27,50.

參考文獻

相關文件

可以預知的, 一個 asymmetric 編碼系統因為 encryption function 複雜, 所以 才會造成 encryption function 很難找到..

在這一節, 我們介紹 subspace 的概念, 簡單地說, 對於一個 vector space 的非空子集合, 如果 在此 vector space 的加法及係數積運算之下這個子集合亦為 vector space, 則稱為此 vector space

好了既然 Z[x] 中的 ideal 不一定是 principle ideal 那麼我們就不能學 Proposition 7.2.11 的方法得到 Z[x] 中的 irreducible element 就是 prime element 了..

當我們拿到或自己設定了一個 function 後就必須說明它是一個 “well-defined function”, 也就是說要檢查它真的符合成為 function 的條件 (用比喻的說法就是說明它是一個好機器)..

不過這些 定理在一般狀況之下也成立, 雖然我們不會去談 infinite dimensional vector space, 不過利用 linear transformation 的性質來證明這些 isomorphism 更能讓我們了解這些 vector spaces

對一般 inner product space, 我們將介紹一個方法找到它的一組 orthogonal basis, 也因此證明了對於一般的 inner product space 一定存在 orthogonal basis (以及 orthonormal basis)...

在這一節中, 我們介紹 change of basis 的概念, 了解到一個 linear operator 換了 ordered basis

另外要注意的是在 Theorem 5.3.5 中我們強調一個 linear transformation 的 adjoint 是 唯一的, 這是在給定一個 inner product 的條件之下.. 在不同的 inner product 之下, 一個 linear