在OSI模型和tcp/ip模型中,应用发送某个数据到服务器,通过很多条路径才能到达服务器,在发送的路上,因为数据是明文,且任意人都可以查看,这就给数据带来了风险。因此,加密就很有必要了。


常见的密钥算法和协议
  对称加密(加密解密使用同一个密钥)
  公钥加密(非对称加密,公钥和私钥)
  单向加密(只能加密,不能解密)
  认证协议


对称加密

  对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥,这种方法在密码学中叫做对称加密算法,对称加 密算法使用起来简单快捷,密钥较短,且破译困难,除了数据加密标准(DES),另一个对称密钥加密系统是国际数据加密算法(IDEA),它比DES的加密 性好,而且对计算机功能要求也没有那么高。IDEA加密标准由 PGP(Pretty Good Privacy)系统使用。

工作过程

下面举个例子来简要说明一下对称加密的工作过程。甲和乙是一对生意搭档, 他们住在不同的城市。由于生意上的需要,他们经常会相互之间邮寄重要的货物。为了保证货物的安全,他们商定制作一个保险盒,将物品放入其中。他们打造了两 把相同的钥匙分别保管,以便在收到包裹时用这个钥匙打开保险盒,以及在邮寄货物前用这把钥匙锁上保险盒。\"wKioL1cGKIzxtvoqAADc8ThKohE521.jpg\"

上面是一个将重要资源安全传递到目的地的传统方式,只要甲乙小心保管好钥匙,那么就算有人得到保险盒,也无法打开。这个思想被用到了现代计算机通信的信息加密中。在对称加密中,数据发送方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。接收方收到密文后,若想解读原文,则需要使用加密密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密。


对称加密常用的算法:

    DES:Data Encryption Standard; 
    3DES:Triple DES;
     AES:Advanced Encryption Standard;  (128bits, 192bits, 256bits, 384bits)
     Blowfish
     Twofish
     IDEA
     RC6
     CAST5
                
  特性:
   1、加密、解密使用同一个密钥;
   2、将原始数据分割成为固定大小的块,逐个进行加密;
                    
  缺陷:
   1、密钥过多;
   2、密钥分发困难;


公钥加密     

   与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果 用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两 个不同的密钥,所以这种算法叫作非对称加密算法。


工作过程

1.A要向B发送信息,A和B都要产生一对用于加密非对称加密算法和解密的公钥和私钥。

2.A的私钥保密(自己保存),A的公钥告诉B;B的私钥保密(自己保存),B的公钥告诉A。

3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。

4.A将这个消息发给B(已经用B的公钥加密消息)。

5.B收到这个消息后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。

\"wKiom1cGK2jy1UwlAAA4YaF4W7Q869.png\"

       特性:         

    公钥:从私钥中提取产生;可公开给所有人;pubkey
     私钥:通过工具创建,使用者自己留存,必须保证其私密性;private key;
   特点:

    用公钥加密的数据,只能使用与之配对儿的私钥解密;反之亦然;
                
   用途:
     数字签名:主要在于让接收方确认发送方的身份;
     密钥交换:发送方用对方公钥加密一个对称密钥,并发送给对方;
     数据加密
                
   算法:RSA, DSA, ELGamal
     DSS: Digital Signature Standard
     DSA:Digital Signature Algorithm


单向加密  

  又叫单向散列算法,又称hash函数,Hash函数(也称杂凑函数或杂凑算法)就是把任意长的输入消息串变化成固定长的输出串的一种函数。这个输出串称为该消息的杂凑值。一般用于产生消息摘要,密钥加密等。即提取出数据指纹;只能加密,不能解密;   

    特性:定长输出、雪崩效应;
     功能:完整性验证;
     常见算法:
       md5:Message Digest 5, 128bits
       sha1:安全的哈希算法 Secure Hash Algorithm 1, 160bits
           sha224, sha256, sha384, sha512
   

密钥交换:

    IKE(Internet Key Exchange)一种用以获得认证密钥的协议。

  密钥交换的两种机制:

   1、公钥加密实现:

发送方用接收方的公钥加密自己的密钥,接收方用自己的私钥解密得到发送方的密钥,逆过来亦然,从而实现密钥交换。

   2、使用DH算法:前提发送方和接受方协商使用同一个大素数P和生成数g,各自产生的随机数X和Y。发送方将g的X次方modP产生的数值发送给接收方,接受方将g的Y次方modP产生的数值发送给发送方,发送方再对接收的结果做X次方运算,接受方对接收的结果做Y次方运算,最终密码形成,密钥交换完成。


