对称加密算法
特性:
加密、解密使用同一个密钥,效率高
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
密钥过多
密钥分发
数据来源无法确认
算法
DES : 是一种使用密钥加密的块算法,采用56位加密算法。
3DES : 三重数据加密算法,进行三次DES加密。
AES : 高级加密标准目前对称加密中最常用的算法之一,采用128、192、256、512位算法。
Blowfish: 是一个64位分组及可变密钥长度的对称密钥分组密码算法。
IDEA : 国际数据加密算法,采用128位加密算法。
CAST-128: 是类似于DES的置换组合网路加密系统,是一种12或16循环的Feistel密码,块长度是64位,密码长度最大128位
查找/etc/sysconfig/下的普通文件进行哈希运算(2者效果一样)
[root@centos7 /app]# find /etc/sysconfig/ -type f -exec sha512sum {} \;
[root@centos7 /app]# find /etc/sysconfig/ -type f |xargs sha512sum
重定向到文件中
[root@centos7 /app]# find /etc/sysconfig/ -type f |xargs sha512sum >/app/f1.log
[root@centos7 /app]# sha512sum --check /app/f1.log 检查是否改变
[root@centos7 /app]#openssl passwd -1 做口令加密
Password:
Verifying - Password:
$1$45Gqame0$DPzKaPrj4ymsi.FJiiVWn0 #1代表md5
密钥交换
密钥交换: IKE(Internet Key Exchange )
公钥加密:
DH (Deffie-Hellman):生成会话密钥,参看:
https://en.wikipedia.org/wiki/Diffie%E2%80%93Hel
lman_key_exchange
DH:
1、 A: a,p 协商生成公开的整数a, 大素数p
B: a,p
2、 A:生成隐私数据 :x (x<p ),计算得出 a^x%p,发送给B
B:生成隐私数据 :y,计算得出 a^y%p,发送给A
3、 A:计算得出 [(a^y%p)^x] %p = a^xy%p, 生成为密钥
B:计算得出 [(a^x%p)^y] %p = a^xy%p,生成为密钥
a=2,p=11
A
x=3 5
B
y=4 8
2^3=8%11=8
2^4=16%11=5
[5^3]%11=4
[8^4]%11=4
应用程序: RPM
文件完整性的两种实施方式
被安装的文件
• MD5单向散列
• rpm --verify package_name (or -V)
发行的软件包文件
• GPG公钥签名
• rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEYredhat*
• rpm --checksig pakage_file_name (or -K)
rpm包校验 文件哈希值变化
5 digest (formerly MD5 sum) differs
T mTime differs
使用gpg实现对称加密
对称加密file文件
gpg -c file
ls file.gpg
在另一台主机上解密file
gpg -o file -d file.gpg
单向散列Hash
特性
将任意数据缩小成固定大小的数值
任意输入长度的数据。
输出固定长度是加密数值。
若修改数据,生成的数值也会改变,不会和原来的数值产生冲突。
无法从数值中推算生成数据,不可逆。
功能
验证数据完整性
提高数字签名的有效性
常见算法
md5 : 把不同长度的数据块进行暗码运算成一个128位的数值
sha1 : 对任意长度的数据运算生成一个160位的数值
sha224 : 对任意长度的数据运算生成一个224位的数值
sha256 : 对任意长度的数据运算生成一个256位的数值
sha384 : 对任意长度的数据运算生成一个384位的数值
sha512 : 对任意长度的数据运算生成一个512位的数值
MAC :是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息,常见的是HMAC(用于消
息认证的密钥散列)。
Linux中的常用工具
md5sum
sha1sum file、sha1sum --check file
openssl
gpg
示例
[root@CentOS6.9 ~]#echo "test" > hash #生成一个文件
[root@CentOS6.9 ~]#ls #查看
admin.pubkey anaconda-ks.cfg bin hash install.log install.log.syslog test test.gpg
[root@CentOS6.9 ~]#md5sum hash #md5运算产生hash值
d8e8fca2dc0f896fd7cb4cb0031ba249 hash #hash值
[root@CentOS6.9 ~]#echo "123" >> hash #在文件的中加一行123
[root@CentOS6.9 ~]#md5sum hash #再用md5运算产生hash值
4145c486d60a3d078fc57ac0e7de44bd hash #hash值和原来的已经不同了
[root@CentOS6.9 ~]#echo "test" > hash #把文件重置
[root@CentOS6.9 ~]#md5sum hash #再次运算
d8e8fca2dc0f896fd7cb4cb0031ba249 hash #hash值和原来的相同
[root@CentOS6.9 ~]#md5sum hash > hash.key #hash运算并把hash值写入hash.key文件中
[root@CentOS6.9 ~]#md5sum -c hash.key #用这个文件判断原文件的数据有没有改变
hash: 确定
[root@CentOS6.9 ~]#echo "123" >> hash #把123追加到hash文件
[root@CentOS6.9 ~]#md5sum -c hash.key #再次判断
hash: 失败
md5sum: 警告:1/1 生成的校验和不匹配
[root@CentOS6.9 ~]#
非对称加密
特点,采用公钥和私钥加密和解密
公钥:公开给所有人
私钥:自己留存,必须保证其私密性
用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数字签名:主要在于让接收方确认发送方身份
对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
数据加密:适合加密较小数据
缺点:密钥长, 加密解密效率低下
算法:
RSA :RSA是目前最有影响力的公钥加密算法,安全性依赖于大数分解。(数据加密,数字签名)
DSA :是Schnorr和ElGamal签名算法的变种,基于整数有限域离散对数难题,一个重要特点是两个素数
公开,这样,当使用别人的p和q时,即使不知道私钥,你也能确认它们是否是随机产生的,还是
作了手脚,RSA算法却做不到。(数字签名)
ELGamal : 公钥密码体制和椭圆曲线加密体,其安全性依赖于计算有限域上离散对数。(数据加密,数字签)
使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密
在hostA主机上生成公钥/私钥对
gpg --gen-key
在hostA主机上查看公钥
gpg --list-keys
在hostA主机上导出公钥到wang.pubkey
gpg -a --export -o wang.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
scp wang.pubkey hostB
实验ctntos7传给centos6文件(加密到解密)
centos6加密
gpg --gen-key
生成秘钥
输入密码(可以不输入密码)
提示密码简单
OK
查看秘钥生成
gpg --list-key 查看秘钥生成
将centos6公钥拷贝到centos7主机
切换到centos7主机
gpg --gen-key 添加centos7秘钥
生成秘钥
把centos6公钥导入到centos7的 .gnupg
用centos6公钥给文件加密
把加密文件传输到centos6主机上
切换centos6主机上
删除centos6的秘钥
删除centos7秘钥
gpg --delete-keys centos7 提示删除公钥先删除私钥
gpg --ddelete-keys centos7 删除公钥
完成