如果要加密明文 m m m,使用公开密钥进行加密: m e ≡ c ( m o d n ) m^e\equiv c\pmod n me≡c(modn)得到密文 c c c。
如果要解密密文 c c c,使用私人密钥进行解密: c d ≡ m ( m o d n ) c^d\equiv m\pmod n cd≡m(modn)得到明文 m m m。
由于公开密钥 ( e , n ) (e,n) (e,n) 是公开的,所以任何人都可以对明文进行加密。但是私人密钥 ( d , n ) (d,n) (d,n) 是私有的,所以只有持有私人密钥的人才可以对密文进行解密。
对正整数 n n n,欧拉函数 φ ( n ) \varphi(n) φ(n) 是指小于等于 n n n 的正整数中与 n n n 互质的数的数目。比如 φ ( 5 ) = 4 , φ ( 6 ) = 2 \varphi(5)=4,\varphi(6)=2 φ(5)=4,φ(6)=2。
欧拉函数有如下性质(讲解和证明在后面):
性质 1 1 1 为规定,不解释。
性质 2 2 2 很好理解,因为 p p p 是质数,它肯定与 1 ∼ p − 1 1\sim p-1 1∼p−1 中的每个数都互质,因此 φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p−1。
性质 3 3 3 可以这样理解:在 1 ∼ p k 1\sim p^k 1∼pk 中,所有 p p p 的倍数都不与 p k p^k pk 互质,这样的数有 p k p = p k − 1 \dfrac{p^k}p=p^{k-1} ppk=pk−1 个,而其他的所有不是 p p p 的倍数的数都一定与 p p p 互质,也就一定与 p k p^k pk 互质。因此 φ ( p k ) = p k − p k − 1 \varphi(p^k)=p^k-p^{k-1} φ(pk)=pk−pk−1。
或者可以这样理解:每 p p p 个数中都有 p − 1 p-1 p−1 个与 p p p 互质,因此 n n n 个数中就有 n ∗ p − 1 p n*\dfrac{p-1}{p} n∗pp−1 个与 p p p 互质,也就与 p k p^k pk 互质,令 n = p k n=p^k n=pk 可得 φ ( p k ) = p k ∗ p − 1 p = p k − p k − 1 \varphi(p^k)=p^k*\dfrac{p-1}{p}=p^k-p^{k-1} φ(pk)=pk∗pp−1=pk−pk−1。
性质 4 4 4 表明欧拉函数是一个积性函数。证明稍微有复杂,可以看这篇
性质 5 5 5 就是性质 4 4 4 的一个拓展,也是欧拉函数的通项公式,很重要。
除此之外欧拉函数还有很多其他奇奇怪怪的性质,不过与本篇无关,不多赘述,想了解的可以去 OI wiki。
若 a , n a,n a,n 互质,则: a φ ( n ) ≡ 1 ( m o d n ) a^{\varphi(n)}\equiv 1\pmod{n} aφ(n)≡1(modn)
证明用到了初等数论中的剩余系。你想懂?我屋里有一些好康的 把初等数论第三章看完就会了。
此外,当 n n n 是一个质数 p p p 时,公式化简为: a φ ( p ) = a p − 1 ≡ 1 ( m o d p ) a^{\varphi(p)}=a^{p-1}\equiv 1\pmod{p} aφ(p)=ap−1≡1(modp)这个就是欧拉函数的特殊情况,也就是大名鼎鼎的费马小定理。学算法的一定不陌生。
稍微对上面的欧拉公式改写一下,就可以得到: a ∗ a φ ( n ) − 1 ≡ 1 ( m o d n ) a*a^{\varphi(n)-1}\equiv 1\pmod{n} a∗aφ(n)−1≡1(modn)因为对任意正整数 n n n,有 φ ( n ) ≥ 1 \varphi(n)\ge 1 φ(n)≥1,因此 a φ ( n ) − 1 a^{\varphi(n)-1} aφ(n)−1 是一个正整数,不妨设 b = a φ ( n ) − 1 b=a^{\varphi(n)-1} b=aφ(n)−1,则有: a b ≡ 1 ( m o d n ) ab\equiv 1\pmod{n} ab≡1(modn)在 a , n ∈ N + a,n\in N^+ a,n∈N+ 且互质的情况下,根据欧拉公式,这个 b b b 是一定存在的。此时 b b b 就叫做 a a a 对模数 n n n 的 “模反元素”。或者换个说法, b b b 是 a a a 在模 n n n 情况下的乘法逆元。
乘法逆元说白了就是倒数,因为你可以把 b b b 看成是 a − 1 a^{-1} a−1,一个数和它的倒数相乘,结果不就正好等于 1 1 1 吗。( a ∗ b ≡ a ∗ a − 1 = 1 ( m o d n ) a*b\equiv a*a^{-1}=1\pmod n a∗b≡a∗a−1=1(modn))
若 a , n a,n a,n 互质,则对于任意正整数 b b b,有 a b ≡ a b m o d φ ( n ) ( m o d n ) a^b\equiv a^{b \bmod \varphi(n)}\pmod{n} ab≡abmodφ(n)(modn)
设 b = q ∗ φ ( n ) + r b=q*\varphi(n)+r b=q∗φ(n)+r,其中 0 ≤ r < φ ( n ) 0\le r\lt \varphi(n) 0≤r<φ(n),即 r = b m o d φ ( n ) r = b\bmod \varphi(n) r=bmodφ(n)。于是: a b ≡ a q ∗ φ ( n ) + r ≡ ( a φ ( n ) ) q ∗ a r ≡ 1 q ∗ a r ≡ a r ≡ a b m o d φ ( n ) ( m o d n ) a^b\equiv a^{q*\varphi(n)+r}\equiv (a^{\varphi(n)})^q*a^r\equiv 1^q*a^r\equiv a^r\equiv a^{b \bmod \varphi(n)}\pmod{n} ab≡aq∗φ(n)+r≡(aφ(n))q∗ar≡1q∗ar≡ar≡abmodφ(n)(modn)
有不明白的公式就往上翻,公式的形式在上面全都给出来了。
目前已知的公开的变量只有 e , n e,n e,n,私人持有密钥 d d d,而 p , q , φ ( n ) p,q,\varphi(n) p,q,φ(n) 都是未知且足够安全( φ ( n ) \varphi(n) φ(n) 未知是因为要知道它就必须对 n n n 进行质因数分解,但是 n n n 过大无法分解)。
如果一个人没有密钥 d d d 想要破解密文 c c c,就需要根据 e e e 算得它在模数 φ ( n ) \varphi(n) φ(n) 下的逆元 d d d,这就必须知道 φ ( n ) \varphi(n) φ(n),但是它足够安全无法获取。如此一来RSA算法就保证了密文和密钥的安全性。
百度百科 RSA算法
百度百科 模反元素
OI wiki 欧拉定理 & 费马小定理
OI wiki 乘法逆元
bilibili 初等数论-闵嗣鹤-严士健-第四版-无尽沙砾讲解
Puppy_L RSA算法原理详解(简单易懂)
知乎 欧拉函数(Euler’s totient function) 公式、积性 证明
算法竞赛进阶指南 李煜东著
老师的课件(笑)