通信阶段加密解密

\"wKioL1cGO_ehhaLQAABFJ8xiENI016.png\"

BOB和ALICE通信阶段

  黑框A:表示要传输的数据
  黑框B:就是单项加密对这段数据提取的特征码,这段特征码同时运用了非对称加密,具体过程是用BOB的私钥加密,传输给ALICE,只要到达后ALICE能解密,表明对方确实是BOB。这一过程同时起到了用户认证和数据完整性的校验。黑框B又称为数字签名
  红框A:这一阶段会生成一段很长的随机数(密钥)然后配合对称加密算法对黑框A和黑框B加密,但是我们如何把加密的密钥传输给ALICE呢?这就要用到红框B了
  红框B:这一阶段是用ALICE的公钥加密这串随机数(对称加密阶段的密钥),ALICE接收到数据后如果能用自己私钥解密,那就证明接受者确实ALICE

加密过程:
  第一步:用单向加密算法提取数据(黑框A)的特征值
  第二步:用自己的私钥加密这段特征值形成黑框B
  第三步:用对称加密算法,对黑框A和黑框B来加密,得到红框A
  第四步:用ALICE的公钥来加密第三步所用的密钥,得到红框B


解密过程:
  第一步:ALICE用自己的私钥解密红框B得到对称加密的密钥
  第二步:用这个密钥解密红框A内容
  第三步:用BOB的公钥解密黑框B,如果能成功,说明发送方确实是BOB,这就完成了身份验证(解密后会得到一串数据的特征值)
  第四步:用同样的单项加密算法来对这段数据提取特征值,如果和第三步的特征值一样,说明这段数据是完整的,这就完成了数据完整性的校验


还有一个问题就是BOB和ALICE如何获得对方的公钥,或者说如何证明获得的公钥就是对方。这就需要引入另一方证书颁发机构CA,下面是对证书颁发机构跟BOB/ALICE之间的解释


  黑框C:代表要颁发给BOB/ALICE的公钥,组织,地址等信息
  黑框D:是对黑框C进行单向加密后得到的数字签名,然后用自己的私钥对其加密,传输给BOB和ALICE,拿着这个证书颁发机构的公钥(这些证书颁发机构 的公钥一般已经被microsoft事先放在windows里面,当然其他操作系统也是一样的)的BOB和ALICE如果能对这个证书进行解密,说明这个 证书颁发机构不是冒充的
  红框E:表示颁发给BOB和ALICE的证书


CA的工作方式:

\"wKiom1cGYB6xcHoiAADx_krf3Dg741.jpg\"


PKI

PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的网络环境。PKI 主要包括四个部分:X.509 格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA 操作协议;CA 管理协议;CA 政策制定。一个典型、完整、有效的PKI 应用系统至少应具有以下五个部分;

            公钥基础设施
     签证机构:CA
     注册机构:RA
     证书吊销列表:CRL
     证书存取库


CA:
 公共信任的CA,私有CA;
        
  建立私有CA:
    openssl
    OpenCA


openssl命令:
   配置文件:/etc/pki/tls/openssl.cnf
            
构建私有CA:
   在确定配置为CA的服务上生成一个自签证书,并为CA提供所需要的目录及文件即可;
                
步骤:

    1、生成私钥

    2、生成自签证书

    3、为CA提供所需的目录和文件


操作步骤

   (1) 生成私钥;

1

2

3

4

5

6

7

8

[root@bogon ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)

Generating RSA private key, 4096 bit long modulus

..........................................................................................

..........................................................................................

.....................................................++...................................

..........................................................................................

...............................................................++

e is 65537 (0x10001)

  (2) 生成自签证书;
  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 [root@bogon ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:Beijing

Locality Name (eg, city) [Default City]:Beijing

Organization Name (eg, company) [Default Company Ltd]:test

Organizational Unit Name (eg, section) []:test

Common Name (eg, your name or your server's hostname) []:test

Email Address []:abc@qq.com

     选项解释:

       -new:生成新证书签署请求;
       -x509:生成自签格式证书,专用于创建私有CA时;
       -key:生成请求时用到的私有文件路径;
       -out:生成的请求文件路径;如果自签操作将直接生成签署过的证书;
       -days:证书的有效时长,单位是day;
   

  (3) 为CA提供所需的目录及文件;

1

2

3

[root@bogon ~]#  mkdir  -pv  /etc/pki/CA/{certs,crl,newcerts}

[root@bogon ~]#  touch  /etc/pki/CA/{serial,index.txt}

[root@bogon ~]#  echo  01 > /etc/pki/CA/serial