美国国家安全署NIST定义了网络通信安全涉及到三个方面,分别是保密性、完整性和可用性,保密性包括数据的保密性和隐私性,完整性涉及了数据完整性和系统完整性。
目前的安全攻击有主动攻击和被动攻击,被动攻击如窃听;主动攻击有伪装、重放、消息篡改、拒绝服务。
为了保证网络安全通信的安全,有一些安全机制,如加密、数字签名、访问控制、数据完整性、认证交换、流量填充、路由控制、公证等。
安全机制要通过安全服务来提供,安全服务有:认证、访问控制、数据保密性(连接保密性;无连接保密性;选择域保密性;流量保密性)、数据完整性、不可否认性。
安全服务会使用一些密码算法和协议,如对称加密协议、公钥加密、单向加密、认证协议。
在linux系统中常用的通信安全工具是Openssl和gpg。gpg是pgp的实现,gpg是软件,pgp是协议。
##加密算法和协议
-
对称加密:加密和解密使用同一个密钥
对称加密的算法有:
DES(Data Encryption Standard)和3DES
AES(Advanced Encryption Standard),密钥长度可变,有128bits,192bits, 258bits, 384bits, 512bits)
Blowfish、Twofish、IDEA、RC6、CAST5
对称加密的特性:
1、加密、解密使用同一个密钥; 2、将原始数据分割成固定大小的块,逐个进行加密;
对称加密的缺陷: 1、密钥过多 2、密钥分发
-
公钥加密:密钥成对出现,一公一私
公钥(public key)公开给所有人,私钥(secret key)自己留存,必须保证其私密性,如加密或设置权限。
特点:用公钥加密的数据,只能使用与之配对的私钥解密;反之亦然;
公钥加密有三种用途:数字签名和密钥交换、数据加密
数字签名:主要在于让接收方确认发送方身份,并确定数据没有篡改; 密钥交换:发送方用对方的公钥加密一个对称密钥,并发送给对方;
公钥加密使用的算法有:RSA(数字签名和加密), DSA(数字签名), ELGamal(商业加密算法)
-
单向加密,只能加密不能解密,也叫做提取数据指纹
特性:定长输出、雪崩效应;
功能:保证数据的完整性
算法
md5: 128bits sha1: 160bits sha224 sha256 sha384 sha512
-
密钥交换(IKE)协议
密钥交换使用DH (Deffie-Hellman)算法,密钥不需要发送。
-
Public Key Infrastructure(PKI)
有下面四个组件:
签证机构:CA,签证机构是互相信任的,对于windows操作系统已经集成了大部分的签证机构的公钥。
注册机构:RA
证书吊销列表:CRL
证书存取库
X.509定义了证书的结构以及认证协议标准,目前使用的第三版证书。
第三版的x.509证书定义的项目:
版本号、序列号、签名算法ID、发行者名称、有效期限、主体名称、主体公钥、发行者惟一标识、主体的惟一标识、扩展、发行者签名
ssl: Secure Socket Layer),TLS: Transport Layer Security,是ssl的增强版。ssl/tls相当于在应用层和传输层加了半层。
1995: SSL 2.0, 由Netscape提出
1996: SSL 3.0, 由Netscape提出
1999: TLS 1.0
2006: TLS 1.1 RFC 4346
2008: TLS 1.2
2015: TLS 1.3
ssl内部也采用了分层设计
1、最底层:基础算法原语的实现,如aes, rsa, md5的实现和定义 2、向上一层:各种算法的实现 3、再向上一层:组合算法实现的半成品 4、用各种组件拼装而成的种种成品密码学协议/软件:如tls, ssh,
openssl是一个开源项目,由三个组件组成:
- openssl: 多用途的命令行工具
- libcrypto: 加密解密库
- libssl: ssl及tls的实现
openssl命令行工具
openssl命令分为标准命令、消息摘要命令和加密命令。openssl version查看openssl程序版本号
- 对称加密
工具:openssl enc, gpg 算法:3des, aes, blowfish, twofish
enc命令
加密:]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
解密:]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
- 单向加密
工具:md5sum, sha1sum, sha224sum, sha256sum,..., openssl dgst
dgst命令:openssl dgst -md5 /PATH/TO/SOMEFILE
单向加密中的Message Authentication Code(MAC)机制:单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性
MAC有两种机制:CBC-MAC和HMAC(使用md5或sha1算法)
- 生成用户密码:使用openssl的passwd子命令。如openssl passwd -1 -salt 123457892
- 生成随机数:openssl rand -base64|-hex NUM。NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2;
- 公钥加密
加密
不建议使用公钥进行数据加密,太耗时。
算法:RSA, ELGamal 工具:gpg和openssl rsautl
数字签名
算法:RSA, DSA, ELGamal
密钥交换 算法:dh
DSA: Digital Signature Algorithm DSS:Digital Signature Standard RSA:算法统称,安全公司
openssl生成密钥对
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS,创建完成后要修改文件的权限
也可以使用:# (umask 077; openssl genrsa -out key.pri 2048)。使用括号表示在子shell运行,不会影响当前的shell设定。
提取出公钥
# openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
随机数生成器: /dev/random:仅从熵池返回随机数;随机数用尽,阻塞; /dev/urandom:从熵池返回随机数;随机数用尽,会利用软件生成伪随机数;非阻塞;
- openssl建立私有CA
1、生成密钥 2、自签署证书
节点: 1、生成密钥对儿 2、生成证书签署请求 3、把请求发送给CA
CA: 1、验正请求者信息; 2、签署证书; 3、把签好的证书发送给请求者;
1、生成密钥 # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
2、自签证书 # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
req: 生成证书签署请求 -news: 新请求 -key /path/to/keyfile: 指定私钥文件 -out /path/to/somefile: -x509: 生成自签署证书 -days n: 有效天数
3、初始化工作环境
# touch /etc/pki/CA/{index.txt,serial} # echo 01 > /etc/pki/CA/serial
1、生成密钥对儿 # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
2、生成证书签署请求 # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr
3、把签署请求文件发送给CA服务 # scp
1、验正证书中的信息; 2、签署证书 # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
3、发送给请求者;
1、获取证书serial # openssl x509 -in /path/to/certificate_file.crt -noout -serial -subject
2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;
3、吊销证书
# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
4、生成吊销证书的编号(如果是第一次吊销)
# echo 00 > /etc/pki/CA/crlnumber
5、更新证书吊销列表
# cd /etc/pki/CA/crl/ # openssl ca -gencrl -out thisca.crl
如果需要,查看crl文件的内容 # openssl crl -in /path/to/crlfile.crl -noout -text