首先理解加密算法
其次理解DH算法
最后解析ipsec×××
理解加密算法
一个完整的加密方法由很多因素组成,但是最关键的两个因素是加密算法和密钥。加密算法通常是非常复杂的数学公式,这些公式确定如何将明文转化为密文的运作过程与规则。密钥是一串被加入到算法中的随机比特,若要使两个加密点之间进行加密的通信,必须使用相同的加密算法。而且在某些时候他们需要使用相同的密钥(对称式加密),当然在很多时候两者使用不同的密钥来进行加密或者解密(非对称加密)。
下面描述对称式加密算法和非对称式加密算法:
对称式加密
会使用同一把密钥来加密和解密数据。
举一个简单的例子来说明这个问题,就是好比一把锁和一把钥匙,大家都知道,锁门的时候用的时候用哪一把锁头,就要用锁门时用的钥匙来开这一把锁,这就是对称式加密算法。其实对称式加密算法挺简单的,那我们来看一下:
对称式加密算法的优点:
相对非对称加密而言,他的加密速度更快
密钥的位数大的会话很难攻破
对称式加密算法的缺点:
对称式加密算法需要一个安全的机制来分发密钥。。为什么呢?因为每一个使用者都需要一对唯一的密钥,因此密钥的数量会随着使用者增加成倍的增加,这对密钥的管理造成了很大难度。
使用对称式加密只能保证数据的机密性,也就是说只能保证数据不被看到,但是他不能提供对数据的认证和防抵赖性。什么意思呢?你用对称式加密对数据加密以后,不能保证数据在传输的过程中被更改,也不能确定这数据是不是你需要的那个用户A加密的。
对称式加密的标准:des ,3des,aes
非对称式加密
非对称加密算法使用两把不同的密钥,一把叫做公开的密钥,一把叫做私有密钥,那么这两把密钥是不同的密钥,但是他们必须成对使用,如果你用公钥来加密数据,那么只能使用这把公钥对应的私钥来解密,如果用私钥来加密了数据,那么只能使用这把私钥对应的公钥来解密。虽然他们是两把不同的密钥,但是他们之间存在着复杂的数学关联,他们是有关系的,因为加密的过程中,我们使用了两把不同的密钥,所以我们把这种加密方式称之为非对称加密算法。
那非对称式加密是怎么用的呢?具体过程中需要注意一些什么呢?
首先要说明一个问题,在非对称加密算法中指的加密还有更深层的意义:
加密这个词包含了对数据提供了机密性
加密这个词包含了如何确保数据的完整性和防抵赖性
以下通过两个例子来说明两个问题:
1. 如何利用非对称式秘钥来保证数据的机密性
2. 如何利用非对称式密钥来保证数据的完整性和防抵赖性
使用非对称式密钥来保证数据的机密性
第一步:首先在用户A和用户B保存自己使用的公钥和私钥,然后,他们俩将彼此的公钥进行交换,这个过程叫密钥交换。事实上,公钥是可公开的,所以交换公钥不会造成任何安全威胁。注意私钥不能用作公开,交换,或者是网络传递。
第二步:经过公开密钥(公钥)的交换后,用户A成功的获得用户B的公钥,然后使用用户B的公钥来加密数据,然后将加密后的数据通过网络传给用户B,此时如果网络上有第三方的窃听者截获了这段加密的数据,他将无法获取数据的内容,因为第三方没有用户B的私钥,使用用户B的公钥加密的数据只有用户B的私钥可解密。用户B的私钥是不可公开的,所以这个过程保障了数据的机密性。
第三步:当数据到达用户B处时,用户B使用自己的私钥解密文件,可读取文件的内容,如果用户B要回送机密消息给用户A则使用用户A的公钥来加密回送文件。
这是一种使用接收方的公钥来加密数据的方式,他的特点如下:
1. 能保障消息的私密性,只有接受者可以阅读消息内容,因为只有接收者具备解密的私钥
2. 无法提供来源可靠性的认证,因为公钥是可以公开的,任何人都可能得到接收者的公钥,那么如何保障来源的可靠性呢?
第二个例子
用户A要给用户B发送一个文档,但是这个文档不需要太高的机密保障但是绝对不能让人修改,并且要让用户B相信这个文档就是用户A发的,而不是张三李四发的,那这个怎么做呢?用户A可以使用自己的私钥去加密这个文档,注意,用私钥加密,私钥是不会再网络上传输的,其实这个加密的过程,是对数据内容作了一个完整性验证和防抵赖的认证,并不是确保它的私密性。然后在网络上去传输数据,但不会传输私钥。如果网络上有中间人***,截获数据,拥有用户A的公钥就可以读到这个文档,因为公钥具有公开性,任何人都可能会获得用户A的公钥,拿到用户A的公钥就可以读到这个文档了。但是读归读,但是你不能修改文档的内容,不能改变一个事实,这个文档是用户A发出来的,现在的电子交易就要用到了这个特性,当用户B收到数据之后拿用户A的公钥解密这个文档,确认文档没有被篡改,也确认是用户A发送的文档。
这是一种使用发送方的私钥来加密数据的方式,它的特点如下:
1,不能保证消息的私密性,被称为公开消息格式。为什么呢?因为每一个具备该公钥的人都可以解密该消息。
2,可以保证消息来源的可靠性认证功能,因为发送者使用私钥加密,私钥只有发送者本人具备。而且中间人不能篡改消息,因为他没有发送者的私钥。
注意:在非对称加密过程中,每一种密钥类型都可以用来加密和解密,所以不要误认为公钥只能用来加密,私钥只能用来解密,事实上它们都具有加密和解密的能力,取舍在于你重点需要的是机密性还是完整性。
非对称加密的优点
1. 与对称加密相比较,有更好的密钥分发功能。为什么呢?只要有证书服务器架构的话,就可以有一台专用的服务器,专门来管理这个公钥,下发和注册以及合法性认证等等。
2.比对称式加密更具有扩展性,
3.能够提供来源认证和防抵赖性,
当然也可提供一定的私密性,但是有一些小的问题。
非对称加密的缺点:
1.非对称加密的速度比对称式加密更慢,
有一个问题,无论是用用户A是还是用用户B的公钥来加密,如果是面对海量的数据,采用非对称加密速度不是变的更慢了吗?那怎么办呢?效率会很低,既然效率很低,为什么还用非对称式加密呢?因为非对称式更安全,它的可管理型更好,扩展性更好,它有来源认证,防抵赖性,还可以支持第三方的认证机构。那这个问题如何解决?使用混合的加密方案来解决这个问题。
2.非对称加密算法的数学模型比较复杂。
非对称加密的标准:RSA,ECC,DH,EIGANAL ,DSA等等
混合的加密方案:由于对称式密钥和非对称式密钥各自具备自己的优点和缺点,那最好的一个解决方案是使用混合式加密方案,其实也挺简单的,就是让对称式密钥加密数据,在用非对称式密钥来加密对称式密钥,这样既保证了数据加密的速度,也保证了加密的安全性。既同时使用对称式密钥和非对称式密钥。
理解DH算法:
我们刚才提到了对称式加密的优点是:速度块,即便是有很多的缺点,但是人们在将加密算法直接与数据结合的时候,还是首先选择的是对称式加密,然后用非对称式加密来解决对称式加密的3大缺陷:安全性服务,扩展能力,安全密钥的传送。那这些怎么理解呢?我们首先来回忆一下,混合式加密算法:首先有一个A用户,一个B用户,A用户使用一个对称式加密来加密我们的数据,然后在使用非对称式加密(既使用B的公钥来加密对称式密钥),最后把文件传送到B用户这里,B用户用自己的私钥来解密这个被自己公钥加密的对称式密钥,然后再用对称式密钥来解密数据。那为什么要用对称式密钥加密数据呢?不用非对称式密钥当中的公钥呢?原因很简单,非对称式加密的速度慢,对称式加密的速度快。在实际的解决方案中已经没有使用单纯的加密解决方案,都会使用混合的加密方案。要考虑加密的速度和密钥的管理以及实现更高的安全性都会使用混合式的解决方案。在混合式的解决方案中A如何获得B的公钥,因为公钥是可以公开的,B可以把自己的公钥传给A,但是在混合解决方案中,对数据加密和解密时使用对称式密钥,这个密钥是一样的,那这个对称式密钥,B是如何获得的呢?你又如何去保证加密和解密的数据的密钥是一样的呢?想过这个问题吗?难道是把这个对称式密钥传给对方吗?这样做肯定是不行的。
在很早以前,对称式密钥的发送是一个很大的问题,因为他需要机密的情报人员将密钥送达到目标处,所以咱们看谍战片时,都听说过这样一件事,就是密码本,对端也要用相同的密码本才能够解密数据,万一情报人员被俘虏了,那安全性怎么保障?如果把这个理念用在现今的网络当中,直接在网络上传输这个密码本,那就错上加错了。中间安放协议分析器,就能够解密数据了,所以这个对称式密钥一定不能在网络上传输,所以我们要使用安全的方式将作用于数据的对称式密钥给算出来,这个安全的方式就是迪非-赫尔曼算法,这个算法到底是干嘛的呢?它解决了一个什么问题?解决了使用对称式密钥加密过程中对称式密钥的安全的传送问题,那为什么叫迪非-赫尔曼呢?由两位仁兄开发的非对称式算法,
DH是一种确保对称式密钥安全穿越不安全网络的方法。就是使用DH算法来保障安全密钥的传送。
在DH算法中,对称密钥是没有在网络中传输的,他是通过初始化发送一个偌大的整数,生成一个随机数和自己的私钥,在使用数学算法生成一个公钥,然后再次交换公钥,然后再次使用第五部的计算最后算出K的值既对称密钥。
第一步:用户A上产生一个大的整数P,并将这个P发送给用户B,用户B上产生一个大整数Q,并把Q发送给对等体A;用户A接受Q生成g;用户B接受P生成g.
第二步:用户A生成私钥XA,用户B生成私钥XB
第三步:用户A通过YA=g^XAmodP公式进行计算生成用户A的公钥YA,同理用户B生成公钥YB。此时的用户A和B就分别拥有了自己的公钥和私钥对。
第四步:因为在非对称式加密系统中,公钥是可以公开的,所以用户A和B相互交换彼此的公钥,那么A用户就具备用户B的公钥YB,用户B就具备用户A的公钥YA.
第五步:用户A将使用用户B的公钥结合自己的私钥使用公式计算出对称式密钥K,用户B使用相同的公式计算出与用户A相同的对称式密钥K,然后使用密钥K来加密数据。
所谓对称式密钥安全的穿越网络,并不是将对称密钥拿到网络上传输,而是通过上述的DH的算法,在彼此发送一个大的随机数后,接收方计算出对称式密钥。通过这个过程来保障对称密钥安全的穿越网络,只是把对称式秘钥给计算出来,完成公共密钥的交换,但是DH算法不提供加密和数字鉴别功能。那这两个功能怎么样提供呢?那就要继续关注DH算法的安全问题了。
学习DH算法必须要清晰的知道两点:
1.DH算法的一个目的是用于密钥交换,这里的密钥指的公共密钥<公钥>的交换,然后经过交换了的公钥,结合自己的私钥在进行取摸运算,双方算出一个K值<对称式密钥>,也就是我们常说的会话密钥,这个会话密钥是干嘛的?当然是作用于数据的。因为他作用于数据的速度最快,使用对称式密钥加密了数据之后,就可以用B的公钥加密会话密钥,最后会话密钥的传递就会很安全,传到B之后,B就用自己的私钥来解密被他公钥加密的会话密钥也就是对称式密钥解密,然后用对称式密钥来解密数据。这就是一个简单的加密过程。
下来继续关注DH算法的安全问题,这部分内容可以作为补充内容提交给大家。
DH算法的一个特点是A必须要得到B的公钥,B必须得到A的公钥,那用户A敢保证给自己发公钥YB的就是用户B,而不是其他非法用户呢?那如果给A发公钥的是一个***,那用户就会和***计算对称式秘钥。这个道理很好懂。
其实,即使别人知道P或g,它也很难通过计算来得到对称式秘钥K,因为对大的整数的因式分解非常困难,但是第四步即公钥交换的过程中存在一个安全风险,这个安全风险是,当用户A向用户B发送公钥时被非法用户C截取,同理用户B向用户A发送公钥也被非法用户C截取,此时用户A和用户B都无法成功的收到对方的公钥。对于用户A而言,用户C就伪造为用户B的身份将自己的公钥发送给用户A,用户A误认为非法用户C就是B,所以与用户C形成了对称式秘钥K A,同理B也与用户C形成对称式秘钥KB,那么非法用户C就同时拥有了用户A和B的对称式密钥KA和KB。当用户A和B之间传输数据时,用户C就可以使用对称式秘钥解密数据,这将造成很大的安全风险。
虽然要成功的实施上述关于用户C的欺骗行为很难,但是并不排除发生这种可能性,所以需要一种方法在DH算法过程中交换公钥时对彼此进行身份验证,比如使用数字签名,那么在DH消息交换的过程中,使用RSA来进行数字签名。也就是说数字签名可以向A保证B的身份,能够让A相信,发给我公钥的就是用户B ,而不是其他非法用户,RSA是实现数字签名的方式,同时它还需一种架构来保证彼此公钥的可信的程度。例如我们给淘宝付钱,淘宝要我们加密,我怎么确保我正在使用淘宝的公钥加密,难道不可以是别人的公钥吗?当然我的确是使用淘宝的公钥来加密,数据传送到淘宝那里去的时候,淘宝就可以用自己的私钥来解密,但是我万一加密的是别人的公钥,那你的钱就付到别人那里去了。
因为DH只做两样事情:交换秘钥,算出相同的对称式密钥。而这两个过程中是没有保障的,它不能通过某种方式确定对方的身份。所以我们用RSA<数字签名>保障DH算法的过程。
RSA是用于数字签名,秘钥交换和加密的标准,RSA的好处就是RSA即可以用于加密也可以用于数字签名。RSA弥补了DH的无法生成数字签名。
转载于:https://blog.51cto.com/miaoyuanqiang/1653428