RSA算法推導

預備知識:

0. 模運算基本性質

(a + b) % p = (a % p + b % p) % p

(a - b) % p = (a % p - b % p) % p

(a * b) % p = (a % p * b % p) % p

(a^b) % p = ((a % p)^b) % p

推論: (符號定義,模等:a≡b (% p) <=> a%p = b % p)

若a≡b (% p),則對于任意的c,都有(a + c) ≡ (b + c) (%p);

若a≡b (% p),則對于任意的c,都有(a * c) ≡ (b * c) (%p);?

若a≡b (% p),c≡d (% p),則 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p), (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p)

證明方法: a = k1*p + a%p; b = k2*p + b % p, 將這兩個式子帶入上面等式的左邊,即可求證


1. 互質(coprime)

兩個數的最大公因子是1,則這兩個數互質

2. 歐拉函數

定義:φ(n) 表示小于n且與n互質的數的個數

歐拉函數:如果p是一個質數,則φ(p^k) = p^k - p^(k-1) = p^k(1-1/p)

證明:
p是大于1的整數,則p和p-1構成互質關系,比如57和56
小于等于p^k的正整數一共p^k個,和p^k不互質的數,一定是p的倍數,他們是 p, 2*p, 3*p, ..... p^(k-1) * p
所以小于等于p^k 與 p^k互質的數,有 p^k - p^(k-1)個

推理:如果p,q是質數,φ(p * q) = φ(p) * φ(q)

證明:網搜中國剩余定理,略

3. 歐拉定理?

歐拉定理:?
? ? 如果兩個正整數a和n互質,則n的歐拉函數 φ(n) 滿足:a^φ(n) ≡ 1 (mod? n)
? (歐拉函數證明
費馬小定理:?
? ? a是不能被素數p整除的正整數,則有a^(p-1) ≡ 1 (mod p) => 歐拉定理代進來就可以證明了
個人推理:
? ? 如果兩個正整數a和n互質,則n的歐拉函數 φ(n) 滿足:a^(k * φ(n))?≡ 1 (mod? n)
個人推理證明:
a^(k * φ(n)) % p = ((a ^ φ(n) )^k) % p = ((a ^ φ(n) ) % p)^k % p = 1^k % p = 1

歐拉定理的應用的例子:計算 7^222 的個位數
解:
∵ 7 和 10 互質,φ(10) = 4 ∴ 7^4 mod 10 = 1
7^222 % 10 = ((7^4)^55 %10)* (7^2%10) = 7^2 % 10 (參見歐拉定理個人推理) = 9
帶入 (a^b) % p = ((a % p)^b) % p, 7^222 = (7^4)^55 mod?

4. 模反元素

定義:
? ? ab?≡ 1(mod n),其中a和n互質,則稱b為a的對n的模反元素
定理:
? ? 如果a和n互質,則a的模反元素必定存在
證明:
a * a^(φ(n)-1) = a ^ φ(n) ; 根據歐拉定理:a ^ φ(n)?≡ 1(mod n)
那么?a^(φ(n)-1) 就是a對n的模反元素,必然是存在的


RSA原理&過程

秘鑰生成過程

1. ?p 和 q是兩個大素數

2. n = p * q

3. φ(n) = (p-1) * (q-1)? (參見歐拉定理推理)

4.?找一個與φ(n)互質的數e ?且1 < e < φ(n)?

5. 找到一個正整數d, d * e ≡ 1(mod φ(n)) (d為e的模反元素)
求解過程: (e的存在性,就是歐拉定理)
d * e - 1 = k * φ(n) => 等效于求解 d * e + k * φ(n) = 1, 其中 e, φ(n) 已知,
因為這個方程是一條直線,可以得到無數個解,能某一種的解法通常能得到一組解

6. 綜上,這個時候,公鑰和私鑰產生了
公鑰: (e, n)
私鑰:(d, n)

安全性證明

(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d

(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

(3)n=pq。只有將n因數分解,才能算出p和q。=> npc問題

加密過程: (M 明文;C 密文)

1. 將明文內容,適當切割,這樣每一段明文能用 0 ~ n-1 的一個整數表示

2. 對于每一段明文M

M^e?≡ C (mod n): 公鑰加密 C = M^e mod n

3. 解密時

C^d?≡ M (mod n):私鑰解密 M = C^d mod n

加密和解密的證明

要證明?C^d?≡ M (mod n) ①
M^e?≡ C (mod n)? ∴ C = M^e - kn ②;k為一個常數
將②代入①,
只需證明
(M^e - k*n)^d?≡ M (mod n)? ②? ? ?
根據本文開頭同余的定義
(M^e - k*n)^d % n =?(M^e%n - k*n%n)^d % n = (M^e%n)^d%n =? M^(ed) %n
所以要證明②,只需證明
?M^(ed)?≡?M (mod n) ③
∵?ed ≡ 1 (mod φ(n))? ∴?ed = hφ(n)+1, 代入 ③得到,只需證明
?M^(hφ(n)+1)?≡M (mod n)? ④

接下來分兩種情況:
A. M與N互質
M^(hφ(n)+1) =?M^(hφ(n)) * M 根據歐拉定理,M^(hφ(n)) mod n = 1, 得證

B. M與N不互質 (有時間了再推導一下)
因為 N = p * q兩個素數的乘積,∴ M = kp or M = kq,只需證明M=kp的情況,代入M = kp, 有:
M^(hφ(n)+1) = (kp) ^ (hφ(n)+1) = (kp)^(h(p-1)(q-1)) * kp ⑤
∵ (kp)^φ(q)??≡ 1 (mod q) …… p,q 互質,歐拉定理
∴(kp)^(q-1)?≡ 1 (mod q) 代入⑤有
?(kp)^(h(p-1)(q-1)) * kp?≡ (kp)^(q-1) (mod n)??≡ (kp)^(p-1) (mod (p*q))?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、RSA的歷史 1976 年以前,所有的加密方法都是同一種模式: (1)甲方選擇某一種加密規則,對信息進行加密;...
    開著保時捷堵你家門口閱讀 2,390評論 0 1
  • 了解概念 相關資料https://www.kancloud.cn/kancloud/rsa_algorithm/4...
    Lou00閱讀 788評論 0 0
  • 關于使用python實現RSA加密解密 一、非對稱加密算法 1、乙方生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何...
    ttaymm閱讀 957評論 0 0
  • 本文結構: 一些基本的數學知識 RSA的具體過程 為什么RSA的私鑰解密一定能得到明文 RSA算法可靠嗎 RSA算...
    風再起時ME閱讀 3,378評論 2 2
  • 美國著名演講家愛默生說:“人用眼睛會話時,其優點幾乎與舌頭完全一樣,眼睛的語言完全無需借助字典,全世界都能理解這種...
    linsa周閱讀 305評論 0 2