【密码学笔记】第5部分 公钥密码

声明

这是关于密码学笔记的第五篇博客。该部分中我们首先探讨一下密钥配送问题,然后讲解公钥密码是如何解决密钥配送问题的。最后,我们还将重点介绍一种最常用的公钥密码——RSA。

跟诸位大牛相比,笔者阅历尚浅、经验不足,笔记中若有错误,还需继续修正与增删。欢迎大家的批评与指正。

查看上一篇请点击以下链接:【密码学笔记】第4部分 分组密码的模式



1. 密钥配送问题

问题:对于对称密码,密钥必须要发送,但又不能发送(可能被窃听)。

解决方法

a. 通过事先共享密钥来解决。 密钥配送问题最简单的一种解决方法,就是事先用安全的方式将密钥交给对方,这称为密钥的事先共享

局限性:有时候难以找到一种安全的方式将密钥交给对方,此外,在人数很多的情况下,通信所需要的密钥数量也会增大,这是不现实的。

b. 通过密钥分配中心(KDC)来解决。 当需要进行加密通信时,密钥分配中心会生成一个通信密钥,每个人只要和密钥分配中心事先共享密钥即可。密钥分配中心拥有所有人的密钥,而每个人则拥有自己的密钥。

步骤:(以Alice向Bob发送加密邮件为例)
Step 1: Alice向密钥分配中心发出希望与Bob进行通信的请求。
Step 2: 密钥分配中心通过伪随机数生成器生成一个会话密钥,这个密钥是供Alice与Bob在本次通信中使用的临时密钥。
Step 3: 密钥分配中心从数据库中取出Alice的密钥和Bob的密钥。
Step 4: 密钥分配中心分别用Alice和Bob的密钥对会话密钥进行加密,并分别发送给Alice和Bob。
Step 5: Alice对来自密钥分配中心的会话密钥(已使用Alice的密钥加密)进行解密,得到会话密钥。
Step 6: Alice用会话密钥对邮件进行加密,并将邮件发送给Bob。
Step 7: Bob对来自密钥分配中心的会话密钥(已使用Bob的密钥加密)进行解密,得到会话密钥。
Step 8: Bob用会话密钥对来自Alice的密文进行解密。
Step 9: Alice和Bob删除会话密钥。

局限性:首先,每当有人进行加密通信时,密钥分配中心计算机都需要进行上述处理。随着人数的增加,密钥分配中心的负荷也会增加。如果密钥分配中心计算机发生故障,全公司的加密通信就会瘫痪。此外,主动攻击者也可能会入侵密钥分配中心计算机,盗取密钥数据库,则全公司所有加密通信都会被破译,会造成严重的后果。

c. 通过Diffie-Hellman密钥交换来解决。 在Diffie-Hellman密钥交换中,进行加密通信的双方需要交换一些信息。根据所交换的信息,双方可以各自生成相同的密钥。而窃听者虽然能够窃听到双方交换的信息,但却无法根据这些信息生成和双方相同的密钥。

d. 通过公钥密码来解决。 在公钥密码中,加密秘钥和解密密钥是不同的。只要拥有加密密钥,任何人都可以进行加密,但只有拥有解密密钥的人才能进行解密。接收者事先将加密密钥发送给发送者,发送者使用加密密钥对通信内容进行加密并发送给接收者,只有拥有解密密钥的接收者才能够进行解密(加密密钥被窃听者获取也没有问题)。


2. 公钥密码的基本概念

2.1 定义

公钥密码中,密钥分为加密密钥和解密密钥两种。发送者用加密密钥对消息进行加密,接收者用解密密钥对密文进行解密。

a. 发送者只需要加密密钥。
b. 接收者只需要解密密钥。
c. 解密密钥不可以被窃听者获取。
d. 加密密钥被窃听者获取是没问题的。

公钥密码中,加密密钥一般是公开的,因此被称为公钥(public key)。相对地,解密密钥是绝对不能公开的,不可以将它发送给别人(通信对象也不可以),只能由自己使用,因此被称为私钥(private key)。公钥和私钥是一一对应的,一对公钥和私钥统称为密钥对(key pair)。密钥对中的两个密钥之间具有非常密切的数学关系,因此公钥和私钥是不能分别单独生成的。

