摘要、签名、加密、证书的基本原理和理解

1.摘要算法

常用的摘要算法有MD5,SHA1。摘要算法是一个不可逆过程,就是无论多大数据,经过算法运算后都是生成固定长度的数据,一般结果使用16进制进行显示。

MD5和SHA1的区别:MD5结果是128位摘要,SHa1是160位摘要。那么MD5的速度更快,而SHA1的强度更高。

下面统一使用MD5算法进行说明,SHA1类似。

主要用途有:验证消息完整性,安全访问认证,数据签名。

消息完整性:由于每一份数据生成的MD5值不一样,因此发送数据时可以将数据和其MD5值一起发送,然后就可以用MD5验证数据是否丢失、修改。在下文中对数据内容的完整性就是通过比较发送内容的MD5和接收到的内容的MD5是否一样判断其完整性。

安全访问认证:这是使用了算法的不可逆性质,(就是无法从MD5值中恢复原数据)对账号登陆的密码进行MD5运算然后保存,这样可以保证除了用户之外,即使数据库管理人员都无法得知用户的密码。

数字签名:这是结合非对称加密算法和CA证书的一种使用场景。

一般破解方法:字典法,就是将常用密码生成MD5值字典,然后反向查找达到破解目的,因此建议使用强密码

2.对称加密算法

对称加密算法只是为了区分非对称加密算法。其中鲜明的特点是对称加密是加密解密使用相同的密钥,而非对称加密加密和解密时使用的密钥不一样。对于大部分情况我们都使用对称加密,而对称加密的密钥交换时使用非对称加密,这有效保护密钥的安全。非对称加密加密和解密密钥不同,那么它的安全性是无疑最高的,但是它加密解密的速度很慢,不适合对大数据加密。而对称加密加密速度快,因此混合使用最好。

常用的对称加密算法有:AES和DES.

DES:比较老的算法,一共有三个参数入口(原文,密钥,加密模式)。而3DES只是DES的一种模式,是以DES为基础更安全的变形,对数据进行了三次加密,也是被指定为AES的过渡算法。

AES:高级加密标准,新一代标准,加密速度更快,安全性更高(不用说优先选择)

3.非对称加密(RSA)

这里主要对RSA进行介绍。

对称加密加密解密使用的是相同的密钥,而非对称加密加密解密时使用的不同的密钥,分为公钥(public key)和私钥(private key).公钥可以公开,而私钥自己保存。由于非对称加密的密钥生成麻烦,所以无法做到一次一密,而且其加密速度很慢,无法对大量数据加密。因此最常用的使用场景就是数字签名和密码传输,用作数字签名时使用私钥加密,公钥解密;用作加密解密时,使用公钥加密,私钥解密。

下面这篇文章对这三个算法都做了详细的介绍,想要深入了解的可以看看:https://blog.csdn.net/u013565368/article/details/53081195

数据传输安全的要满足的要求:

  1. 消息的发送方能够确定消息只有预期的接收方可以解密(不保证第三方无法获得,但保证第三方无法解密)。
  2. 消息的接收方可以确定消息是由谁发送的(消息的接收方可以确定消息的发送方)。
  3. 消息的接收方可以确定消息在途中没有被篡改过(必须确认消息的完整性)。

对称加密

网络的数据传输从发送方发出到接收方接收到,要经过数个节点才能到达目的地,在这个过程中难免会被别有用心的人监听(现在常用的网络数据监听软件就有charles,具体可以查看相关使用教程,通过这个软件可以监听到某个页面用到了哪些接口,发送以及返回的参数分别是什么)。所以在传输敏感数据的过程中,就要对数据进行加密。现行的加密过程中,一般加密算法是公开的,密钥是自己持有,发送方有密钥对数据进行加密传输,在传输的过程中经过加密的数据即使被第三方窃取到也因为没有密钥不能解密。而接收方同样持有密钥通过算法的逆运算把密文解析出对应的明文来。
过程如下:


上述算法即为对称加密,特点是加密和解密都是用同一个密钥。这种算法的前提条件是发送方和接收方用一个密钥,也就是说在数据传输之前,接收方要知道发送方用于发送加密数据所用到的密钥。但是现实条件是一般不会把密钥手把手的交给对方,所以下面就要用到非对称加密算法。

非对称加密算法

