《图解密码技术》笔记5:公钥密码-用公钥加密,用私钥解密

目录

5.1 投币寄物柜的使用方法

5.2 本章学习的内容

5.3 密钥配送问题

5.3.1 什么是密钥配送问题

5.3.2 通过事先共享密钥来解决

5.3.3 通过密钥分配中心来解决

5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题

5.3.5 通过公钥密码来解决密钥配送问题

5.4 公钥密码

5.4.1 什么是公钥密码

5.4.2 公钥密码的历史

5.4.3 公钥通信的流程

5.4.3 各种术语

5.4.5 公钥密码无法解决的问题

5.5 时钟运算

5.6 RSA

5.6.1 什么是RSA

5.6.2 RSA加密

5.6.3 RSA解密

5.6.4 生成密钥对

5.6.5 具体实践

5.7 对RSA的攻击

5.7.1 通过密文来求得明文

5.7.2 通过暴力破解来找出D

5.7.3 通过E和N求出D

5.7.4 中间人攻击

5.7.5 选择密文攻击

5.8 其他公钥加密

5.8.1 ElGamal方式

5.8.2 Rabin方式

5.8.3 椭圆曲线密码

5.9 关于公钥密码的Q&A

5.9.1 公钥密码的随机性

5.9.2 公钥密码与对称密码的密钥长度

5.9.3 对称密码的未来

5.9.4 RSA与质数

5.9.4 RSA与质因数分解

5.9.4 RSA的长度


5.1 投币寄物柜的使用方法

        无重要内容。

5.2 本章学习的内容

  1. 公钥密码。
  2. 密钥配送问题
  3. 最常用的公钥密码-RSA

5.3 密钥配送问题

5.3.1 什么是密钥配送问题

        密钥配送问题是对称密码所面临的问题:密钥必须要发送,但是又不能直接发送。

        举例:Alice给Bob发邮件时,不发送密钥,Bob无法解密,发送密钥,Eve也可以解密。

解决密钥配送问题的方法:

  1. 通过事先共享密钥来解决
  2. 通过密钥分配中心来解决
  3. 通过 Diffie-Hellman 密钥交换来解决
  4. 通过公钥密码来解决

5.3.2 通过事先共享密钥来解决

        事先共享尽管有效,但是确具有一定的局限性。

        1)需要一种安全的方式将密钥交给对方

        2)体量很大的时候,所需要的密钥数量较大。如有1000人,则需要密钥数量为1000X999÷2=499500个。

5.3.3 通过密钥分配中心来解决

        密钥分配中心(Key Distribution Center,KDC),每个人只要和密钥分配中心事先共享密钥就可以了。也就是说如果有1000人,数据库中就会保存1000个密钥就够了。

        举例,Alice向Bob发送加密邮件时候,需要的步骤如下:

  1. Alice向密钥分配中心发出想要和Bob通信的请求
  2. 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice和Bob本次通信中临时使用的密钥
  3. 密钥分配中心从数据库中取出Alice和Bob的密钥
  4. 密钥分配中心用Alice的密钥加密会话密钥,发送给Alice;用Bob的密钥加密会话密钥,发送给Bob
  5. Alice用自己的密钥解密,得到会话密钥
  6. Alice用会话密钥加密邮件,发送给Bob
  7. Bob对来自分配中心的消息进行解密(用自己的密钥),得到会话密钥
  8. Bob用会话密钥对Alice的邮件进行解密
  9. Alice和Bob删除会话密钥

        KDC的局限性在于:

  • 随着数量的增加,KDC的负荷也会随之增加。
  • 如果KDC计算机发生故障,全部的加密通信就会瘫痪。
  • KDC面临被攻击者入侵的风险,盗取密钥数据库。

5.3.4 通过 Diffie-Hellman 密钥交换来解决密钥配送问题

        Diffie-Hellman 密钥交换,进行加密通信的双方需要交换一些信息,依据所交换的信息,双方可以各自生成相同的密钥。具体的实现细节,将在第11章中详述探讨。

        传送门——>

5.3.5 通过公钥密码来解决密钥配送问题

        发送者使用公钥密码进行加密,接收者使用私钥进行解密。

5.4 公钥密码

5.4.1 什么是公钥密码

        公钥密码中,密钥分为加密密钥(公钥)和解密密钥(私钥)两种。加密密钥一般是公开的,但是解密密钥一定不能公开。

5.4.2 公钥密码的历史

        1976年,发表了关于公钥密码的设计思想。

        1978年,设计了具体的公钥密码算法-RSA。

