Linux加密、解密安全通信详解


密码算法和协议:四大类
    对称加密:用于加密任意大小的数据块数据内容,加密方和解密方使用的是同一个密码
    公钥加密:(非对称加密)加密和解密使用的是不同的密码,有公钥和私钥,密钥是成对出现的,公钥是从私钥中提前出来的,私钥是很长的,私钥加密速度比较慢。公钥是公开的,公钥加密需要用私钥解密,用私钥加密得用公钥解密。
    单向加密:数据完整性算法:抽取数据的特征码,且在二次抽取后和此前的抽取进行比较,以验证数据的确没有被人篡改过的。
    认证协议:用基于某种特性的算法来完成通信双方的真实性。


    对称加密

        常见的算法:DES(56位密钥)数据加密标准、3DES、AES(128、192、256、384、512位密钥)高级加密标准、Blowfish、Twofish、IDEA、RC6、CAST5。。。

         特性:

             1.加密、解密使用同一个口令(密钥);

             2.将明文分隔成固定大小的块,逐个进行加密;

          简单通信过程:当用户A和B通信时,需要提供一个密钥,A和C通信时也需要提供一个密钥,也即任何人之间通信都需要提供密钥,且在两个人第一次通信时,由于互相都不知道对方的密钥,在网络上传输密钥时是明文传输的,密钥安全性不能得到保证。

          缺陷:

              1.密钥过多;

              2.密钥传输;

          密钥交换、身份验证、数据完整性都不能得到保证。


     公钥加密也叫非对称加密

          常见的算法:RSA(即可用来加密也可用来做身份验证)、DSA(只能做身份验证)、EIGmail

          加密和解密不是使用同一个密钥,密钥是成对出现的

          密钥:public key公钥,secret key私钥

          使用公钥加密只能用与之配对的私钥解密,使用私钥加密也只能用与之配对的私钥加密。

          通常用于

            身份认证

            密钥交换(密钥传送)   IKE(Internet Key Exchange)  互联网密钥交换

                 常见DH算法

                  Diffie-Hellman(以下简称DH)密钥交换是一个特殊的密钥交换的方法。DH可以让双方在完全缺乏对方(私有)信息的前提条件下通过不安全的信道达成一个共享的密钥。此密钥用于对后续信息交换进行对称加密。


      单向加密

          常见的加密工具:MD5(128位)、SHA1(160位)、SHA256、SHA384、SHA512

          通过提取数据指纹(特征码)可以实现数据完整性校验

          特性

             定长输出

             雪崩效应(输入条件的微小变化会产生输出条件的巨大变化)


    在身份验证、数据完整性、数据保密性都得到保证的一个通信过程。以上三种加密方式都使用到了

    以AA和BB通信为例

        首先AA把要通信的数据用单向加密计算后得到特征码,用AA的私钥把特征码加密都附加在通信数据的尾部,AA在使用一种算法(对称加密)把整个数据进行加密生成一个字串,AA用BB的公钥把加密的密码加密放在这段字串后面一并发给BB。

        BB收到数据后,用自己的私钥把加密的密码解密,再使用解密后的密码解密这段字串,解密后用AA的公钥把加密的特征码解密,再使用相同的单向加密计算这段数据的特征码,把计算出来的特征码和发送过来的特征码对比,一样则接收数据,不一样则放弃接收数据。

      简单图示如下:

技术分享


    

        这里最重要的一步就是公钥的获取,如何得到对方的公钥,又如何得知一定是对方的公钥?

    此时就需要依赖于CA,每个人所发的公钥对方无法验证其真假,就像你说自己是xx,那怎么证明你就是xx呢?生活中我们都是通过***来验证的,但是***不能你自己做一张印上一个名字,就说自己叫xx,需要提供一张由公安部门所颁发的权威的***才能得到认可,因为大家是信任公安部门的权威性的。这里把公安部门称为第三方机构也即是这里的CA。AA和BB通信之前要向CA去注册认证自己的身份。

    AA向CA申请给自己发一个证(里面包含公钥、名字、有效期等CA会使用单向加密计算这些数据特征码,CA再用自己的私钥加密这段特征码并附加在证书的后面),AA就把自己的证给BB,那此时BB如何去验证AA发来的证书不是伪证书?则BB需要信任CA,才能信任CA所颁发的证书,BB使用CA的公钥解密这段特征码,再用相同的单向加密计算这些数据特征码,比较两个特征码是否一致,此时CA的证书(公钥)从何而来呢?CA是自己给自己给发证书的。有的比较通用的证书在操作系统上都内置有,不需要通过网络传输。还有一些电子商务网站,你信任这些网站,你访问时就安装它的证书。且需要提供有公信力CA是需要向根CA注册申请,都是需要比较高的金额。

    如果在公司内部用,只需要自己创建一个私有CA,在公司私有网络中使用。

    还有一种特殊情况,如果说私钥丢失了,该如何处理呢?

    如何私钥丢了,必须让获得公钥的主机知道公钥被废了,因此CA机构需要维持一张列表(证书吊销列表),一旦私钥丢弃,则向CA申请自己的证书作废。CA机构就把丢失私钥的主机放到证书吊销列表中。

    则通信时,还需要增加一步就是通信的对方收到数据后,需要到CA机构查看发送方是否在证书吊销列表中。(注意互联网上绝大部分通信者都没有这样做,因此互联网上通信还是存在安全隐患的)

    

    一个证书颁发机构加上证书吊销列表等等形成了互联网安全通信的基本框架,这个基本框架也叫PKI(公钥基础设施)。

    在用户注册证书的时候,就需要到第三方颁发机构申请证书,向RA(注册机构)申请,有CA做签名认证。证书是有很多种格式的。由ITU-T组织所定义的证书格式规范称为x.509(主要定义了关于证书结构和认证协议的标准)。

    x.509标准有三个,第1、2、3版本,x509是基于公钥密码体制和数字签名的服务,在众多通信模型中都会被使用到(IP安全、TLS/SSL和S/MIME(安全地址邮件通信模型))。

    最新证书所包含的内容:

        证书的版本号、证书的序列号、算法参数、发行者的名称、有效期限、主体名称(证书的拥有者名字[用户使用的就是用户名,服务器使用的是主机名不能是ip])、公钥(对方提供的)、发行者的唯一ID、主体的唯一ID、。。、CA的签名(验证证书合法性)

    一个证书在签署之前,由请求者自己先发送一个证书签署请求按照特定格式做好自己能填的信息(主体名称、公钥等)其他内容则留空提交给CA,由CA把其他内容都填充完,并且自己做好签名,就可以发给请求者。


   PKI公钥基础设施,是一种规范,任何遵循此种规范组织或架构等都认为是遵循PKI标准的,PKI有下面几部分内容组成:

      签证机构:CA

      注册机构:RA

      证书吊销列表:CRL

       证书存取库:用来检查证书是否存在的接口

     PKI最前端是证书存取库,用户通过证书存取库获取证书,而后内容是证书的注册机构、后是签证机构。

    用户通过存取库与RA交互,RA与CA交互,CA前端有一个证书吊销列表,用户通过存取库与证书吊销列表进行交互。


    后面再讲解四大类型的实现过程和私有CA的创建。如果有什么错误、欢迎大家指正

    





本文出自 “快乐就好” 博客,请务必保留此出处http://wdllife.blog.51cto.com/6615958/1609696

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。