非对称加密算法中信息的发送方和接收方都分别有两个密钥,其中分别为私钥和公钥,私钥为数据的发送方持有,公钥可以公开。其中涉及到两种模式,它们分别为加密模式和认证模式。
加密模式:
发送方用公钥给数据进行加密,然后把加密后的数据发送到接收方,然后接收方用对应的私钥解密,因为只有接收方的私钥才能解析数据,所以即使被第三方窃取到数据也没有关系。这个模式叫做加密模式。在这个过程中如何保证数据的完整性,保证数据是发送方发送的数据,而不是被第三方篡改后的数据。这时就要用到签名,在发送方加密明文之前,给明文取md5值,得到其信息的摘要(注:不能通过信息摘要反推明文)。然后用公钥分别给明文和明文的摘要加密发送到数据的接收方,数据的接收方接收到数据之后,用私钥对密文和摘要进行解密,然后对解密得到的明文取md5摘要,比对解密后的明文摘要和发送过来的摘要是否一致;一致就证明数据是原始的数据没有遭到篡改。这个加密的过程中保证了数据的安全性(即只有接收方才可以解密)和防篡改性(签名认证),这就保证了上面说的数据传输要求中的第一点和第三点。下面是图解过程:

但是因为公钥是公开的,所以在加密模式中我们是不知道到底是谁发送数据给我们的,因此下面就要提到认证模式。
认证模式:
在认证模式中,发送方用私钥加密数据,给接收方发送数据,接收方用公钥解密,因为私钥是唯一的,所以只要数据解析成功就可以知道数据发送方是谁。
这就附和我们在数据的传输要求中的第二点了。下面是图解过程:

结合加密模式和认证模式就可以实现数据传输安全的三大要点了。
下面我们来解释一下这种高级模式,以发送方和接收方两个部分来解释:

  1. 将消息进行散列运算,得到消息摘要。
  2. 使用自己的私钥对消息摘要加密(认证模式:确保了接收方能够确认自己)。
  3. 使用接收方的公钥对消息进行加密(加密模式:确保了消息只能由期望的接收方解密)。
  4. 发送消息和消息摘要。

接下来我们看一下接收方所执行的步骤:

  1. 使用发送方的公钥对消息摘要进行解密(确认了消息是由谁发送的)。
  2. 使用自己的私钥对消息进行解密(安全地获得了实际应获得的信息)。
  3. 将消息进行散列运算,获得消息摘要。
  4. 将上一步获得的消息摘要 和 第一步解密的消息摘要进行对比(确认了消息是否被篡改)。

可以看到,通过上面这种方式,使用了接收方、发送方全部的四个密钥,再配合使用消息摘要,使得前面提出的安全传递的所有三个条件全都满足了。那么是不是这种方法就是最好的呢?不是的,因为我们已经说过了,非对称加密是一种很耗时的操作,所以这个方案是很低效的。实际上,我们可以通过它来解决对称加密中的密钥传递问题,如果你已经忘记了可以翻到前面再看一看,也就是说,我们可以使用这里的高级实现方式来进行对称加密中密钥的传递,对于之后实际的数据传递,采用对称加密方式来完成,因为此时已经是安全的了。

证书机制

与数字签名相关的一个概念就是证书机制了,证书是用来做什么呢?在上面的各种模式中,我们一直使用了这样一个假设,就是接收方或者发送方所持有的、对方的公钥总是正确的(确实是对方公布的)。而实际上除非对方手把手将公钥交给我们,否则如果不采取措施,双方在网络中传递公钥时,一样有可能被篡改。那么怎样解决这个问题呢?这时就需要证书机制了:可以引入一个公正的第三方,当某一方想要发布公钥时,它将自身的身份信息及公钥提交给这个第三方,第三方对其身份进行证实,如果没有问题,则将其信息和公钥打包成为证书(Certificate)。而这个公正的第三方,就是常说的证书颁发机构(Certificate Authority)。当我们需要获取公钥时,只需要获得其证书,然后从中提取出公钥就可以了。

【区别】摘要、数字签名、数字证书_zhifeng687的博客-CSDN博客_数字签名与摘要的区别

3、数字签名

摘要经过加密,就得到数字签名

数字签名在发送方,分两步:(1)从内容算摘要(哈希算法)(2)从摘要明文到摘要密文,也称数字签名(发送方私钥+加密算法)

数字签名验证在接收方,分两步:(1)从摘要密文(数字签名)到摘要明文(发送方公钥+解密算法)(2)从收到的内容当场计算摘要(哈希算法),与(1)的结果比对是否一致

如果一致,可以说明两点:

(1)内容未被篡改(摘要一致)

(2)内容只能是私钥拥方发送,不可抵赖(密文能够用对方的公钥解开)

然后单独想一下,

(1)为什么要对摘要加密后再发送?为什么不直接发摘要?摘要不可以逆向推导原文,摘要泄露了也没事……

答:摘要泄露是没事,但不怀好意的人的目的可能并不在想要窃听你发送了什么,而是想伪造发送的内容让你相信。通过同时替换摘要和内容,很简单就实现了。所以摘要需要经过加密,不怀好意的人没有私钥,无法完成加密。或者说你收到的东西只要能用公钥解密,你才认为这个东西确实是对应私钥持有者完成的。这叫做当事人不可抵赖,同时别人无法仿冒。(数字签名:不可抵赖+无法仿冒)

