首页 > 代码库 > 网络传输的加密与解密(不是很难理解的一个版本)

网络传输的加密与解密(不是很难理解的一个版本)

                     --网络传输的加密与解密--   

    由于互联网早期并没有考虑到数据报文安全的问题,早期的理念都是基于进行通信的。现在随着网络兴起,互联网上慢慢有很多“犯罪团体”,用较低的犯罪成本通常是基于一个网络通信协议的一个小的漏洞来完成窃取、篡改、重播其他人的数据报文。

    而往往计算机网络安全维护者和那些恶意攻击者玩的就是一个类似猫鼠游戏,网络安全维护者处处考虑对计算机的安全负责,而恶意攻击者处处找安全的漏洞。而对于那些恶意攻击方式大体分两种。

一种叫被动攻击,大体上来说就是窃听,攻击者获得传输信息,捕获了数据流量。而另外一种叫做主动攻击,即伪装,冒名顶替数据接受者。重播,把窃取的消息一遍遍的发送给接收方。修改、把其他人的信息截取下来篡改一番。而针对那些恶意的攻击者,我们的网络安全机制就规定了,至少要保证在安全的网络通信下,这两点是必备的,

一、保证数据完整性,保证是发送方发送的信息没有被非授权修改 插入删除重复发送。

二、安全认证,为了验证发送者的身份,要求发送者做数字签名,证明是他自己的身份。

为了下面更好的讲述,现在引入几个概念:

明文  指的是传送方想要接收方获得的可读信息,说白了,就是大家都能看懂的信息啦。

密文  把明文经过一些加密算法后生成的一堆正常的地球人无法直接读懂的字符串。

密钥  就是在同一种算法内明文、密文之间相互转换需要输入的数据,如果输错了,就无非获得正确的明文信息啦。

算法(计算机) 无非就是利用一些数学公式算法的方式。


在计算机加密方式有以下几种:

一、对称加密方式:

发送方和接收方都使用同一个密钥对信息进行加密、解密。这里举个例子就好理解了,假设XX村有个寡妇叫小翠,跟隔壁的二狗有“交流”,小翠要和二狗通信,通常都是写一些大家都能理解的语句“月上柳梢头,人约黄昏后。”一类的吧,万一“信”让不怀好意的大牛截取了,张大牛打开信就看到了秘密了。这个似乎就很尴尬了,于是小翠和二狗商量好了,采取用他俩人的“暗号”对信加密呀。

wKiom1PcYvGS4uz_AAEl4QCpbcM685.jpg

这样,小翠和二狗两个人都拥有同一个密钥,就可以情意绵绵的通信啦,对于大牛来说,他没有密钥,就算截取了信,也是只能看到一堆乱码。但是,万一小翠要是脚踩N只船,和不同的人都有“交流”,岂不是小翠要记得好多密钥?万一大牛利用一些手段,截取了信息,破解了密钥,这样的加密就毫无意义了,再设想一下,大牛截取了,破解不了,但是他又一次生成了不一样的信息发给二狗,二狗也并不知道小翠要表达什么,这样岂不是曲解了原意了么?还有最重要的,如果小翠和二狗并没有办法相见,小翠加密以后,怎么把密钥告诉二狗呢???

这样,对称加密的缺陷就显现出来了:

密钥真的是过多,身份也无法认证,更不用提数据完整性可靠了,同理,密钥交换就很困难。

但是本质上说,对称加密的速度还是蛮快的。


二、非对称加密方式


W.Diffie和M.Hellman 1976年在IEEE Trans.on Information刊物上发表了文章,提出了“非对称密码体制即公开密钥密码体制”的概念,开创了密码学研究的新方向。该加密方式规定了密钥需要有一对儿

一个公钥(Public Key)和 一个私钥(Private Key/Security Key),如果用公钥加密信息,就需要用相同配对的私钥才能解密,反之亦然。

让我们看看非对称加密的过程是什么样子的:

wKioL1PccgDi1l2GAADXIAg-hrI187.jpg


Tom如果想跟Jerry通信:

Tom再获得了Jerry的公钥以后用Jerry的公钥加密了一段小的“数据”,放到要传输的信息后面,一并发给Jerry,假设信道传输时没有被别人窃听破坏,Jerry拿到这个数据,想读取内容,只能通过它自己的私钥才能开启那小段数据。此外因为Tom用Jerry的公钥加密,也能够保证获取到正确信息的一定是Jerry本人(Jerry的私钥没有泄露),这样Jerry不仅拿到了数据也保证了Jerry本人拿到的。非对称加密方式在很大程序上保证了数据的安全性。但是没有一种办法能保证万无一失,假设这个数据不幸被第三方的Dog拿到了,Dog虽然不知道Jerry的私钥是什么,但是Dog恶意破坏数据,随便用一个私钥就解密数据,得到一种错误的信息。
非对称加密的算法:

RSA

D-H

Elgamal

等等

