RSA加密与解密

RSA的原理

本文不深入到数学定理

加密:

m e ≡ c ( m o d N ) m^e \equiv c \pmod N mec(modN)
上面的公式解释:m的e次方与c 对模N同余。 简单理解即:
m e ÷ N = x . . . c m^e \div N = x ...c me÷N=x...c (me为被除数,N为除数,x为商,商不会用到,c为余数)
m为要加密的数字(明文),[N, e]这两个数组成一个公钥,c为密文。

解密:

c d ≡ m ( m o d N ) c^d \equiv m \pmod N cdm(modN)
同样:
c d ÷ N = y . . . m c^d \div N = y ...m cd÷N=y...m(cd为被除数,N为除数,y为商,商不会用到,m为余数)
[N, d]这两个数组成一个私钥。

上面两个公式连合起来解释一遍:
有个数m, 用me 除以N得到余数c,用cd除以N求余数又得回了m.

明文钥匙过程结果
加密m[N, e]公开的 m e ÷ N = x . . . c m^e \div N = x ...c me÷N=x...cc
解密c[N, d]要保密 c d ÷ N = y . . . m c^d \div N = y ...m cd÷N=y...mm

N, e, d的关系是什么?

N e d当然不是随便选的。
公式推导过程:

  1. 数论中的欧拉定理:
    m Φ ( N ) ≡ 1 ( m o d N ) m^{\Phi(N)} \equiv 1 \pmod N mΦ(N)1(modN) (m, N为正整数,且m, N互质)
  2. 跟据同余定理,两边可同时算k次方,1的k次方还是1
    m Φ ( N ) ⋅ k ≡ 1 k ( m o d N ) m^{\Phi(N)\cdot k} \equiv 1^k \pmod N mΦ(N)k1k(modN)
  3. 跟据同余定理,两过可以同时乘以m
    m Φ ( N ) ⋅ k + 1 ≡ 1 k ⋅ m ( m o d N ) m^{\Phi(N)\cdot k +1 } \equiv 1^k \cdot m \pmod N mΦ(N)k+11km(modN)
  4. 简化
    m Φ ( N ) ⋅ k + 1 ≡ m ( m o d N ) m^{\Phi(N)\cdot k +1 } \equiv m \pmod N mΦ(N)k+1m(modN)
  5. 设有正整数e和d
    e ⋅ d = Φ ( N ) ⋅ k + 1 e \cdot d = {\Phi(N)\cdot k +1 } ed=Φ(N)k+1(注意至此 N, d, e都有了)
  6. 上面的式子可写成
    e ⋅ d ≡ 1 ( m o d Φ ( N ) ) e \cdot d \equiv 1 \pmod{\Phi(N)} ed1(modΦ(N))(注意是 ( m o d Φ ( N ) ) \pmod{\Phi(N)} (modΦ(N)), 不是 ( m o d N ) \pmod{N} (modN)
    当e与 Φ ( N ) \Phi(N) Φ(N)互质时,根据欧拉定理可知,正整数d一定存在( e ⋅ e Φ ( Φ ( N ) ) − 1 ≡ 1 ( m o d Φ ( N ) ) e \cdot e^{\Phi(\Phi(N))-1} \equiv 1 \pmod {\Phi(N)} eeΦ(Φ(N))11(modΦ(N))
  7. 因此
    m e ⋅ d ≡ m ( m o d N ) m^{e\cdot d} \equiv m \pmod N medm(modN)
  8. 有了上面这个条件之后
    如果有 m e ≡ c ( m o d N ) m^{e} \equiv c \pmod N mec(modN) , 两边同时升d次幂,可得解密运算公式。

进一步理解N, e, d

Φ(N)是什么?

Φ ( N ) {\Phi(N)} Φ(N)是欧拉函数。(a为质数时欧拉函数可写成: Φ ( a ) = a − 1 {\Phi(a)}=a-1 Φ(a)=a1

N如何选择?

选取两个大质数p,q。 让 N = p ⋅ q N=p\cdot q N=pq,则有 Φ ( N ) = ( p − 1 ) ( q − 1 ) {\Phi(N)} = (p-1)(q-1) Φ(N)=(p1)(q1)(参考积性函数的性质)

e如何选择?

e是公钥的一部分,通常是65537(这是个质数)

d如何选择?

根据等式 d = Φ ( N ) ⋅ k + 1 e d = \frac{\Phi(N)\cdot k +1 }{e} d=eΦ(N)k+1 , e, N 都已经确定,k越小,d就越小,k,d都为正整数时能使等式成立的最小值。(注意这里可见d不是唯一的)

为什么说加密容易解密难?

  1. 模运算(求余数),有快速算法。搜:快速幂取模运算
  2. 如果想用解密公式倒推,会遇到离散对数问题。搜:离散对数问题
  3. 又如果想知道d, 要知道d就要知道 Φ ( N ) = ( p − 1 ) ( q − 1 ) {\Phi(N)} = (p-1)(q-1) Φ(N)=(p1)(q1),进一步要知道两个质数,只知道N, N = p ⋅ q N=p\cdot q N=pq,大数的质因数分解目前还没有快速求解的方法。
  4. 其他,搜:RSA攻击方法
  5. 量子计算破解,搜:秀尔算法

RSA 公钥与私钥

//私钥里都有些什么?
pc:~r$ openssl genrsa -out private.key 16//生成一个RSA私钥,取16位方便计算与观察
pc:~r$ openssl rsa -in private.key -text -noout
Private-Key: (16 bit)
modulus: 43931 (0xab9b)//模数,想当于N,可见当我们说一个密钥有多少位时,说的是模数,而不是生成模数的两个质数
publicExponent: 65537 (0x10001)//公钥里的e
privateExponent: 30329 (0x7679)//私钥里的d
prime1: 223 (0xdf)//大质数p
prime2: 197 (0xc5)//大质数q
exponent1: 137 (0x89)
exponent2: 145 (0x91)
coefficient: 60 (0x3c)

pc:~$ openssl  rsa -in private.key -pubout -out public.key //生成公钥
//公钥里都有些什么?
pc:~$ openssl rsa -in public.key -text -noout -pubin
Public-Key: (16 bit)
Modulus: 43931 (0xab9b)//模数N
Exponent: 65537 (0x10001)//公钥里的e
//是否与公式一致?
N = p x q
43931  = 223 x 197
e x d = Φ(N) x k + 1
65537 x 30329 = (223-1)x (197-1) x k + 1
k = 45681

pc:~$ openssl prime 65537
10001 (65537) is prime
pc:~$ openssl prime 223
DF (223) is prime
pc:~$ openssl prime 197
C5 (197) is prime
pc:~$ openssl prime 4
4 (4) is not prime

总结

  1. 由公式可知,公钥与私钥都是既可加密又可以解密。
  2. openssl生成的私钥文件里包函了公钥的信息。

参考资料:网易公开课之现代密码学

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值