Linux加密和数据安全性

加密和安全

墨菲定律

墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,

原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导

致灾难,则必定有人会做出这种选择

主要内容:

任何事都没有表面看起来那么简单

所有的事都会比你预计的时间长

会出错的事总会出错

如果你担心某种情况发生,那么它就更有可能发生

 

安全机制

信息安全防护的目标

保密性 Confidentiality

完整性  Integrity

可用性 Usability

可控制性 Controlability

不可否认性 Non-repudiation

安全防护环节

物理安全:各种设备/主机、机房环境

系统安全:主机或设备的操作系统

应用安全:各种网络服务、应用程序

网络安全:对网络访问的控制、防火墙规则

数据安全:信息的备份与恢复、加密解密

管理安全:各种保障性的规范、流程、方法

 

安全

安全攻击: STRIDE

Spoofing 假冒

Tampering 篡改

Repudiation 否认

Information Disclosure 信息泄漏

Denial of Service 拒绝服务

Elevation of Privilege 提升权限

 

安全设计基本原则

使用成熟的安全系统

以小人之心度输入数据

外部系统是不安全的

最小授权

减少外部接口

缺省使用安全模式

安全不是似是而非

从STRIDE思考

在入口处检查

从管理上保护好你的系统

 

安全算法

u常用安全技术

认证

授权

审计

安全通信

加密算法和协议

对称加密

公钥加密

单向加密

认证协议

对称加密算法

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

DES:Data Encryption Standard,56bits

3DES:

AES:Advanced (128, 192, 256bits)

Blowfish,Twofish

IDEA,RC6,CAST5

特性:

1、加密、解密使用同一个密钥,效率高

2、将原始数据分割成固定大小的块,逐个进行加密

缺陷:

1、密钥过多

2、密钥分发

3、数据来源无法确认

 

对称加密理解帮助:

Bob 向Alice传输数据过程:

对称加密

Bob --data(Bob对数据加密)----data(Alice对数据解密) 

key1==key2(加密和解密的秘钥相同,为对称加密)

 

非对称加密算法

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

公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

数字签名:主要在于让接收方确认发送方身份

对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

数据加密:适合加密较小数据

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

算法:

RSA(加密,数字签名)

DSA(数字签名)

ELGamal

 

非对称加密

基于一对公钥/密钥对

• 用密钥对中的一个加密,另一个解密

实现加密:

• 接收者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

• 发送者

使用接收者的公钥来加密消息M

将P(M)发送给接收者

• 接收者

使用密钥S来解密:M=S(P(M))

非对称加密

u实现数字签名:

• 发送者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

使用密钥S来加密消息M

发送给接收者S(M)

• 接收者

使用发送者的公钥来解密M=P(S(M))

结合签名和加密

分离签名

RSA和DSA

RSA:公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在

(美国麻省理工学院)开发的,RSA取名来自开发他们三者的名字,后成立RSA

数据安全有限公司。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目

前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于

一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积

进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

DSA (Digital Signature Algorithm):1991年7月26日提交,并归属于David

W. Kravitz前NSA员工,DSA是Schnorr和ElGamal签名算法的变种,被美国

NIST作为SS(DigitalSignature Standard), DSA是基于整数有限域离散对数难

题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于

它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多

单向散列

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

• 任意长度输入

• 固定长度输出

• 若修改数据,指纹也会改变(“不会产生冲突”)

• 无法从指纹中重新生成数据(“单向”)

功能:数据完整性

常见算法

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

常用工具

• md5sum | sha1sum [ --check ] file

• openssl、gpg

• rpm -V

 

示例:

md5sum  f1   对f1进行md5的加密算法,容易被破解

 sha1sum  f1 对f1进行sha1算法加密

 

非对称文件加密理解:

Bob:public(公钥),secret(私钥)key,pb,sb,Pa    Bob手里有自己的公钥、私钥及Alice公钥

Alice:Pa,Sa  Alice的公钥和私钥

第一种非对称加密过程:

Bob--data-用Alice的Pa(公钥加密)-data'-用Alice(私钥解密)-data--->Alice   

加密解密过程详解:Bob用Alice的公钥加密进行发送,Alice用自己的私钥进行解密

 

第二种非对称加密过程:(可以确定对方发送文件的来源,进行了两次加密,解码时间很长,不常用)

Pa[Sb(data)]    用Bob的私钥对数据加密,再通过Alice公钥加密传送给Alice

解密过程:

Sa{Pa[Sb(data)]}=Sb(data)  Alice用自己的私钥解密

Pb[Sb(data)]=data  再用Bob的公钥解开Bob的私钥得到数据

 

第三种非对称+hash的加密过程:

Pa{data+Sb[hash(data)]}   用Alice 的公钥加密,Bob用私钥对哈希算法的数据加密

解密过程:

1)Sa{Pa{data+Sb[hash(data)}}=data+Sb[hash(data)] 用Alice的私钥解密

2)Pb{Sb[hash(data)]}=hash(data)  然后用Bob的公钥解密

3)hash(data)===?hash(data)    用相同的hash算法对比两个数据,如果两个数据算法结果相等就确认是Bob发过来的数据。

 

第四种对称+非对称+hash

key{data+Sb[hash(data)]}+Pa(key)   用Alice公钥给key加密,然后用Bob的加密hash算法加密过的数据

1)Sa[Pa(key)]=key   用Alice的私钥解开公钥得到key

2)key{key{data+Sb[hash(data)]}}=data+Sb[hash(data)]  用Bob的公钥解开,然后用hash算法对比,如果一样就会确定是Bob发的数据,否则不是。

