加密和安全
2017-09-17 本文已影响0人
一桥长书
1 安全机制
信息安全防护的目标
保密性 Confidential
可用性 Intergrity
可控制性 Usability
不可否认性 Controlability
安全防护环节 Non-repudiation
物理安全:各种设备/主机,机房环境
系统安全:主机或设备的操作系统
应用安全:各种网络服务,应用程序
网络安全:对网络访问的控制,防火墙规则
数据安全:信息的备份与恢复,加密解密
安全管理:各种保障性的规范 流程 方法
- 安全攻击: STRIDE
spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄露
Denial of Service 拒绝服务
Elevation of Privilege 提升权限
- 常用的安全算法
3A 机制
认证 authorization
授权 authentication
审计 audition
密码算法和协议
对称加密
公钥加密
单项加密
linux系统提供的加密工具: openSSL,gpg(gpg) 协议
- 对称加密算法
对称加密:加密和解密使用的同一个密钥
常见的对称加密算法
DES: Data Encryption Standart,56 bits
3DES:
AES: Advanced(128,192,256bits)
Blowfish,Twofish
IDEA,RC6,CAST5(使用gpg做对称加密默认算法)
特性:
1 加密和解密使用同一个密钥,效率高
2 将原始数据分割成固定大小的块,逐个进行加密
缺陷:
1 密钥过多
2 密钥分发
3 数据来源无法确认
案例
对root的目录下的anacoda-ks.cfg 进行对称加密
1 使用gpg进行加密
gpg --cipher-algo des -c -o a.gpg anaconda-ks.cfg
-o 将加过密的文件保存到哪里
gpg -d -o b_file a.gpg 对a.pgp 进行解密
2 使用openssl 进行加密
openssl enc -e -cast5 -a -salt -in anacoda-ks.cfg -out a.open
openssl enc -d -cast5 -a -salt -in a.open -out b_file_open
- 非对称加密算法
公钥加密: 密钥是成对出现的
公钥: 公开给所有人;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))
结合签名和加密
分离签名
例子:gpg,需要两台主机同步时间,否者会有问题
1 首先生成私钥对 在主机A上家目录会新建.gunpg文件夹
gpg --gen-key 可能需要等待一段时间,需要随机数,可以下载文件或者安装软件进行IO操作,以在熵池产随机数
2 查看主机的公钥
gpg --list-keys
3 到出公钥
gpg -a --export -o centos6.pubkey
4 然后将公钥复制到另外一台主机B
scp centos6.pubkey B:
5 在主机B上同样生成密钥对
gpg --gen-key
6 导入复制过来的公钥文件
gpg --import centos6.pubkey
7 查看公钥
gpg --list-keys
7 加密一个文件,复制到A上进行解密
gpg -e -r centos6.key anaconda-ks.cfg
scp anaconda-ks.cfg.gpg A:
gpg -o a_file -d anaconda-ks.cfg.gpg
8 在B中删除A的公钥
gpg --delete-keys centos6.key
9 删除两台主机的公钥,需要先删除密钥
gpg --delete-secret-keys centos6.key
gpg --delete-secret-keys centos7.key
- 单向算法
将任意数据缩小成固定大小的指纹
任意长度输入
固定长度输出
若修改数据,指纹也会改变("不会产生冲突")
无法从指纹中重新生成数据("单向")
功能:数据完整性
常见算法:
md5:128bits,sha1:162bits,sha224,sha256,sha284,sha512
常见工具
md5sum, sha1sum
openssl, gpg
rpm -V
例子
[root@test5(172.18.254.5) ~]#md5sum anaconda-ks.cfg
5920fb075bd329543b0f1414350f73da anaconda-ks.cfg
[root@test5(172.18.254.5) ~]#openssl dgst anaconda-ks.cfg
MD5(anaconda-ks.cfg)= 5920fb075bd329543b0f1414350f73da
- CA和证书
PKI: Public Key Infrastructure
签证机构: CA(Certificate Authority)
注册机构:RA (Register Authority)
证书吊销列表:CRL (Certificate Revoke list)
x.509: 定义了证书的结构以及认证协议标准
版本号 主体公钥
序列号 CRL分发点
签名算法 扩展信息
颁发者 发行者签名
有效期
证书类型
证书授权机构的证书
服务器
用户证书
获取证书的两种方法
使用证书授权机构
生成签名请求(csr) certificate signature request
将csr发送给CA
从CA出接受签名
自签名的证书
自己签发自己的公钥
- 安全协议
SSL: Secure Socket Layer
TLS: Transport Layer Security
1995 :SSL 2.0 Netscape
1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1 IETF(Internet 工程任务组) RFC 4346
2008 :TLS 1.2 当前使用
2015: TLS 1.3
功能:机密性,认证,完整性,重放保护
两 阶段协议,分为握手阶段和应用 阶段
握手阶段( 协商阶段): 客户端和服务器端认证对方身份依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全数、密码套件 以及主密钥。 后续通信使用的所有密钥都是通过MasterSecret 生成 。
应用阶段:在握手阶段完成 后进入,在 应用阶段通信双方使用握阶段协商好的密钥进行
openSSL: 开源项目
三个组件:
openssl:多用途的命令行工具,包括openssl
libcrypto:加密算法库,包括openssl-libs
libssl:加密模块应用库,实现ssl和tls包括nss
openssl命令:
两种运行模式:交互式和批处理模式
openss version:程序版本号
标准命令,消息摘要命令,加密命令
标准命令
enc,ca,req
生成密钥对
1 私钥
(umask 0077;openssl genrsa -out my.key -des 1024)
2 从私钥中提取公钥
openssl rsa -in my.key -pubout -out my.pub
openssl的对称加密和单向加密上面已经介绍过了,直接实现非对称加密
创建CA和申请证书
创建私有CA
openssl的配置文件 /etc/pki/tls/openssl.cnf
三种策略:匹配,支持和可选
匹配指要求申请填写的信息跟CA设置信息必须一致,支持指定必须填写这项申请信息,可选指可有可无
1 在主机A 根据/etc/pki/tls/openssl.cnf的配置信息,生成密钥对
(umask 0077;openssl genrsa -out /etc/pki/CA/private/cakey.pem -des 2048)
2 生成自签证书
openssl req -new -x509 -key /etc/pki/CA/privite/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
3 创建必要的文件
touch /etc/pki/CA/index.txt 证书的数据库
echo 01 > /etc/pki/CA/serial 表示下一张证书的编号01
echo 01 > /etc/pki/CA/crlnumber 表示下一张吊销证书编号为01
4 在主机B上生成密钥和证书申请,并将申请复制到A(CA)主机上
(umask 0077;openssl genrsa -out /root/httpd.key -des 2048)
openssl req -new key /root/httpd.key -out httpd.csr
scp /root/httpd.csr A:/tmp
5 在A主机上给B主机的申请签名
openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
6 将签好的证书复制到B主机上,B主机就可以使用了
scp /etc/pki/CA/certs/httpd.crt B:
7 如果B主机申请吊销或者A主机主动吊销,首先查找证书的编号
openssl x509 -in /root/httpd.crt --noout -text 可以查看证书的编号和其他信息
同时CA 也可以直接查找某个编号的证书信息
openssl ca -status number(证书编号)
8 吊销证书
openssl ca -revoke /etc/pki/CA/newcerts/number.pem
9 更新吊销列表
openssl ca gencrl -out /etc/pki/CA/crl/crl.pem
2 OpenSSH
OpenSSH 介绍
相关包:
openssh
openssh-clients
openssh-server
工具:
基于C/S 结构
Client: ssh, scp, sftp ,slogin
Windows 客户端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
- 客户端组件
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示
格式:ssh [user@]host [COMMAND]
ssh [-l user] host [COMMAND]
-p port :远程服务器监听的端口
-b: 指定连接的源IP
-v: 调试模式
-C :压缩方式
-X: 支持x11 转发
-Y :支持信任x11 转发
ForwardX11Trusted yes
-t: 强制伪tty 分配
ssh -t remoteserver1 ssh remoteserver2
sshd 服务可以基于passwd 和pubkey认证
passwd 即登录需要输入密码
pubkey即需要先将自己的公钥复制到对应主机的对应用户的及目录的.ssh/authorized_keys文件中
基于pubkey认证
ssh-keygen 生成自己的公钥和私钥
ssh-copy-id -i ~/.ssh/id_rsa.pub user@IP
然后就可以不用密码就可以登录对应主机
- SSH 端口转发
本地端口转发
ssh -L localport:remotehost:remotehostPort sshserver
选项:
-f 后台运行
-N 不打开远程shell,处于等待状态
-g 启用网卡功能
ssh -L 9527:telnetserver:23 -N sshsrv
远程端口转发:
ssh -R localport:remotehost:remotehostPort sshserver
ssh -R 9527:telnetserver:23 -N sshsrv
ssh端口转发:
动态端口转发:
当使用firefox访问internet时,本地的1080端口作为代理服务器,firefox的访问请求被转发到sshserver上,有sshserver替之访问internet
在本地firefox设置代理socket proxy:127.0.0.1:1080
ssh -D 1080 user@sshserver
同时也可以使用curl上网
curl --socks5 127.0.0.1 http://IP