马哥博客作业第九周

加密和安全

    1. 信息安全防护的目标
      保密性 Confidentiality
      完整性 Integrity
      可用性 Usability
      可控制性 Controlability
      不可否认性 Non-repudiation
    2. 安全防护环节
      物理安全:各种设备/主机、机房环境
      系统安全:主机或设备的操作系统
      应用安全:各种网络服务、应用程序
      网络安全:对网络访问的控制、防火墙规则
      数据安全:信息的备份与恢复、加密解密
      管理安全:各种保障性的规范、流程、方法
    3. 常见的安全攻击STRIDE
      Spoofing 假冒
      Tampering 篡改
      Repudiation 否认
      Information Disclosure 信息泄漏
      Denial of Service 拒绝服务
      Elevation of Privilege 提升权限
    4. 安全设计基本原则 
      使用成熟的安全系统
      以小人之心度输入数据
      外部系统是不安全的
      最小授权
      减少外部接口
      缺省使用安全模式
      安全不是似是而非
      从STRIDE思考
      在入口处检查
      从管理上保护好你的系统
    5. 常用安全技术
      认证
      授权
      审计
      安全通信
    6. 加密算法和协议
      对称加密
      非对称(公钥)加密
      单向加密
      认证协议
    7. 对称加密算法
      对称加密:加密和解密使用同一个密钥
      特性:
      加密、解密使用同一个密钥,效率高
      将原始数据分割成固定大小的块,逐个进行加密
      缺陷:
      密钥过多
      密钥分发
      数据来源无法确认
      常见对称加密算法:
      DES:Data Encryption Standard,56bits
      3DES:
      AES:Advanced (128, 192, 256bits)
      Blowfish,Twofish
      IDEA,RC6,CAST5
    8. 非对称加密算法介绍
      非对称加密:密钥是成对出现
      公钥:public key,公开给所有人,主要给别人加密使用
      私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
      特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
      功能: 
      数据加密:适合加密较小数据,比如: 加密对称密钥
      数字签名:主要在于让接收方确认发送方身份
      缺点:
      密钥长,算法复杂
      加密解密效率低下
      常见算法:
      RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可 变的,可实现加密和数字签名
      DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准)
      ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学,比RSA加密算法使用更小的密钥, 提供相当的或更高等级的安全
    9. 非对称加密实现加密
      接收者
      生成公钥/密钥对:P和S
      公开公钥P,保密密钥S
      发送者
      使用接收者的公钥来加密消息M
      将P(M)发送给接收者
      接收者
      使用密钥S来解密:M=S(P(M))
    10. 非对称加密实现数字签名
      发送者
      生成公钥/密钥对:P和S
      公开公钥P,保密密钥S
      使用密钥S来加密消息M
      发送给接收者S(M)
      接收者
      使用发送者的公钥来解密M=P(S(M))
    11. RSA和DSA
      RSA:公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开 发的,RSA取名来自开发他们三者的名字,后成立RSA数据安全有限公司。RSA是目前最有影响力的公 钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算 法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极 其困难,因此可以将乘积公开作为加密密钥
      DSA (Digital Signature Algorithm):1991年7月26日提交,并归属于David W. Kravitz前NSA员工, DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为SS(DigitalSignature Standard), DSA是基 于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于 它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多
    12. 使用gpg实现对称和非对称加密 实现对称加密 对称加密file文件
      gpg -c file
      在另一台主机上解密file
      gpg -o file -d file.gpg 
      实现公钥加密
      目标:在hostB主机上用公钥加密,在hostA主机上解密 B ---> A
      在hostA主机上生成公钥/私钥对
      gpg --gen-key
      在hostA主机上查看公钥
      gpg --list-keys
      在hostA主机上导出公钥到wang.pubkey
      gpg -a --export -o wang.pubkey
      从hostA主机上复制公钥文件到需加密的B主机上
      scp wang.pubkey hostB:
      在需加密数据的hostB主机上生成公钥/私钥对
      gpg --list-keys
      gpg --gen-key
      在hostB主机上导入公钥
      gpg --import wang.pubkey
      gpg --list-keys
      用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
      gpg -e -r wangxiaochun file
      file file.gpg
      复制加密文件到hostA主机
      scp fstab.gpg hostA:
      在hostA主机解密文件
      gpg -d file.gpg 
      gpg -o file -d file.gpg 
      删除公钥和私钥
      gpg --delete-keys wangxiaochun
      gpg --delete-secret-keys wangxiaochun
    13. 单向哈希算法
      哈希算法:也称为散列算法,将任意数据缩小成固定大小的“指纹”,称为digest,即摘要
      特性:
      任意长度输入,固定长度输出
      若修改数据,指纹也会改变,且有雪崩效应,数据的一点微小改变,生成的指纹值变化非常大。
      无法从指纹中重新生成数据,即不要逆,具有单向性
      功能:数据完整性
      常见算法
      md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
      常用工具
      md5sum | sha1sum [ --check ] file
      openssl、gpg
      rpm -V
      数字签名
      RPM 文件完整性
      rpm --verify packagename (or -V)
      rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
      rpm --checksig pakage
      file_name (or -K)
      实现数据加密
      实现数据加密,无法验证数据完整性和来源  

       实现数字签名
      不加密数据,可以保证数据来源的可靠性、数据的完整性和一致


      综合加密和签名
      即实现数据加密,又可以保证数据来源的可靠性、数据的完整性和一致性
      方法1:Pb{Sa[hash(data)]+data

       方法2:对称key{Sa[hash(data)]+data}+Pb(对称key)

        密码交换
      密钥交换: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,(b<p),计算得出 g^b%p,发送给A  
      A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥  
      B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥

CA和证书
中间人攻击
Man-in-the-middle,简称为 MITM,中间人 

 CA和证书

PKI:Public Key Infrastructure 公共密钥加密体系
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法
颁发者
有效期限
主体名称
证书类型:
证书授权机构的证书
服务器证书
用户证书
获取证书两种方法:
自签名的证书: 自已签发自己的公钥
使用证书授权机构:
生成证书请求(csr)
将证书请求csr发送给CA
CA签名颁发证书

15. 安全协议 SSL/TLS 
TLS 介绍 
SSL:Secure Socket Layer,TLS: Transport Layer Security
1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布
1995:SSL 2.0 Netscape 开发
1996:SSL 3.0
1999:TLS 1.0
2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346,从2020年3月起,停止支持TLS 1.1及TLS 1.0版本 安全协议,谷歌(Chrome)、Mozilla(Firefox)、微软(IE和Edge) 、苹果(Safari) 都会发布新 版浏览器执行这个策略
2008:TLS 1.2 当前主要使用
2018:TLS 1.3
功能:
机密性
认证
完整性
重放保护
SSL/TLS组成
Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密 钥交换
ChangeCipherSpec 协议:一条消息表明握手协议已经完成
Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会 直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
实现方式1
RSA 密钥交换、RSA 数字签名

1.Visitor给出协议版本号、一个客户端随机数(Client random),以及客户端支持的加密方法
2.Server确认双方使用的加密方法,以及一个服务器生成的随机数(Server random)
3.Server发送数字证书给Visitor
4.Visitor确认数字证书有效(查看证书状态且查询证书吊销列表),并使用信任的CA的公钥解密数 字证书获得Server的公钥,然后生成一个新的46字节随机数(称为预备主密钥Pre-master secret),并使用Server的公钥加密预备主密钥发给Server
5.Server使用自己的私钥,解密Visitor发来的预备主密钥
6.Visitor和Server双方都具有了(客户端随机数+服务端随机数+预备主密钥),它们两者都根据约定的 加密方法,使用这三个随机数生成对称密钥——主密钥(也称为对话密钥session key),用来加 密后续的对话过程
7.在双方验证完session key的有效性之后,SSL握手机制就算结束了。之后所有的数据只需要使用 “对话密钥”(此密钥并不是的session key,而是由其通过计算得到)加密即可,不再需要多余的加密 机制
注意:
1.在SSL握手机制中,需要三个随机数(客户端随机数+服务端随机数+预备主密钥)
2.至始至终客户端和服务端只有一次非对称加密动作——客户端使用证书中获得的服务端公钥加密预备 主密钥。
3.上述SSL握手机制的前提单向验证,无需验证客户端,如果需要验证客户端则可能需要客户端的证书 或客户端提供签名等。
4.Server和Visitor通信,Server把数字证书发给Visitor,最关键的一点是Visitor要保证证书的有效性, 通过查看证书状态并去CA的吊销列表查看Server的证书是否被吊销。只有Server的证书可用了,才保证 了第一环节的安全性
5.RSA 密钥交换有一个很大的问题:没有前向安全性Forward Secrecy。这意味着攻击者可以把监听到 的加密流量先存起来,后续一旦拿到了私钥,之前所有流量都可以成功解密

 实现方式2

目前大部分 HTTPS 流量用的都是 ECDHE 密钥交换。ECDHE 是使用椭圆曲线(ECC)的 DH(DiffieHellman)算法


前图中的 Server DH Parameter 是用证书私钥签名的,客户端使用证书公钥就可以验证服务端合法 性。相比 RSA 密钥交换,DH 由传递 Premaster Scret 变成了传递 DH 算法所需的 Parameter,然后双 方各自算出 Premaster Secret
对于这种情况,由于 Premaster Secret 无需交换,中间人就算有私钥也无法获得 Premaster Secret 和 Master Secret。当然,使用 ECDHE 后,虽然中间人拿到私钥也无法解密之前的流量,但可以实施 MITM 攻击来解密之后的流量,所以私钥还是要保管好。
相比 RSA 既可以用于密钥交换,又可以用于数字签名;ECC 这边就分得比较清楚了:ECDHE 用于密钥 交换,ECDSA 用于数字签名

16. HTTPS

HTTPS 结构


HTTPS 工作的简化过程

 1.客户端发起HTTPS请求
用户在浏览器里输入一个https网址,然后连接到服务器的443端口
2.服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是 自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹 出提示页面。这套证书其实就是一对公钥和私钥
3.传送服务器的证书给客户端
证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等
4.客户端解析验证服务器证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等 等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一 个随机值。然后用证书中公钥对该随机值进行非对称加密
5.客户端将加密信息传送服务器
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端 的通信就可以通过这个随机值来进行加密解密了
6.服务端解密信息
服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值 
7.服务器加密信息并发送信息
服务器将数据利用随机值进行对称加密,再发送给客户端
8.客户端接收并解密信息
客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容

17. Base64 编码

Base64是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64就是一种基于64个可打印字符 来表示二进制数据的方法


base64的编码过程如下:
将每3个字节放入一个24位的缓冲区中,最后不足3个字节的,缓冲区的剩余部分用0来填补。然后每次 取出6位(2的6次方为64,使用64个字符即可表示所有),将高2位用0来填充,组成一个新的字节,计 算出这个新字节的十进制值,对应上面的编码表,输出相应的字符。这样不断地进行下去,就可完成对 所有数据的编码工作。
按照以上规则对文本Man编码如下:

 

 18. openssl命令 
两种运行模式: 
交互模式 
批处理模式 
三种子命令: 
标准命令 
消息摘要命令 
加密命令 
openssl命令对称加密
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令:帮助:man enc
加密: 
openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
解密: 
openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
openssl命令单向哈希加密
工具:openssl dgst
算法:md5sum, sha1sum, sha224sum,sha256sum… 
dgst命令:帮助:man dgst 
openssl命令生成用户密码 
passwd命令:帮助:man sslpasswd 
openssl命令生成随机数
随机数生成器:伪随机数字,利用键盘和鼠标,块设备中断生成随机数
/dev/random:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
帮助:man sslrand
openssl rand -base64|-hex NUM
NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
openssl命令实现 PKI
公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
数字签名:
算法:RSA, DSA, ELGamal
密钥交换:
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
RSA:
openssl命令生成密钥对儿:man genrsa
生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE [-des3] [NUM_BITS,默认2048]
从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE  

19.  ssh服务

ssh服务介绍
ssh: secure shell, protocol, 22/tcp, 安全的远程登录,实现加密通信,代替传统的 telnet 协议
具体的软件实现:
OpenSSH:ssh协议的开源实现,CentOS 默认安装
dropbear:另一个ssh协议的开源项目的实现
SSH 协议版本
v1:基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式,基于DH算法做密钥交换,基于RSA或DSA实现身份认证

公钥交换原理

 

 客户端发起链接请求
服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
客户端生成密钥对
客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都 会被加密

ssh加密通讯原理

 20.openssh 服务
OpenSSH是SSH (Secure SHell) 协议的免费开源实现,一般在各种Linux版本中会默认安装,基于 C/S结构
Openssh软件相关包:
openssh
openssh-clients
openssh-server
服务器:/usr/sbin/sshd
Unit 文件:/usr/lib/systemd/system/sshd.service
客户端:
Linux Client: ssh, scp, sftp,slogin
Windows Client:xshell, MobaXterm,putty, securecrt, sshsecureshellclient
客户端ssh命令
ssh命令是ssh客户端,允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/sshhost*key.pub文件中的公钥到客户机的 ~./ssh/knowhosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接
ssh客户端配置文件:/etc/ssh/ssh_config
主要配置

  格式:  
ssh [user@]host [COMMAND]  
ssh [-l user] host [COMMAND]  
常见选项  
-p port:远程服务器监听的端口  
-b 指定连接的源IP  
-v 调试模式  
-C 压缩方式  
-X 支持x11转发  
-t 强制伪tty分配,如:ssh -t remoteserver1 ssh -t remoteserver2   ssh  
remoteserver3  
-o option   如:-o StrictHostKeyChecking=no  
-i <file> 指定私钥文件路径,实现基于key验证,默认使用文件: ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519,~/.ssh/id_rsa等  

scp命令
scp [options] SRC... DEST/
两种方式:
scp [options] [user@]host:/sourcefile /destpath scp [options] /sourcefile [user@]host:/destpath
常用选项: 
-C 压缩数据流
-r 递归复制
-p 保持原文件的属性信息
-q 静默模式
-P PORT 指明remote host的监听的端口

rsync 命令
rsync工具可以基于ssh和rsync协议实现高效率的远程系统之间复制文件,使用安全的shell连接做为传 输方式,比scp更快,基于增量数据同步,即只复制两方不同的文件,此工具来自于rsync包 注意:通信两端主机都需要安装 rsync软件 
rsync -av /etc server1:/tmp #复制目录和目录下文件
rsync -av /etc/ server1:/tmp #只复制目录下文件 
常用选项
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留修改时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-u 如果接收者的文件比发送者的文件较新,将忽略同步
-z 压缩,节约网络带宽
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)
--delete 源数据删除,目标数据也自动同步删除

sftp命令
交互式文件传输工具,用法和传统的ftp工具相似,利用ssh服务实现安全的文件上传和下载 使用ls cd mkdir rmdir pwd get put等指令,可用?或help获取帮助信息

sftp [user@]host
sftp> help

猜你喜欢

转载自www.cnblogs.com/chenjiahaoyy/p/12953658.html