RSA 加密演算法原理學習筆記-1
RSA 加密演算法
RSA 加密演算法是一種非對稱加密演算法,加密和解密的金鑰是不同的。
(1)乙方生成兩把金鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
(2)甲方獲取乙方的公鑰,然後用它對資訊加密。
(3)乙方得到加密後的資訊,用私鑰解密
金鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長 RSA 金鑰是 768 個二進位制位。也就是說,長度超過 768 位的金鑰,還無法破解(至少沒人公開宣佈)。因此可以認為,1024 位的 RSA 金鑰基本安全,2048 位的金鑰極其安全。
基礎數論知識
同餘定理
給定一個正整數,如果兩個整數 a 和 b 滿足 a - b 能夠被 m 整除,即 (a-b)/m 得到一個整數,那麼就稱整數 a 與 b 對模 m 同餘,記作 $a \equiv b \pmod m$。對模 m 同餘是整數的一個等價關係。
- 即 $a \div m = k \cdots b$ ,換句話說,就是 a 除以 m 餘 b。
- 即 $(a - b) \div m = k,$可以改寫成:$b = a - km$
- 根據定義,這個恆等式的變換可以看成:$a \equiv b \pmod m$,b 左移:$a - b = km$
- 掌握好這幾個小結論,後續論證中會使用到。
互質關係
兩個正整數只有 1 這個公因子,那麼這兩個數有互質關係。
- 別忘了,兩個相等的數是不互質的,公因數除 1 外還有本身。所以互質的兩個數肯定是不等的,定義裡已經排除了這種可能性。
- 兩個不等的質數一定互質(下面的第 2 點),因為他們的因數都只有 1 和本身,所以相同的因數只有 1。反過來不成立。
- 一些結論:
- 1 和任意一個自然數是都是互質關係,比如 1 和 99。
- 任意兩個質數構成互質關係,比如 13 和 61。
- 一個數是質數,另一個數只要不是前者的倍數或者小於前者,兩者就構成互質關係,比如 3 和 10、17 和 4。
- p 是大於 1 的整數,則 p 和 p-1 構成互質關係,比如 57 和 56。
- p 是大於 1 的奇數,則 p 和 p-2 構成互質關係,比如 17 和 15。
- 質數:2,3,5,7,11,13,17,19,23,29,31,37...
尤拉函式
計算小於等於 n 的所有正整數中,與 n 有互質關係的所有正整數個數。這種演算法稱為尤拉函式,以 φ(n)
這個函式可以根據互質關係的相關結論計算(以下 =
為等於,不是程式碼中的賦值):
-
n = 1
:φ(1) = 1
。 -
n
為質數:φ(n) = n-1
。因為小於n
的數都與n
互質。 -
n
為某質數某次方,n = p^k
(p
為質數,k
為大於等於1的整數):
那麼,$$\phi(n) = \phi(p^k) = p^k - p^{k-1}$$- 比如
n = 8
,$φ(8) = φ(2^3) = 2^3 - 2^2 = 8 - 4 = 4$。 - 這是因為只有當一個數不包含因數 p,才與
n
互質。包含因數 p 的數有:$1×p、2×p、3×p、...p^{k-1}×p$ 共 $p^{k-1}$ 個。 - 可以看出上面第 2 種情況是
k = 1
時的特例。 - 公式也可以寫成:$$\phi(n) = \phi(p^k) = p^k - p^{k-1} = p^k(1-\frac1p)$$
- 比如
-
n
可以分解成兩個互質的整數之積,n = p × q
:
$$\phi(n) = \phi(pq) = \phi(p)\phi(q)$$- 即:積的尤拉函式等於各個因子的尤拉函式之積
- 比如,$φ(56) = φ(8×7) = φ(8)×φ(7) = 4×6 = 24$。
- 證明需要使用“中國剩餘定理”。
-
最終通用推算:
算術基本定理:任意一個大於 1 的正整數,都可以寫成一系列質數的積:$n = p{k_1}_1p{k_2}_2 \ldots p^{k_r}_r$(它將把對自然數的研究轉化為對其最基本的元素——質數/素數的研究)。
因此根據第 4 種情況的結論(可拆),得到任意一個大於 1 的正整數的尤拉函式:$\phi(n) = \phi(p{k_1}_1)\phi(p{k_2}_2)\ldots\phi(p^{k_r}_r)$;
再根據第 3 種情況的結論(原數是質數多次方),可改寫為:$\phi(n) = p{k_1}_1p{k_2}_2...p^{k_r}_r(1-\frac1p_1)(1-\frac1p_2)\ldots(1-\frac1p_r)$;
也就是:
$$\phi(n) = n(1-\frac1p_1)(1-\frac1p_2)\ldots(1-\frac1p_r)$$
這便是尤拉函式的通用計算公式。
尤拉定理
尤拉函式的應用在於尤拉定理。
尤拉定理:如果兩個正整數 a 和 n 互質,則 n 的尤拉函式
φ(n)
可以讓下面的等式成立:
$$a^{\phi(n)} \equiv 1 \pmod n$$
- 即:
a
的φ(n)
次方除以n
的餘數恆等於1
。 - 或者說:
a
的φ(n)
次方減1
可以被n
整除。
比如 4 和 5:
4 的尤拉函式結果為 2,滿足 $5^2 \div 4 = 6 \cdots 1$。也就是 $(5^2 -1 )$ 可以被 4 整除。
- 一個小例子,7 和 10 為互質關係,因為
φ(10) = 4
,所以 $7^4 \div 10$ 最終餘 1,也就是說其個位數為 1。
那麼,7 的任意 4 倍數次方個位數肯定是 1,即:$7^{4k} \equiv 1 \pmod {10}$(因為個位數為 1 的任意個這種數相乘個位數肯定還是 1 啊)。- 計算
φ(10)
:拆為φ(2)φ(5)
;2
、5
都是質數,所以它們的尤拉函式結果是 2 - 1、5 - 1,即φ(2) = 1
、φ(5) = 4
。最終得到φ(10) = 4
。
- 計算
尤拉定理有一個特殊的情況,假設正整數 a 與質數 p 為互質關係,因為 φ(p) = p - 1
,那麼:
$$a^{p-1} \equiv 1 \pmod p$$
這就是費馬小定理,是尤拉定理中一個數為質數的特例。
模反元素(模逆元)
如果兩個正整數 a 和 n 互質,那麼一定可以找到整數 b ,使得 ab-1 被 n 整除,或者說 ab 被 n 除的餘數是 1,那麼:
$$ab \equiv 1 \pmod n$$
稱 b 為 a 的模反元素(稱模反元素時,還需要另一個數 n 作為環境)。
- 可以根據尤拉定理進行驗證模反元素存在的必然性:
$\because$ a 和 n 互質滿足尤拉定理
$\therefore$ 根據尤拉定理得:$a^{\phi(n)} \equiv 1 \pmod n$
即 $a \times a^{\phi(n-1)} \equiv 1 \pmod n$
$\therefore$ 設 $b = a^{\phi(n-1)}$,那麼 b 就是 a 的一個模反元素
比如,4 和 7 互質,利用尤拉定理求:$φ(4) = φ(2^2) = 2^2 - 2^1 = 2$,所以 $7^2 = 1 \pmod 4$,因為不能再取 b為 7,所以就換另一邊計算。
$φ(7) = 7 - 1 = 6$,所以 $4^6 = 1 \pmod 7$,得到 $4 \times 4^5 = 1 \pmod 7$,可以獲得 45 是 4 的一個模反元素。
顯然模反元素不止一個。45加減任意個 7 均是 4 的模反元素,既滿足 b + kn 即可(b 是45,n 是 7)。
- 所以計算模反元素時可以使用方程式: $ab - 1 = kφ(n)$。