- 在RAS体系(一)数学基础的最后已经介绍了RSA密钥生成算法,此时已经获得了一对公私钥。对方使用我的公钥对明文进行加密后得到密文,我收到密文后使用保护好的私钥进行解密,获得原本内容。
RSA密钥生成算法.
加密算法.
- 加密使用幂模运算,公钥为 ( e , n ) (e,n) (e,n),明文为 X X X,那么密文 Y = X e m o d n . Y=X^e~mod~n. Y=Xe mod n.
解密算法.
- 解密使用幂模运算,私钥为 ( d , n ) (d,n) (d,n),密文为 Y Y Y,那么明文 X = Y d m o d n . X=Y^d~mod~n. X=Yd mod n.
解密算法有效性.
- 加密算法有效性很直观,容易理解,但解密算法的有效性不那么清晰,关键在于:为什么对密文进行幂模运算后就能够得到明文。
- 加密过程使用的幂模运算 Y = X e m o d n Y=X^e~mod~n Y=Xe mod n 等价于 X e − Y = k n X^e-Y=kn Xe−Y=kn,即 Y = X e − k n Y=X^e-kn Y=Xe−kn.
- 将密文 Y Y Y 代入解密运算 X = Y d m o d n = ( X e − k n ) d m o d n X=Y^d~mod~n=(X^e-kn)^d~mod~n X=Yd mod n=(Xe−kn)d mod n,考察 ( X e − k n ) d (X^e-kn)^d (Xe−kn)d,根据二项式定理,除了第一项 X e d X^{ed} Xed 以外,之后的每一项中都有因式 k n kn kn,因此 ( X e − k n ) d m o d n = X e d m o d n (X^e-kn)^d~mod~n=X^{ed}~mod~n (Xe−kn)d mod n=Xed mod n.
- 回顾RSA密钥生成算法中 ( e , d ) (e,d) (e,d) 产生的公式 e d ≡ 1 ( m o d ϕ ( n ) ) ed≡1(mod~\phi(n)) ed≡1(mod ϕ(n)),所以有 e d − 1 = t ⋅ ϕ ( n ) ed-1=t·\phi(n) ed−1=t⋅ϕ(n),因此上面的式子可以写为 X t ⋅ ϕ ( n ) + 1 m o d n X^{t·\phi(n)+1}~mod~n Xt⋅ϕ(n)+1 mod n.
- 【X与n互质】第一种情况,互质时根据欧拉定理,有 X ϕ ( n ) = k n + 1 X^{\phi(n)}=kn+1 Xϕ(n)=kn+1,所以 X t ϕ ( n ) = ( k n + 1 ) t X^{t\phi(n)}=(kn+1)^t Xtϕ(n)=(kn+1)t. 同样根据二项式定理可以发现 ( k n + 1 ) t m o d n = 1 (kn+1)^t~mod~n=1 (kn+1)t mod n=1
【模运算法则】 ( a b ) m o d n = [ ( a m o d n ) ( b m o d n ) ] m o d n (ab)~mod~n=[(a~mod~n)(b~mod~n)]mod~n (ab) mod n=[(a mod n)(b mod n)]mod n.
- 所以解密过程的公式 X t ⋅ ϕ ( n ) + 1 m o d n = [ ( X t ϕ ( n ) m o d n ) ( X m o d n ) ] m o d n = X m o d n X^{t·\phi(n)+1}~mod~n=[(X^{t\phi(n)}~mod~n)(X~mod~n)]mod~n=X~mod~n Xt⋅ϕ(n)+1 mod n=[(Xtϕ(n) mod n)(X mod n)]mod n=X mod n. 由于本情况中限制了 X X X 与 n n n 互质,因此当 X < n X<n X<n 时 X m o d n = X X~mod~n=X X mod n=X,解密算法可以还原出明文。
【RSA规范】关于 X ≥ n X≥n X≥n,RSA规范中限制了 X X X 的范围是 ( 0 , n − 1 ) (0,n-1) (0,n−1).
- 【X与n不互质】由于 n = p q n=pq n=pq,所以 n n n 只有这两个因子,显然 X X X 的因子中不能同时出现这两个数,否则将有 X ≥ n X≥n X≥n. 不妨令 X = k p X=kp X=kp,那么 X X X 和 q q q 互质,根据欧拉定理有 X ϕ ( q ) ≡ 1 ( m o d q ) , ϕ ( q ) = q − 1. X^{\phi(q)}≡1(mod~q),\phi(q)=q-1. Xϕ(q)≡1(mod q),ϕ(q)=q−1.
【同余性质】若 a ≡ b ( m o d n ) a≡b(mod~n) a≡b(mod n),则 a r ≡ b r ( m o d n ) a^r≡b^r(mod~n) ar≡br(mod n).
- 因此上式可以写为 X t ⋅ ϕ ( q ) ϕ ( p ) ≡ 1 ( m o d q ) X^{t·\phi(q)\phi(p)}≡1(mod~q) Xt⋅ϕ(q)ϕ(p)≡1(mod q),两边同时乘以 X X X,得 X t ⋅ ϕ ( q ) ϕ ( p ) + 1 ≡ X ( m o d q ) X^{t·\phi(q)\phi(p)+1}≡X(mod~q) Xt⋅ϕ(q)ϕ(p)+1≡X(mod q).
- 根据欧拉函数的性质可知 ϕ ( n ) = ϕ ( p ) ϕ ( q ) \phi(n)=\phi(p)\phi(q) ϕ(n)=ϕ(p)ϕ(q),所以 t ⋅ ϕ ( q ) ϕ ( p ) + 1 = t ϕ ( n ) + 1 = e d t·\phi(q)\phi(p)+1=t\phi(n)+1=ed t⋅ϕ(q)ϕ(p)+1=tϕ(n)+1=ed,所以 X e d ≡ X ( m o d q ) X^{ed}≡X(mod~q) Xed≡X(mod q),即 X e d = X + h q , h ∈ Z X^{ed}=X+hq,h∈Z Xed=X+hq,h∈Z. 本情况中假设了 X = k p X=kp X=kp,所以 ( k p ) e d = k p + h q (kp)^{ed}=kp+hq (kp)ed=kp+hq.
- 上述等式中 p ∣ ( k p ) e d p|(kp)^{ed} p∣(kp)ed,因此 p ∣ ( k p + h q ) p|(kp+hq) p∣(kp+hq),所以有 p ∣ h q p|hq p∣hq. 由于 p , q p,q p,q 互质,所以一定有 h = r p h=rp h=rp,所以 X e d = k p + h q = k p + r p q = X + r n X^{ed}=kp+hq=kp+rpq=X+rn Xed=kp+hq=kp+rpq=X+rn.
- 解密运算 X e d m o d n = ( X + r n ) m o d n = [ ( X m o d n ) ( r n m o d n ) ] m o d n = X m o d n X^{ed}~mod~n=(X+rn)~mod~n=[(X~mod~n)(rn~mod~n)]mod~n=X~mod~n Xed mod n=(X+rn) mod n=[(X mod n)(rn mod n)]mod n=X mod n,因为 X ∈ ( 0 , n − 1 ) X∈(0,n-1) X∈(0,n−1),所以 X m o d n = X X~mod~n=X X mod n=X,解密得到了明文。
破解RSA.
- RSA密钥生成算法中共涉及 p , q , n , e , d p,q,n,e,d p,q,n,e,d,其中 n , e , d n,e,d n,e,d 是保留的,并且 ( e , n ) (e,n) (e,n) 作为公钥公开,那么破解则是需要根据 e , n e,n e,n 推算出 d d d.
- e d ≡ 1 ( m o d ϕ ( n ) ) ed≡1(mod~\phi(n)) ed≡1(mod ϕ(n)),而 ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p−1)(q−1),所以需要知道用于生成 n n n 的两个相异素数 p , q p,q p,q.
- RSA加密安全性背后的数论原理:将两个大素数(例如现在使用的2048位)相乘很容易,但对乘积结果进行素因子分解,得到原来的两个素数却极为困难。