浅谈加密与安全之密钥
安全机制
- 信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性 Controlability
不可否认性 Non-repudiation - 安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法 - 安全攻击: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄漏
Denial of Service 拒绝服务
Elevation of Privilege 提升权限 - 常用安全技术
- 认证
- 授权
- 审计
- 安全通信
- 加密算法和协议
- 对称加密
- 公钥加密
- 单向加密
- 认证协议
对称加密和非对称加密
一、对称加密:加密和解密使用同一秘钥
-
常用加密标准:
DES: Data Encryption Standard, 56bits
3DES
AES: Advanced Encryption Standard, (128, 192, 256bits) -
特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密 -
缺陷:
1、密钥过多:与不同用户通信需要保存不同秘钥
2、密钥分发:秘钥分发的过程要么不安全,要么分发的效率太低、成本太高
3、数据来源无法确认
二、非对称加密 -
公钥加密:密钥是成对出现,一个用于加密,另一个用于解密
- 公钥(public key):公开给所有人
- 私钥(secret key):自己留存,必须保证其私密性
-
特性:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
-
缺点:密钥长,加密解密效率低下
-
功能:
- 数字签名:主要在于让接收方确认发送方身份
- 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
- 数据加密:适合加密较小数据
-
常用加密标准:
RSA(加密,数字签名),DSA(数字签名),ELGamal -
实现数据加密的过程:
- 接收者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S - 发送者
使用接收者的公钥来加密消息M
将P(M)发送给接收者 - 接收者
使用密钥S来解密:M=S(P(M))
*实现数字签名的过程 - 发送者
生成公钥/密钥对:P和S
公开公钥P,保密密钥S
使用密钥S来加密消息M
发送给接收者S(M) - 接收者
使用发送者的公钥来解密M=P(S(M))
- 接收者
三、单向散列
- 定义:将任意数据缩小成固定大小的“指纹”
- 特点:
- 任意长度输入
- 固定长度输出
- 若修改数据,指纹也会改变( “不会产生冲突” )
- 无法从指纹中重新生成数据( “单向” )
- 功能:验证数据完整性
- 常见算法:
md5: 128bits, sha1: 160bits, sha224, sha256, sha384, sha512 - 常用工具
- md5sum | sha1sum [ --check ] file
- openssl, gpg
- rpm -V
#md5sum, sha1sum工具验证数据完整性
[root@Centos7 ~]# md5sum /etc/issue > issue_md5
[root@Centos7 ~]# echo >> /etc/issue
[root@Centos7 ~]# md5sum --check issue_md5
/etc/issue: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
- 使用gpg实现对称加密
发送方:gpg -c file
,过程输入两次密码,生成file.gpg
的加密文件
接收方:gpg -o file -d file.gpg
,输入密码,将解密结果重定向到文件 - 用gpg实现公钥加密
- 一、接收方:执行gpg --gen-key命令生成密钥对
- 第1步:选择密钥加密标准,选择默认RSA
- 第2步:选择密钥位数,这里指明1024位
- 第3步:选择密钥有效期,选择默认值0,表示永久有效
- 第4步:为密钥提供一个标签便于区分
- 第5步:提示输入密码,可以不指定密码,直接ok继续,系统会反复提示确认密码,然后提示生成公钥和私钥成功
- 第1步:选择密钥加密标准,选择默认RSA
- 二、接收方:查看公钥并且导出公钥
- 第1步:查看公钥
gpg --list-keys
- 第1步:查看公钥
[root@Centos7 ~]#gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/C676D850 2019-11-06
uid ceshi
sub 1024R/0C4EE36C 2019-11-06
-
第2步:导出公钥
pg -a --export -o hellopeiyang.pubkey
-
第3步:将公钥发送给发送方
scp ceshi.pubkey root@172.20.54.1:/data
-
三、发送方:导入接收方的公钥,用这个公钥加密文件,将密文传送给接收方
-
第1步:导入接收方的公钥
gpg --import ceshi.pubkey
,可以查看一下是否正确导入gpg --list-keys
[root@Centos7 ~]# gpg --import /data/ceshi.pubkey
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key C676D850: public key "ceshi" imported
gpg: Total number processed: 1
gpg: imported: 1 (RSA: 1)
[root@Centos7 ~]# gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub 1024R/C676D850 2019-11-06
uid ceshi
sub 1024R/0C4EE36C 2019-11-06
- 第2步:用公钥加密文件
gpg -e -r ceshi fstab
,-r 选项后指定公钥的标签名,生成"原文件名.gpg"的加密文件
[root@Centos7 data]# gpg -e -r ceshi fstab
gpg: 0C4EE36C: There is no assurance this key belongs to the named user
pub 1024R/0C4EE36C 2019-11-06 ceshi
Primary key fingerprint: EE8B 48B2 8DFE 404D E9B1 F837 F1B5 EA12 C676 D850
Subkey fingerprint: 41EF F39B F65E B1EB D2CA 7465 3372 2687 0C4E E36C
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N) y
[root@Centos7 data]# ls
ceshi.pubkey fstab fstab.gpg
-
第3步:将加密文件发送给接收方
-
四、接收方:接收加密文件,用私钥解密文件
- 执行命令
gpg -o fstab -d fstab.gpg
,-o选项将解密结果输出重定向到文件
- 执行命令
[root@Centos7 /data]#gpg -o fstab -d fstab.gpg
gpg: encrypted with 1024-bit RSA key, ID 0C4EE36C, created 2019-11-06
"ceshi"
[root@Centos7 /data]#ls fstab
fstab
- 五、后续工作:删除密钥
必须先删除私钥,再删除相应的公钥
删除私钥:gpg --delete-secret-keys ceshi
删除公钥:gpg --delete-keys ceshi
完