Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法

对于linux运维工作者而言,加密技术已经很早就用于数据的存储和数据之间的交换。我们可以会为了防止你的网站、服务器或者系统,我们会使用一些手段来防止一些恶意的攻击或者访问。一下就对linux的安全和加密依据个人学习经验做以下总结。

学习的章节内容:

目录

安全机制

对称和非对称加密

散列算法

gpg

PKI和CA

openssl

证书管理

ssh服务和dropbear

aide

Sudo

TCP Wrappers

PAM模块


安全机制

信息安全防护的目标
保密性                                                         Confidentiality
完整性                                                          Integrity
可用性                                                          Usability
可控制性                                                     Controlability
不可否认性                                                 Non-repudiation

安全防护环节

物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法
 

对称和非对称加密

什么是加密?加密总的来说就是将一串数据或者一个文件从明文转为密文的过程;对于已经加密的数据或者文件,使用某种方法将其从密文转为明文的过程就是解密了。

加密的过程分为两种:对称加密和非对称加密。

    所谓对称加密,就是加密和解密的过程中使用同一个密钥。它的实现过程是:使用钥匙对数据或者文件进行加密,然后用户可以使用这把钥匙对数据或者文件解密。这样做的好处是,在处理数据或者文件时效率很高,但是同时安全性就较低。想想看,如果想让两个用户查看你的文件,你需要把你的钥匙复制两把分别给这两个用户,但由于你的文件锁只有这一个,所以如果这两个用户把你的钥匙复制送给了别人,别人是不是也可以轻而易举的打开你的锁?这样就会造成密钥过多,安全性降低。那么这个问题就由非对称加密来解决了。

非对称加密就比较厉害了。非对称加密的钥匙是成对出现的。即我们常听说的公钥和私钥。顾名思义,公钥就是公共的钥匙,即这把钥匙大家都可以有,你好我好大家好。那私钥就是自己私人的钥匙呗,自己小金库的钥匙你总不能给人家吧?一个道理。那么非对称加密是怎么实现加密过程的呢?如果只想将一个文件给固定的一个用户看,使用用户的公钥对文件加密,用户如果想要查看,就要使用自己的私钥进行解密,这样是不是就保证了只要用户才能查看文件的内容,而其他人看到的只能是加密过的文件。但是这样做也同时带来一个缺点,就是效率问题。密钥过长,加密解密耗时长。这就是非对称加密的实现原理。 

常用密码算法和协议

  • 常用的对称加密算法:DES (56)、3DES、AES (128,192,256,384,512)、Blowfish、Twofish、IDEA、RC6、CAST5等 ; 
  • 公钥加密:也叫非对称加密,是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。
  • 常用的公钥加密算法:RSA, DSA, EIGamal等;
  • 单向加密:是不可解密的加密方法,是非可逆的;
  • 常用的公钥加密算法:MD5、SHA1、SHA256、SHA384、SHA512等;

认证协议:

  • IKE协议(英特网密钥交换协议):常用来确保虚拟专用网络***与远端网络或者宿主机进行交流时的安全;
  • SSL( 安全套接字层): 网络通信提供安全及数据完整性的一种安全协议。
  • TLS(传输层安全): 是仿照SSL制定,用于在两个通信应用程序之间提供保密性和数据完整性。

对称加密算法

 

对称加密:加密和解密使用同一个密钥

  • DES: Data Encryption Standard, 56bits
  • 3DES:
  • AES: Advanced (128, 192, 256bits)
  • Blowfish, Twofish
  • IDEA, RC6, CAST5

特性:

  • 1、加密、解密使用同一个密钥,效率高
  • 2、将原始数据分割成固定大小的块,逐个进行加密

缺陷:

  • 1、 密钥过多
  • 2、密钥分发
  • 3、数据来源无法确认

 

Linux上有一个加密的小工具,即gpg,使用它可以实现对称和非对称加密。

【实验】gpg对称加密

现在我们有两台机器,分别是centos6和centos7,利用gpg来实现对称加密。

现有一个test文件,使用gpg -c 对文件进行加密:

输入密钥口令: 

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第1张图片

回车后系统会生成后缀为.gpg的已经加密过的文件:

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第2张图片

使用scp命令将文件发给centos6:

在centos6上查看文件:

解密过程:

输入密钥口令: 

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第3张图片

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第4张图片

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第5张图片

对称加密的整个实现过程很简单,因此也验证了我们上面所说的安全性低的问题。

非对称加密算法

公钥加密: 密钥是成对出现

  • 公钥:公开给所有人; public key
  • 私钥:自己留存,必须保证其私密性; secret key (private)
  • 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

  • 数字签名:主要在于让接收方确认发送方身份
  • 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
  • 数据加密:适合加密较小数据

缺点:密钥长, 加密解密效率低下

