Mark blog

知行合一 划水归档

加密与安全(一)

关于安全,首先要介绍以下墨菲定律:

墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的,原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导致灾难,则必定有人会做出这种选择
主要内容:
任何事都没有表面看起来那么简单
所有的事都会比你预计的时间长
会出错的事总会出错
如果你担心某种情况发生,那么它就更有可能发生

安全机制

信息安全防护的目标
保密性 Confidentiality
完整性 Integrity
可用性 Usability
可控制性 Controlability
不可否认性 Non-repudiation
安全防护环节
物理安全:各种设备/主机、机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务、应用程序
网络安全:对网络访问的控制、防火墙规则
数据安全:信息的备份与恢复、加密解密
管理安全:各种保障性的规范、流程、方法

安全

安全攻击: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄漏
Denial of Service 拒绝服务
Elevation of Privilege 提升权限

安全设计基本原则

使用成熟的安全系统
以小人之心度输入数据
外部系统是不安全的
最小授权
减少外部接口
缺省使用安全模式
安全不是似是而非
从STRIDE思考
在入口处检查
从管理上保护好你的系统

安全算法

常用安全技术
认证
授权
审计
安全通信
密码算法和协议
对称加密
公钥加密
单向加密
认证协议

对称加密算法

对称加密:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish
IDEA,RC6,CAST5
特性:
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

数字签名

密钥交换

密钥交换: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,生成为密钥

应用程序: 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)

使用 gpg 实现对称加密

对称加密file文件
gpg -c file
ls file.gpg
在另一台主机上解密file
gpg -o file -d file.gpg

使用 gpg 工具实现公钥加密

在hostB主机上用公钥加密,在hostA主机上解密

在hostA主机上生成公钥/私钥对
gpg –gen-key
在hostA主机上查看公钥
gpg –list-keys
在hostA主机上导出公钥到mark.pubkey
gpg -a –export -o mark.pubkey
从hostA主机上复制公钥文件到需加密的B主机上
scp mark.pubkey hostB:

在需加密数据的hostB主机上生成公钥/私钥对
gpg –list-keys
gpg –gen-key
在hostB主机上导入公钥
gpg –import mark.pubkey
gpg –list-keys
用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
gpg -e -r mark file
file file.gpg

复制加密文件到hostA主机
scp fstab.gpg hostA:
在hostA主机解密文件
gpg -d file.gpg
gpg -o file -d file.gpg
删除公钥和私钥
gpg –delete-keys mark
gpg –delete-secret-keys mark

中间人攻击