一、加密的重要性

数据日益成为我们个人生活、经济发展和安全保障的核心。这就意味着,我们必须做到时刻保障数据的安全。这就如同在现实世界中紧锁家门、限制重要物品的进出,以及保护我们重要的企业财产一样,我们有赖于加密来保证数据不会遭受各种网络犯罪的侵入和盗取。任何有关于限制这种重要保护方式的建议,无论其初衷多么美好,最终结果都会导致我们的安全保障被弱化。
当我们存款、购物和通信时,数据安全显得越发重要。而这种安全的核心便是加密。随着我们的生活越来越多地依赖于互联网,人们更应该不断提高数据安全意识,并为此付诸行动,保护我们的数字化世界不再继续遭受各种网络犯罪的***和破坏。

二、加密技术

现在常见的加密技术主要有三种:对称加密,非对称加密,单向加密
对称加密
对称加密指的是加密和解密使用同一个密钥
特点:1、加密、解密使用同一个密钥,效率高。
2、将原始数据分割成固定大小的块,逐个进行加密。
缺点:1、密钥过多。
2、密钥分发。
3、数据来源无法确认。
常见的对称加密算法有:

DES:使用56位的密钥,2000年的时候被人破解了,所以现在基本不再使用

AES:高级加密标准,可以使用128,129,256三种长度密钥

其他的还有blowfish,Twofish和RC6,IDEA(商业算法),CAST5等
非对称加密
公钥:公开给所有人
私钥:自己保留,必须保证其私密性
特点:1、用公钥加密数据,只能使用与之配对的私钥解密;反之亦然。
2、数字签名:主要在于让接收方确认发送方身份。
3、对称秘钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方。
4、数据加密:适合加密较小的数据。
缺点:密钥长,加密解密效率低下。
常见的非对称加密算法有:

RSA:既可以用来加密解密,又可以用来实现用户认证

DSA:只能用来加密解密,所以使用范围没有RSA广
单向加密
单向加密: 只能加密、不能解密,即提取出数据的特征码,可以校验数据的完整性。
特点:1、定长输出,雪崩效应(微小变化产生巨大反应)只要被加密内容有一点点的不同,加密所得结果就会有很大的变化。
2、无论被加密的内容多长/短,加密的结果(就是提取特征码)是定长的。
常见的单向加密算法有:
md5:128bits定长输出

sha系列:安全的哈希算法

sha-1,sha224,sha384,sha512

三、实验操作

1.使用gpg工具实现对称加密

我们先准备一个文件然后使用gpg工具对其进行加密
Linux的加密和认证
Linux的加密和认证_第1张图片
输完密码后加密就算完成了,这时就会生成一个.gpg文件就是加密后的文件
Linux的加密和认证_第2张图片
我们把这个文件传到另一台机器上进行解密
Linux的加密和认证_第3张图片
这里的-o参数后跟的是将解密后的内容导出到一个指定文件(名字可以随便指定)
Linux的加密和认证_第4张图片
Linux的加密和认证_第5张图片
2.使用gpg工具实现非对称加密
先在A主机上生成公钥/私钥对

[root@centos7 ~]# gpg --gen-key      
gpg (GnuPG) 2.0.22; Copyright (C) 2013 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
Your selection? 1    #选择加密算法
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) 1024    #选择密钥长度
Requested keysize is 1024 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0) 0     #选择密钥过期时间 0代表永不过期
Key does not expire at all
Is this correct? (y/N) y

GnuPG needs to construct a user ID to identify your key.

Real name: rootkey    #给密钥命名
Email address:          #邮箱(可以为空)
Comment:                 #注释(可以为空)
You selected this USER-ID:
    "rootkey"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O   #N重命名,C重写注释,E重写邮箱,O生成密钥,Q退出

Linux的加密和认证_第6张图片
Linux的加密和认证_第7张图片
将刚才生成的公钥导出来
Linux的加密和认证
将生成的公钥文件传给另一台需要加密的主机
Linux的加密和认证_第8张图片
然后我们再把公钥导入,在这里我们要注意下两天机器的时间,我刚开始没有注意到这点导致公钥导入失败如下:
Linux的加密和认证_第9张图片
把两台机器的时间同步之后,我们需要重新生成公钥,重新开始,时间同步后我们再次导入就没有问题了
Linux的加密和认证
我们再用导入的公钥对要传输的文件进行加密
Linux的加密和认证_第10张图片
我们可以看到文件已进行了加密,这个加密的文件自己也是无法解密的,只有用另一台机器的私钥才能解开,这样就确保了数据的安全性
我们把加密后的文件传给另一台机器
Linux的加密和认证
我们回到原来的机器用自己的私钥对文件进行解密
Linux的加密和认证_第11张图片
我们也可以把解密后内容导出来
Linux的加密和认证_第12张图片
删除公钥和私钥
我们要先删除私钥才能再删除公钥
Linux的加密和认证_第13张图片
删除公钥
Linux的加密和认证_第14张图片
加密工具还有openssl,也可以做到对称加密,非对称加密,我就在这里给大家演示下用openssl做单向加密
单向加密是不可逆的,做单向加密一般都是为了校验数据的完整性,我们先用md5算法对一个文件做一个加密,导出一个md5值
Linux的加密和认证_第15张图片
我们再对文件做一个小小的修改加个空格就行
Linux的加密和认证_第16张图片
可以看到,文件的md5值发生了很大的改变,这就是雪崩效应,这样就可以判断这个文件是否被别人篡改过。

