Securing Data 数据安全
1理解安全加密协议
2在rhel5配置安全
3在普通互联网模型上的加密网络服务
TCP/IP协议栈 本身在安全方面的设计缺陷
man in the middle 中间人***
身份认证 + 数据加密 Authentication + Encryption
MAC 泛洪***
MAC 复制
ARP 重定向 即arp欺骗
如 telnet FTP POP3 账号密码都为明文传送
rsh,rcp等等 在主机之间cp数据的工具
Kerchoffs` principle
加密必须基于密钥 而不是基于算法
置换算法比置换密钥难得多
保证数据完整性 不能被篡改 身份认证杜绝冒名顶替
安全架构
One way hashes 单向散列加密算法
MD5;sha1 ...
保证数据完整性
Symmetric Algorithms 对称加密算法(双方使用同一个密钥)(fast)
DES,由IBM开发 已被破解;3DES;AES;Blowfish;
数据加密
Asymmetric Algorithms 非对称加密(safe)(slow)
公私玥PublicKey SecretKey rsa;(dsa)
B--->A B用自己的私钥加密给A A用B的公钥解密
身份验证 数字签名 密钥交换
Digital Signatures 数字签名
rsa;dsa;ElGamal
Key Exchange 密钥交换
Diffie-Hellman算法 密码不在网上传输 但双方可以协商出密码
CA 证书颁发机构 双方都信任的安全机构
CA给双方颁发两个证书 如果a要给b通信 就去CA拿b的证书
CA给a 发证书 证书既是a的公钥
CA维护了一个证书回收列表
CA授权给微软redhat等机构 做OS时内置CA的证书
对称加密比非对称加密快1000倍
单向加密:能够提取任何数据特征码 输出定长 不可逆 雪崩效应(输入信息的微小改变会对结果造成巨大影响)
CA颁发证书时用私钥加密特征码 用户用CA公钥解密 如果能解密则证明CA身份
MD5-->输出定长128bit
sha1-->输出定长160bit
实现数据完整 数据加密 身份认证 防止中间人***
B-->w--->单向加密出特征码用私钥加密特征码放在w后面--->用对称密码加密所有数据-->用A的公钥
加密所有数据-->发送
A-->用同样的单向加密算法计算数据得到特征码 用B的公钥解密w附带的特征码 比对特征码
PKI Public key Infrastructure公钥基础架构 是现代互联网电子商务最基础的安全架构
在TCP/IP协议栈的传输层和会话层之间加入半层--SSL Secure Socket Layer 安全套接字层
TLS Transport Layer Security 即传输层安全协议 SSL是TLS的实现 一般认为是同种东西
网银https
服务器收到连接请求后 首先进行加密协商(Server将自己支持的加密方式发送给Client 由Client挑选一种或几种)
服务器将自己证书发给客户端 以给客户端提供公钥 以保证后面的加密传输的进行
客户端用CA公钥去解密证书后面的加密的特征码 如果能够解密 则证明是CA发的证书
(客户端拿服务器的公钥加密一段数据发送给服务器 如果服务器能够解密 则证明服务器身份)
客户端生成 临时对称密码(会话密钥)使用服务器公钥加密 发送给服务器
服务器使用自己的私钥解密 如果能解密则验证服务端合法身份
服务端解密成功 得到此对称密码 以后传送的http页面用此密码加密
银行确定用户身份时 短信 电子密保卡 用加密狗(内置用户的证书 此证书由银行生成 内部使用)
证书=Public key + expire date(有效期限) + owner's information/fqdn
+ how the Certificate may be used + CA's information + CA用自己私钥做的签名
使用单向加密算法 抽取整个证书的特征码 将此特征码用私钥加密
Openssl 安全工具
两个库文件
Libcrypto 数据加密
Libssl 是常见的linux上的比较常见的
一个工具
openssl 多用途工具 生成密钥对 生成颁发请求 生成自签证书等等
Openssl的实现:
对称加密:基于块加密 block ciphers
gpg(3DES,CAST5,Blowfish)
openssl enc
#openssl ? 显示子命令
#openssl version 显示版本号
#openssl version -a 显示所有信息 编译选项 目录
#openssl ciphers 所支持的参数
#openssl speed 测速
#openssl speed rsa 测试rsa算法速度
#openssl enc -des3 -salt -a -in fstab -out cipher.fstab 加密
#openssl enc -d -des3 -salt -a -in cipher.fstab -out fstab 解密
提取特征码:
#md5sum fstab
#sha1sum fstab
#openssl dgst -sha1 fstab
#openssl sha1 < fstab
#openssl passwd -1 跟#passwd username同算法
每次生成密码要加入一个随机数 但所有生成的密文等效 可以相互替换 都可以代表真实密码
#openssl genrsa -out mykey.key 1024 生成一个1024位的私钥保存到mykey.key
或者#openssl genrsa 1024 > mykey.key
#openssl rsa -in mykey.key -pubout 可以从mykey.key中提取对应公钥
#openssl req -new -x509 -key mykey.key -out mykey.crt -days 3655 生成自签证书
#openssl req -new -key mykey.key -out my.csr 生成证书颁发请求
输入国家名 CN
输入省 henan
城市 zhengzhou
所属组织
组织单位名
common name
email
将生成文件发给CA 获取证书
将一个服务器做成CA
#vim /etc/pki/tls/openssl.cnf
-+> [ CA_default ] 里 dir=/etc/pki/CA 其余东西自己创建
#openssl genrsa 1024 > private/cakey.pem
#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
#mkdir certs newcerts crl
#touch index.txt serial
#echo 00 > serial
客户端生成一对key 并生成证书颁发请求
#openssl genrsa 1024 > station.key
#openssl req -new -key station.key -out station.csr
CA签署客户端的请求 并生成证书
#openssl ca -in station.crs -out station.crt
#openssl req -new -x509 -key mykey.key -out my.crt -days 3655 生成证书颁发请求
#openssl req -noout -in my.csr -text 查看证书颁发请求
简便方法: (一般情况下EHCE考试使用这种方法)
#cd /etc/pki/tls/certs
#make a.key 生成key
#make a.pem 生成pem格式证书 此证书包含私钥公钥
#make a.crt 生成crt格式证书 不包含私钥
实验: 手动把自己做成CA 给别人发证让别人互相认证之后通信
总结:
3个需求:
1数据加密 对称加密算法 sy
2身份验证 非对称 公钥加密 asy
3数据完整性 单向加密 hash
发送方A
将源数据用某种单向加密算法(如MD5)提取特征码
并用自己的私钥加密特征码
用对称密码(自己随机生成)加密-->(源数据+加密过的特征码)
用接收方B的公钥加密这个对称密码
-----------发送给B---------------
接收方B
用自己的私钥解密A加密过的对称密码-->拿到对称密码
用拿到的对称密码解密-->(源数据+加密过的特征码)
拿A的公钥解密特征码-->验证A的身份
拿同种单向加密算法(MD5)计算源数据的特征码
拿计算出的特征码和A发过来的特征码对比-->如果相同则证明数据没被篡改
---------------------------------
此过程中 BA都要用到对方的公钥
CA给A颁发证书
A的证书=A的公钥+A的信息(地址姓名组织单位)+证书用途+有效期+CA信息+CA签名(用CA的私钥加密过的A证书的特征码)
AB通信前先相互交换证书
B如何验证A的证书的可靠性
每个操作系统内置有CA的证书(其中有CA的公钥) B拿CA的公钥去解密A的证书中CA的签名 如果能够解密 则验证了CA的身份 再对A的证书进行单向加密计算特征码 拿计算出的特征码和解密出的特征码做对比 如果相同 则A的证书没有被篡改过
如果给A和B发证书的CA不是同一个CA 则用相应的CA的公钥去验证对方的证书
把一台服务器S做成CA
(CA自己先给自己做一个证书然后声明自己是CA)
A,B分别生成一个私钥和一个请求给CA
CA给A,B分别颁发一个它们自己的证书
A,B互相交换证书
如果要A,B验证CA的可靠性 则到S下载一个此CA的证书