1.共享密钥加密
数据传输过程:
- A准备向B发送数据
- 为了防止被窃听,A使用密钥将数据加密以后再发送给B
- B受到加密的数据后用相同的密钥对数据进行解密
存在的问题:
- 如果A和B无法直接沟通,则需要通过未来来传输密钥,如果密钥被X窃听,X就可以破解密文
2.公开密钥加密
- 加密和解密使用不同的密钥
- 加密用的叫公开密钥
- 解密用的叫私有密钥
数据传输过程:
- A准备向B发送数据
- 接受方B生成公开密钥和私有密钥,并且把公开密钥发送给A
- A使用B发送过来的公开密钥加密数据
- A将加密后的数据发送给B,B再使用私有密钥对密文解密
- 即使存在像“对称加密”过程发送产生的问题,即通过网络发送的密钥被窃听,但这里发送的是公开密钥,即使被窃听也无法破解数据
存在的问题:
- A准备向B发送数据
- 接受方B生成公开密钥和私有密钥,并且把公开密钥发送给A
- 在密钥从B->A的过程中,X把传输过程的公开密钥换成了自己的公钥,将X的公钥发送给A
- A使用X的公钥加密数据并发送给B
- X窃听了A发送的数据,由于数据是由X的公钥加密的,因此X可以使用自己的私钥解密,这样就破解了,同时X使用B的公钥加密数据后发送给B,这样B就不会察觉数据已经被窃听
- 解决这个问题需要数字证书
1. 共享密钥存在无法安全传输密钥的问题 2. 公开密钥加密存在加密解密速度较慢的问题
3.混合加密
4.消息认证码
- 消息认证码可以检测出消息是否已经被篡改
- 使用的是共享密钥加密
- A在发送信息的时候,A使用密文和密钥生成一个数值,将数值和密文一起发送
- B在接受到消息时,也使用密文和密钥来生成一个数值,判断这个数值和A发送过来的数值是否一样,如果不一样说明数据被篡改
存在的问题: A、B双方都可以对消息进行加密并计算出验证码,无法证明原本的消息是A生成的还是B生成的
5. 数字签名
- 公开密钥加密中,加密使用的是公开密钥P,解密使用的是私有密钥S,任何人都可以使用公开密钥对数据进行加密,只有持有私钥的人才能解密
- 数字签名的方法域公开密钥的方法相反
- 发送者A准备好发送的消息,公钥和私钥(公开密钥加密是接受者B准备好公钥和私钥)
- A将公钥发送给B
- A使用私钥加密数据的摘要(摘要可以用hash函数产生),加密后的摘要就是数字签名
- A将加密后的数据和数字签名一起发送给B
- B收到数据和数字签名后,用公钥解密数字签名得到摘要1,用公钥解密消息得到明文,用hash函数处理明文得到摘要2,比较摘要1和摘要2可以判断消息有没有被篡改、是否由A发送、预防事后否认
存在的问题:
使用数据签名后B会相信消息的发送者就是A,但实际上也有可能是X冒充了A 原因在于使用公开密钥加密无法确认密钥的制作者是谁
6.数字证书
- 公开密钥加密和数字签名都无法保证公开密钥确实来自信息的发送者,因此,就算公开密钥被第三者恶意替换,接受方也不会注意到
- A现在要将公开密钥和私有密钥发送给B
- A需要先像认证中心CA申请发行证书,证明公钥P是自己的
- 认证中心CA里保管着A的公钥和私钥
- CA认证A的资料(邮箱、身份证),确认是A本人的资料,认证中心CA使用自己的私钥,根据A的资料和公钥生成数字签名,同时CA也保存了A的资料和数字签名
- B接收到A发送的信息和数字签名后,用CA的公钥解密A的数字签名,得到A的信息和公钥
- 如果在这个过程中X假冒A发送公钥和数字签名,B使用CA的公钥解密后的信息就不符合A的信息
|