莫非定律
如果两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择。
这里提到莫非定律,是因为它道出了一个铁的事实:技术风险能够由可能性变为突发性的事实
信息安全防护的目标
安全防护环节
安全攻击: STRIDE
安全设计基本原则
SQL注入,构建特殊输入,绕过安全检查SQL注入,构建特殊输入,绕过安全检查
例如:登录某些服务时,需要验证用户名和密码
1:正常格式为
username=’ ’ and password=’ ’
2:构造特殊密码
username=’ ’ and password=’ ‘or’1’=‘1 ’
3:密码改为空或者1=1,绕过检测
password=’ ’ or ‘1’=‘1’
通常认为外部的网络是不安全的,企业中接入外网通常要加防火墙,企业中内网安装防水墙,放置拷贝数据,以及记录移动设备连接状态
只要能满足要求就可以,能小则小
selinux
常用安全技术
密码算法和协议
特点
缺点
每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长
将密钥告知对方的安全渠道问题,除非提前约定密钥,而密钥需要经常变更,依然是传输问题
数据缺少数字签名,不易确定数据来源
常见对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
概念
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
公钥(public key):可以公开给所有人
例如/etc/ssh下,以key.pub结尾的为公钥,ssh_host_ecdsa_key.pub
私钥(private key):自己留存,必须保证其私密性,以key结尾的是私钥
例如/etc/ssh下,以key结尾的为公钥,ssh_host_ecdsa_key
特点:
功能:
主要在于让接收方确认发送方身份
发送方用对方的公钥加密一个对称密钥后发送给对方
适合加密较小数据
缺点
密钥长,加密解密效率低下
算法
通过hash算法对一个数据做运算,得出一个摘要(digest)只要数据不同,得出的摘要必将不同,数据相同,digest必相同,不可反推出数据,不管多大的文件,摘要的长度是固定不变的,此长度和算法有关
特点
功能
数据完整性
文件A与文件B,大小都为1G,想要比较两个文件内容是否相同,只需要做哈西运算,比较哈希值
常见算法
常用工具
示例
示例1. 基本格式
1. sha1sum算法
[root@hai7 ~]$sha1sum /dev/sr0
4eead850afed0fc7d170c23bfabfed379419db79 /dev/sr0
2. md5sum算法
[root@hai7 ~]$md5sum /dev/sr0
示例2:–check选项,比对文件完整性
3. 将文件f2的哈希值保存至文件f4中
$sha1sum f2 > f4
4. 将文件f3的哈希值追加至文件f4中
$sha1sum f3 >> f4
5. 修改文件f2
$vim f2
6. 比较文件完整性
$sha1sum --check f4
f2: FAILED <==计算校验不匹配
f3: OK
此算法前提是A与B是相互可信的,如果A与B有中间人C,就可能造成中间人攻击,也就是C欺骗A与B,可通过非对称密钥解决
简介
密钥交换:IKE( Internet Key Exchange )
由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表
参看:https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange
工作原理
DH (Deffie-Hellman):生成会话密钥
示例
假设g=6 p=23 a=5 b=9
A:6^5%23=2 →B 2^9%23=6
B:6^9%23=16 →A 16^5%23=6
gpg --gen-key
[root@hai6 /data]$gpg --gen-key
......省略
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? <==回车,选择默认
What keysize do you want? (2048) 1024 <==选择密钥长度,1024-4096,默认2048
Please specify how long the key should be valid.
0 = key does not expire <==永不过期
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) <==选择有效期
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: wange <==为密钥指定所属,最少5个字节
Email address: <==邮箱地址,跳过
comment: <==描述信息,跳过
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
[root@hai6 ~/.gnupg]$ll
total 32
-rw-------. 1 root root 7856 Sep 9 09:20 gpg.conf
drwx------ 2 root root 4096 Sep 15 23:52 private-keys-v1.d
-rw------- 1 root root 648 Sep 16 00:17 pubring.gpg <==公钥文件
-rw------- 1 root root 648 Sep 16 00:17 pubring.gpg~
-rw------- 1 root root 600 Sep 16 00:17 random_seed
-rw------- 1 root root 1388 Sep 16 00:17 secring.gpg <==私钥文件
-rw-------. 1 root root 1280 Sep 16 00:17 trustdb.gpg
[root@hai7 /data]$gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/568142B1 2018-09-16
uid magedu
sub 1024R/B91149D8 2018-09-16
转换公钥命令
[root@localhost ~/.gnupg]$gpg -a --export -o v9.pubkey
转换私钥
[root@localhost ~/.gnupg]$gpg -a --export-secret-keys -o v9.key
-a:表示转换为ASCII文本格式,也就是易读格式
--export:导出公钥
--export-secret-keys:导出私钥
-o:导出的目标文件
$scp v9.pubkey 172.20.50.121:/data
$gpg --gen-key <==这步可以省略,这里是为后续删除准备
[root@hai7 ~/.gnupg]$gpg --import /data/v9.pubkey
[root@hai7 ~/.gnupg]$gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/D6A9BFED 2018-09-18
uid molihua
sub 1024R/9AC8E06E 2018-09-18
pub 1024R/35542F26 2018-09-18
uid shanwuyu <==增加的公钥
sub 1024R/6C14A9F5 2018-09-18
[root@hai7 /data]$gpg -e -r shanwuyu f2
系统会提醒是否确认拿到的公钥是正确的
Use this key anyway? (y/N) <==确认无误,输入y
选项-e:表示加密
-r:表示选择加密公钥,跟公钥UID
$scp f2.gpg 172.20.50.100:/data
解密文件,在屏幕上打印
$gpg -d f2.gpg
解密文件并生成新文件f2
$gpg -o f2 -d f2.gpg
选项-o:将输出写入文件
-d: 解压文件
[root@hai7 /data]$gpg --delete-keys shanwuyu
[root@hai7 /data]$gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/D6A9BFED 2018-09-18
uid molihua <==只删除了uid为shanwuyu的公钥
sub 1024R/9AC8E06E 2018-09-18
不对称加密中提到信息签名,来确保信息可靠性,利用gpg可以实现
[root@hai7 /data]$gpg --sign f1
输入命令后会提示解锁密钥,解锁后生成文件f1.gpg,二进制格式的
[root@hai7 /data]$gpg --clearsign f1
生成f1.asc,是base64编码格式的
1:在发送方主机上加密文件并签名
[root@hai7 /data]$gpg --local-user molihua --recipient shanwuyu -a --sign -e f2
2:在目标主机上解密文件
[root@localhost /data]$gpg -d f2.asc
与没有签名的文件对比,会多出一下行 <==
gpg: Signature made Tue 18 Sep 2018 09:06:43 PM CST using RSA key ID D6A9BFED
gpg: Good signature from "molihua"