对称加密和非对称加密详解

Lou.Chen
大约 7 分钟

对称加密和非对称加密的区别

一、对称加密

A和B的之间的通信数据都用同一套的密钥来加密和加密

  • 优点:

简单快捷,密钥较短,且破译困难

  • 缺点:

如果用户一旦多的话,管理密钥也是一种困难。不方便直接沟通的两个用户之间怎么确定密钥也需要考虑,这其中就会有密钥泄露的风险,以及存在更换密钥的需求。

  • 常用对称加密算法:

DES:Data Encryption Standard):安全性较差,一般不建议使用。

3DES: 三重DES,针对DES密钥长度较短的问题,3DES可以实现最少112位、最高168位密钥长度。

**AES:**相比于3DES拥有更好的安全性。

二、非对称加密

用公钥和私钥来加密和解密的过程。A生成一对公钥和私钥,A的公钥加密过的东西只能A的私钥来解密。同理,B生成一对公钥和私钥,B的公钥加密过的东西只能B的私钥解密。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。

  • 优点:

比对称加密安全.

  • 缺点:

加解密比对称加密耗时.

  • 常用非对称加密算法:

RSA: 基于因子分解

DSA: 数字签名用

ECC(Elliptical Curve Cryptography):椭圆曲线加密。移动设备用

DH(Diffie-Hellman):密钥交换算法。

  • **加密与解密过程:**A向B要发送数据,那么首先A向B请求B的公钥,A收到B的公钥后,A使用B的公钥将数据加密发送给B,B收到加密后的数据后,使用自己的私钥进行解密。同理B向A发送数据时,首先向A请求A的公钥,B收到A公钥的公钥后,B使用A的公钥将数据加密发送给A,A收到数据后再用自己的私钥解密。由此完成A,B通信之间的加密和解密。

​ 但是以上加密和解密的过程也是存在漏洞的,因为公钥是公开的,如果C冒充A的身份利用B的公钥给给B发消息,那么这样就乱套了。所以接下来就采用非对称加密+摘要算法+数字签名的机制来确保传输安全。

三、Hash算法(摘要算法):

​ Hash算法的特点是单向不可还原,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。只要源数据不同,算法得到的摘要必定不同。

  • 常见的摘要算法有:

MD2、MD4、MD5(不安全)、HAVAL、SHA-256(安全)

四、数字签名

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.htmlopen in new window

数字签名用来,保证信息传输的完整性发送者的身份认证、防止交易中的抵赖发生。

  • 1、保证信息传输的完整性:

A将原始的数据明文通过Hash算法得到摘要a,这个摘要是不可逆的;将明文进行加密,连同摘要一起发生给B。

B收到后加密的明文后解密得到原始明文,并收到摘要a。然后B将原始明文通过同一Hash算法得到新的摘要b,比较a与b就可以得知在传输过程中是否被更改过。

因此数字签名能够验证信息的完整性。如果中途数据被纂改或者丢失。那么对方就可以根据数字签名来辨别是否是来自对方的第一手信息数据。

  • 2、发送者的身份认证(数字签名):

https://blog.csdn.net/qmickecs/article/details/73696954open in new window

接着上述的问题,当有人冒充A发送数据给B是该如何解决呢?当A要发送给数据给B时,将发生的数据明文通过Hash得到摘要a,然后A使用自己的私钥对摘要a加密,生成数字签名。将数字签名、加密后的数据,摘要a一并发送给B, B收到数据后,得到数字签名,用A的公钥对数字签名进行解密,得到摘要a' ,若摘要a等于摘要a' ,那么证明则是A发送的。

RSA签名过程

小明对外发布公钥,并声明对应的私钥在自己手上
小明对消息M计算摘要,得到摘要D
小明使用私钥对D进行签名,得到签名S
将M和S一起发送出去

验证过程

接收者首先对M使用跟小明一样的摘要算法计算摘要,得到D
使用小明公钥对S进行解签,得到D’
如果D和D’相同,那么证明M确实是小明发出的,并且没有被篡改过

五、数字证书:

​ 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。 ​ 数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,广泛用在电子商务和移动互联网中。 ​ 通俗讲就是车管所会给每个车辆进行认证颁发车牌,通过车牌我们可以查到所有车辆和驾驶员的信,二数字证书就辨别唯一身份,支付宝等的数字证书就是公开的,这不是支付宝自己决定,而是由国际组织认证,这样不管是哪个用户首先就可以根据浏览器返回的证书辨别支付宝的真伪。

Https的实现原理

HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。

  • HTTPS 在内容传输的加密上使用的是对称加密非对称加密只作用在证书验证阶段

防止公钥被冒充,使用证书中心的私钥对该服务器公钥加密和一些相关信息一起加密,生成数字证书

HTTPS用的是SSL协议,保障你的浏览器和网站服务器之间安全通信,免受网络“中间人”窃取信息。

1、浏览器向服务器请求一个安全的网页(通常是 https://)

2、服务器把自己的公钥A网页的数字证书,一起发生给客户端

3、浏览器检查证书是不是由可以信赖的机构颁发的,确认证书有效和此证书是此网站的。

4、若证书有效,浏览器使用公钥A加密一个随机对称密钥B对称秘钥B加密的URL一起发送到服务器

5、服务器用自己的A私钥解密得到对称秘钥B。然后用这把对称加密B的钥匙给你请求的URL链接解密。

6、服务器用对称秘钥B加密对客户端请求的网页进行加密,客户端也有相同的对称秘钥钥匙进行解密,从而完成https通信