算法:

  • RSA(加密,数字签名) bob----> alice                       alice公钥加密【bobS(data)】用bob私钥加密
  • DSA(数字签名)
  • ELGamal

 

公钥私钥文件:

[root@centos6-->01:08:46~]#cd /etc/ssh

[root@centos6-->02:17:13/etc/ssh]#ls

moduli ssh_host_dsa_key ssh_host_key.pub

ssh_config ssh_host_dsa_key.pub ssh_host_rsa_key

sshd_config ssh_host_key ssh_host_rsa_key.pub

检查包的完整性:

先导入公钥:

[root@centos6-->01:08:46~]# rpm --import /misc/cd/RPM-GPG-KEY-Centos-7
[root@centos6-->01:08:46~]# rpm -K /misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm

/misc/cd/Packages/tree-1.5.3-3.el6.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

 

【实验】非对称加密的实现

在hostB主机上用公钥加密,在hostA主机上解密

1、在centos 7主机上生成公钥/私钥对

gpg --gen-key

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第6张图片

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第7张图片

2、在centos7主机上查看生成的公钥

gpg --list-keys

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第8张图片

3、在centos7主机上导出公钥到zhang.pubkey

gpg -a --export -o zhang.pubkey

4、从centos7主机上复制公钥文件到需加密的B主机上

scp zhang.pubkey hostB:

scp zhang.pubkey 192.168.161.129

 

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第9张图片

完成第一阶段。

第二阶段:在主机B上生成非对称公钥/密钥对

1、在需加密数据的centos6主机上生成公钥/私钥对

[root@centos6-10 ~ 12:10:38]# gpg --list-keys            ##查看公钥私钥 
[root@centos6-10 ~ 12:10:38]# gpg --gen-key              ##生成公钥私钥对

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第10张图片

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第11张图片

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第12张图片

2、在centos6主机上导入公钥

[root@centos6-10 ~ 12:10:38]#  gpg --import zhang.pubkey    ###导入centos7中的公钥
[root@centos6-10 ~ 12:10:38]#  gpg --list-keys

3、用从centos7主机导入的公钥,加密centos6主机的文件file,生成file.gpg

[root@centos6-10 ~ 12:10:38]#gpg -e -r centos7 test

*****注意:这里选定用谁的公钥进行加密,就是当初创建公钥私钥时候起的名字*****

4、复制加密文件到centos7主机

scp test.gpg 192.168.161.130:

5、在centos7主机解密文件

[root@centos7-4 data]#gpg -d test.gpg     ###解密文件并打印
[root@centos7-4 data]# gpg -o file -d test.gpg   ###解密后生成文件

 

删除公钥和私钥

  • gpg --delete-keys centos7
  • gpg --delete-secret-keys centos7

单向散列(又成哈希算法)

任意数据缩小成固定大小的“指纹”

  • • 任意长度输入
  • • 固定长度输出
  • • 若修改数据,指纹也会改变(“不会产生冲突”)
  • • 无法从指纹中重新生成数据(“单向”)

功能:数据完整性

常见算法

  • md5: 128bits、 sha1: 160bits、 sha224、 sha256、 sha384、 sha512

常用工具

  • • md5sum | sha1sum [ --check ] file
  • • openssl、 gpg
  • • rpm -V

常见工具使用方法:

计算哈希值:

[root@centos7-->19:39:52/data]#sha1sum /dev/sr0 

4eead850afed0fc7d170c23bfabfed379419db79 /dev/sr0

或者

[root@centos7-->19:39:52/data]# sha1sum  test

md5sum all.sh md5sum + file

83b567b32827ce7f26f528676653097e all.sh

例子:

[root@centos7-4 data]# sha1sum test > sha1.log
[root@centos7-4 data]# cat sha1.log 
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666  test

[root@centos7-4 data]# sha1sum fstab2 >> sha1.log 
[root@centos7-4 data]# cat sha1.log 
73ff2b0e6866c7da5cb8d5ed4961077e1dd65666  test
9f93eb08a16db59d0522bdc79c187381bc466dc8  fstab2


[root@centos7-4 data]# sha1sum --check sha1.log 
test: OK
fstab2: OK


###检查文件的内容是否被修改,修改后可以校验哈希值是否有变化###

sha1sum --check file

[root@centos7-->20:00:51/data]#cat check.log

7b7b5b3ef60d9ea7ebf93b4469103caf43059939 all.sh

96f485550c4ad72dd572abef1f26df6b05c42d4e age.sh

[root@centos7-->20:01:01/data]#sha1sum --check check.log

  all.sh: OK

  age.sh: OK

 

rpm  -V      可以检查安装包是否被修改过,如果修改过,将会显示修改信息,如果没有修改则返回空值,以下截图为修改过信息后的返回信息。

[root@centos7-4 data]# rpm -V tree

Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法_第13张图片

你可能感兴趣的:(Linux加密和安全篇(一)gpg、对称和非对称加密、哈希算法)