加密和安全

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
加密和安全_第1张图片
  • 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设置信息必须一致,支持指定必须填写这项申请信息,可选指可有可无

加密和安全_第2张图片
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

你可能感兴趣的:(加密和安全)