2.3 加密算法、摘要、数字签名、CA证书
[TOC]
1.对称加密
1.1 含义
加密和解密使用的是同样的密钥,加密和解密算法是公开的,密钥必须严格保存,如果密钥泄漏,就能使用密文+密钥还原成明文。
1.2 优缺点
优点:算法公开、计算量小、加密速度快、效率高
缺点:密钥管理和分发困难,不够安全
1.3 常见算法
- DES
- AES
- 3DES
- RC2
- RC4
- RC5
- Blowfish
- ChaCha20-Poly1305
1.4 可参考文章
2.非对称加密
2.1 含义
非对称加密需要两个密钥进行加密解密,这两个密钥分别是公钥和私钥。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。
两个用途
1.机密信息交换: 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。(消息加密利用公钥加密,使用私钥来解密)
2.数字签名:甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。(数字签名,使用私钥加密,使用公钥来解密)
2.2 优缺点
优点:安全性高,公钥是公开的,私钥是自己保存的。
缺点:加密和解密花费时间长、速度慢(非对称加密一般比对称加密慢2到3个数量级),只适合少量数据进行加密
2.3常见算法
- RSA
- DSA
- Elgamal
- 背包算法
- Rabin
- D-H
- ECC(椭圆曲线加密算法)
- ECDSA
- ECDHE。
2.4 可参考文章
3.消息摘要
3.1 含义
将任意长度的信息转换为较短的固定长度的值,通常其长度要比信息小得多,且算法不可逆。
- 函数必须是容易计算的
- 输入可以是任意长度的数据
- 输出必须是固定长度的
- 函数是不可逆的(区别于加密算法)
- 不同输入产生的碰撞冲突可能性要尽可能低
3.2常见算法
- MD5(不安全)
- SHA-1(不安全)
- SHA-2
- SHA-256
4.数字签名
4.1 含义
签名就是在信息的后面再加上一段内容(信息经过hash后的值),可以证明信息没有被修改过。hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。
签名在网络通讯中的应用称为数字签名,当服务器向客户端发送信息时,会将报文生成报文摘要,同时对报文摘要进行hash计算,得到hash值,然后对hash值进行加密,然后将加密的hash值放置在报文后面,这个加密后的hash值就称为签名。服务器将报文、签名和数字证书一同发送给客户端。客户端收到这些信息后,会首先验证签名,利用签名算法对签名进行解密,得到报文摘要的hash值,然后将得到的报文生成报文摘要并利用签名hash算法生成新的hash值,通过对比这两个hash值是否一致,就能判断信息是否完整,是否是由真正的服务器发送的。可知签名有两个作用确认消息发送方可靠,确认消息完整准确。
4.2 过程
一个具体的签名过程如下:
小明对外发布公钥,并声明对应的私钥在自己手上
小明对消息M计算摘要,得到摘要D
小明使用私钥对D进行签名,得到签名S
将M和S一起发送出去
验签证过程如下:
接收者首先对M计算摘要,得到D’
使用小明公钥对S进行解签,得到D
如果D和D’相同,那么证明M确实是小明发出的,并且没有被篡改过
4.3 应用
- 网站认证
- 代码签名
4.4 可参考文章
5.CA证书
5.1 含义
CA证书顾名思义就是由CA(Certification Authority)机构发布的数字证书
数字证书无法保证公钥被篡改,可能有中间人攻击替换公钥
如何保证公钥不被人篡改?
将公钥放入数字证书中,只要证书是可信的,公钥就是可信的
- 权威机构必须是存在的
- 权威机构使用自己的私钥加密的内容是可信任的
- 信任是可传递的,机构 A 的公钥由 A 的上一级权威使用自己的私钥加密签发,直到最高权威机构
- 证书链成树状,最高处为根(root)证书,根证书和节点之间的叫中间证书
- 权威证书链每个 client 端都会内置一份(操作系统、浏览器或者应用内部)
CA证书具体包括哪些内容:
- 颁发者
- 使用者
- 版本
- 签名算法
- 签名哈希算法
- 使用者
- 公钥
- 指纹
- 指纹算法
- ……
5.2 校验过程
以浏览器为例说明如下:
(1)首先浏览器读取证书中的证书所有者、有效期等信息进行一一校验
(2)浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,与服务器发来的证书中的颁发者CA比对,用于校验证书是否为合法机构颁发
(3)如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。
(4)如果找到,那么浏览器就会从操作系统中取出 颁发者CA 的公钥,然后对服务器发来的证书里面的签名进行解密
(5)浏览器使用相同的hash算法计算出服务器发来的证书的hash值,将这个计算的hash值与证书中签名做对比
(6)对比结果一致,则证明服务器发来的证书合法,没有被冒充
(7)此时浏览器就可以读取证书中的公钥,用于后续加密了