(2)为什么不直接对内容加密,而是先生成摘要,对摘要加密?

答:可能是内容很长吧,直接加密算半天!摘要算法可以把无限长的内容输出成长度固定的摘要,再进行加密时间就是可以预估的

4、数字证书

上面的一切都很完美,你用公钥能够解密,说明确实是私钥方发送的,你很放心……

但有没有想过,万一这把公钥本身,就被人做了手脚???

为了保证“公钥”是可信的,数字证书应运而生。

数字证书里有个重要概念,CA,发送方先把自己的公钥给CA,CA对其进行加密得到加密后的发送方公钥(用的是CA的私钥和CA加密算法),也就是CA的数字证书。

注意这里有两个不同的非对称算法(对应2个公钥私钥对),一个算法是发送方加密摘要的,用于生成数字签名;另一个算法是CA加密发送方公钥的,用于生成数字证书。两个算法相互独立,没有必然联系。

发送时不仅发送内容、数字签名,还包含发送方的数字证书。接收方拿到后,首先从数字证书中解密出发送方公钥(用的是CA的公钥和CA解密算法),这个公钥必然是可信的。然后就是和前面一样的流程,拿发送方公钥去解密数字证书,得到摘要;最后比对摘要是否一致。

一个问题:既然数字证书是为了保证发送方公钥不是别人伪造的,那怎么保证“CA”的公钥不是伪造的呢?

答:CA是第三方机构,CA公钥是公开的,接收方可以跟别人比对(比如在网上查询),因此不可能伪造。但是发送方公钥,接收方是通过通信得到的,收到后无法验证。

【实例1】https

工作流程,基本分为三个阶段:
1、认证服务器。浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果签发该证书的CA,存在于浏览器的受信任CA列表中(也就是签发该证书的CA的根证书,能够与客户端中保存的CA根证书比对上),说明这个CA是可信任的,可以保证证书不假。然后,再进一步判断服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。   客户端是否能够信任这个站点的证书,首先取决于客户端程序是否导入了证书颁发者的根证书。

2、协商会话密钥。客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

3、加密通讯。此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

客户端是否能够信任这个站点的证书,首先取决于客户端程序是否导入了证书颁发者的根证书。

服务器找CA签发证书,以及客户端识别证书的过程(加密机找CA签证书基本也是这个流程,只不过两台加密机通信,两台都要签证书)

IE浏览器在验证证书的时候主要从下面三个方面考察,只要有任何一个不满足都将给出警告
  1. 证书的颁发者是否在“根受信任的证书颁发机构列表”中
  2. 证书是否过期
  3. 证书的持有者是否和访问的网站一致

这会儿我正好在装Fiddler。默认Fiddler不对https traffic加密,如果勾选,就会弹出如下对话框,大意是:Fiddler会在https流量收发双方中间,类似代理的角色,为了参与https通信,Fiddler自己也要有一个证书,然后这个证书由一个CA颁发,现在这个CA的根证书需要导入windows,用户需要让windows信任这个CA。

点击yes

之后是windows的警告:因为在往系统里加一个新的CA根证书,windows并不确定这个根证书是否是真的,所以问你(根证书责任重大,选择相信根证书意味着相信这个CA的一切操作……))

【实例2】加密机

个人理解,可能有错。欢迎指正~

加密机A和加密机B双向通信,没有绝对的客户端和服务端之分。或者更准确地说,每台加密机既是服务端,需要找CA给自己签个签证书;也是客户端,需要提前导入CA根证书,用于识别收到的证书是否是可靠CA签发的(比对收到证书的根证书是否在可靠CA列表中)。CA签发证书的过程,就是对【包括发送方公钥在内的发送方信息】进行加密(用CA加密算法和CA私钥)。因此签出来的证书,在接收方可以被解密得到【包括发送方公钥在内的发送方信息】(用CA解密算法和CA公钥)。

此外,A需要导入B的证书,B需要导入A的证书。

上述准备工作(初始化)完成后,A和B首先建立连接(不涉及应用数据,只是协商一致建立一条加密隧道),其实就是A需要验证现在与我通信的另一端、证书里生成的B,是不是真正的B。这个就依靠B发送自己的证书给A,A收到后首先确认这个证书颁发CA是可靠的(依据CA的根在自己的可靠根列表中),说明证书可信,再从对证书进行解密(CA的公钥+CA解密算法),得到【包括B的公钥在内的B的信息】,据此证明对端就是真正的B,并拿到了B真正的公钥,验证完成。同理,B也要验证对端确实是A,就不再赘述。

互相验证完成后,A与B的链接建立,等待真正的数据收发。之后的加解密,应该就是加密机自己的算法和秘钥了,硬件上是由加密卡完成,加密卡也是加密机最值钱最核心的部件……

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值