网络通讯中使用的算法

加密算法在计算机体系中运用得很普遍, 你可能很常常听到单向加密算法,私钥,公钥之类的名称,可是并不清楚之间的关系以及为何会有这些加密算法,那么这篇文章能够帮助你找到答案.算法

加密算法的做用通常都是为了解决通讯过程当中出现的三个问题 :浏览器

  • 身份验证安全

  • 数据完整性校验服务器

  • 数据机密性网站

咱们以后所讲的全部加密算法, 都是围绕着这三个问题展开的.加密

单向加密算法

这种加密算法有两个特色 :操作系统

  • 加密过程不可逆.即明文经过加密生成密文,可是没法经过密文推算出明文code

  • 不一样的数据加密出来的结果确定不同,不存在不一样的数据加密以后生成一样的密文.ip

  • 定长输出.即无论对多大的数据进行加密,加密以后的结果确定是定长的.get

根据上面的前两个特性,咱们能够利用单向加密算法能够用来保证数据完整性.

咱们假设 :
A要发送一段数据给B,在发送的过程当中可能会被C截取,C截取并修改数据以后发送给B,这种攻击称为中间人攻击.为了保证数据在通讯过程当中不被篡改,A使用单向加密算法对数据进行加密,而后生成的密文咱们称为特征码,把特征码附加在数据以后,一块儿发送给B.这样子C即便截取修改了数据再发送给B.B只要把数据从新加密生成特征码,跟附加在数据以后的特征码进行比较,就能够知道数据被中间人修改过了.

典型的加密算法有MD5,SHA1等等.在网上下载东西的时候会听过MD5校验,就是利用了单向加密算法的特性.下载的软件旁边会附带一串MD5值,下载完成后能够对下载的软件进行MD5计算,而后比较附带的MD5值,来保证软件没有被篡改.

对称加密算法

接着上面的假设,即便A对B发送的数据进行了加密,可是C能够截取数据,修改以后从新计算特征码,而后把新的特征码附带在修改以后的数据发送给B,这个时候B即便校验了数据也没办法保证数据没有被篡改,由于特征码是新生成的.这里引出了一个新的问题:B如何保证这个数据就就是A发来的,即身份证验证的问题.

对称加密算法就是为了解决这个问题,对称加密算法要求AB之间共有一个相同的秘钥.在加密的时候流程以下:

  • 明文和秘钥一块儿进行加密以后生成密文.

  • 密文和秘钥一块儿进行加密以后从新生成明文.

如今AB之间通讯变成了下面的流程

  • AB通讯以前交换秘钥

  • A要发送数据给B以前,先对数据进行单向算法加密生成特征码,而后使用对称加密算法对特征码和秘钥进行对称加密,把加密以后的密文附加在数据以后发送给B

  • B拿到数据以后,提取附加在数据以后的密文,使用对称加密算法把密文和秘钥再次加密,从新生成明文,这里的明文就是特征码,而后对数据提取特征码,比较两个特征码保证数据完整性.

上面的步骤解决了两个问题,即数据完整性和身份验证.这样子C即便修改数据从新生成特征码,可是他没有办法使用AB之间的秘钥来加密特征码.

回顾AB之间的通讯流程,AB在传递数据以前如何要换秘钥?交换秘钥也须要AB互相通讯,在交换秘钥的时候有可能被C获取.有一个算法Diffie-Hellman算法,这个算法能够保证AB之间交换秘钥不被第三方获取.这个算法是基于离散对数原理.咱们不关心算法原理,这里简单说明下算法实现流程

  • AB之间互相协商生成一个随机的大素数p和一个生成数g.

  • AB两个各自分别生成一个随机数x,y

  • A向B发送g^x%p的值,B向A发送g^y%p的值

到这里,有可能被第三方获取的数据有:p, g, g^x%p, g^y%p.可是因为离散对数原理,即便第三方知道这些值也没办法推算出x,y的值.

最后一步 :

  • A执行g^y%p^x,B执行g^x%p^y.

能够发现g^y%p^x = g^xy%p = g^x%p^y .至此AB之间把执行算式获得相同的结果,这个值就能够当作AB之间的秘钥.

Diffie-Hellman算法可让双方在彻底没有对方任何预先信息的条件下经过不安全信道建立起一个密钥。这个密钥能够在后续的通信中做为对称密钥来加密通信内容 ---- 维基百科

咱们能够发现, 交换秘钥的核心就在于Diffie-Hellman算法.这个算法能够保证AB在没有通讯过得状况下,互相交换秘钥.当AB之间有了相同的秘钥以后,AB之间就能够经过秘钥进行身份验证.可是,仍然有一个问题,AB之间第一次互相协商生成p, g的时候,C假冒A或者B跟对方进行秘钥交换.C仍是会获得数据,AB之间通讯以前交换秘钥 就是为了身份验证,可是秘钥交换过程当中仍是没办法保证对方的身份.咱们陷入了一个循环.并且对称加密还有一个问题在于:当A跟多我的之间进行通讯的时候,得维护多份秘钥.得投入大量精力.

