1 信息传输中的安全隐患
1. 窃听
解决方案:明文加密,X只能窃听到密文
2. 假冒
解决方案:消息认证码或者数字签名
3. 篡改
解决方案:消息认证码或者数字签名
4. 事后否认
解决方案:数字签名
2 对称加密/非对称加密
1. 对称加密
优点:加密解密速度快
缺点:两方需要使用同一个密钥,密钥的传递有风险
2. 非对称加密
优点:不会有密钥分配问题
缺点:
-
加密解密速度慢
-
还是有窃听风险
3. 混合加密
用非对称加密算法去加密对称密钥
3 hash函数/消息认证码
1. hash函数
哈希值是一种将任意长度的输入数据通过哈希函数计算得到的固定长度输出值,具有不可逆、唯一和抗碰撞等特性。
-
不可逆性:给定一个哈希值,无法通过任何有效的方法推导出其对应的输入数据,除非通过穷举法尝试所有可能的输入数据。
-
唯一性:给定一个输入数据,其对应的哈希值是唯一确定的,不会因为时间、地点、环境等因素而发生变化。
-
抗碰撞性:很难或者不可能找到两个不同或者不等价的输入数据,使得它们具有相同的哈希值。
2. 消息认证码
Message Authentication Code,简称 MAC
常见的 MAC 算法
1. HMAC(基于哈希的消息认证码):
使用哈希函数(如 SHA-256)和一个秘密密钥来生成 MAC 值。
常用于 HTTPS、IPsec 等协议中。
2. CMAC(基于块密码的消息认证码):
使用块加密算法(如 AES)生成 MAC 值。
常用于无线通信和支付系统中。
4 数字签名
中间人攻击:替换公钥,B不知道收到的公钥是否是A的
5 数字证书/证书链与CA
数字证书的生成
数字证书的验证
风险:X假冒CA
证书链
6 Https
证书的颁发和认证
-
公开密钥(Public Key) 🔑
数字证书的核心功能之一是包含证书持有者的公开密钥。这是一个非常关键的信息,因为它允许数据发送者加密信息,仅证书持有者的私钥能解开。这种机制确保了数据在传输过程中的安全性。
-
主体信息(Subject) 🆔
证书中还会详细记录主体信息,即证书持有者的身份信息。这可能包括个人名称、组织名称、部门名称等。通过这些信息,可以验证证书持有者的真实身份,从而增加交易的信任度。
-
颁发者(Issuer) 🏢
颁发者信息表明了哪一个权威机构颁发了这个证书。这是证书信任链的重要一环,帮助用户识别和信任证书的有效性。权威机构的严格审核流程保证了证书的可靠性。
-
有效期(Validity Period) 📅
每个数字证书都有其有效期限,这是证书可被认为有效的时间范围。有效期通常包含起始日期和结束日期。过期的证书不能被信任,需及时更新。
-
证书序列号(Serial Number) 🔢
为了确保每个证书的唯一性,每个证书都会被赋予一个独一无二的序列号。这个号码在证书的生命周期内保持不变,可以用来追踪或撤销证书。
-
数字签名(Digital Signature) 🖋️
证书中还包含了颁发机构对证书的数字签名。这是一种算法处理的结果,用来验证证书的完整性和真实性。只有通过了数字签名的验证,证书内容才被认为是未被篡改的。
-
使用限制(Usage Restrictions) 🚫
有些证书可能会有特定的使用限制,例如只能用于加密邮件、只能 用于身份验证等。这些限制确保证书不会被误用,同时也保护了证书持有者的权益
单向认证流程
单向认证流程中,服务器端保存着公钥证书和私钥两个文件,整个握手过程如下:
客户端发起建立HTTPS连接请求,将SSL/TLS 协议版本的信息发送给服务器端;
服务器端将本机的公钥证书(server.crt)发送给客户端;
客户端读取公钥证书(server.crt),取出了服务端公钥;
客户端生成一个随机数(密钥R),用刚才得到的服务器公钥去加密这个随机数形成密文,发送给服务端;
服务端用自己的私钥(server.key)去解密这个密文,得到了密钥R
服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了
双向认证流程
客户端发起建立HTTPS连接请求,将SSL/TLS协议版本的信息发送给服务端;
服务器端将本机的公钥证书(server.crt)发送给客户端;
客户端读取公钥证书(server.crt),取出了服务端公钥;
客户端将客户端公钥证书(client.crt)发送给服务器端;
服务器端使用根证书(root.crt)解密客户端公钥证书,拿到客户端公钥;
客户端发送自己支持的加密方案给服务器端;
服务器端根据自己和客户端的能力,选择一个双方都能接受的加密方案,使用客户端的公钥加密后发送给客户端;
客户端使用自己的私钥解密加密方案,生成一个随机数R,使用服务器公钥加密后传给服务器端;
服务端用自己的私钥去解密这个密文,得到了密钥R
服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。