2.2 通信流程

假设Alice要给Bob发送一条消息。在公钥密码通信中,通信过程是由接收者Bob启动的。

Step 1: Bob生成一个包含公钥和私钥的密钥对。私钥由Bob自行妥善保管。
Step 2: Bob将自己的公钥发送给Alice,表示Bob请Alice用这个公钥对消息进行加密并发送给他。
Step 3: Alice用Bob的公钥对消息进行加密。
Step 4: Alice将密文发送给Bob。
Step 5: Bob用自己的私钥对密文进行解密。

在这里插入图片描述
Alice和Bob之间传输的信息只有两个:Bob的公钥以及用Bob的公钥加密的密文。由于Bob的私钥没有出现在通信内容中,因此窃听者无法对密文进行解密。

2.3 无法解决的问题

公钥密码解决了密钥配送问题,但也存在一些无法解决的问题。

a. 我们需要判断所得到的公钥是否正确合法,这个问题被称为公钥认证问题。

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


3. mod运算

mod运算,又称为模运算,即除法求余数的运算。


4. 公钥密码算法——RSA

RSA是一种公钥密码算法,它的名字是由它的三位开发者的姓氏的首字母组成的。RSA可以被用于公钥密码和数字签名。

加密与解密过程
在这里插入图片描述

生成密钥对
在这里插入图片描述
攻击

(1) 通过密文来求得明文。由于密码破译者已知密文、E和N,求明文即求离散对数的问题,这是非常困难的,因为人类还没有发现求离散对数的高效算法。

(2) 通过暴力破解来找出D。密码破译者可以逐一尝试有可能作为D的数字来破译RSA。然而,暴力破解的难度会随着D的长度增加而变大,当D足够长时,就不可能在现实的时间内通过暴力破解找出数D。

(3) 通过E和N求出D。由E计算D需要使用p和q,但是密码破译者并不知道p和q,因此不可能通过和生成密钥对时相同的计算方法来求出D。

对于RSA来说,有一点非常重要,即质数p和q不能被密码破译者知道。把p和q交给密码破译者与把私钥交给密码破译者是等价的。
a. 对N进行质因数分解攻击。由于N是公开的,那么由N求p和q只能通过将N进行质因数分解来完成。可以这样说:一旦发现了对大整数进行质因数分解的高效算法,RSA就能够被破译。
b. 通过推测p和q进行攻击。由于p和q是通过伪随机数生成器产生的,如果伪随机数生成器的算法很差,密码破译者就有可能推测出来p和q,因此使用能够被推测出来的随机数是非常危险的。

(4) 中间人攻击。即主动攻击者混入发送者和接收者的中间,对发送者伪装成接收者,对接收者伪装成发送者的攻击方式。
在这里插入图片描述
这种攻击不仅针对RSA,而是可以针对任何公钥密码。在这个过程中,公钥密码并没有被破译,所有的密码算法也都正常工作并确保了机密性。然而,所谓的机密性并非在Alice和Bob之间,而是在Alice和Mallory之间,以及Mallory和Bob之间成立的。仅靠公钥密码本身,是无法防御中间人攻击的。

要防御中间人攻击,还需要一种手段来确认所收到的公钥是否真的属于Bob,这种手段称为认证

(5) 选择密文攻击。假设攻击者可以使用这样一种服务,即“发送任意数据,服务器都会将其当作密文来解密并返回解密的结果”,这种服务被称为解密提示。能够利用解密提示,对于攻击者来说是一个非常有利的条件。因为他可以生成各种不同的数据,并让解密提示来尝试解密,从而获得与生成想要攻击的密文时使用的密钥以及明文有关的部分信息。反过来说,如果一种密码算法能够抵御选择密文攻击,则可以认为这种算法的强度很高。

通过选择密文攻击并不能破译RSA,但是攻击者能够获得关于密文所对应的明文的少量信息。

