加密算法的应用
[TOC]
加密算法
加密算法主要分为对称加密和非对称加密。
对称加密
对称加密采用了对称密码编码技术,特点是加密和解密用的秘钥是一致的。具体有:DES,IDEA
优点:密码短,破译困难。
缺点:
1 加密解密秘钥是一样的,双方之间的协商困难,通常只能通过邮件电话之类的沟通方式。这是不安全的。
2 每一对合作者都需要一对秘钥。导致每个人要保存大量的秘钥
3 对称加密不能提供信息完整性验证,无法验证发送者和接受者的身份。
4 对称秘钥的分发工作很危险和繁琐。
非对称加密
用私钥加密的信息可以用公钥解密,用公钥加密的信息可以用私钥解密。
优点:
分发简单,每个人只需要保证自己的私钥的安全性,就可以了,公钥可以随便公开。
缺点:
加密和解密速度慢,只适合对少量信息加密。
非对称加密的应用非常多:传输信息,数字签名,身份验证
Hash算法
一种单向算法,对目标生成特定长度的Hash值,却不能通过这个值获得原信息,
应用
传输信息
使用非对称加密,双方分别持有一对秘钥,私钥保留,公钥公开。发送者使用接受者的公钥对信息加密,只有接受者才能解密信息。
数字签名
数字签名,并不是用来对信息进行加密的。而是为了对信息进行保护:信息不被篡改,验证信息发送方身份(不可抵赖性)。
使用非对称加密。数字签名的应用方法与传输信息是相反的。发送方使用私钥对信息的hash值进行加密,生成签名,然后发送 信信息明文、hash值、签名、公钥,接受拿到后,使用公钥对签名解密,与hash值进行对比。如果相同,则证明信息没有被篡改,同时,因为公钥解密成功,说明该信息的确使用对应的私钥加密的,验证了发送者的身份。
但是,这其中有个问题,如果攻击者在数据传输过程中截获了该信息,对信息进行篡改然后修改hash值,并使用自己的私钥加密,附上自己的公钥,再发送给接受者,那么接受者是察觉不到的。
所以,这里有个非常关键的地方就是要保证公钥的可信任。CA就是数字证书的发放机构,CA使用自己的私钥对发送者的公钥进行加密,生成数字证书。之后,发送者把信息连同数字证书发送给接受者,接受者的客户端中存放着CA的各种公钥,招到对应的公钥后,对数字证书进行解密,就可以得到发送者的公钥。这样攻击者就不能随便偷换公钥了。
数字签名是私人的,数字证书是CA派发的。
但是依然存在问题,如果攻击者拥有自己的CA数字证书,那么他还是可以进行信息篡改。
HTTPS
HTTPS就是使用数字签名原理,但不仅如此,HTTPS使用TLS\SSL加密,其中包括非对称加密,对称加密,HASH算法。
具体流程如下:
- 浏览器将自己支持的一套加密规则发送给网站。
- 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
- 浏览器获得网站证书之后浏览器要做以下工作:
- 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。
- 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。
- 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。
- 网站接收浏览器发来的数据之后要做以下的操作:
- 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。
- 使用密码加密一段握手消息,发送给浏览器。
- 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。
浏览器在对数字证书鉴别是,主要是以下3个方面:
- 证书的颁发者是否在“根受信任的证书颁发机构列表”中
- 证书是否过期
- 证书的持有者是否和访问的网站一致