2.4 第四回合:
“客户”->“服务器”:你好
“服务器”->“客户”:你好,我是服务器
“客户”->“服务器”:向我证明你就是服务器
“服务器”->“客户”:你好,我是服务器 {你好,我是服务器}[私钥|RSA]
“客户”->“服务器”:{我们后面的通信过程,用对称加密来进行,这里是对称加密算法和密钥}[公钥|RSA] //蓝色字体的部分是对称加密的算法和密钥的具体内容,客户把它们发送给服务器。
“服务器”->“客户”:{OK,收到!}[密钥|对称加密算法]
“客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]
“服务器”->“客户”:{你的余额是100元}[密钥|对称加密算法]
在上面的通信过程中,“客户”在确认了“服务器”的身份后,“客户”自己选择一个对称加密算法和一个密钥,把这个对称加密算法和密钥一起用公钥加密后发送给“服务器”。注意,由于对称加密算法和密钥是用公钥加密的,就算这个加密后的内容被“黑客”截获了,由于没有私钥,“黑客”也无从知道对称加密算法和密钥的内容。
由于是用公钥加密的,只有私钥能够解密,这样就可以保证只有服务器可以知道对称加密算法和密钥,而其它人不可能知道(这个对称加密算法和密钥是“客户”自己选择的,所以“客户”自己当然知道如何解密加密)。这样“服务器”和“客户”就可以用对称加密算法和密钥来加密通信的内容了。
总结一下,RSA加密算法在这个通信过程中所起到的作用主要有两个:
- 因为私钥只有“服务器”拥有,因此“客户”可以通过判断对方是否有私钥来判断对方是否是“服务器”。
- 客户端通过RSA的掩护,安全的和服务器商量好一个对称加密算法和密钥来保证后面通信过程内容的安全。
如果这里您理解了为什么不用RSA去加密通信过程,而是要再确定一个对称加密算法来保证通信过程的安全,那么就说明前面的内容您已经理解了。(如果不清楚,再看下2.3和2.4,如果还是不清楚,那应该是我们说清楚,您可以留言提问。)
到这里,“客户”就可以确认“服务器”的身份,并且双方的通信内容可以进行加密,其他人就算截获了通信内容,也无法解密。的确,好像通信的过程是比较安全了。
但是这里还留有一个问题,在最开始我们就说过,“服务器”要对外发布公钥,那“服务器”如何把公钥发送给“客户”呢?我们第一反应可能会想到以下的两个方法:
a)把公钥放到互联网的某个地方的一个下载地址,事先给“客户”去下载。
b)每次和“客户”开始通信时,“服务器”把公钥发给“客户”。
但是这个两个方法都有一定的问题,
对于a)方法,“客户”无法确定这个下载地址是不是“服务器”发布的,你凭什么就相信这个地址下载的东西就是“服务器”发布的而不是别人伪造的呢,万一下载到一个假的怎么办?另外要所有的“客户”都在通信前事先去下载公钥也很不现实。
对于b)方法,也有问题,因为任何人都可以自己生成一对公钥和私钥,他只要向“客户”发送他自己的私钥就可以冒充“服务器”了。示意如下:
“客户”->“黑客”:你好 //黑客截获“客户”发给“服务器”的消息
“黑客”->“客户”:你好,我是服务器,这个是我的公钥 //黑客自己生成一对公钥和私钥,把公钥发给“客户”,自己保留私钥
“客户”->“黑客”:向我证明你就是服务器
“黑客”->“客户”:你好,我是服务器 {你好,我是服务器}[黑客自己的私钥|RSA] //客户收到“黑客”用私钥加密的信息后,是可以用“黑客”发给自己的公钥解密的,从而会误认为“黑客”是“服务器”
因此“黑客”只需要自己生成一对公钥和私钥,然后把公钥发送给“客户”,自己保留私钥,这样由于“客户”可以用黑客的公钥解密黑客的私钥加密的内容,“客户”就会相信“黑客”是“服务器”,从而导致了安全问题。这里问题的根源就在于,大家都可以生成公钥、私钥对,无法确认公钥对到底是谁的。 如果能够确定公钥到底是谁的,就不会有这个问题了。例如,如果收到“黑客”冒充“服务器”发过来的公钥,经过某种检查,如果能够发现这个公钥不是“服务器”的就好了。
为了解决这个问题,数字证书出现了,它可以解决我们上面的问题。先大概看下什么是数字证书,一个证书包含下面的具体内容:
- 证书的发布机构
- 证书的有效期
- 公钥
- 证书所有者(Subject)
- 签名所使用的算法
- 指纹以及指纹算法
证书的内容的详细解释会在后面详细解释,这里先只需要搞清楚一点,数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。也就是说,我们拿到一个数字证书,我们可以判断出这个数字证书到底是谁的。至于是如何判断的,后面会在详细讨论数字证书时详细解释。现在把前面的通信过程使用数字证书修改为如下:
2.5 第五回合:
“客户”->“服务器”:你好
“服务器”->“客户”:你好,我是服务器,这里是我的数字证书 //这里用证书代替了公钥
“客户”->“服务器”:向我证明你就是服务器
“服务器”->“客户”:你好,我是服务器 {你好,我是服务器}[私钥|RSA]
注意,上面第二次通信,“服务器”把自己的证书发给了“客户”,而不是发送公钥。“客户”可以根据证书校验这个证书到底是不是“服务器”的,也就是能校验这个证书的所有者是不是“服务器”,从而确认这个证书中的公钥的确是“服务器”的。后面的过程和以前是一样,“客户”让“服务器”证明自己的身份,“服务器”用私钥加密一段内容连同明文一起发给“客户”,“客户”把加密内容用数字证书中的公钥解密后和明文对比,如果一致,那么对方就确实是“服务器”,然后双方协商一个对称加密来保证通信过程的安全。到这里,整个过程就完整了,我们回顾一下:
相关推荐
KMC 是PKI 系统中的另一个核心组件,负责管理和分配数字证书。KMC 的主要功能是生成和管理数字证书、私钥的备份和恢复、提供证书状态查询服务等。 LDAP 是PKI 系统中的证书库,负责存储和管理数字证书。LDAP 的主要...
SSL协议与数字证书的使用极大地增强了网络通信的安全性,它们被广泛应用于Web浏览、电子邮件、即时通讯以及各种需要身份验证和数据加密的应用中。随着互联网的发展,这些安全机制也在不断地演化和升级,以对抗日益...
本文将深入探讨“电信设备-通信安全加强方法、装置、通信方法及用户终端”这一主题,旨在为保障网络安全提供有效的策略和手段。 首先,我们来理解通信安全的重要性。在电信设备中,数据传输的安全性直接关系到用户...
一个加密通信过程的演化 加密通信过程通常经历以下四个阶段: 1. **第一阶段**:双方交换公钥,确保对方能够识别自己的身份。 2. **第二阶段**:使用公钥加密会话密钥,保证通信的安全性。 3. **第三阶段**:使用...
- 证书交换(ServerCertificate、ClientCertificate):服务器和客户端可以互相交换数字证书,用于身份验证。 - 密钥交换(ServerKeyExchangeMessage、ClientKeyExchangeMessage):用于在双方之间交换密钥信息。 - ...
商家服务器和业务服务器之间的通信通过SSL加密,确保了信息在传输过程中的安全。 3. **安全电子交易SET模式**:SET(Secure Electronic Transaction)是为了解决网上银行卡交易安全问题而提出的一种标准。SET通过...
例如,一个成熟的B2C网上支付系统可能会采用SSL协议来加密整个交易过程,同时利用SET协议对交易中的敏感信息进行加密,确保支付数据的安全性。此外,系统设计还需包括身份验证机制、异常交易监测、风险评估等多重...
3. **加密通信**:保护通信内容不被窃取或监听是另一个关键安全需求。采用加密技术,如AES、SSL/TLS等,可确保数据在传输过程中的机密性。 4. **访问控制**:物联网网络层应有严格的访问控制策略,限制不同设备和...
- **抵抗攻击**:身份验证(动态/一次性密码、数字证书、生物识别)、授权控制、数据加密、完整性保护。 - **检测攻击**:入侵检测系统、通信模式过滤。 - **从攻击中恢复**:未详细说明。 **1.0.1.1.4 软件架构...
9. **版本控制**:作为一个开源项目,源码可能使用Git进行版本控制,通过提交历史可以了解项目的演化过程。 10. **文档与注释**:良好的源码应该包含清晰的注释和文档,解释各个函数、类和模块的作用,以便其他...