非对称加密.

非对称加密秘钥分为公钥私钥.通常,公钥是从私钥中提取出来的,因此私钥通常都会很长(1024,2048字节等等).用公钥加密的数据只能用与之对应的私钥解密,反之亦然.如其名称,公钥通常都是公开出去的,每一个人均可以获取A的公钥,可是A的私钥只有A拥有.使用非对称加密以后,AB之间的通讯变成了下面的样子 :

  • A对要发送的数据提取特征码,而后使用本身的私钥对数据进行加密.把加密以后的结果附带在数据以后,发送给B

  • B拿到数据以后,使用A的公钥解密获得特征码,而后对数据提取特征码.两个特征码比较能够验证.

上面的步骤下来,C截取而且篡改数据,而且C也可使用A的公钥解密获取特征码,可是C修改数据以后从新生成特征码,可是只能使用本身的私钥加密,B获取数据以后,使用A的公钥没办法解密用C的私钥加密的数据,由此说明数据被篡改.至此,数据完整性和身份验证这两个问题能够解决,可是数据仍是会被其余人看到,使用上面的方法没有办法保证数据的机密性.

你可能会想到,A能够把数据用B的公钥加密以后再发送,这样子只有B的私钥能够解密数据,这样能够保证数据机密性,这个方法可行.可是有一个问题:用公钥加密数据太慢!.因此加密数据通常仍是使用对称加密算法,可是有一点不一样的是,AB之间不用再通讯以前交换秘钥.

  • A对要发送的数据提取特征码,而后使用本身的私钥加密特征码.

  • A随机生成一个秘钥,用这个秘钥使用对称加密算法加密全部的数据.而后使用B的公钥加密这个随机秘钥,最后把加密数据和加密以后的随机秘钥发送给B

  • B获得数据以后,使用本身的私钥机密获得随机秘钥,而后使用对称加密算法解密数据,这个时候解密出来的数据包含两个内容 :

    • A要发送给B的数据

    • A用本身私钥加密特征码以后的密文

  • B用A的公钥解密获得特征码,而后对数据提取特征码,比较两个特征码.

以上的流程就是如今通讯中加密解密的通用流程.根据上面的分析咱们能够得出如下结论 :

  • 使用本身的私钥加密数据能够用做数字签名,以保证数据发送者的身份和数据的完整性.

  • 使用对称加密算法能够保证数据的机密性.

CA机构

咱们再次回顾AB之间的通讯过程,AB之间可以互相通讯保证数据不被泄露都是基于AB拥有对方的公钥,可是在第一次通讯的时候AB之间去哪里获取对方的公钥,而且怎么保证本身获取到的公钥就是对方的公钥,而不是被人冒名顶替的?

你会发现,加密解密这事,从咱们最开始分析到如今不管出现什么厉害的算法技术,都没有办法保证第一次通讯时候的身份校验问题.因此,解决主机获取到对方的公钥没有被人冒名顶替只能靠一个权威机构,即CA机构.这个机构对全球网站的公钥进行认证,CA机构说这个公钥是淘宝网的,那么你就能够相信这个公钥是淘宝网的.因此CA机构必须具备权威性.

那么CA机构处理的任务相似下面:

  • 服务商(好比淘宝)向CA机构请求为本身的公钥作认证,CA机构会把淘宝的公钥跟淘宝的一些信息一块儿,使用CA的私钥加密,生成一个数字证书.

  • 用户在访问淘宝网的时候,淘宝服务器发送数据给用户的时候,会把数字证书附带在数据后面,用户收到以后,使用CA的公钥解密数字证书,就能够获得淘宝的公钥.进而使用淘宝的公钥来验证数据的完整性和进行身份验证.

上面的过程存在一个疑问:

咱们哪里去获取CA机构的公钥

通常,咱们浏览器或者操做系统都会内置一些能够信赖的CA机构的证书,即公钥.好比Chrome能够经过设置查看到信任机构的证书.

若是一个网站使用了不受信任的证书,那么浏览器就会警告不要访问这些网站.由于这些网站有多是他人假冒的.

固然CA机构颁发证书并非免费的,权威性越高的机构其证书就越贵.可是你发现,你使用计算机跟网站进行加密通讯,可是你好像并无购买证书?这是由于通常而言,做为用户并不须要向服务器验证身份.举例而言,你须要保证你访问的网站就是淘宝网,那么淘宝须要购买CA证书,可是你访问淘宝使用的主机并不须要向淘宝进行身份校验.只是访问者(你)须要向淘宝进行身份校验.而你向淘宝进行身份校验使用的是帐户和密码.....

相关文章
相关标签/搜索