5.4.3 公钥通信的流程

        在公钥密码通信中,通信过程是由接受者Bob来启动的。

5.4.3 各种术语

        公钥密码,也称为非对称密码。

5.4.5 公钥密码无法解决的问题

        公钥密码解决了密钥配送问题。但是还有一下两个问题:

        1)在公钥通信中,我们需要判断所得到的公钥是否正确合法,这个问题被称为公钥认证问题

        2)公钥密码的处理速度只有对称密码的几百分之一。这个问题的解决,将在第6章中进行介绍。

5.5 时钟运算

5.5.1 加法

        mod:除法求余数的运算。和“ X ”、“ ÷ ”等符号会被同等处理。

        例如:(7+6)mod 12 即 13 mod 12 = 1;就是13除以12的余数是1.

5.5.2 减法

        减法是加法的逆运算。

        满足(X+Y)mod 12 = 0可计算出X、Y的组合,即:“减去X”与“加上Y”这两个运算是等价的。

5.5.3 乘法

        7X4 mod 12  =  28 mod 12  =  4        

5.5.4 除法

        除法可看成乘法的逆运算。

看看下面这个算式:

        A X B mod 12 = 1;即在以12为模的世界中,A与B互为倒数。

        某个数是否存在倒数,可以通过这个数与12的最大公约数为1这个条件来进行判断。

        和12的最大公约数为1的数(5、7、11),在数学上称为“和12互质的数”。也可以理解为“相对于12的质数”。

5.5.5 乘方

例如下面的计算:在乘方的中间步骤求mod,结果是一样的,可以避免计算大整数的乘积。 

         这种在计算过程中求mod来计算乘方的方法,是RSA的加密和解密算法中所使用的方法。

 5.5.6 对数

        乘方的逆运算称为对数。

        对数离散对数

        想学习了解更多关于离散对数的详细内容,请移步——>离散对数密码学原理

5.5.7 从时钟到RSA

        RSA的加密和解密过程中所使用的正式这样的运算。

5.6 RSA

5.6.1 什么是RSA

        RSA是三位开发者的姓氏的首字母组成,RSA可以被用于公钥密码和数字签名。关于数字签名,将在第9章进行详解。

5.6.2 RSA加密

        RSA加密可以用下面的公式来表达:

        RSA的密文是对代表明文的数字的E次方求mod N的结果。

        E是加密(Encryption)的首字母,N是数字(Number)的首字母。

        E和N是RSA加密的密钥,也就是说,E和N的组合就是公钥,一般写成公钥是 (E, N)

5.6.3 RSA解密

        RSA的解密可以用下面的公式来表达:

        RSA的明文是 对代表密文的数字的D次方求mod N的结果。

        D是解密(Decryption)的首字母,N是数字(Number)的首字母。

        解密的N和加密的N相等,D和N的组合就是私钥

 5.6.4 生成密钥对

        求E、D和N这三个数就是生成密钥对。RSA密钥对的生成步骤如下:

  1. 求N
  2. 求L(L是仅在生成密钥对的过程中使用的数)
  3. 求E
  4. 求D

(1)求N

        N = p x q  (p 、q为质数。注意不是互质)

        质数:“是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

        p、q是需要通过伪随机数生成器生成的数,生成后要先判断是不是质数,如果不是就重新生成。p和q不能太小,太小的话容易被破译,太大的话计算时间又会变长。

(2)求L

        L只出现在生成密钥对的过程中。

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

(3)求E

        1 < E < L;          第一步是伪随机数生成器在这个范围类生成E的候选数。

        gcd(E,L) = 1;    第二步就是判断是否满足这个条件。E与L的最大公约数为1(E和L互质)。

        简单来说,之所以要加上 “gcd(E,L) =1” 这个条件,是为了保证一定存在解密时需要使用的数D。

        到目前,求出了E和N,就已经生成了密钥对中的公钥

(4)求D

       D是由E计算得到的。D、E、L之间必须具备下列关系

  • 1 < D < L; 
  • E x D mod L =1;   要保证存在满足条件的D,就需要E和L的最大公约数为1(见上一节的时钟运算),同事也正是(3)中对E的要求条件。

        简单来说,E x D mod L =1保证了对密文进行解密时能够得到原来的明文。

        到目前,求出了D和N,就已经生成了密钥对中的私钥

RSA中密钥对的生成汇总

(1)求N

(3)求E

