公钥密码--RSA
公鑰密碼--RSA
- 加密方案
- 正確性
- 安全性
博主是初學公鑰密碼,本意是想整理一些經典的密碼系統,加深記憶也方便日后查找;整理成一個系列公鑰密碼,方便檢索。
如果有錯,歡迎指正。
RSA非對稱加密算法是由Rivest,Shamir,Adleman三人在1978年的“A Method for Obtaining Digital Signatures and Public-Key Cryptosystems”一文中提出,Euler’s Theorem、Fermat Little Theorem、循環群都和RSA公鑰密碼系統有關。RSA的思想是公鑰加密,私鑰解密。
常用符號
- pkpkpk:公鑰public key
- sksksk:私鑰secret key
- mmm:明文message
- ccc:密文ciphertext
加密方案
密鑰
- pk:(n,e)(n,e)(n,e)
- n:根據φ(mn)=φ(m)φ(n)φ(mn)=φ(m)φ(n)φ(mn)=φ(m)φ(n),且素數ppp的既約剩余系個數為“p?1”“p-1”“p?1”,我們知道找兩個素數p,qp,qp,q,相乘得到n=pqn=pqn=pq,那么φ(n)=φ(pq)=φ(p)φ(q)=(p?1)(q?1)\varphi(n)=\varphi(pq)=\varphi(p)\varphi(q)=(p-1)(q-1)φ(n)=φ(pq)=φ(p)φ(q)=(p?1)(q?1)
- e:隨機選取整數1<e<φ(n)1<e<\varphi(n)1<e<φ(n),使得(e,φ(n))=1(e,\varphi(n))=1(e,φ(n))=1
- sk:ddd
- d:d≡e?1(d\equiv e^{-1}(d≡e?1(mod φ(n))\varphi(n))φ(n))
加密
c≡me(c\equiv m^e(c≡me(mod n)n)n)
解密
m≡cd(m\equiv c^d(m≡cd(mod n)n)n)
正確性
d≡e?1(d\equiv e^{-1}(d≡e?1(mod φ(n))→ed≡1(\varphi(n))\\ \rightarrow ed\equiv 1(φ(n))→ed≡1(mod φ(n))→ed=1+k?φ(n)\varphi(n))\\ \rightarrow ed=1+k·\varphi(n)φ(n))→ed=1+k?φ(n)
cd(c^d(cd(mod n)≡(me)d(n)\\ \equiv(m^e)^d(n)≡(me)d(mod n)≡med(n)\\ \equiv m^{ed}(n)≡med(mod n)≡m1+k?φ(n)(n)\\ \equiv m^{1+k·\varphi(n)}(n)≡m1+k?φ(n)(mod n)≡m?mk?φ(n)(n)\\ \equiv m·m^{k·\varphi(n)}(n)≡m?mk?φ(n)(mod n)≡m?(mφ(n))k(n)\\ \equiv m·(m^{\varphi(n)})^k(n)≡m?(mφ(n))k(mod n)n)n)
- 若(m,n)=1(m,n)=1(m,n)=1,則根據歐拉定理知mφ(n)≡1(m^{\varphi(n)}\equiv 1(mφ(n)≡1(mod n)→m?(mφ(n))k≡m(n)\rightarrow m·(m^{\varphi(n)})^k\equiv m(n)→m?(mφ(n))k≡m(mod n)n)n)
- 若(m,n)≠1(m,n)\neq 1(m,n)?=1,因為p,qp,qp,q是素數,則根據費馬小定理知mp≡m(\\ m^p\equiv m(mp≡m(mod p)→mp?1≡1(p)\\ \rightarrow m^{p-1}\equiv 1(p)→mp?1≡1(mod p)→mφ(p)≡1(p)\\ \rightarrow m^{\varphi(p)}\equiv 1(p)→mφ(p)≡1(mod p)→(mφ(p))φ(q)?k≡1(p)\\ \rightarrow (m^{\varphi(p)})^{\varphi(q)·k}\equiv 1(p)→(mφ(p))φ(q)?k≡1(mod p)→mk?φ(n)≡1(p)\\ \rightarrow m^{k·\varphi(n)}\equiv 1(p)→mk?φ(n)≡1(mod p)→m?(mφ(n))k≡m(p)\\ \rightarrow m·(m^{\varphi(n)})^k\equiv m(p)→m?(mφ(n))k≡m(mod n)n)n)
所以cd≡m(c^d\equiv m(cd≡m(mod n)n)n)
安全性
RSA的安全性基于大整數素因子分解的困難假設。
- 大整數素因子分解問題:p,qp,qp,q為大素數,n=p?qn=p\cdot qn=p?q,已知nnn,想要求解p,qp,qp,q。
- 因為RSA的私鑰d≡e?1d\equiv e^{-1}d≡e?1 mod ?(n)\phi(n)?(n),?(n)=?(p)?(q)=(p?1)(q?1)\phi(n)=\phi(p)\phi(q)=(p-1)(q-1)?(n)=?(p)?(q)=(p?1)(q?1),所以只要能由nnn分解出p,qp,qp,q,就可以計算出?(n)\phi(n)?(n),因為eee是公開的,從而可計算出ddd,求解明文mmm。
大整數素因子分解問題屬于NPNPNP復雜性類。
總結
- 上一篇: c++服务器开发学习--03--Trin
- 下一篇: 近世代数--群同构--第二同构定理