网络安全基础(加密/解密)
1. 对称加密
1.1 什么是对称加密
当加密和解密用的是同一个密钥时, 我们称这种加密方法为对称加密
1.2 常见的对称加密算法有哪些
1.2.1 DES(Data Encryption Standard)(目前已经可以在短时间内被破译, 不建议使用)
- DES 是一种将 64bit 明文加密成 64bit 密文的对称加密算法, 密钥的长度是 56bit
- 由于 DES 每次只能加密 64bit 的数据, 遇到比较大的数据, 需要对 DES 加密进行迭代
1.2.2 3DES(Triple DES)
用三个不同的密钥对明文进行加密-解密-加密, 最后获得的就是 3DES 加密后的密文
1.2.3 AES(Advanced Encryption Algorithm)
- 取代 DES 成为新标准的一种对称加密算法
- AES 的密钥长度有 128, 192, 256bit 三种
2. 非对称加密
2.1 什么是非对称加密
用公钥进行加密的密文只能用其对应的私钥进行解密, 同样的, 用私钥加密的密文必须用对应的公钥进行解密
2.2 非对称加密解决了密钥配送的问题
2.2.1 密钥配送
在下图中, Alice 要与 Bob 交流, 若是存在窃听者, 则即使使用对称加密, 对窃听者也没有用(因为窃听者获取了对称加密的密钥)
但若是使用非对称加密, Bob 生成非对称加密的公钥 PK1 给 Alice, 而私钥 PK2 自己留着, 而 Alice 将对称加密的密钥 SK1 通过 PK1 加密后发送给 Bob, Bob 就可以使用 PK2 将该消息解密, 从而获取 SK1, 最终达到能够与 Alice 进行对称加密通话的目的
2.2.2 为什么不直接使用非对称加密进行通信
使用非对称加密时, 其加密解密的速度很慢
2.2.3 混合密码
- 发送方
- 发送方随机生成一个对称密钥
- 用对称密钥对其将要发送的消息进行对称加密, 生成密文1
- 用接收方生成的公钥对对称密钥进行加密, 生成密文2
- 将 密文1 和 密文2 发送给接收方
- 接收方
- 用私钥对 密文2 进行解密, 获取对称密钥
- 用 对称密钥 对 密文1 进行解密, 从而获取到发送方想要发送的消息
3. 数字签名与证书
3.1 数字签名
3.1.1 数字签名的作用
如下图所示, 当 Bob 收到消息时, 通常会认为这是由 Alice 发过来的, 但实际上这还有可能是其他人伪造信息发给 Bob 的.
为了防止这种情况的发生, 于是就有了数字签名: 当 Alice 想要给 Bob 发送消息时, 必须要附带上数字签名, 防止消息被篡改或者有人冒充 Alice 发送消息.
3.1.2 数字签名的使用
-
发送消息的过程如下:
- 通过单向散列函数, 将要发送的消息进行计算, 获得其散列值
- 用自己的私钥对散列值进行加密, 得到自己的签名
- 将签名和消息发送出去
-
接收消息后做如下操作:
- 将签名通过公钥进行解密, 获取散列值
- 对消息进行散列计算, 验证签名与消息是否匹配
结果: 消息无法被篡改和伪造
- 若攻击者想要伪造发送信息, 由于其没有私钥, 故而无法成功
- 若攻击者想要篡改消息, 由于其没有私钥, 故而无法修改签名. 接收方一验证就会发现: 签名与消息并不对应.
3.2 证书
3.2.1 中间人攻击
如下图所示, 当 Bob 发送公钥给 Alice 时, 攻击者 Mallory 可以拦截 Bob 发送的公钥, 而后自己生成一个公钥发送给 Alice. 此后 Bob 和 Alice 所接收到的消息都是由 Mallory 发送的了
为了防止中间人攻击的发生, 保证公钥的合法性, 就有了数字证书
3.2.2 什么是数字证书
数字证书是用来证明公开密钥拥有者身份的电子文件, 包括了
- 公钥信息
- 公钥拥有者身份信息
- 数字认证机构对该文件的数字签名
拥有者凭着此文件,可向电脑系统或其他用户表明身份,从而对方获得信任并授权访问或使用某些敏感的电脑服务
3.2.3 证书的使用
3.3 SSL/TLS(transport layer security)
- 由客户端向服务器发送 Client Hello, 其中包含了
- TLS 版本
- 支持的密码套件
- 随机数 client random(用于生成对称密码所需)
- 由服务器向客户端发送 Server Hello, 其中包含了
- TLS 版本
- 决定使用的密码套件
- 随机数 server random(用于生成对称密码所需)
- 由服务器向客户端发送 Certificate
- 由 CA 认证的公钥证书
- 由服务器向客户端发送 Server Key Exchange, 其中包括
- 用于实现 ECDHE 算法的一个参数 Server Params
- 由服务器向客户端发送 Server Hello Done, 告知客户端协商部分结束
客户端检查公钥证书, 确认服务器的身份
- 客户端向服务器发送 Client Key Exchange
- 用于实现 ECDHE 算法的一个参数 Client Params(通过 Client Params 和 Server Params 结合 ECDHE 计算生成一个新的随机密钥串 pre-master key, 而由 pre-master key + client random + server random 可以生成会话密钥)
- 客户端向服务器发送 Change Cipher Spec
- 告知服务器接下来要用会话密钥对消息进行加密
- 客户端向服务器发送 Finished(Encrypted Handshake Message)
- 由连接开始至今的信息进行摘要, 然后通过会话密钥进行加密发出
- 服务器向客户端发送 Change Cipher Spec
- 服务器向客户端发送 Finished(Encrypted Handshake Message)