plantext 明文 cipher 密钥 ciphertext 密文
将任意长度的输入转化为定长输出的算法。抗原像性、抗第二原像性、强抗碰撞性。指纹、摘要。
MAC:核心是带密钥的 Hash 算法。 HMAC:两轮 Hash,其中一个是密钥是“预共享密钥”。 Msg + K –>MAC 算法 –> MAC 随消息发送 参考:https://blog.csdn.net/pz641/article/details/110876060
对称密钥算法相关主流协议:DES、3DES、AES、RC4。 序列密码(Stream Cipher)、分组密码(Block Cipher) RC4 属于序列密码,AES 算是最流行的分组密码,无线安全技术 WPA2 就是使用 AES。 分组密码:ECB、CBC。CBC 引入了初始向量 IV 让每即使相同的输入输出也不同。(IV 与明文第一块进行异或过后加密,加密后的密文作为下一个块的 IV)
公钥加密只有私钥可以解密。 私钥加密公钥解密。无私密性、可做数字签名。 RAS 使用最多的非对称加密算法。RAS 推荐强度 2048,相当于 112 的对称加密。
MAC 是一种电子签名,但需要双方预先设定一样的加密密码。 RSA 情况下的数字签名。 发送方 1)求文档 Hash 值 2)对 结果散列 + hash 算法 + 其它元数据 进行编码 3)用私钥加密编码后的数据,形成签名 接收方 1)使用相同 Hash 算法计算文档散列 2)用公钥解密发送方的签名,并与自己计算的进行对比。 RAS 只是公钥加密的一种,不同的公钥加密有不同的签名流程。
密钥交换的目的是先得到预主密钥。 密钥交换算法:RSA、DHE_RSA、。。。
RSA 不支持前向保密
下图是 Diffie-Hellman 密钥交换示意图:
证书是包含公钥、订阅人信息、证书颁发者数字签名的数字文件,是存储、传递、使用公钥的容器。
TLS 是一种密码学协议以保证双方会话安全。TLS 是在 TCP 协议之上、HTTP 协议之下–处于表示层。 TLS 主要分为两层,底层的是 TLS 记录协议,主要负责使用对称密码对消息进行加密。上层的是 TLS 握手协议,主要分为握手协议,密码规格变更协议和应用数据协议 4 个部分。
SSL 1.0, 2.0 1994-11月 SSL 3.0 1995 年底 TLS 1.0 1999-1 TLS 1.1 2006-4 TLS 1.2 2008-8 TLS 1.3 2018-8 1)握手更快;2)淘汰了一些基元 RC4, SHA-1, DES, MD5 … https://zhuanlan.zhihu.com/p/133375078
有三种握手流程:对服务器进行身份验证的完整握手、用于恢复会话的简短握手、对服务器客户端进行双向验证的握手。 这里仅简短描述下“对服务器进行身份验证的完整握手”,如下图:
很明显,第一条消息始于 Client。客户端需要提供自己 TLS 版本、随机数、加密套件、压缩方法、扩展信息给服务端,让服务端进行选择。
这条消息是服务器根据 Client 上报的选项并结合自己的的情况把选择告诉 Client。这个消息中也包括一个随机数。注意 ClientHello、ServerHello 中的随机数不是用于生成预主密钥,而是用于防止消息伪造。
这是服务器给客户端的证书链。注意,这里是证书链而不仅仅是服务器的主证书。主证书排第一个、随后依次是中间证书,根证书无需在此链中。 因为客户端发送的密码套件、服务器最终选择的密码套件未必需要身份认证,同时不是所有身份认证都需要证书,所以,这个消息是可选的。
这个消息是为服务器为密钥交换向客户端提供数据。如是 DH 算法,那么这个参数就是 如上“Diffie-Hellman 密钥交换示意图”中所示的 g、p、A。 微观到代码,就是大致如下的定义:
struct {
opaque dh_p<1..2^16-1>;
opaque dh_g<1..2^16-1>;
opaque dh_Ys<1..2^16-1>;
} ServerDHParams; /* Ephemeral DH parameters */
对于需要两次消息确定预主密钥的算法,首先由服务器发起也很容易理解。因为是 Client 首先提供选项而 Server 进行选择,那么 Server 自然是首先发出 DH 密钥交换消息就是很正常的了。 如果协商的密钥交换算法是 RSA 密钥交换算法,那么服务器就无需发送这条消息,而是由 Client 通过在 ClientKeyExchange 中携带一个 46 字节的随机数作为预主密钥即可。
这个消息表示 Server 这边的握手相关的消息都发送完了。
这个消息是为了 Sever 提供密钥交换的数据。 如果是 RSA 密钥交换算法,Client 用 46 字节的随机数作为预主密钥发送给 Server 即可。如果是 DH 算法,就是如“Diffie-Hellman 密钥交换示意图”中所示的数字 B。 至此,预主密钥(premaster secret)就协商完毕了。真正用于加密的 master secret 是由预主密钥经过进一步变化而生成。
这个消息表示已经生成加密密钥了,即将切换到的加密模式。
这个消息表示握手结束,消息内容即将加密。这个消息中很重要的一个字段是 verify_data, 其值是用协商得到的主密钥结合协商确定的 MAC 算法对所有按序排列的握手消息进行计算得到的散列值。这里可以体会下 CilentHello、ServerHello 这些握手消息中的随机数的作用。