公钥密码

1. 公钥密码

  公钥加密,私钥解密。

 

2. 密钥配送问题

  对称密码中通信双方使用的密码是相同的,就引入了密钥配送问题。

  解决密钥配送的方法:

    通过事先共享密钥的方法来解决。特点是局限性很大,通信双方都存放大量的密钥。

    通过密钥分配中心解决。特点是中心需要共享每个人的密钥,中心的安全性要求很高,负荷会非常大。

    通过Diffie-Hellman来解决。即使被窃听,也不会产生问题。

    通过公钥密码解决。加密密钥和解密密钥分开的思路。

 

3. 公钥密码的特点

  加密密钥,公钥,是公开的。

  解密秘钥,私钥,不是公开的。

  公钥和私钥一一对应,一个公钥和一个私钥统称密钥对,而且公钥和私钥不能单独生成。

  密钥分加密密钥和解密秘钥;发送者只需加密密钥,接收者只需解密密钥;要求解密秘钥不能被窃听者获取,加密密钥被窃听者获取信息也不会泄露。

  公钥密码的运算速度很慢,只有对称密码的几百分之一。

  公钥密码不能解决公钥合法性的问题,这个问题被称为公钥认证问题。

 

4. 公钥密码简要的通信流程

  

 

5. 时钟运算

  为了很好的理解RSA算法,需要了解时钟运算相关的数学原理。

   加法:

    时钟加法是一个除法求余运算,即mod,取模运算。例如7加上20,对应的时钟运算是 (7+20)/ 12 = 27 / 12 = 2余3

  减法:

    加法的逆运算。例如(7 + A)mod 12 = 0,统计( X+Y)mod 12 = 0 的情况,查表可得到一些数字之间的联系。

  乘法:

    先进行乘法运算,再进行除法求余运算。7 x 4 转为 7 x 4 mod 12 = 4

  除法:

    7 x A mod 12 = 1,简化为在mod12 的条件下存在倒数的数,它们和12的公约数都只有1。

    是否存在倒数,可以通过这个数和12的最大公约数是否为1,这个条件来判断。也就是和12互质的数。

    时钟除法不一定有解,时钟运算中“某个数是否存在倒数”与RSA中“一个公钥是否存在相应的私钥”,两个问题直接相关。

  乘方:

    进行算术乘方,再对结果进行mod运算,计算过程中可以在中间步骤求mod,避免过多的运算。

  对数:

    算术运算中对数不难求解。时钟运算中的对数称为离散对数。当数字很大时,求离散对数十分困难。

    目前还未发现快速解决离散对数的算法。Diffie-Hellman密钥交换协议以及ElGamal公钥算法中就运用了离散对数。

 

6. RSA

  什么是RSA

    应用最广泛的公钥密码算法,由三位发明者Ron Rivest,Adi Shamir和Leonard Adleman的姓氏首字母组成。

  RSA中明文,密文和密钥都是数字,运算都是大数运算。

  RSA加密

    明文^E mod N = 密文  明文做E次方乘方运算,再对N求mod。

    E和N的组合就是公钥。

  RSA解密

    密文^D mod N = 明文  密文做D次方乘方运算,再对N求mod。

    D和N的组合就是私钥。

  生成密钥对

    E,D,N三个数就可以生成密钥对。

    步骤:

      求N:准备两个足够大的质数p和q,N = p x q。

      求L:L是p-1和q-1的最小公倍数,L = lcm(p-1, q-1)

      求E:1<E<L,E和L最大公约数必须是1(互质),gcd(E,L) = 1。

      求D:1<D<L,E x D mod L = 1,要保证有满足条件的D,就要保证E和L最大公约数是1。

    其中:p,q和E都是使用伪随机数生成器生成。

 

7.  对RSA的攻击

  由于公钥是公开的,破译者知道E和N。不知道生成密钥对过程中的p,q和L。

  通过密文求明文:大数的离散对数问题,求解复杂。

  暴力破解求D:逐一尝试可以作为D的数字破译RSA,难度随D的长度增大而变难。

           RSA中p和q长度在1024比特以上,N为2048比特以上,破解D需要在2048比特上破解,及其困难。

  通过E和N求出D:D是由E算出来的,E x D mod L = 1;L由p和q算出来,破译者不知道p和q,p和q交出去相当于交出了私钥。

           对N进行质数分解,一旦发现了大数进行质数分解的高效算法,RSA就能被破译。

             推测p和q进行攻击,p和q是由伪随机数生成器生成的,伪随机数生成器算法较弱可能被破译者推测出来p和q。

           数学角度证明了“对N进行质因数分解”与“求D”在确定性多项式时间内是等价的。

  中间人攻击:虽不能破解RSA,但确是对机密性的一种有效攻击。

        Mallory窃听了Alice和Bob的通话后,冒充Bob发送了自己公钥,并获取到Bob的公钥。Alice和Bob的通话被替换成了Alice和Mallory的通话。

        解决中间人攻击的方法是数字证书。

  选择密文攻击:发送任意数据,服务器都会认为是密文进行解密,并返回相应的解密错误信息,可以作为破译提示,使攻击者获得密钥和明文信息。

         解决选择密文攻击的方法是RSA-OAEP,最优非对称加密填充,对密文进行认证。

 

8. 其他公钥算法

  ELGamal:利用了mod N下求离散对数的困难度。缺点是经加密的密文长度是明文的2倍。

  Rabin:利用了mod N下求平方根的困难度。

  椭圆曲线密码:ECC,特点是所需的密钥长度比RSA短。将椭圆曲线上的特定的点进行特殊的乘法运算,这种乘法运算的逆运算非常困难。

 

9. 补充

  具备同等抵御暴力破解强度的密钥长度比较:

    对称密码AES      公钥密码RSA

         128          3072

         192          7680

         256           15360

  公钥密码的处理速度只有对称密码的几百分之一。

  质数不会被用光,512比特可以容纳的质数数量大约是10的150次方。

  RSA的私钥和对N进行质数分解是等价的。

  RSA处理密码劣化的建议:

    1024比特的RSA不应用于新的用途。

    2048比特的RSA可在2030年前被用于新的用途。

    4096比特的RSA可在2031年之后被用于新的用途。

 

posted @ 2021-06-13 22:36  NiGuard  阅读(823)  评论(0)    收藏  举报