四、CA认证

我们都知道,当客户端与服务器端建立会话之前,首先是客户端发送请求,然后进行TPC/IP的三次握手,接着客户端与服务器端建立ssl会话。
会话过程如下:
1.客户端计算数据特征值
2.使用私钥加密特征值
3.随机生成密码对称加密整个过程
4.使用服务器端公钥加密密码
5.服务器端使用私钥解密密码
6.服务器端解密整个数据
7.服务器端使用公钥验证身份
8.比较数据特征值

但是这些存在一个问题,谁来管理公钥,任何在互联网上传播的数据都不安全,更不用说传递公钥,如果它被篡改,那就无法验证身份,所以不可能由用户自己颁发公钥。
这个时候就需要一个具有公信力的中间机构来做这个工作,就是CA。国内的大部分互联网公司都在国际CA机构申请了CA证书,并且在用户进行访问的时候,对用户的信息加密,保障了用户的信息安全。理论上来说,任何组织或者个人都可以扮演CA的角色,只不过,难以得到客户端的信任,不能推而广之,最典型应用莫过于12306网站,这个网站就是自己给自己颁发的根证书。我们现在就自己搭建一个CA认证中心。
1、CA认证中心简述
CA:CertificateAuthority的缩写,通常翻译成认证权威或者认证中心,主要用途是为用户发放数字证书。
功能:证书发放、证书更新、证书撤销和证书验证。
作用:身份认证,数据的不可否认性。
端口:443
2.CA证书的制作
我们在这里用三台主机进行实验,其中两台是作为CA机构存在,所以创建所需要的文件的时候主机A和主机B都需要创建。如果不提前创建这两个文件,那么在生成证书的过程中会出现错误。我们将文件创建在配置文件中指定的路径下面。
生成证书索引数据库文件:touch /etc/pki/CA/index.txt
指定第一个颁发证书的序列号:echo 01 > /etc/pki/CA/serial
CA自签名证书(构造跟CA)
首先构造根CA证书。因为没有任何机构能够给跟CA颁发证书,所以只能根CA自己给自己颁发证书。
首先在A主机上生成私钥文件
Linux的加密和认证_第17张图片
生成自签名证书
Linux的加密和认证_第18张图片
3.颁发证书
颁发证书这里我们将分成两个环节介绍,分别是 子CA证书机构向根CA证书机构申请证书以及普通用户向子CA证书机构申请证书。
子CA证书机构向根CA申请证书,这个过程和前面根CA生成私钥的过程是一致的。
在子CA这里我们就没有设置私钥密码,密钥长度也设置了为1024
Linux的加密和认证_第19张图片
用私钥文件生成证书申请文件
Linux的加密和认证_第20张图片
将证书申请文件传递给根CA
Linux的加密和认证
根CA颁发证书
这时切换到根CA也就是A主机,生成证书
Linux的加密和认证_第21张图片
这时我们查看index.txt文件就会看到新增了一条记录
Linux的加密和认证
将CA生成的证书颁发给子CA
主机B是作为子CA机构存在的,所以证书文件,必须是cacert.pem,否则,子CA将不能够给其他用户颁发证书。
Linux的加密和认证
普通用户向子CA机构申请证书
过程和子CA申请差不多,首先也是生成私钥文件,不过因为是普通用户,所以生成的私钥文件应该与之前的cacert.pem 有所区别
Linux的加密和认证
利用私钥生成证书申请文件
Linux的加密和认证_第22张图片
将证书申请文件发送给子CA颁发机构
Linux的加密和认证
切换到子CA颁发机构颁发证书
Linux的加密和认证_第23张图片
将生成的证书传递给申请者
Linux的加密和认证_第24张图片
这样,正常的证书颁发流程就算是完成了。
我们验证下证书
Linux的加密和认证_第25张图片
-text 证书的内容
-issuer 证书颁发者的信息
-subject 证书主体的信息
-serial 证书的序列号信息
-dates 查看证书的时间