3)hash(data)===?hash(data)    用相同的hash算法对比两个数据,如果两个算法结果相等就确认是Bob发过来的数据。

 

应用程序:RPM

文件完整性的两种实施方式

被安装的文件

• MD5单向散列

• rpm --verify package_name (or -V)

发行的软件包文件

• GPG公钥签名

• rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*

 

• rpm --checksig pakage_file_name (or -K)

 

密钥交换

密钥交换:IKE( Internet Key Exchange )

公钥加密:

DH (Deffie-Hellman):生成会话密钥,由惠特菲尔德·迪菲(Bailey

Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表

参看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DH:

A: g,p 协商生成公开的整数g, 大素数p

B: g,p

A:生成隐私数据 :a (a<p ),计算得出 g^a%p,发送给B

B:生成隐私数据 :b,计算得出 g^b%p,发送给A

A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥

B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥

 

 

实验一:生成对称秘钥文件进行传输过程

1) 在centos6上将一个文件进行对称加密;

命令: gpg -c f1  对f1文件进行加密

[root@centos6data]#gpg -c f1

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7639): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7642): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

 

 查看当前生成文件格式,是以gpg后缀的加密文件:

[root@centos6data]#ls

f1  f1.gpg

2)将文件传送到centos7的data目录下,并将其进行解密保存成文件:

scp  f1.gpg  192.168.34.100:/dafa

[root@centos6data]#scp f1.gpg 192.168.34.101:/data/

root@192.168.34.101's password: 

f1.gpg                                                                              100%   50     0.1KB/s   00:00 

3)在centos7上进行解密

第一种解密方式:gpg -o f1 -d f1.gpg   -o是指定一个文件名为f1

第二种解密方式:gpg -d f1.gpg > f1    直接重定向到f1文件中

[root@centos7data]#gpg -o f1 -d f1.gpg

gpg: 3DES encrypted data

gpg: encrypted with 1 passphrase

gpg: WARNING: message was not integrity protected

[root@centos7data]#ls  查看已解密的文件

f1  f1.gpg

[root@centos7data]#cat f1  可以查看解密后的文件信息

aa

dd

ss

 

实验二:生成非对称秘钥并加密文件进行传输过程

1)在centos6中生成公钥和私钥文件并加密

gpg --gen-key  生成公私钥命令

[root@centos6data]#gpg --gen-key 

gpg (GnuPG) 2.0.14; Copyright (C) 2009 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)   默认用rsa加密算法

   (2) DSA and Elgamal

   (3) DSA (sign only)

   (4) RSA (sign only)

Your selection? 

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  默认是永久有效

      <n>  = key expires in n days 有效期是n天

      <n>w = key expires in n weeks  有效期是n周

      <n>m = key expires in n months 有效期是n月

      <n>y = key expires in n years   有效期是n年

Key is valid for? (0) 0   0为默认永久有效

Key does not expire at all

Is this correct? (y/N) y   输入y同意上面操作

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

Real name: wangge  输入一个秘钥名称

Email address:   输入一个ip地址

Comment: 

You selected this USER-ID:

    "wangge"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o  输入o对私钥进行加密

You need a Passphrase to protect your secret key.

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7743): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7748): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number 

generator a better chance to gain enough entropy.

 

cd /boot/.gnupg 切换到当前目录可以查看生成的公钥私钥对

[root@centos6.gnupg]#ll

total 24

drwx------ 2 root root 4096 Oct 19 13:41 private-keys-v1.d

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg  生成的公钥

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg~

-rw------- 1 root root  600 Oct 19 17:36 random_seed

-rw------- 1 root root 1325 Oct 19 17:36 secring.gpg  生成的私钥

-rw------- 1 root root 1360 Oct 19 17:36 trustdb.gpg

 

gpg --list-keys   可以查看当前生成的公钥信息

[root@centos6.gnupg]#gpg --list-keys

/root/.gnupg/pubring.gpg

------------------------

pub   1024R/B2753BA3 2019-10-19 [expires: 2019-10-29]

uid                  wangge

sub   1024R/E155F1DF 2019-10-19 [expires: 2019-10-29]

2)将centos6的公钥导出到一个文件中

  gpg -a --export -o /data/wang   -a 将公钥内容导出为文本格式文件

[root@centos6.gnupg]#gpg -a --export -o /data/wang

3)将centos6导出的公钥传送给centos7的data目录下

scp wang 192.168.34.101:/data/

4)gpg --import /data/wang   将centos6和centos7的公钥导入到一起

5)gpg -e -r wangge f2    -e 加密 -r 指定公钥用户名。   用centos6的wangge用户进行加密文件

[root@centos7data]#ls

f2  f2.gpg  wang      加密后的文件以gpg后缀结尾,f2.gpg为加密后的文件

6)scp f2.gpg 192.168.34.100:/data/  将加密的f2.gpg文件传到centos6上去

[root@centos7data]#scp f2.gpg 192.168.34.100:/data/

root@192.168.34.100's password: 

f2.gpg   

7)在centos6上对f2.gpg进行解密,所有加密文件及传输过程已完。

gpg -o f2 -d f2.gpg

8)将centos6/7生成的公钥和私钥分别进行删除:

centos6删除公钥、私钥

gpg --delete-secret-keys wangge  先删除私钥

gpg --delete-keys wangge    再删除公钥

centos7删除公钥、私钥

gpg --delete-secret-keys liuge 先删除私钥

gpg --delete-keys liuge   再删除公钥

gpg --delete-keys wangge  删除centos6传过来的公钥

全部加密文件传输及删除实验完毕!

 

 

 

 

 

 

 

posted @ 2019-10-19 18:40  一叶知秋~~  阅读(1567)  评论(0编辑  收藏  举报