只要我们在解密时能够判断“密文是否是由知道明文的人通过合法的方式生成的”(即对密文进行“认证”)就可以抵御选择密文攻击。RSA-OAEP正是基于上述思路设计的一种RSA改良算法。RSA-OAEP在加密时会在明文前面填充一些认证信息,包括明文的散列值以及一定数量的0,然后再对填充后的明文用RSA进行加密。在RSA-OAEP的解密过程中,如果在RSA解密后的数据的开头没有找到正确的认证信息,则可以断定“这段密文不是由知道明文的人生成的”,并返回一条固定的错误消息“decryption error”(不能将具体的错误内容告知发送者)。这样,攻击者就无法通过RSA-OAEP的解密提示获得有用的信息,因此这一算法能够抵御选择密文攻击。


5. 其他公钥密码算法

5.1 ElGamal方式

RSA利用了质因数分解的困难度,而ElGamal方式则利用了mod N下求离散对数的困难度。
ElGamal方式的缺点经过加密的密文长度会变为明文的两倍

5.2 Rabin方式

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

5.3 椭圆曲线密码(ECC)

椭圆曲线密码是通过将椭圆曲线上的特定点进行特殊的乘法运算来实现的,它利用了这种乘法运算的逆运算非常困难这一特性。椭圆曲线密码的特点是所需的密钥长度比RSA短


6. 关于公钥密码的Q&A

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

公钥密码并不一定比对称密码的机密性更高。因为机密性的高低是根据密钥长度而变化的

密钥长度为256比特的对称密码AES,与密钥长度为1024比特的公钥密码RSA相比,RSA的安全性更高吗?

公钥密码的密钥长度不能直接与对称密码的密钥长度进行比较。如下表所示,密钥长度为256比特的AES,与密钥长度为15360比特的RSA具备均衡的强度。
在这里插入图片描述

因为已经有了公钥密码,今后对称密码会消失吗?

公钥密码并不会导致对称密码消失。一般来说,在采用具备同等机密性的密钥长度的情况下,公钥密码的处理速度只有对称密码的几百分之一。因此,公钥密码并不适合用来对很长的消息内容进行加密。根据目的的不同,还可能会配合使用对称密码和公钥密码(例如混合密码系统)。

随着越来越多的人在不断地生成RSA的密钥对,质数会不会被用光呢?

随着越来越多的人在不断地生成RSA的密钥对,质数并不会被用光。512比特能够容纳的质数的数量大约为10的150次方,这个数量比整个宇宙中原子的数量还要多。因此,别人生成的质数组合和自己生成的质数组合偶然撞车的可能性,事实上也可以认为是没有的。

RSA加密的过程中,需要对大整数进行质因数分解吗?

在RSA加密、解密、密钥对生成的过程中,都不需要对大整数进行质因数分解。只有在需要由N求p和q的密码破译过程中才需要对大整数进行质因数分解,因此,RSA的设计是将质因数分解这种困难的问题留给了密码破译者。

RSA的破译(即求RSA的私钥)与对大整数(N)进行质因数分解是等价的。

要抵御质因数分解,N的长度需要达到多少比特呢?​

N无论有多长,总有一天都能够被质因数分解,因此目前的问题是,在现实的时间内N是否能够被质因数分解。随着计算机性能的提高,对一定长度的整数进行质因数分解所需要的时间会逐步缩短。在投入非常大量的计算资源的情况下,现在可能已经能够分解长度为1024比特的整数了,但是长度为2048比特的整数目前看来还是安全的。

密码劣化:随着计算机技术的进步等,以前被认为是安全的密码会被破译,这一现象称为密码劣化。


7. 对称密码和公钥密码的对比

(1) 对称密码和公钥密码源于两种根本不同的思路。对称密码通过将明文转换为复杂的形式来保证其机密性;公钥密码则是基于数学上困难的问题来保证机密性的。

(2) 公钥密码的运行速度远远低于对称密码,因此在一般的通信过程中,往往会配合使用这两种密码,即用对称密码提高处理速度,用公钥密码解决密钥配送问题。这样的方式称为混合密码系统


参考书目

[1] 《图解密码技术》(第3版),[日]结城浩著,周自恒译,人民邮电出版社,2014年。


衷心感谢您的阅读。

查看下一篇请点击以下链接:【密码学笔记】第5部分 公钥密码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值