加密算法与安全认证
简述:
重要的数据在互联网中进行传输的时候必须保证数据的安全性,需从四个方面来做:
1.保证数据是从真正的源发送的,而不是其他人(源认证)
2.保证数据在传输的过程中没有被篡改过(数据的完整性)
3.保证数据在传输的过程中别人看不懂(数据的私密性)
4.保证数据的不可否认性(不可否认性)
加密算法
1、对称加密
概念:加密和解密使用同一个秘钥
算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等
优点:效率高;将数据分割成固定大小的块,逐个进行加密
缺点:每一个通信就需要一个秘钥;秘钥传递不安全;无法确定数据来源
2、非对称加密
公钥与私钥:公钥是公开给所有人的;私钥是只有自己知道;通过私钥可以推算出公钥,但是通过私钥无法退出公钥;使用公钥加密必须使用私钥解密,或者使用私钥加密必须使用公钥解密;公私钥必须成对出现
算法:RSA、DSA、ELGamal
优缺点:可以实现数字签名来验证数据来源;可以安全的交换对称秘钥;可以实现时间加密,但是对应大的数据解密时效率太低,适合加密少量数据
3、单向散列(hash)
特性:
1)雪崩效应:数据不同,摘要一定大不同
2)单向:不可反推数据
3)摘要长度固定大小
算法:md5:128、sha1:160、sha224、sha256、sha384、sha512
功能:用来验证数据的完整性
4、秘钥交换算法(DH)
1)A和B协商生成公开的整数a,大素数p
2)A:生成隐私数据 :x(x<p),计算得出 a^x%p,发送给B;B:生成隐私数据 :y(y<p),计算得出 a^y%p,发送给A
3)A:计算得出 [(a^y%p)^x] %p = a^xy%p,生成为密钥;B:计算得出 [(a^x%p)^y] %p = a^xy%p,生成为密钥
5、在安全通信过程中:
Alice:
1)原数据通过hash算法得出一个摘要;
2)用Alice的私钥加密摘要;
3)将加密的摘要和原数据一块使用对称秘钥加密;
4)再用BOB的公钥将对称秘钥加密;
5)密文数据发送————>
Bob:
1)<————接受密文数据;
2)使用Bob的私钥解密对称秘钥;
3)使用对称秘钥解密原数据和加密后的摘要;
4)使用Alice的公钥解密摘要;
5)计算原数据的hash摘要并和解密后的摘要进行比较,从而确定原始数据的完整性。
CA和证书
数字证书认证机构(Certificate Authority,缩写为CA),也称为电子商务认证中心、电子商务认证授权机构,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
PKI:公开密钥基础建设,包括签证机构(CA)、注册机构(RA)、证书吊销列表(CRL)以及证书存取库。
X.509:定义了证书的结构以及认证协议标准,包括版本号、序列号、签名算法、颁发者、有效期限、主体名称、主体公钥、CRL分发点、扩展信息、发行者签名等信息
CA证书颁发机构分根CA和子CA,根ca的证书为自签证书,然后再为子CA颁发证书;用户只要信任了根CA的证书则就是信任了子CA颁发的证书。
相关配置文件:/etc/pki/tls/openssl.cnf
#################################################################### [ ca ] default_ca = CA_default #默认CA,在一台服务器可以搭建多个CA [ CA_default ] #默认CA的配置 dir = /etc/pki/CA #工作目录 certs = $dir/certs #存放证书 crl_dir = $dir/crl #存放证书吊销列表 database = $dir/index.txt #数据库索引文件,需要手动创建 new_certs_dir = $dir/newcerts #新证书的路径 certificate = $dir/cacert.pem #CA的证书文件 serial = $dir/serial #下一个要颁发的证书序列号,16进制 crlnumber = $dir/crlnumber #下一个要吊销的证书序列号 crl = $dir/crl.pem #证书吊销列表 private_key = $dir/private/cakey.pem#CA的私钥文件 RANDFILE = $dir/private/.rand #生成私钥需要用到的随机数文件
default_days = 365 #默认颁发证书的有效期 default_crl_days= 30 #30天发布一次证书吊销列表 default_md = sha256 # preserve = no # policy = policy_match #策略匹配,定义客户端和服务端申请证书时的信息匹配策略 [ policy_match ] countryName = match #必须匹配 stateOrProvinceName = match organizationName = match organizationalUnitName = optional #不要求必须匹配 commonName = supplied #必须提供 emailAddress = optional
示例:搭建一个私有CA
服务端搭建:
1、生成CA的私钥
# (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自签证书
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:test Organizational Unit Name (eg, section) []:it Common Name (eg, your name or your server's hostname) []:ca.test.com Email Address []:
- -new: 生成新证书签署请求
- -x509: 专用于CA生成自签证书
- -key: 生成请求时用到的私钥文件
- -days n:证书的有效期限,单位是day,默认是365天
- -out /PATH/TO/SOMECERTFILE: 证书的保存路径
3、创建必要的文件
# touch /etc/pki/CA/index.txt # echo 01 >/etc/pki/CA/serial
# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates] 查看证书信息
客户端生成注册申请请求:
1、生成私钥
# (umask 077; openssl genrsa -out app.key 1024)
2、生成签署请求
# openssl req -new -key app.key -out app.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:test Organizational Unit Name (eg, section) []:it Common Name (eg, your name or your server's hostname) []:app.test.com Email Address []: A challenge password []: An optional company name []:
3、将签署请求发送给CA
# scp app.csr 192.168.0.7:/etc/pki/CA/
服务器端签署:
1、签署颁发
# openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100
2、将签署后的证书发回客户端
# scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root
CA吊销证书的管理
复制代码 生成吊销列表 [root@centos7 CA]# echo 01 >/etc/pki/CA/crlnumber [root@centos7 CA]# openssl ca -gencrl -out crl.pem 查看吊销列表 [root@centos7 CA]# openssl crl -in crl.pem -noout -text 查看证书状态 [root@centos7 CA]# cat index.txt V(正常证书) 180826054533Z 01 unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com [root@centos7 CA]# openssl ca -status 01 Using configuration from /etc/pki/tls/openssl.cnf 01=Valid (V)(正常证书) 吊销证书 [root@centos7 CA]# openssl ca -revoke newcerts/01.pem [root@centos7 CA]# cat index.txt R (已被吊销) 180826054533Z 180518060712Z 01 unknown
/C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
管理工具
gpg:GunPG
- -c file:加密文件
- -o file -d file.gpg:解密文件
- --gen-key:生成非对称秘钥
- --list-keys:查看已有公钥
- -e -r keyname file:使用指定公钥加密文件
- --import filename.pubkey:导入公钥
- -a --export -o filename.pubkey:导出公钥
- --delete-secret-keys keyname:删除私钥
- --delete-keys keyname:删除公钥
# rngd -r /dev/urandom #提供随机数来生成秘钥
openssl:
多用途的工具集
openssl可以实现:秘钥证书管理、对称加密和非对称加密
生成随机数需要用到的标准命令为 rand