安全传输要素
- 机密性
- 完整性
- 身份验证 / 操作不可否认
公钥、私钥
- 加密密钥和解密密钥不一致
- 私钥仅自己保留,公钥提供给他人
- 公钥私钥互为加解密关系
- 公钥和私钥不可相互逆推
加密传输、数据完整性、数字签名
加密传输
公私钥加密传输过程中,假设 A 要将信息传递给 B,A 使用 B 的公钥将数据 data 加密为数据 data1,并将 data1 发送给 B。只有用 B 的私钥才可以解密 data1,获取原数据 data,并且 B 的私钥只有 B 拥有,因此可以完成加密传输功能,且不会像对称加密那样再协商密钥期间会泄露密钥。
存在问题:B 的公钥任何人都可以获取。若存在中间人截获 data1,将伪造的信息使用 B 的公钥加密成伪造的 data1,发送给 B,B 无法区分此消息是否真正来源于 A。
数据的完整性、身份认证
为了保证消息的完整性和进行身份验证,加入了 hash 和数字签名。
哈希(hash)散列
特点
- 输入数据的任意微小变化都会导致输出结果的巨大变化
- 输出长度固定,无论输入数据的长度是多少,输出结果的长度都是固定的
- 哈希算法是*单向的,即从哈希值无法推导出原始输入数据
- 哈希算法的计算速度通常很快
数字签名
使用自己的私钥对数据进行加密,其他人只能用相对应的公钥进行解密。而此私钥只有自己拥有,其他人无法伪造,当别人可以成功用你的公钥对密文进行解密时,说明数据就是你加密的,从而实现了数字签名(身份认证)的效果。
完整过程
如果对整个报文进行签名,也就是对整个报文用私钥进行加密,由于非对称密钥系统下,计算比较繁重,性能不高,并且计算结果太长。最终传输数据 data1+使用私钥加密的data1 过于臃肿,可以先对报文进行 hash 计算,使用私钥加密 hash 值。
A 将数据传递给 B
- 使用 B 的公钥将数据 data 加密为 data1
- 使用 hash 函数将 data1 散列为 hash 值
- 使用 A 的私钥对 hash 值进行签名(加密)
- 将 data1 和 A 对 hash 的签名发送给 B
B 接收到内容后
- 使用 A 的公钥解密出 hash 值
- 使用同样的 hash 算法加密 data1
- 验证步骤 1 和步骤 2 的结果是否相同,如果相同则证明了数据的完整性,未被篡改
- 使用 B 的私钥对 data1 解密出原数据
此流程实现了
扫描二维码关注公众号,回复: 17443515 查看本文章![]()
数据的加密传输:
假如中间人截获了 A 发送给 B 的内容,中间人没有 B 的私钥,无法解密数据 data1。
中间人使用 A 的公钥解密出 data1 的 hash 值,由于 hash 是单向的,无法逆推出 data1
所以中间人无法获取数据的内容
防止伪造,保证数据的完整性
假如中间人对 data1 修改或者将 data1 替换为自己像要修改的数据,并用 B 的公钥加密伪造成假的 data1,对 data1 进行 hash。但中间人没有 A 的私钥,无法对 hash 值进行签名。当 B 使用 A 的公钥进行解密时就露馅了
证书
-
目的:保证公钥的合法性和正确性,保证公钥传输过程不会被修改篡改
-
证书需要找权威机构申请(政府部门),没办法互联网上申请,只能线下申请
-
证书中包含了公钥信息,获取公钥可向权威部门查询证书
-
权威机构使用私钥加密证书,浏览器自带权威机构的公钥证书
-
浏览器显示不安全连接是因为没有对应的公钥证书