一、 安全规范:
1)NIST规定的数据安全性标准:
①保密性:数据保密性;隐私性;
②完整性:数据完整性;系统完整性
③可用性:数据与服务随时可用
2)OSI,X.800:定义了安全攻击,安全机制,安全服务
①安全攻击
被动攻击:监听
主动攻击:报文伪装、重放、消息篡改、拒绝服务(将有限资源耗尽,使得正常资源无法访问DDOS)
②安全机制
加密/解密,数字签名,访问控制,数据完整性保证,认证交换,数据填充,路由控制,人为公证
③安全服务
认证
访问控制
数据保密性:
连接保密性
无连接保密性
选择域保密性:保密指定的部分
流量保密性
数据完整性
不可否认性
二、密码算法和协议:
1.对称加密:【AES】DES,AES,BlowFish,TwoFish,IDEA,RC6,CAST5
(1)常见算法:
DES :Data Encryption Standard ,56bits,IBM研究出来的,
3DES :
AES :Advanced Encrpytion Standard,(128bits,192,256,384,512bits),超越现有计算能力
BlowFish :
TwoFish :
IDEA :
RC6 :
CAST5 :
(2)特性:
① 加密、解密使用同一密钥
② 加密原理:将明文分割成固定大小的块,并逐个进行加密。
③ 安全性依赖于密钥而非算法;因为算法可以公开
(3)缺陷:
① 密钥过多,尤其是通信对象过多时,
② 密钥分发,过程中的潜在风险
(4)加密工具:openssl enc,gpg
Enc实现:
# openssl enc -e -CIPHERNAME -a -salt -in /PATH/FROM/SOMEFILE -out /PATH/TO/SOMEFILE
# openssl enc -d -CIPHERNAME -a -salt -in /PATH/FROM/SOMEIPHERFILE -out /PATH/TO/SOMEFILE
2.公钥加密(非对称加密):【RSA】,DSA,Algorithm,ELGamal
(1)常见算法:
①RSA :即可做身份认证,也可做密钥交换
②DSA :身份认证――――数字签名,Digital Signature Algorithm,Digital Signature Standard
③ELGamal :
(2)特点:
① 密钥成对出现;
私钥:Secret Key,仅允许个人使用
公钥:Public Key,公开给所有人获得,公钥从私钥中提取而来
③ 使用公钥加密的数据,只能使用与此公钥配对的私钥解密;反之亦然
④ 密钥长度较大,例如512bits,1024,2048,4096bits
⑤ 常用于数据签名和密钥交换
(3)用途:
① 身份认证: 私钥拥有者用自己的私钥加密的数据,其他人只需要用其公钥解密,即可认证其身份;
② 密钥交换:任何个人与被通信方通信之前,首先获取到对方的公钥,然后自己生成一个加密(对称加密)的密码,然后用对方的公钥加密,饭后发送给对方。
③ 数据加密:很少使用,因为密码太长,速度很慢,不实用,性能很差。
(4)加密工具:gpg,openssl genrsa,elgamal,openssl rsautl
1)数字签名:RSA,DSA(DSS),ELGamal
2)生成密钥对儿:
①手动生成私钥:gendsa,gendh,genrsa(最常用)
# openssl genrsa -out /PATH/TO/PRIVATE_KEY_FILE NUM_BITS
-out :生成密钥文件输出到那个文件
NUM_BITS :指定密钥长度,512,1024,2048,4096
△Tips:生成的文件的权限一定要修改,否则,其他人都可以r。
Tips:在bash命令行上放在小括号中执行的命令,其实是通过打开一个子shell进程进行的
# (umask 077;openssl genrsa -out /path/to/private_key_file NUM_BITS)
②从私钥中手动提取公钥:
# openssl rsa -in /path/from/private_key_file -pubout -out /path/to/pubkey_file
-in :输入私钥文件路径
-putout :输出为公钥(默认私钥)
-out :输出公钥文件路径
3.单向加密:MD5,SHA1,SHA256,SHA384,SHA512,CRC32
(1)常见算法:
MD5 :128bits,2^128
SHA1 :160bits,2^160
SHA256 :256,2^256
SHA384 :384,2^384
SHA512 :512 /etc/passwd,2^512
CRC32 :用于奇偶校验,循环冗余校验码
(2)特性:
① 提取数据的特征码,结果定长输出:无论原来的数据有多大级别,其加密结果长度一样;
② 整个加密过程不可逆;
③ 雪崩效应:原始数据微小的变化,将会导致结果的巨大变化
④ 常用于数据的完整性校验
⑤ 数据特征码的提取,该加密严重依赖算法,
(3)加密工具:openssl dgs,md5sum,sha1sum,sha224sum,sha256sum,sha384sum,sha512sum
# openssl dgst -CIPHER /PATH/TO/SOMEFILE
(4)MAC:消息认证码,单项加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性:高可用集群中会用到。
机制:
CBC-MAC:
HMAC:使用 md5 或 SHA1 算法。更常见
4.数字签名:
保证数据完整性,不保证其私密性;
他人可以随意看,但不能随意改
5.密钥交换协议:IKE ,Internet Key Exchange协议,
有两种常见算法
(1)公钥加密算法:
用对方的公钥加密密码并发送给对方,然后用该加密的密码实现加密通信
(2)Deffie-Hellman :密码在互联网上没有传送。
找一个大的素数,对其求N次方后,做开根运算,在现有计算能力下无能为力。
A:
P,G,(公开)
X (私有)
P^X%G
从B 拿到:(P^Y%G)^X=P^XY%G(密码)
B:
公开:P,G (公开)
私有:Y (私有)
P^Y%G
从A拿到:(P^X%G)^Y=P^XY%G(密码)
6.随机数生成:random urandom
1)熵池(entropy pool):保存硬件中断产生的随机数;实质上是内存中的一段存储空间。被映射成为设备文件“/dev/random,/dev/udandom”,特殊字符设备
2)获取当前主机上的硬件中断信号,中断间隔时长(一般为硬盘)来生成随机数。
【软件生成的随机数叫伪随机数。】
3)随机数设备:
① /dev/random:仅从熵池总返回随机数,当熵池中的随机数耗尽时,取随机数的进程将被阻塞;设备号(1.8)
② /dev/urandom:先从熵池中取随机数,当熵池中的随机数耗尽时,就通过伪随机数生成器(软件方式)生成随机数;设备号(1.9)
③ 生成随机数:openssl rand:
# openssl rand -hex | -base64 NUM
-hex :十六进制
-base64 :文本编码方式
NUM :生成密码位数。
PKI:public Key Infrastructure,公钥基础设施
签证机构;CA
注册机构:RA
证书吊销列表;CRL
证书存取库
SSL:secure socket layer,安全的套接字层,协议
版本:
v1,不安全
v2,
v3,
实现:OpenSSL
TLS:transport layer security
v1=SSLv3
三、一次安全的加密通信过程:
1)发送方:
① 使用单向加密算法提取生成数据的 特征码 ;
单向加密――>特征码+特征码===>数据完整性
② 使用自己的 私钥 加密 特征码 附加在数据后面
公钥加密――>[特征码密文]+数据====>数据完整性
③ 生成用于对称加密的 临时密钥 ;用此 临时密钥 加密数据和已经使用私钥加密后的特征码;
对称加密――>[密文[特征码密文]+数据]]===>数据安全性
⑤ 使用接收方的 公钥 加密此 临时密钥 ,附加在对称加密后的数据后方。
公钥加密(对方)――>[临时密钥][密文[特征码密文]+数据]]===>密钥安全性
2)接受方:
① 使用自己的私钥解密加密的临时密钥,从而获得对称密钥;
② 使用对称密钥解密对称加密的数据和私钥加密的特征码密文,从而获得数据和特征码的密文;
③ 使用发送方的公钥解密特征码密文,从而获得数据的特征码
④ 使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较,验证数据的完整性和隐私性。
Tips:以上过程的唯一漏洞之处只有 使用对方的公钥加密临时密钥!如何安全的得到对方的公钥??故而需要对接受方做数字签名认证。
四、数字证书:
1. CA:由拥有公信力的第三方机构(CA机构),创建并被CA或用户放到目录服务器中供其他用户检索的数字格式的用户私有信息。
2. CA机构功能:保证公钥信息安全分发。给每个人的公钥做签名,以认可其身份。让用户安全的得到对方的公钥信息。
CA之间的交叉信任:
双方CA的互信,均从根证书机构拿到证书。
CA给每个证书的信息提取特征码,并用自己的私钥加密,附加到证书后面。用户验证时,用CA的公钥来提取特征码,并验证数据的完整性。
3.数字证书功能:
让通信的双方,都能够安全可靠的获得自己的身份认证标识,并且能够被通信的对方所认可。
4.数字证书的格式:
1)v1
版本号(Version):必须标识清楚,否则无法识别格式
序列号(serial number):CA用于唯一表示此证书;
签名算法标识(signature algorithm identifier):用于验证证书可靠性
发行者的名称:即CA自己的名称;
有效期:两个日期,起始日期和终止日期;
证书主体名称:证书拥有者名字
证书主体公钥信息:证书拥有者公钥
签名:CA对此证书的数字签名
2)v2
版本号(Version):必须标识清楚,否则无法识别格式
序列号(serial number):CA用于唯一表示此证书;
签名算法标识(signature algorithm identifier):
发行者的名称:即CA自己的名称;
有效期:两个日期,起始日期和终止日期;
证书主体名称:
证书主体公钥信息:
发行商的唯一标识:CA ID
证书主体的唯一标识:证书属主ID
签名:CA对此证书的数字签名
3)v3
版本号(Version):必须标识清楚,否则无法识别格式
序列号(serial number):CA用于唯一表示此证书;
签名算法标识(signature algorithm identifier):
发行者的名称:即CA自己的名称;
有效期:两个日期,起始日期和终止日期;
证书主体名称:证书属主名称
证书主体公钥信息:属主的公钥信息
发行商的唯一标识:CA的唯一标识
证书主体的唯一标识:证书拥有者自己的数字标识
扩展信息:
签名:CA对此证书的数字签名
5. 证书验证过程:
1)客户端向服务器发出回话请求;
2)服务器相应回话请求,(tcp三次握手)
3)客户端请求服务器证书(SSL握手过程)
4)服务器发送证书
5)客户端验证证书:
① 用本地根证书验证证书的发证CA
② 用本发证CA解密证书签名,验证CA的真实性(解密的结果是证书的特征码) ③ 用同样算法计算证书特征码,并做比较
④ 域名与证书主体一致性验证;
⑤ 验证证书的有效期
⑥ 验证证书是否在吊销列表中
6)验证成功后,从证书中提取服务器的公钥信息,双方开始协商使用哪种算法进行加密通信。
7)客户端生成通话加密密钥,并用对方公钥加密后发给对方
8)双方用刚才建立的加密协定进行会话。
Tips:一个协议一旦使用了ssl协议,其就不在是其本身了,例如:http(80端口)-->ssl-->https(403端口)
6. 撤销证书格式:证书撤销链,证书撤销列表
|算法 |
|CA名称 |
|本次更新日期 |
|下次更新日期 |
|――――――――|
|用户证书序列号|
|----------------------|
| 撤销日期 |
|――――――――|
| . |
| . |
| . |
| [有多个] |
------------------------
| CA 数字签名 |
------------------------
五、使用OpenSSL建立私有CA:
(1)OpenSSL组成:
1)libcrypto:加密、解密库文件。各种加密算法。
2)libssl:ssl协议实现库
3)openssl:多用途命令行工具,每种功能都使用专门的子命令来实现。
子命令分类:
①标准命令;制作证书,建立私有CA等都可以实现。
②消息摘要命令:单向加密算法;
③加密解密相关命令;
(2)配置文件: /etc/pki/tls/openssl.conf
工作目录: /etc/pki/CA/
(3)建立私有CA实操:
① 生成私钥文件:/etc/pki/CA/private/cakey.pem
私钥用于签发证书时,向证书添加数字签名使用;
# (umask 077 ;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
② 生成自签证书:==>公钥
用于实现与每个通过此CA获取到证书的通信方,完成数据交互时,验证对方证书合法性时使用的。每个通信方都导入此证书至“受新人的证书颁发机构”。
服务器的自签证书,需要客户端将此证书导入到受信任的证书列表中,才能验证这些证书。
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem �Cdays
-new:生成新的证书签署请求
-key:私钥文件路径
-days #: 证书有效时长,单位为天
-out:输出文件保存位置
-x509 :直接输出自签署的证书文件,通常只有构建CA时才这么用。
③ 提供辅助文件:
/etc/pki/CA/index.txt
# touch /etc/pki/CA/index.txt
/etc/pki/CA/serial
echo 01 > /etc/pki/CA/serial
(4)给节点颁发证书:
① 节点申请证书:
在证书申请的主机上进行如下步骤:
a.生成私钥
b.生成证书签署请求
Tips:a. 其中的subject信息部分,要与CA的保持一致;正确与否无所谓
b. Common Name要使用此主机在通信正式使用的名字。
② CA签发证书:
a.验证请求者信息;
b.签署证书:
# openssl ca -in /PATH/FROM/CSR_FILE -out /PATH/TO/CRT_FILE -days N
c.将签署号的证书发还给请求者。
(5)吊销证书:
1.获取吊销证书的序列号:
# openssl x509 -in /PATH/FROM/CRT_FILE -noout -serial -subject
2.实现证书吊销
a.吊销证书
# openssl ca -revoke /PATH/FROM/CRT_FILE
b.生成吊销证书的编号
# echo 01 > /etc/pki/CA/crlnumber
c.更新证书吊销列表
# openssl crl -gencrl -out THISCA.crl