消息认证码的局限性:可以校验消息的整性,但是无法防止否认
数字签名:
1.生成消息签名的行为:由消息发送者进行
2.验证消息签名的行为:由消息接收者进行,也可以由第三方来完成,这是和消息认证码不同的地方
数字签名中的生成签名和验证签名使用的是不同的密钥来完成的,分为签名密钥和验证密钥
与公钥密码相类似,区别在于数字签名就是将公钥密码反过来使用
公钥密码和数字签名对比:
| 私钥 | 公钥 |
公钥密码 | 私钥解密 | 公钥加密 |
数字签名 | 生成签名使用(加密) | 验证签名使用(解密) |
持有密钥 | 个人持有 | 任何人可持有 |
之前也说过,公钥密码耗时,所以一般数字签名的使用:摘要算法+公钥算法 = 数字签名
在这里我们为了要确定自己获得的公钥合法,需要使用证书,证书就是将公钥当作一条消息,由一个可信的第三方对其签名后所得到的公钥。
公钥证书
证书中的信息,拥有公钥和第三方的数字签名,证书使用过程
1.小A 生成密钥对
2.小A在可信任第三方注册证书
3.小B从第三方下载证书
证书标准规范 x.509
证书拥有的信息:
1.签名前的证书
2.数字签名算法
3.数字签名
为什么需要数字签名?
答:获取公钥,有可能受到中间人攻击,得到的是攻击者的公钥,为了避免这种情况,从第三方机构的证书中获取公钥。
保证消息传输的机密性,完整性,认证的例子:
1.小A发送给小B消息不能被窃听 --机密性 解决方案:对称密码
2.小A发送给小B消息不能被串改 --完整性 解决方案:单向散列函数
3.双方要彼此确认是本人 --认证问题 解决方案:数字签名
TLS协议
该协议分为TLS握手协议和TLS记录协议,记录协议负责加密,握手协议处理加密外的操作
TLS握手协议
分为四部分:握手协议、密码规格变更协议、警告协议、应用数据协议。
握手协议:负责客户端和服务器之间协商决定密码算法(套件)和共享密钥,证书的认证操作也在这一步执行。
密码规格变更协议:负责向通信对象传达变更密码方式的信号
警告协议:发生错误是将错误传达给对方
应用数据协议:将TLS上面承载的应用数据传达给通信对象的协议。
TLS记录协议
负责消息的压缩、加密以及数据的认证。
TLS握手协议中使用的技术
密码技术 | 作用 |
公钥密码 | 加密预备主密码 |
单项散列函数 | 构成随机数生成器 |
数字签名 | 验证服务器会客户端的证书 |
伪随机数生成器 | 生产预备主密码 根据主密码生产密钥 生产初始化向量 |
主密码
主密码是TLS客户端和服务端之间协商的一个密码数值,TLS机密性和数据认证全部依靠这个数值
通过 预备主密码、客户端随机数、服务器随机数计算出主密码
用于生成:
1.对称密码的密钥
2.消息认证码的密钥
3.对称密码CBC模式所使用的初始化向量