加密和安全
一.安全机制
- 安全攻击的几种典型方式: STRIDE
Spoofing 假冒
Tampering 篡改
Repudiation 否认
Information Disclosure 信息泄漏
Denial of Service 拒绝服务
Elevation of Privilege 提升权限
-
安全设计基本原则
- 使用成熟的安全系统
- 以小人之心度输入数据
- 部系统是不安全的
- 小授权
- 少外部接口
- 省使用安全模式
- 全不是似是而非
- STRIDE思考
- 入口处检查
- 管理上保护好你的系统
-
常见加密算法和协议
- 对称加密
- 公钥加密
- 单向加密
- 认证协议
二.对称和非对称加密
1.对称加密算法:加密和解密使用同一个密钥
DES:Data Encryption Standard,56bits
3DES:
AES:Advanced (128, 192, 256bits)
Blowfish,Twofish,IDEA,RC6,CAST5
- 特性:
1、加密、解密使用同一个密钥,效率高
2、将原始数据分割成固定大小的块,逐个进行加密 - 缺陷:
1、密钥过多
2、密钥分发
3、数据来源无法确认
2.非对称加密算法
-
公钥加密:密钥成对出现
- 公钥:公开给所有人;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))
结合签名和加密
分离签名
3.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要快很多
三.散列算法
1.单向散列:将任意数据缩小成固定大小的“指纹”
•任意长度输入
•固定长度输出
•若修改数据,指纹也会改变(“不会产生冲突”)
•无法从指纹中重新生成数据(“单向”)
-
功能:保护数据完整性
-
常见算法:md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512
-
常用工具
•md5sum | sha1sum [ --check ] file
•openssl、gpg
•rpm -V -
数字签名图解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdR3z9Ge-1573386467794)(png/2019-11-07-11-10-09.png)]
2.密钥交换:IKE(Internet Key Exchange)
-
公钥加密DH
DH (Deffie-Hellman):生成会话密钥,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和
马丁·赫尔曼(Martin Edward Hellman)在1976年发表.
DH:
A: g,p 协商生成公开的整数g, 大素数p
B: g,p
A:生成隐私数据 :a (a<p ),计算得出 gâ%p,发送给B
B:生成隐私数据 :b,计算得出 g^b%p,发送给A
A:计算得出 [(g^b%p)â] %p = gâb%p,生成为密钥
B:计算得出 [(gâ%p)^b] %p = gâb%p,生成为密钥
四.gpg
1.使用gpg实现对称加密file文件
gpg -c file
ls file.gpg
- 在另一台主机上解密file
gpg -o file -d file.gpg
2.使用gpg工具实现公钥加密
在hostB主机上用公钥加密,在hostA主机上解密
在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
- 中间人攻击
五.PKI和CA
-
PKI:Public Key Infrastructure
-
CA和证书
签证机构:CA(Certificate Authority)
注册机构:RA(registration authority )
证书吊销列表:CRL(Certificate Revoke List)
证书存取库:Certificate access library
- X.509:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法
颁发者
有效期限
主体名称
主体公钥
CRL分发点
扩展信息
发行者签名
- 证书类型
证书授权机构的证书
服务器证书
用户证书
-
获取证书两种方法:
- 使用证书授权机构授权的证书
生成证书请求(csr)(The certificate request)
将证书请求csr发送给CA
CA签名颁发证书
- 自签名的证书:自已签发自己的公钥
六.openssl
1.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生成 - 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
- 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字
- Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身
份认证可选)、密钥交换 - ChangeCipherSpec 协议:一条消息表明握手协议已经完成
- Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,
- fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,
只是会给出错误警告 - Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
- HTTPS协议:就是"HTTP协议"和"SSL/TLS协议"的组合。HTTP over
SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二
进制形式传输
2.openssl软件
-
openssl命令包括三个组件:
- openssl:多用途的命令行工具,包openssl
- libcrypto:加密算法库,包openssl-libs
- libssl:加密模块应用库,实现了ssl及tls,包nss
-
openssl命令用法
-
两种运行模式:交互模式和批处理模式
-
标准命令、消息摘要命令、加密命令
- 标准命令:enc, ca, req, …
- 对称加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
-
openssl的enc子命令
- 加密:
openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
- 解密:
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
- 加密:
-
单向加密:
- 工具:md5sum, sha1sum, sha224sum,sha256sum… ,openssl dgst
-
dgst命令
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
-
MAC: Message Authentication Code,单向加密的一种延伸应用,用于实现网络通信
中保证所传输数据的完整性机制 -
CBC-MAC
-
HMAC:使用md5或sha1算法
生成用户密码: -
openssl的passwd命令
openssl passwd -1 -salt SALT(最多8位)
openssl passwd -1 –salt centos
-
生成随机数:
openssl rand -base64|-hex NUM
- NUM: 表示字节数,使用-hex,每个字符为十六进制,相当于4位二进制,出现的字符数为NUM*2
-
公钥加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
- 数字签名:
算法:RSA, DSA, ELGamal
- 密钥交换:
算法:dh
DSA:Digital Signature Algorithm
DSS:Digital Signature Standard
- 生成密钥对儿:man genrsa
- 生成私钥
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
(umask 077; openssl genrsa –out test.key –des 2048)
openssl rsa -in test.key –out test2.key
将加密key解密 - 从私钥中提取出公钥
openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE
openssl rsa –in test.key –pubout –out test.key.pub
- 随机数生成器:伪随机数字
- 键盘和鼠标,块设备中断
/dev/random
:仅从熵池返回随机数;随机数用尽,阻塞
/dev/urandom
:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数,非阻塞
- 键盘和鼠标,块设备中断
七.CA创建和管理
1.PKI:Public Key Infrastructure
CA
RA
CRL
证书存取库
- 建立私有CA一般使用工具:
OpenCA
openssl
- 证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书
3.创建私有CA、证书申请和管理
创建私有CA
- openssl的配置文件:/etc/pki/tls/openssl.cnf
- 三种策略:match匹配、optional可选、supplied提供
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息,
步骤
1、创建所需要的文件
touch /etc/pki/CA/index.txt 生成证书索引数据库文件
echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号
2、 CA自签证书
生成私钥
cd /etc/pki/CA/
(umask 066; openssl genrsa -out private/cakey.pem 2048)
生成自签名证书
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out /etc/pki/CA/cacert.pem
- 选项说明:
-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
3、颁发证书
3.1 在需要使用证书的主机生成证书请求
eg:给web服务器生成私钥
(umask 066; openssl genrsa –out /data/test.key 2048)
3.2 生成证书申请文件
openssl req -new -key /data/test.key -out /data/test.csr
3.3 将证书请求文件传输给CA
3.4 CA签署证书,并将证书颁发给请求者
openssl ca -in /tmp/test.csr –out /etc/pki/CA/certs/test.crt -days 100
注意:默认要求 国家,省,公司名称三项必须和CA一致
查看证书中的信息:
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|