又名尤拉函數、歐拉函數
φ(n):比 n 小且與 n 互質的數
φ(4) = 2
因為比4小且互質的數有 1 和 3
7 / 4 = 1 ... 3
7 mod 4 = 3
4 稱為「模數」
性質
(5 mod 3) ∗ (7 mod 3) = (5 ∗ 7) mod 3 = 2
除法
Example:
16 / 2 mod 3 = 2
可以看成是 16 乘以 2 在模數 3 的模反元素
16 ∗ invert(2,3) mod 3
等於
16 * 2 mod 3 = 2
這個 invert 指 2 在模數 3 下的模反元素
乘法反元素: 兩個數字相乘 = 1
Example:3 和 1/3 互為對方的乘法反元素
模反元素: 兩個數字相乘後,除以模數的餘數 = 1
Example:e = 3 、 d = 5 、 $φ$(n) = 7
求法
Python
from Crypto.Util.number import inverse
print(inverse(3, 7)) # 5
import gmpy2 print(gmpy2.invert(3, 7)) # 5
金鑰生成
選兩個質數 p
、q
n = p * q
φ(n) = (p-1) * (q-1)
隨便找個數字 e
小於 φ(n)
gcd(e, φ(n)) = 1
透過 e 與 φ(n) 計算 d
e * d mod φ(n) = 1
(即 d 為 e 在 mod φ(n) 下之乘法反元素)Public Key = (e, n)
Private Key = d
加密:C(密文) = P(明文)^e^ mod n
C = pow(M,e,N)
M = pow(C,d,N)
明文必定小於 n
P(明文)=2
已知 n = 33、e = 13 ,則
加密
解密
想請問模運算的例子:
16 / 2 mod 3 = 2
↓
16 ∗ invert(2,3) mod 3
這樣的等式是怎麼推導出來的,以及他有甚麼限制條件,應該是被除數一定要是偶數?