公钥密码--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
- 下一篇: 近世代数--群同构--第二同构定理