用伪随机数生成器求p和q,p和q都是质数

N = p × q

1 < E < L; 

gcd(E,L) = 1;E与L的最大公约数为1(E和L互质)。

(2)求L

(4)求D

L = lcm(p-1,q-1)         

L是p-1和q-1的最小公倍数

1 < D < L; 

E × D mod L =1; 

5.6.5 具体实践一下吧

举例计算如下:

(1)求N

        取p=17, q=19;那么:N=p x q = 17 x 19 = 323;

(2)求 L

        L = lcm(p-1, q-1)= lcm(16,18)= 144(16和18的最小公倍数)

(3)求E

        gcd(E,L)= 1;  E=5,7,11,13,17...有很多满足的数,我们取E=5。那么E=5,N=323,这就是公钥。

(4)求D

        E x D mod L = 1; 5 x D mod 144 = 1计算得到 D=29

公钥(E,N)= (5,323),私钥(D,N)=(29,323)

下面进行加密和解密计算:

        要加密的明文必须是<N的数,也就是小于323的数。原因在结尾处再写。我们取明文为123

        加密和解密:

    为什么  明文 < N :

        因为解密运算需要mod N,而mod N的结果必定小于N,因此如果明文本身大于N,则解密后无法得到正确的明文。

 5.7 对RSA的攻击

5.7.1 通过密文来求得明文

        目前没有发现求离散对数的高效算法。

5.7.2 通过暴力破解来找出D

        由于现在RSA所使用的p和q的长度都是1024比特以上,N的长度为2048比特以上。在这样的长度下暴力破解极其困难。

5.7.3 通过E和N求出D

        破译者不知道p和q,就不能计算出D。所以对p和q的求解是非常关键的

  1. 对N进行质因数分解攻击:N = p x q,N是公开的,p和q都是质数,因此由N求p和q只能通过将N进行质因数分解来完成。 我们可以说:一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译。然而目前并没有。

  2. 通过推测p和q进行攻击:由于p和q是通过伪随机数生成器产生的,如果生成器的算法很差,密码破译者也可能推测处p和q。

5.7.4 中间人攻击

        Mallory混入发送者和接收者中间,对发送者伪装成接收者,对接收者伪装成发送者。

Alice准备向Bob发送一封邮件,中间人攻击的简单过程:

  1. Alice向Bob索取公钥
  2. Mallory拦截了Bob的邮件,使其无法发送给Alice。Mallory把Bob的公钥保存起来,然后把自己伪装成Bob,把自己的公钥发给Alice
  3. Alice用收到的公钥(Mallory的公钥)加密邮件,发送给Bob
  4. Mallory拦截了邮件,用自己的私钥解密邮件。
  5. Mallory篡改邮件后,再用Bob的公钥进行加密,然后伪装成Alice,发送给Bob
  6. Bob接收到邮件解密后,就看到了Mallory篡改后的邮件,但是他以为是Alice发送的

        要防御中间人攻击,还需要一种手段来确认收到的公钥是否真的来自Bob,这就是认证。我们可以使用公钥的证书。关于证书,会在第10章进行探讨。

5.7.5 选择密文攻击

        选择密文攻击:发送任意数据,服务器都会将其当做密文来解密并返回解密的结果,这种服务称为解密提示。

        如何改进RSA才能地狱选择密文攻击呢:RSA-OAEP,是一种RSA改良算法(RFC2437)。

        

5.8 其他公钥加密

5.8.1 ElGamal方式

        RSA:利用质因数分解的困难度;

        ElGamal:利用mod N下求离散对数的困难度。

        缺点:加密的密文会变成明文的两倍。

5.8.2 Rabin方式

        Rabin:利用mod N下求平方根的困难度。破解难度与质因数分解是相当的。

5.8.3 椭圆曲线密码(ECC)

        特点:所需的秘钥长度比RSA短。

        是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,利用了这种乘法运算的逆运算非常困难这个特性。

5.9 关于公钥密码的Q&A

5.9.1 公钥密码的机密性

        Q:公钥密码比对称密码的机密性更高吗?

        A:不是,机密性的高低根据密钥长度而变化的。

5.9.2 公钥密码与对称密码的密钥长度

        Q:RSA1024 比 AES-256安全性更高吗?

        A:不是。不同加密算法,不能直接通过密钥的长短比较安全性。比较复杂。

5.9.3 对称密码的未来

5.9.4 RSA与质数

5.9.4 RSA与质因数分解

5.9.4 RSA的长度

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值