博主是初学公钥密码,本意是想整理一些经典的密码系统,加深记忆也方便日后查找;整理成一个系列公钥密码,方便检索。
如果有错,欢迎指正。
RSA非对称加密算法是由Rivest,Shamir,Adleman三人在1978年的“A Method for Obtaining Digital Signatures and Public-Key Cryptosystems”一文中提出,Euler’s Theorem、Fermat Little Theorem、循环群都和RSA公钥密码系统有关。RSA的思想是公钥加密,私钥解密。
常用符号
- p k pk pk:公钥public key
- s k sk sk:私钥secret key
- m m m:明文message
- c c c:密文ciphertext
加密方案
密钥
- pk:
(
n
,
e
)
(n,e)
(n,e)
- n:根据 φ ( m n ) = φ ( m ) φ ( n ) φ(mn)=φ(m)φ(n) φ(mn)=φ(m)φ(n),且素数 p p p的既约剩余系个数为 “ p − 1 ” “p-1” “p−1”,我们知道找两个素数 p , q p,q p,q,相乘得到 n = p q n=pq n=pq,那么 φ ( n ) = φ ( p q ) = φ ( 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:
d
d
d
- d: d ≡ e − 1 ( d\equiv e^{-1}( d≡e−1(mod φ ( n ) ) \varphi(n)) φ(n))
加密
c ≡ m e ( c\equiv m^e( c≡me(mod n ) n) n)
解密
m ≡ c d ( m\equiv c^d( m≡cd(mod n ) n) n)
正确性
d ≡ e − 1 ( d\equiv e^{-1}( d≡e−1(mod φ ( n ) ) → e d ≡ 1 ( \varphi(n))\\ \rightarrow ed\equiv 1( φ(n))→ed≡1(mod φ ( n ) ) → e d = 1 + k ⋅ φ ( n ) \varphi(n))\\ \rightarrow ed=1+k·\varphi(n) φ(n))→ed=1+k⋅φ(n)
c d ( c^d( cd(mod n ) ≡ ( m e ) d ( n)\\ \equiv(m^e)^d( n)≡(me)d(mod n ) ≡ m e d ( n)\\ \equiv m^{ed}( n)≡med(mod n ) ≡ m 1 + k ⋅ φ ( n ) ( n)\\ \equiv m^{1+k·\varphi(n)}( n)≡m1+k⋅φ(n)(mod n ) ≡ m ⋅ m k ⋅ φ ( 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 , q p,q p,q是素数,则根据费马小定理知 m p ≡ m ( \\ m^p\equiv m( mp≡m(mod p ) → m p − 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 ) → m k ⋅ φ ( 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)
所以 c d ≡ m ( c^d\equiv m( cd≡m(mod n ) n) n)
安全性
RSA的安全性基于大整数素因子分解的困难假设。
- 大整数素因子分解问题: p , q p,q p,q为大素数, n = p ⋅ q n=p\cdot q n=p⋅q,已知 n n n,想要求解 p , q p,q p,q。
- 因为RSA的私钥 d ≡ e − 1 d\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),所以只要能由 n n n分解出 p , q p,q p,q,就可以计算出 ϕ ( n ) \phi(n) ϕ(n),因为 e e e是公开的,从而可计算出 d d d,求解明文 m m m。
大整数素因子分解问题属于 N P NP NP复杂性类。