但是这里有个很大的问题,Tom和Jerry双方怎么取得各自的公钥呢??是不是双方需要一个可靠的机构或者是第三方个人来担保双方获得的公钥是正规途径得来的。而且公钥加密本身生成的密码就很长,意味着解密时间也就很长。

非对称加密算法

优点:数据可靠性相当强,很大程序上保证了身份认证。

缺点:生成大量字串故解密速度较慢,若用公钥加密,公钥传输的渠道成问题。


三、单向加密

     单向加密,它自己无法进行解密过程,不能用作直接进行加密数据信息。它采用两种MD5和SHA算法方式,把一段数据进行加密处理,获得一个叫做“特征码”的东西。

这段“特征码”跟原数据信息半毛钱关系没有。假设现在有人采用高科技手段篡改了文件内容,此时文件内容做了改动,哪怕是微小改动,被修改过以后的文件再次提取“特征码”。结果也会发生翻天覆地的变化,加密学里称之为雪崩效应(avalanche effect)。这种对于数据内容的识别很直接,一眼就能辨别数据内容有无修改。“特征码”识别过程我们好比照妖镜一样,伪装的再好的妖精也会被识别出来。

就让我们采取md5方式在linux上做个小实例:

[root@localhost tmp]# cat 1.txt 
I have a dream.
[root@localhost tmp]# md5sum 1.txt 
431ee9fa1c63997e59586b118905d32d  1.txt
[root@localhost tmp]# cat > 1.txt << EOF
> i have a dream.
> EOF
[root@localhost tmp]# md5sum 1.txt 
10734d2b3be4151b61faea8a7cc622af  1.txt
本来1.txt的文档内容是I have a dream,我们把它进行md5算法加密,获得一个
431ee9fa1c63997e59586b118905d32d这就是原数据1.txt的长度为256bits的“特征码”
而我们一旦对原文件的数据内容进行个微小的修改把“I ”改成“i”结果又偷偷写回到原文件之中

结果确发现大相径庭,10734d2b3be4151b61faea8a7cc622af变成这个“特征码”了。用它来甄别数据是否被人偷偷的改过是不是很有效?



让我们对上述的做个总结,

我仅仅是想快速的对数据进行加密对其他人发送的时候,我可以采取对称加密的办法。

我们要验证发送接收双方的身份真伪,可以用“非对称加密”办法。

我们想知道数据内容有没有被人非法篡改过,就用“单向加密”方式。

所以大致上

对称加密:快速

非对称加密:认证身份

单向加密:验证数据内容


这里就有个好的意见,如果我们想跟另一个机构或个人通信,不妨把上述三点都揉在一起,这样任何都会照顾到了。这样就大致诞生了PKI里面叫做“公钥基础通信设施模型”。

模型大体上步骤是这样的,还是以Tom和Jerry为例:


Tom想跟Jerry通信,Tom会采取加密步骤,步骤如下wKiom1PclQHwBByaAAOFsveqwCs546.jpg


此时我们的Jerry收到信息,它的解密步骤如下:


wKiom1PcnGXwt_isAALo0ftS8kY279.jpg

这样是不是就能够保证通信双方万无一失了呢??看着很是天衣无缝,但是其实仔细想想,似乎哪里还有蹊跷。

Tom想跟Jerry通信,Tom是怎么获得Jerry的公钥的呢????

看看,原来是如此缜密的通信机制里还有遗漏,我们仍无法保证数据够保密的。Tom和Jerry如何可靠的获得真正属于本人的公钥的?看来得找一个牢靠的第三方,一个能够保障双方身份都可靠的仲裁机构了。对,这就是CA的诞生了。


==================================CA(Certification Authority)==========================

CA就是认证身份的中心,用它来确认公钥拥有者的真实身份!!它会给Tom和Jerry每个人发给类似***一样的“数字证书”。而且对于这个CA的第三方几乎没人敢怀疑它是“冒牌货”。那么CA是如何进行认证的呢?

CA会利用它自己的私钥为数字证书附加上数字签名,类似于上公安局盖上大印了一样。

通常我们的CA采取x.509格式信息的数字证书


    ·证书的版本信息;

    ·证书的序列号,每个证书都有一个唯一的证书序列号;

    ·证书所使用的签名算法;

    ·证书的发行机构名称,命名规则一般采用X.500格式;

    ·证书的有效期,现在通用的证书一般采用UTC时间格式;

    ·证书所有人的名称,命名规则一般采用X.500格式;(这里必须要写真实的主机名)!!!

    ·证书所有人的公钥。

    ·证书发行者对证书的签名。


但如果Tom想申请一个证明自己公钥所有权的CA的数字证书并不是那么容易,Tom需要填写一个类似“入党申请书”一样的东西交给CA,CA进行实地考察,看看Tom三代是否有不合法的,看看Tom是不是一个品德高尚的人等等,核实成功了,CA才会签署表示同意。

当然了,如果做做实验也可以建立CA的,这样更好的帮助理解CA概念,如何搭建一个属于自己的CA,请关注我的下一篇Blog。