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传过来的公钥
全部加密文件传输及删除实验完毕!